dmencu 1.0.23 → 1.0.24
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.
- package/dist/client/client/client.js +3 -3
- package/dist/client/unlogged/abrir-formulario.js +5 -5
- package/dist/client/unlogged/bypass-formulario.d.ts +5 -5
- package/dist/client/unlogged/bypass-formulario.js +36 -36
- package/dist/client/unlogged/redux-formulario.d.ts +3 -3
- package/dist/client/unlogged/redux-formulario.js +10 -10
- package/dist/client/unlogged/render-formulario.tsx +1 -1
- package/dist/client/unlogged/render-general.tsx +0 -3
- package/dist/client/unlogged/tipos.js +3 -3
- package/dist/server/server/app-dmencu.d.ts +623 -497
- package/dist/server/server/app-dmencu.js +3 -5
- package/dist/server/server/procedures-dmencu.d.ts +0 -1
- package/dist/server/server/procedures-dmencu.js +1 -1
- package/dist/server/server/table-acciones.d.ts +0 -1
- package/dist/server/server/table-acciones.js +2 -3
- package/dist/server/server/table-areas.d.ts +0 -1
- package/dist/server/server/table-areas.js +3 -3
- package/dist/server/server/table-areas_asignacion_general.d.ts +0 -1
- package/dist/server/server/table-areas_asignacion_general.js +2 -3
- package/dist/server/server/table-comunas.d.ts +0 -1
- package/dist/server/server/table-comunas.js +2 -3
- package/dist/server/server/table-control_campo.d.ts +0 -1
- package/dist/server/server/table-control_campo.js +2 -3
- package/dist/server/server/table-control_dias_carga.d.ts +0 -1
- package/dist/server/server/table-control_dias_carga.js +2 -3
- package/dist/server/server/table-control_resumen.d.ts +0 -1
- package/dist/server/server/table-control_resumen.js +2 -3
- package/dist/server/server/table-diccionario.d.ts +0 -1
- package/dist/server/server/table-diccionario.js +2 -3
- package/dist/server/server/table-dictra.d.ts +0 -1
- package/dist/server/server/table-dictra.js +2 -3
- package/dist/server/server/table-dicvar.d.ts +0 -1
- package/dist/server/server/table-dicvar.js +2 -3
- package/dist/server/server/table-encuestadores.d.ts +0 -1
- package/dist/server/server/table-encuestadores.js +7 -8
- package/dist/server/server/table-estados.d.ts +0 -1
- package/dist/server/server/table-estados.js +2 -3
- package/dist/server/server/table-estados_acciones.d.ts +0 -1
- package/dist/server/server/table-estados_acciones.js +2 -3
- package/dist/server/server/table-grilla_hoja_ruta.d.ts +0 -1
- package/dist/server/server/table-grilla_hoja_ruta.js +2 -3
- package/dist/server/server/table-historial_tem.d.ts +0 -1
- package/dist/server/server/table-historial_tem.js +2 -3
- package/dist/server/server/table-hogares.d.ts +0 -1
- package/dist/server/server/table-hogares.js +2 -3
- package/dist/server/server/table-hogares_sup.d.ts +0 -1
- package/dist/server/server/table-hogares_sup.js +2 -3
- package/dist/server/server/table-lotes.d.ts +0 -1
- package/dist/server/server/table-lotes.js +2 -3
- package/dist/server/server/table-mis_encuestadores.d.ts +0 -1
- package/dist/server/server/table-mis_encuestadores.js +2 -3
- package/dist/server/server/table-mis_tareas.d.ts +0 -1
- package/dist/server/server/table-mis_tareas.js +2 -3
- package/dist/server/server/table-mis_tareas_areas.d.ts +0 -1
- package/dist/server/server/table-mis_tareas_areas.js +2 -3
- package/dist/server/server/table-no_rea.d.ts +0 -1
- package/dist/server/server/table-no_rea.js +2 -3
- package/dist/server/server/table-no_rea_sup.d.ts +0 -1
- package/dist/server/server/table-no_rea_sup.js +2 -3
- package/dist/server/server/table-operaciones.d.ts +0 -1
- package/dist/server/server/table-operaciones.js +2 -3
- package/dist/server/server/table-parametros.d.ts +0 -1
- package/dist/server/server/table-parametros.js +2 -3
- package/dist/server/server/table-permisos.d.ts +0 -1
- package/dist/server/server/table-permisos.js +2 -3
- package/dist/server/server/table-personal.d.ts +0 -1
- package/dist/server/server/table-personal.js +2 -3
- package/dist/server/server/table-personal_rol.d.ts +0 -1
- package/dist/server/server/table-personal_rol.js +2 -3
- package/dist/server/server/table-personas.d.ts +0 -1
- package/dist/server/server/table-personas.js +2 -3
- package/dist/server/server/table-personas_sup.d.ts +0 -1
- package/dist/server/server/table-personas_sup.js +2 -3
- package/dist/server/server/table-recepcionistas.d.ts +0 -1
- package/dist/server/server/table-recepcionistas.js +2 -3
- package/dist/server/server/table-recuperadores.d.ts +0 -1
- package/dist/server/server/table-recuperadores.js +2 -3
- package/dist/server/server/table-resultados_tarea.d.ts +0 -1
- package/dist/server/server/table-resultados_tarea.js +2 -3
- package/dist/server/server/table-roles.d.ts +0 -1
- package/dist/server/server/table-roles.js +2 -3
- package/dist/server/server/table-roles_permisos.d.ts +0 -1
- package/dist/server/server/table-roles_permisos.js +2 -3
- package/dist/server/server/table-roles_subordinados.d.ts +0 -1
- package/dist/server/server/table-roles_subordinados.js +2 -3
- package/dist/server/server/table-semanas.d.ts +0 -1
- package/dist/server/server/table-semanas.js +2 -3
- package/dist/server/server/table-sincronizaciones.d.ts +0 -1
- package/dist/server/server/table-sincronizaciones.js +2 -3
- package/dist/server/server/table-supervisores.d.ts +0 -1
- package/dist/server/server/table-supervisores.js +2 -3
- package/dist/server/server/table-tareas.d.ts +0 -1
- package/dist/server/server/table-tareas.js +2 -3
- package/dist/server/server/table-tareas_areas.d.ts +0 -1
- package/dist/server/server/table-tareas_areas.js +6 -7
- package/dist/server/server/table-tareas_proximas.d.ts +0 -1
- package/dist/server/server/table-tareas_proximas.js +2 -3
- package/dist/server/server/table-tareas_tem.d.ts +0 -1
- package/dist/server/server/table-tareas_tem.js +10 -10
- package/dist/server/server/table-tareas_tem_analisis_campo.d.ts +0 -1
- package/dist/server/server/table-tareas_tem_analisis_campo.js +2 -3
- package/dist/server/server/table-tareas_tem_fin_campo.d.ts +0 -1
- package/dist/server/server/table-tareas_tem_fin_campo.js +3 -3
- package/dist/server/server/table-tareas_tem_ingreso.d.ts +0 -1
- package/dist/server/server/table-tareas_tem_ingreso.js +2 -3
- package/dist/server/server/table-tareas_tem_procesamiento.d.ts +0 -1
- package/dist/server/server/table-tareas_tem_procesamiento.js +2 -3
- package/dist/server/server/table-tareas_tem_recepcion.d.ts +1 -2
- package/dist/server/server/table-tareas_tem_recepcion.js +3 -3
- package/dist/server/server/table-tem.d.ts +0 -1
- package/dist/server/server/table-tem.js +4 -4
- package/dist/server/server/table-tem_asignacion.d.ts +0 -1
- package/dist/server/server/table-tem_asignacion.js +2 -3
- package/dist/server/server/table-usuarios.d.ts +0 -1
- package/dist/server/server/table-usuarios.js +2 -3
- package/dist/server/server/table-visitas.d.ts +0 -1
- package/dist/server/server/table-visitas.js +2 -3
- package/dist/server/server/table-visitas_sup.d.ts +0 -1
- package/dist/server/server/table-visitas_sup.js +2 -3
- package/dist/server/server/table-viviendas.d.ts +0 -1
- package/dist/server/server/table-viviendas.js +2 -3
- package/dist/server/unlogged/tipos.js +3 -3
- package/dist/unlogged/unlogged/abrir-formulario.js +5 -5
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +5 -5
- package/dist/unlogged/unlogged/bypass-formulario.js +36 -36
- package/dist/unlogged/unlogged/redux-formulario.d.ts +3 -3
- package/dist/unlogged/unlogged/redux-formulario.js +10 -10
- package/dist/unlogged/unlogged/render-formulario.d.ts +6 -6
- package/dist/unlogged/unlogged/render-formulario.js +17 -17
- package/dist/unlogged/unlogged/render-formulario.tsx +1 -1
- package/dist/unlogged/unlogged/render-general.d.ts +0 -1
- package/dist/unlogged/unlogged/render-general.js +8 -11
- package/dist/unlogged/unlogged/render-general.tsx +0 -3
- package/dist/unlogged/unlogged/tipos.js +3 -3
- package/dist/unlogged/unlogged/unlogged.js +1 -1
- package/package.json +1 -1
|
@@ -18,7 +18,41 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
18
18
|
})(function (require, exports) {
|
|
19
19
|
"use strict";
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.
|
|
21
|
+
exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.getMainFormForVivienda = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.getDatosByPass = exports.intentarBackup = exports.crearEncuesta = void 0;
|
|
22
|
+
exports.setCalcularVariables = setCalcularVariables;
|
|
23
|
+
exports.setCalcularVariablesEspecificasOperativo = setCalcularVariablesEspecificasOperativo;
|
|
24
|
+
exports.setPersistirDatosByPass = setPersistirDatosByPass;
|
|
25
|
+
exports.persistirDatosByPass = persistirDatosByPass;
|
|
26
|
+
exports.setEncolarBackup = setEncolarBackup;
|
|
27
|
+
exports.setEstructura = setEstructura;
|
|
28
|
+
exports.setDatosByPass = setDatosByPass;
|
|
29
|
+
exports.getFeedbackRowValidator = getFeedbackRowValidator;
|
|
30
|
+
exports.getDirty = getDirty;
|
|
31
|
+
exports.getEstructura = getEstructura;
|
|
32
|
+
exports.registrarElemento = registrarElemento;
|
|
33
|
+
exports.respuestasForPk = respuestasForPk;
|
|
34
|
+
exports.volcadoInicialElementosRegistrados = volcadoInicialElementosRegistrados;
|
|
35
|
+
exports.calcularElementoEnfocado = calcularElementoEnfocado;
|
|
36
|
+
exports.setAttrDistinto = setAttrDistinto;
|
|
37
|
+
exports.setValorDistinto = setValorDistinto;
|
|
38
|
+
exports.accion_id_pregunta = accion_id_pregunta;
|
|
39
|
+
exports.accion_registrar_respuesta = accion_registrar_respuesta;
|
|
40
|
+
exports.accion_registrar_nota = accion_registrar_nota;
|
|
41
|
+
exports.accion_agregar_visita = accion_agregar_visita;
|
|
42
|
+
exports.accion_modificar_visita = accion_modificar_visita;
|
|
43
|
+
exports.accion_borrar_visita = accion_borrar_visita;
|
|
44
|
+
exports.accion_agregar_formulario = accion_agregar_formulario;
|
|
45
|
+
exports.accion_abrir_formulario = accion_abrir_formulario;
|
|
46
|
+
exports.accion_borrar_formulario = accion_borrar_formulario;
|
|
47
|
+
exports.dispatchByPass = dispatchByPass;
|
|
48
|
+
exports.miniCompiladorSQlJs = miniCompiladorSQlJs;
|
|
49
|
+
exports.getFuncionCompilada = getFuncionCompilada;
|
|
50
|
+
exports.verificarSorteo = verificarSorteo;
|
|
51
|
+
exports.calcularFeedbackUnidadAnalisis = calcularFeedbackUnidadAnalisis;
|
|
52
|
+
exports.numberOrStringIncIfArray = numberOrStringIncIfArray;
|
|
53
|
+
exports.calcularFeedbackHojaDeRuta = calcularFeedbackHojaDeRuta;
|
|
54
|
+
exports.calcularFeedbackEncuesta = calcularFeedbackEncuesta;
|
|
55
|
+
exports.calcularResumenVivienda = calcularResumenVivienda;
|
|
22
56
|
const like_ar_1 = require("like-ar");
|
|
23
57
|
const row_validator_1 = require("row-validator");
|
|
24
58
|
const best_globals_1 = require("best-globals");
|
|
@@ -27,11 +61,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
27
61
|
function setCalcularVariables(calcularVariables) {
|
|
28
62
|
especiales.calcularVariables = calcularVariables;
|
|
29
63
|
}
|
|
30
|
-
exports.setCalcularVariables = setCalcularVariables;
|
|
31
64
|
function setCalcularVariablesEspecificasOperativo(calcularVariablesEspecificasOperativo) {
|
|
32
65
|
especiales.calcularVariablesEspecificasOperativo = calcularVariablesEspecificasOperativo;
|
|
33
66
|
}
|
|
34
|
-
exports.setCalcularVariablesEspecificasOperativo = setCalcularVariablesEspecificasOperativo;
|
|
35
67
|
var datosByPass = {};
|
|
36
68
|
//@ts-ignore arranca en blanco
|
|
37
69
|
var estructura = null;
|
|
@@ -41,7 +73,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
41
73
|
function setPersistirDatosByPass(persistirDatosByPassFun) {
|
|
42
74
|
persistirDatosByPassInterno = persistirDatosByPassFun;
|
|
43
75
|
}
|
|
44
|
-
exports.setPersistirDatosByPass = setPersistirDatosByPass;
|
|
45
76
|
function persistirDatosByPass(dbpp) {
|
|
46
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
78
|
yield persistirDatosByPassInterno(dbpp);
|
|
@@ -49,7 +80,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
49
80
|
refrescarMarcaDirty();
|
|
50
81
|
});
|
|
51
82
|
}
|
|
52
|
-
exports.persistirDatosByPass = persistirDatosByPass;
|
|
53
83
|
const crearEncuesta = (idCarga, callBack) => {
|
|
54
84
|
const LAST_AUTO_VALUE_PK_RAIZ = 'proximo_valor_pk_raiz';
|
|
55
85
|
const NEXT_AUTO_VALUE_PK_RAIZ = my.getLocalVar(LAST_AUTO_VALUE_PK_RAIZ) || '-1';
|
|
@@ -68,7 +98,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
68
98
|
function setEncolarBackup(encolarBackupFun) {
|
|
69
99
|
encolarBackup = encolarBackupFun;
|
|
70
100
|
}
|
|
71
|
-
exports.setEncolarBackup = setEncolarBackup;
|
|
72
101
|
let encolarBackup = () => {
|
|
73
102
|
throw new Error("SIN ESPECIFICAR encolarBackup");
|
|
74
103
|
};
|
|
@@ -95,12 +124,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
95
124
|
})).plain();
|
|
96
125
|
return estructura;
|
|
97
126
|
}
|
|
98
|
-
exports.setEstructura = setEstructura;
|
|
99
127
|
function setDatosByPass(dbpp) {
|
|
100
128
|
datosByPass = Object.assign(Object.assign({ dirty: false }, dbpp), { feedbackRowValidator: {} });
|
|
101
129
|
calcularFeedbackHojaDeRuta();
|
|
102
130
|
}
|
|
103
|
-
exports.setDatosByPass = setDatosByPass;
|
|
104
131
|
var getDatosByPass = () => datosByPass;
|
|
105
132
|
exports.getDatosByPass = getDatosByPass;
|
|
106
133
|
function objetoVacio(o) {
|
|
@@ -115,22 +142,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
115
142
|
}
|
|
116
143
|
return datosByPass.feedbackRowValidator;
|
|
117
144
|
}
|
|
118
|
-
exports.getFeedbackRowValidator = getFeedbackRowValidator;
|
|
119
145
|
function getDirty() {
|
|
120
146
|
return datosByPass.dirty;
|
|
121
147
|
}
|
|
122
|
-
exports.getDirty = getDirty;
|
|
123
148
|
function getEstructura() {
|
|
124
149
|
return estructura;
|
|
125
150
|
}
|
|
126
|
-
exports.getEstructura = getEstructura;
|
|
127
151
|
var registroElementosGlobal = {};
|
|
128
152
|
function registrarElemento(def) {
|
|
129
153
|
// @ts-ignore Sí, podría ser que los tipos de T sean distintos, pero van a ser coherentes
|
|
130
154
|
var registroElementos = registroElementosGlobal;
|
|
131
155
|
registroElementos[def.id] = def;
|
|
132
156
|
}
|
|
133
|
-
exports.registrarElemento = registrarElemento;
|
|
134
157
|
function respuestasForPk(forPk, conAumentadas, agregarSiFalta) {
|
|
135
158
|
var respuestasAumentadas = {};
|
|
136
159
|
// @ts-expect-error lo que sobrar de respuestas no me importa...
|
|
@@ -182,7 +205,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
182
205
|
respuestasRaiz, forPkRaiz, unidadAnalisis: uaDef
|
|
183
206
|
};
|
|
184
207
|
}
|
|
185
|
-
exports.respuestasForPk = respuestasForPk;
|
|
186
208
|
function volcadoInicialElementosRegistrados(forPkRaiz) {
|
|
187
209
|
var { respuestasAumentadas } = respuestasForPk(forPkRaiz, true);
|
|
188
210
|
var registroElementos = registroElementosGlobal;
|
|
@@ -223,7 +245,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
223
245
|
}
|
|
224
246
|
}
|
|
225
247
|
}
|
|
226
|
-
exports.volcadoInicialElementosRegistrados = volcadoInicialElementosRegistrados;
|
|
227
248
|
function calcularElementoEnfocado(idVariable) {
|
|
228
249
|
var _a;
|
|
229
250
|
var elementoVariableAEnfocar = document.getElementById(idVariable == 'fin' ? `boton-volver-2` : `var-${idVariable}`)
|
|
@@ -290,19 +311,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
290
311
|
}
|
|
291
312
|
return result;
|
|
292
313
|
}
|
|
293
|
-
exports.calcularElementoEnfocado = calcularElementoEnfocado;
|
|
294
314
|
function setAttrDistinto(objeto, name, valor) {
|
|
295
315
|
if (objeto && objeto.getAttribute(name) != valor) {
|
|
296
316
|
objeto.setAttribute(name, valor);
|
|
297
317
|
}
|
|
298
318
|
}
|
|
299
|
-
exports.setAttrDistinto = setAttrDistinto;
|
|
300
319
|
function setValorDistinto(objeto, name, valor) {
|
|
301
320
|
if (objeto[name] != valor) {
|
|
302
321
|
objeto[name] = valor;
|
|
303
322
|
}
|
|
304
323
|
}
|
|
305
|
-
exports.setValorDistinto = setValorDistinto;
|
|
306
324
|
function calcularVariablesBotonFormulario(forPk) {
|
|
307
325
|
if (estructura.habilitacionBotonFormulario && !(datosByPass === null || datosByPass === void 0 ? void 0 : datosByPass.soloLectura)) {
|
|
308
326
|
var { respuestas } = respuestasForPk(forPk);
|
|
@@ -320,7 +338,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
320
338
|
;
|
|
321
339
|
function accion_id_pregunta(_payload, _datosByPass) {
|
|
322
340
|
}
|
|
323
|
-
exports.accion_id_pregunta = accion_id_pregunta;
|
|
324
341
|
exports.NO_CAMBIAR__SOLO_TRAER_STATUS = Symbol('NO_CAMBIAR_SOLO_TRAER_STATUS');
|
|
325
342
|
exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = Symbol('NO_CAMBIAR_VERIFICAR_SI_ES_NECESARIO');
|
|
326
343
|
function refrescarMarcaDirty() {
|
|
@@ -388,24 +405,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
388
405
|
}
|
|
389
406
|
return { recentModified, siguienteVariable, variableActual: feedbackRow.actual };
|
|
390
407
|
}
|
|
391
|
-
exports.accion_registrar_respuesta = accion_registrar_respuesta;
|
|
392
408
|
function accion_registrar_nota(payload, _datosByPass) {
|
|
393
409
|
let { forPkRaiz, tarea, nota } = payload;
|
|
394
410
|
console.log("FALTA // TODO");
|
|
395
411
|
}
|
|
396
|
-
exports.accion_registrar_nota = accion_registrar_nota;
|
|
397
412
|
function accion_agregar_visita(payload, _datosByPass) {
|
|
398
413
|
let { forPkRaiz, observaciones } = payload;
|
|
399
414
|
}
|
|
400
|
-
exports.accion_agregar_visita = accion_agregar_visita;
|
|
401
415
|
function accion_modificar_visita(payload, _datosByPass) {
|
|
402
416
|
let { forPkRaiz, index, opcion, valor } = payload;
|
|
403
417
|
}
|
|
404
|
-
exports.accion_modificar_visita = accion_modificar_visita;
|
|
405
418
|
function accion_borrar_visita(payload, _datosByPass) {
|
|
406
419
|
let { forPkRaiz, index } = payload;
|
|
407
420
|
}
|
|
408
|
-
exports.accion_borrar_visita = accion_borrar_visita;
|
|
409
421
|
function accion_agregar_formulario({ forPk }, _datosByPass) {
|
|
410
422
|
var { respuestas, unidadAnalisis, respuestasAumentadas, respuestasRaiz } = respuestasForPk(forPk, true, true);
|
|
411
423
|
variablesCalculadas(respuestasRaiz, forPk);
|
|
@@ -413,7 +425,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
413
425
|
calcularVariablesBotonFormulario(forPk);
|
|
414
426
|
persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
|
|
415
427
|
}
|
|
416
|
-
exports.accion_agregar_formulario = accion_agregar_formulario;
|
|
417
428
|
function accion_abrir_formulario({ forPk }, _datosByPass) {
|
|
418
429
|
var { respuestas, unidadAnalisis, respuestasAumentadas, respuestasRaiz } = respuestasForPk(forPk, true, true);
|
|
419
430
|
variablesCalculadas(respuestasRaiz, forPk);
|
|
@@ -421,7 +432,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
421
432
|
calcularVariablesBotonFormulario(forPk);
|
|
422
433
|
persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
|
|
423
434
|
}
|
|
424
|
-
exports.accion_abrir_formulario = accion_abrir_formulario;
|
|
425
435
|
function accion_borrar_formulario({ forPk, forPkPadre }) {
|
|
426
436
|
var { respuestas, unidadAnalisis, respuestasAumentadas, respuestasRaiz, forPkRaiz } = respuestasForPk(forPk, true, true);
|
|
427
437
|
var unidad_analisis = estructura.formularios[forPk.formulario].casilleros.unidad_analisis;
|
|
@@ -437,11 +447,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
437
447
|
volcadoInicialElementosRegistrados(forPkPadre);
|
|
438
448
|
persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
|
|
439
449
|
}
|
|
440
|
-
exports.accion_borrar_formulario = accion_borrar_formulario;
|
|
441
450
|
function dispatchByPass(fun, payload) {
|
|
442
451
|
return fun(payload, datosByPass);
|
|
443
452
|
}
|
|
444
|
-
exports.dispatchByPass = dispatchByPass;
|
|
445
453
|
//////////////////////////////////////////////////////////////////////////
|
|
446
454
|
exports.ultimaVaribleVivienda = 'NO_ESTA_DEFINIDA_AUN//TODO';
|
|
447
455
|
exports.MAXCP = 20;
|
|
@@ -597,7 +605,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
597
605
|
});
|
|
598
606
|
return cuerpo;
|
|
599
607
|
}
|
|
600
|
-
exports.miniCompiladorSQlJs = miniCompiladorSQlJs;
|
|
601
608
|
function getFuncionCompilada(conjuntoDeFunciones) {
|
|
602
609
|
return function (nombreFuncionComoExpresionJs) {
|
|
603
610
|
if (!conjuntoDeFunciones[nombreFuncionComoExpresionJs]) {
|
|
@@ -627,7 +634,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
627
634
|
return conjuntoDeFunciones[nombreFuncionComoExpresionJs];
|
|
628
635
|
};
|
|
629
636
|
}
|
|
630
|
-
exports.getFuncionCompilada = getFuncionCompilada;
|
|
631
637
|
exports.getFuncionHabilitar = getFuncionCompilada(funcionesHabilitar);
|
|
632
638
|
exports.getFuncionValorar = getFuncionCompilada(funcionesValorar);
|
|
633
639
|
var rowValidator = (0, row_validator_1.getRowValidator)({ getFuncionHabilitar: exports.getFuncionHabilitar, getFuncionValorar: exports.getFuncionValorar });
|
|
@@ -851,7 +857,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
851
857
|
}
|
|
852
858
|
}
|
|
853
859
|
}
|
|
854
|
-
exports.verificarSorteo = verificarSorteo;
|
|
855
860
|
function variablesCalculadas(respuestasRaiz, forPk) {
|
|
856
861
|
if (especiales.calcularVariables) {
|
|
857
862
|
especiales.calcularVariables(respuestasRaiz, forPk);
|
|
@@ -921,7 +926,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
921
926
|
}
|
|
922
927
|
}
|
|
923
928
|
}
|
|
924
|
-
exports.calcularFeedbackUnidadAnalisis = calcularFeedbackUnidadAnalisis;
|
|
925
929
|
function numberOrStringIncIfArray(numberOrString, object) {
|
|
926
930
|
// @ts-expect-error estoy usando isNaN para ver si es o no un número sumable
|
|
927
931
|
if (isNaN(numberOrString)) {
|
|
@@ -929,7 +933,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
929
933
|
}
|
|
930
934
|
return Number(numberOrString) + (object instanceof Array ? 1 : 0);
|
|
931
935
|
}
|
|
932
|
-
exports.numberOrStringIncIfArray = numberOrStringIncIfArray;
|
|
933
936
|
var getMainFormForVivienda = (valuePkRaiz) => {
|
|
934
937
|
return datosByPass.informacionHdr[valuePkRaiz].tarea.main_form;
|
|
935
938
|
};
|
|
@@ -950,12 +953,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
950
953
|
});
|
|
951
954
|
});
|
|
952
955
|
}
|
|
953
|
-
exports.calcularFeedbackHojaDeRuta = calcularFeedbackHojaDeRuta;
|
|
954
956
|
function calcularFeedbackEncuesta(feedbackRowValidator, formularios, forPkRaiz, respuestas, opts) {
|
|
955
957
|
var forPk = Object.assign({}, forPkRaiz);
|
|
956
958
|
calcularFeedbackUnidadAnalisis(feedbackRowValidator, formularios, respuestas, exports.defOperativo.UAprincipal, forPk, respuestas, null, opts);
|
|
957
959
|
}
|
|
958
|
-
exports.calcularFeedbackEncuesta = calcularFeedbackEncuesta;
|
|
959
960
|
function calcularFeedback(respuestas, forPkRaiz, opts) {
|
|
960
961
|
var resumenEstado;
|
|
961
962
|
// @ts-ignore Partial
|
|
@@ -1094,6 +1095,5 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
1094
1095
|
};
|
|
1095
1096
|
return resultado;
|
|
1096
1097
|
}
|
|
1097
|
-
exports.calcularResumenVivienda = calcularResumenVivienda;
|
|
1098
1098
|
});
|
|
1099
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBc0JpQjtJQUVqQixJQUFJLFVBQVUsR0FBRyxFQUdoQixDQUFBO0lBQ0QsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW1FO1FBQ3BHLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBdUY7UUFDNUksVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFGRCw0RkFFQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0QsR0FBRSxFQUFFO1FBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyx1QkFBbUQ7UUFDdkYsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFDMUQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNEI7O1lBQ25FLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFKRCxvREFJQztJQUVNLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxRQUFvQyxFQUFDLEVBQUU7UUFDbkYsTUFBTSx1QkFB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RCxxRUFBcUU7WUFDckUsYUFBYSxHQUFHLGdCQUFnQixDQUFBO1NBQ25DO2FBQUk7WUFDRCxhQUFhLEdBQUcsT0FBTyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQTtTQUM5QztRQUNELElBQUksU0FBUyxHQUFvQjtZQUM3QixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7U0FDZCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQWhHRCwwREFnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvLFxyXG4gICAgaXRlcmF0b3IsXHJcbiAgICBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9QayxcclxuICAgIElkQ2FyZ2EsXHJcbiAgICBDYXJnYSxcclxuICAgIENhbXBvUGtSYWl6LFxyXG4gICAgVmFsdWVQa1JhaXpcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzKGNhbGN1bGFyVmFyaWFibGVzOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgIC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OmJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSA9IG51bGwgYXMgRXN0cnVjdHVyYTtcclxuXHJcbmxldCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm86KGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpPT5Qcm9taXNlPGFueT4gPSAoKT0+e1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwZXJzaXN0aXJEYXRvc0J5UGFzcyBTSU4gREVGSU5JUicpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZXJzaXN0aXJEYXRvc0J5UGFzcyhwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjp0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3Mpe1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgIGF3YWl0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWFyRW5jdWVzdGEgPSAoaWRDYXJnYTogSWRDYXJnYSwgY2FsbEJhY2s6KGZvclBrUmFpejpGb3JQa1JhaXopPT52b2lkKT0+IHtcclxuICAgIGNvbnN0IExBU1RfQVVUT19WQUxVRV9QS19SQUlaPSAncHJveGltb192YWxvcl9wa19yYWl6J1xyXG4gICAgY29uc3QgTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVo6IFZhbHVlUGtSYWl6ID0gbXkuZ2V0TG9jYWxWYXIoTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVopIHx8ICctMSdcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBteS5zZXRMb2NhbFZhcihMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiwgKE51bWJlcihORVhUX0FVVE9fVkFMVUVfUEtfUkFJWikgLSAxKS50b1N0cmluZygpKTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXT17fSBhcyBSZXNwdWVzdGFzUmFpejtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXSA9IHtcclxuICAgICAgICAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkciwgXHJcbiAgICAgICAgdGVtOiB7Li4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGVtfVxyXG4gICAgfTtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXS50ZW0uY2FyZ2EgPSBpZENhcmdhO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKS50aGVuKFxyXG4gICAgICAgICgpPT5jYWxsQmFjayh7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86ZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGFyZWEubWFpbl9mb3JtLCBcclxuICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06TnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSBhcyBWYWx1ZVBrUmFpelxyXG4gICAgICAgIH0gYXMgRm9yUGtSYWl6KVxyXG4gICAgKS8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG59XHJcbiAgICBcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOkVzdHJ1Y3R1cmEpe1xyXG4gICAgZXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFBQ2FyZ2FyO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWE9PiEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZj0+KHtoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFub30pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpPT4oe1xyXG4gICAgICAgIHBrOnVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsIFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhOyBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7ZGlydHk/OmJvb2xlYW59KXtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OmZhbHNlLFxyXG4gICAgICAgIC4uLmRicHAsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86b2JqZWN0KXtcclxuICAgIGZvcih2YXIgayBpbiBvKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCl7XHJcbiAgICBpZighZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKXtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKXtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpe1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnR8SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiwgZWxlbWVudG86VCxcclxuICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+XHJcbn0gJiAoe1xyXG4gICAgcHJvcDprZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59fHtcclxuICAgIGRpcmVjdDp0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6c3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHtlbGVtZW50bz86VH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOlJlZ2lzdHJvRWxlbWVudG88VD4pe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOlJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0ge3Jlc3B1ZXN0YXM6UmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejpGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQayk6UmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhczp0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3Rhc31cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhcz86Ym9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzPzpSZXNwdWVzdGFzfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6OyBcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrOyBcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTpbdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOlVuaWRhZEFuYWxpc2lzLCBmb3JQazpGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUodW5pZGFkX2FuYWxpc2lzKXtcclxuICAgICAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGE9ey4uLmZvclBrQXBpbGFkYX07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXM9dWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlKHBpbGEubGVuZ3RoKXtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3I9cmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheT92YWxvclBrT1Bvc2ljaW9uIC0gMTp2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYocmVzcHVlc3RhcyA9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoYWdyZWdhclNpRmFsdGEpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmKGNvbkF1bWVudGFkYXMpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrT1Bvc2ljaW9ufVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejpGb3JQa1JhaXope1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcyl7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZihkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBpZighZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKXtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZigncHJvcCcgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ2F0dHInIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ3N0eWxlJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyb3dWYWxpZGF0b3IuYWN0dWFsKXtcclxuICAgICAgICB2YXIge3RvcCwgYm90dG9tfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZih0b3AgIT0gbnVsbCAmJiBib3R0b20gIT1udWxsKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlPT0nZmluJz9gYm90b24tdm9sdmVyLTJgOmB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0KjAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKFxyXG4gICAgICAgICAgICAoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSBcclxuICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uLXZvbHZlcicpIFxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29uZmlnQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwVUEgIT0gbnVsbCAmJiByZXNwVUEgaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0byl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbJyRCLicrIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7ICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXVxyXG4gICAgaWYocmVzcHVlc3RhICE9PSBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTKXtcclxuICAgICAgICBpZihyZXNwdWVzdGEgPT09ICcnKXtcclxuICAgICAgICAgICAgcmVzcHVlc3RhID0gbnVsbDtcclxuICAgICAgICB9ZWxzZSBpZihlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbz09J251bWVybycpe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGEgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYocmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW58bnVsbHx1bmRlZmluZWQ7XHJcbiAgICBpZih2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpe1xyXG4gICAgICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlciwgb3BjaW9uOmtleW9mIFZpc2l0YSAsIHZhbG9yOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3J9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXJ9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX06IHtmb3JQazpGb3JQaywgZm9yUGtQYWRyZTpGb3JQa30pe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgaW5kZXggPSBmb3JQa1t1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t1bmlkYWRfYW5hbGlzaXNdLnBvcCgpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGtQYWRyZSk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46KHBheWxvYWQ6VCwgZGF0b3M6dHlwZW9mIGRhdG9zQnlQYXNzKT0+UixcclxuICAgIHBheWxvYWQ6VFxyXG4pe1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUD0yMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcz17XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6YW55KXtcclxuICAgICAgICBpZihwb3NpYmxlTnVsbD09bnVsbCl7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6bnVtYmVyLCBkZW5vbWluYWRvcjpudW1iZXIsIHBrOnN0cmluZyl7XHJcbiAgICAgICAgaWYoZGVub21pbmFkb3I9PTApe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBlbiBcIitwaytcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIitudW1lcmFkb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVtZXJhZG9yL2Rlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6e1xyXG4gICAgICAgIGJsYW5jbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09MCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCl7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMS05XXwwWzEtOV18MVswMTJdKVxcLzIwXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICB2YXIgeERhdGU6IERhdGU7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJzaW9uT2s6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXRvX3ZhbGlkbyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbk9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vZmFsdGFyaWEgdmFsaWRhciBxdWUgbm8gc2VhIHVuYSBmZWNoYSBmdXR1cmEgeSBxdWUgc2VhIHVuYSBmZWNoYSBlbiBlbCByYW5nbyBkZWwgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyAmJiBjb252ZXJzaW9uT2tcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc2FuaW9fdmFsaWRvKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5mb3JtYWRvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT11bmRlZmluZWQgJiYgeCE9PW51bGwgJiYgKCEoeCBpbnN0YW5jZW9mIEFycmF5KXx8IHgubGVuZ3RoIT09MCApXHJcbiAgICAgICAgICAgICYmICghKHggaW5zdGFuY2VvZiBPYmplY3QpfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5zbmMoeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyPT0wXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlZGFkX21lc19hbm5pb192YWxpZG8oZWRhZDpudW1iZXIsbWVzQW5uaW86c3RyaW5nLCBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVk6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTpEYXRlLCBkMjpEYXRlKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIG1vbnRocztcclxuICAgICAgICAgICAgICAgIG1vbnRocyA9IChkMi5nZXRGdWxsWWVhcigpIC0gZDEuZ2V0RnVsbFllYXIoKSkgKiAxMjtcclxuICAgICAgICAgICAgICAgIG1vbnRocyAtPSBkMS5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzICs9IGQyLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIDw9IDAgPyAwIDogbW9udGhzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNSZWFsaXphY2lvbiA9IGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsyXSksIE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsxXSksTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gIG1lc0FubmlvLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciBuYWNpbWllbnRvID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc01lc0FubmlvWzFdKSwgTnVtYmVyKHBhcnRlc01lc0FubmlvWzBdKSwxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcy8xMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovICAgICAgIFxyXG4gICAgfVxyXG59O1xyXG5cclxudHlwZSBGdW5jaW9uSGFiaWxpdGFyID0gKHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+Ym9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25IYWJpbGl0YXJ9PXtcclxufVxyXG52YXIgZnVuY2lvbmVzVmFsb3Jhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25WYWxvcmFyfT17XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6c3RyaW5nKXtcclxuICAgIHZhciBleHByZXNpb24gPSBleHByZXNpb25DYXNpU1FMLnJlcGxhY2UoL1xcdTAwQTAvZywnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbihlbFRva2VuKXtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvPWVsVG9rZW4udHJpbSgpO1xyXG4gICAgICAgIGlmKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9ZWxzZSBpZigvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9ZWxzZSBpZigvXlxccyskLy50ZXN0KGVsVG9rZW4pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicrZWxUb2tlbisnKSc7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdWVycG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jaW9uQ29tcGlsYWRhPFQ+KGNvbmp1bnRvRGVGdW5jaW9uZXM6e1trZXk6c3RyaW5nXToodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5UfSl7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24obm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KczpzdHJpbmcpe1xyXG4gICAgICAgIGlmKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKXtcclxuICAgICAgICAgICAgdmFyIGN1ZXJwbyA9IG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gIG5ldyBGdW5jdGlvbigndmFsb3JlcycsICdoZWxwZXJzJywgJ3JldHVybiAnK2N1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24odmFsb3Jlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbG9yZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTVBJTEFDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcylcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgICA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHtnZXRGdW5jaW9uSGFiaWxpdGFyLCBnZXRGdW5jaW9uVmFsb3Jhcn0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06SWRVbmlkYWRBbmFsaXNpc1tdLHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsbm9SZWFzVGFyZWE6e31bXSxub21iTm9SZWE6c3RyaW5nKVxyXG46e25yY29kaWdvOnN0cmluZ3xudWxsLCBlc3ZhbG9yOmJvb2xlYW59PT57XHJcbiAgICB2YXIgbnJjb2RpZ286c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICB2YXIgZXN2YWxvcj1mYWxzZTtcclxuICAgIHZhciBydmFsb3I6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgIHZhciBydmFyaWFibGU6c3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYodW5pZGFkZXNBUmVjb3JyZXJQcm0uaW5jbHVkZXModW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzKSl7XHJcbiAgICAgICAgZm9yKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSl7IC8vZXN0cnVjdHVyYS5ub1JlYXMsIGVzdHJ1Y3R1cmEubm9SZWFzU3VwXHJcbiAgICAgICAgICAgIGlmIChub21iTm9SZWE9PSdub19yZWEnKXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGUgLCB2YWxvciwgbm9fcmVhfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYTtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZT12YXJpYWJsZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlX3N1cCAsIHZhbG9yX3N1cCwgbm9fcmVhX3N1cH0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWFfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZT12YXJpYWJsZV9zdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV09PXJ2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9cm5vcmVhOyAgLy9ub19yZWEsIG5vX3JlYV9zdXBcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yKGxldCB1YSBvZiAobGlrZUFyKHVuaWRhZEFuYWxpc2lzPy5oaWphcykuYXJyYXkoKSkpe1xyXG4gICAgICAgIGlmKHVhPy51bmlkYWRfYW5hbGlzaXMgJiYgcmVzcHVlc3Rhc1t1YS51bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSl7XHJcbiAgICAgICAgICAgICAgIGxldCByZXN1bHQ9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLHVhLHJlc3B1ZXN0YXNIaWphcyxub1JlYXNUYXJlYSxub21iTm9SZWEpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LmVzdmFsb3IgKXtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbz1yZXN1bHQubnJjb2RpZ287XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1yZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiB9XHJcblxyXG5cclxuXHJcbmV4cG9ydCB2YXIgZGVmT3BlcmF0aXZvOkRlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDonJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6e30gYXMge1tpIGluIElkVW5pZGFkQW5hbGlzaXNdOntwazpJZFZhcmlhYmxlLCBpbmNsdWlkYXM6SWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6SWRGb3JtdWxhcmlvW119fSxcclxuICAgIGRlZkZvcjp7fSBhcyB7W2YgaW4gSWRGb3JtdWxhcmlvXTp7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86dHJ1ZX19XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuZXhwb3J0IHZhciBzZXRDYWxjdWxvUmVhTm9SZWEgPSAoXHJcbiAgICBlc05vUmVhOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhOnN0cmluZ3xudWxsLCBlc05vUmVhOmJvb2xlYW59LFxyXG4gICAgZXNOb1JlYVN1cDoocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCwgZXNOb1JlYVN1cDpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYTpudW1iZXJ8bnVsbCwgZXNSZWE6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDoocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWFTdXA6bnVtYmVyfG51bGwsIGVzUmVhU3VwOmJvb2xlYW59XHJcbik9PntcclxuICAgIGRlZk9wZXJhdGl2byA9IHtcclxuICAgICAgICAuLi5kZWZPcGVyYXRpdm8sXHJcbiAgICAgICAgZXNOb1JlYSxcclxuICAgICAgICBlc05vUmVhU3VwLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhU3VwXHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbnR5cGUgUGVyc29uYT17cDE6c3RyaW5nLCBwMjpudW1iZXIsIHAzOm51bWJlciwgcDQ6bnVtYmVyfG51bGwsIHA1OjF8bnVsbCwgcDY6MXxudWxsfVxyXG5cclxuZnVuY3Rpb24gbnVtKG51bTpudW1iZXJ8c3RyaW5nfG51bGwpOm51bWJlcntcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmKGlzTmFOKG51bS0wKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtLTA7XHJcbn1cclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6e1trIGluIHN0cmluZ106Ym9vbGVhbn0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOntcclxuICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLFxyXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6XHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOklkVmFyaWFibGVcclxuXHJcbn0pe1xyXG4gICAgY29uc3QgcmVzZXRlYXJTb3J0ZW8gPSAob3B0czp7cmVzcHVlc3RhczpSZXNwdWVzdGFzfSk9PntcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ID0gb3B0cztcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1udWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1udWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9IG51bGw7XHJcbiAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+cmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09bnVsbCk7XHJcbiAgICAgICAgaWYoJ3Zhcl9sZXRyYScgaW4gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8pe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgICAgIGZvcih2YXIgcGVyIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7Y29uZmlndXJhY2lvblNvcnRlbywgdmFyaWFibGVBY3R1YWwsIHJlc3B1ZXN0YXMsIGZvclBrLCByZXNwdWVzdGFzUmFpen0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICB2YXIgZXhwcl9pbmNvbXBsZXRpdHVkX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5leHByX2luY29tcGxldGl0dWRfanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIGZpbHRyb19mdW4gPSAgZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3MuaW5jbHVkZXModmFyaWFibGVBY3R1YWwpKXtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11YVBhZHJlKT8ucGtfYWdyZWdhZGFcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKS0xXTtcclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeil7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXM6cGFkcmV9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gYXMgUmVzcHVlc3Rhc1tdXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSE9MSl7XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbnRpZGFkVG90YWwgPSBOdW1iZXIocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSk7XHJcbiAgICAgICAgICAgIGlmKGNhbnRpZGFkVG90YWw8cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCxpKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLnNvbWUoKHBhcmFtKT0+cFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsLTEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZShjYW50aWRhZFRvdGFsPnJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXJbdmFyJHAwXT1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6dmFyJHAwLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXT1sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApKzEpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsYUFsZWF0b3JpYU1pZW1icm9zID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udGFibGEubWFwKChsaXN0YSk9Pmxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0bz9yZXN0byAtIDE6OTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDEgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6UmVzcHVlc3Rhcyk9PnBbdmFyTGV0cmFdPT1sZXRyYVNlbGVjY2lvbmFkYSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1wb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109c29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09cmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV09J29rJztcclxuICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdPSdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIFVBOklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCAvLyBpbmNsdXllbiBsYSBkZSB0b2RvcyBsb3MgcGFkcmVzIHkgYW5zZXN0cm9zLFxyXG4gICAgcmVzcHVlc3Rhc1BhZHJlOlJlc3B1ZXN0YXN8bnVsbCwgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yLFxyXG4pe1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpe1xyXG4gICAgICAgIHZhciBwa051ZXZhID0gZGVmT3BlcmF0aXZvLmRlZlVBW1VBaW5jbHVpZGFdLnBrO1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbVUFpbmNsdWlkYV07XHJcbiAgICAgICAgbGlrZUFyKGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzSGlqbywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvciwgXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqbywgXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLCBcclxuICAgICAgICAgICAgICAgIHsuLi5mb3JQaywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSl7XHJcbiAgICAgICAgZm9yKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZighIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubyl7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbkZvclBrOlBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoey4uLmZvclBrLCBmb3JtdWxhcmlvfSlcclxuICAgICAgICAgICAgdmFyIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMgPSAxMDtcclxuICAgICAgICAgICAgdmFyIHZhckF1dG9JbmdyZXNhZGFzID0gW107XHJcbiAgICAgICAgICAgIGRve1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmNhRmluOidmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHtyZXN1bWVuLCBhdXRvSW5ncmVzYWRhc30gPSBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgICAgICAgICAgICAgIHZhciB2YXJOYW1lOklkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZihhdXRvSW5ncmVzYWRhcyE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhck5hbWUgaW4gYXV0b0luZ3Jlc2FkYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhbWJpbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Ym9BdXRvaW5ncmVzb3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tPjApO1xyXG4gICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5mb3JFYWNoKHZhcm5hbWU9PntcclxuICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdLmVzdGFkb3NbdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nK2Zvcm11bGFyaW8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXIgZm9ybVByaW5jaXBhbEZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgICAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9IFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJiBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZT9cclxuICAgICAgICAgICAgICAgICAgICAnb2snXHJcbiAgICAgICAgICAgICAgICA6cmVzdW1lbiA9PSAndmFjaW8nID8gXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW5cclxuICAgICAgICAgICAgaWYoZXNIZXJtYW5vKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsPT0nb2snPydvayc6bnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOm51bWJlcnxzdHJpbmcsIG9iamVjdDpvYmplY3R8YW55W10pOihudW1iZXJ8c3RyaW5nKXtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZihpc05hTihudW1iZXJPclN0cmluZykpe1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpKyhvYmplY3QgaW5zdGFuY2VvZiBBcnJheT8xOjApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6VmFsdWVQa1JhaXopOklkRm9ybXVsYXJpbz0+e1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZhbHVlUGtSYWl6XS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCl7XHJcbiAgICBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHVhRGVmPT4hdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWY9PntcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjpGb3JtdWxhcmlvLCBlbmM6YW55KT0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsP2Zvcm11bGFyaW9QcmluY2lwYWw9PWYuaWRfY2FzaWxsZXJvOmYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1t1YURlZi51bmlkYWRfYW5hbGlzaXNdXHJcbiAgICAgICAgYmVpbmdBcnJheShjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3RhcywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrfSBhcyBGb3JQa1JhaXpcclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKXtcclxuICAgIHZhciBmb3JQazpGb3JQayA9ey4uLmZvclBrUmFpen07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yKXtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzIDoge1t4IGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLElkRmluPn09e31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOmFueSwgcGxhaW5QazpQbGFpbkZvclBrKT0+SlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICE9IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LCBcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOklkRm9ybXVsYXJpb1tdPVtdKT0+e1xyXG4gICAgaWYoaWRGb3JtdWxhcmlvKXtcclxuICAgICAgICBmb3IgKGxldCBjYXNpbGxlcm8gb2YgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcyl7XHJcbiAgICAgICAgICAgIGlmKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKXtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6Jyk/Y2FzaWxsZXJvLnNhbHRvOidGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1IaWpvKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8sIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeiA9ICh2YWx1ZVBrUmFpejpWYWx1ZVBrUmFpeik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZhbHVlUGtSYWl6ID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSh2YWx1ZVBrUmFpeik7XHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IFttYWluRm9ybUZvclZhbHVlUGtSYWl6XTtcclxuICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MobWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiwgZm9ybXNGZWVkYmFjayk7XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckFjdHVhbEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBudW1BY3R1YWw6bnVtYmVyfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJlxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgPyBcclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpb3xudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBcclxuICAgIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCBcclxuICAgIHI6UmVzcHVlc3Rhc1xyXG4pPT57XHJcbiAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKXtcclxuICAgICAgICB2YXIgZXhwcl9oYWJpbGl0YXJfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uZXhwcl9oYWJpbGl0YXJfYm90b25fanMpO1xyXG4gICAgICAgIHJldHVybiAhZXhwcl9oYWJpbGl0YXJfZnVuKHJbaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc11bbnVtRWxlbWVudG9VQS0xXSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgICAgIChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvIHx8IFxyXG4gICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsKS5pbmNsdWRlcyhmb3JtdWxhcmlvKVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKSlcclxuICAgIH0gXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbnR5cGUgUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTpudW1iZXJ8bnVsbCxcclxuICAgIGNvZE5vUmVhOnN0cmluZ3xudWxsLFxyXG4gICAgY29kUmVhU3VwOm51bWJlcnxudWxsXHJcbiAgICBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OkZvclBrUmFpeiwgXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1xyXG4pOlJlc3VsdGFkb1Jlc3VtZW57XHJcbiAgICB2YXIge2NvZFJlYSwgZXNSZWF9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhLCBlc05vUmVhfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZFJlYVN1cCxlc1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWFTdXAsIGVzTm9SZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV1cclxuICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspPT57XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZih0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUpe1xyXG4gICAgICAgICAgICBwa0FncmVnYWRhID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhLF9pZFVBKT0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXM9PWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXT09Zm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gJiYgXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6dGllbmVJbmRpdmlkdWFsP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXI/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhcj9yZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOmZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOmNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzOnt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTpmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzpjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRm9yUGspLnJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6dHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6e1trZXkgaW4gUmVzdW1lbkVzdGFkb106IHtwcmlvcmlkYWQ6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ9fSA9IHtcclxuICAgICAgICAnbm8gcmVhJzp7cHJpb3JpZGFkOiAxLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6e3ByaW9yaWRhZDogMiwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOntwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICd2YWNpbyc6e3ByaW9yaWRhZDogNCwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6e3ByaW9yaWRhZDogNSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ29rJzp7cHJpb3JpZGFkOiA2LCBjYW50aWRhZDowfVxyXG4gICAgfVxyXG4gICAgdmFyIG1pbiA9IDY7XHJcbiAgICB2YXIgbWluUmVzdW1lbjogUmVzdW1lbkVzdGFkbyA9ICdvayc7XHJcbiAgICBmb3IodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpe1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmKHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDxtaW4pe1xyXG4gICAgICAgICAgICBtaW49cHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPXJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYobWluUmVzdW1lbj09J3ZhY2lvJyYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW49PSdpbmNvbXBsZXRvJyl7XHJcbiAgICAgICAgaWYoZmFsc2UgLypyZXNwdWVzdGFzW3NwMV09PTIgJiYgcmVzcHVlc3Rhc1tzcDZdPT1udWxsKi8pe1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdjaXRhIHBhY3RhZGEnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vVE9ETyBBUlJFR0xBUiBFU1RFIEhPUlJPUiwgR0VORVJBTElaQVJcclxuICAgIHZhciB0YXJlYSA9IGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nO1xyXG4gICAgaWYodGFyZWE9PSdzdXBlJyl7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCA9IGVzTm9SZWFTdXA/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gZXNOb1JlYT8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOlJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwLFxyXG4gICAgICAgIGNvZFJlYSxcclxuICAgICAgICBjb2ROb1JlYSxcclxuICAgICAgICBjb2RSZWFTdXAsXHJcbiAgICAgICAgY29kTm9SZWFTdXBcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRhZG9cclxufVxyXG4iXX0=
|
|
1099
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0NBLG9EQUVDO0lBRUQsNEZBRUM7SUFrQkQsMERBRUM7SUFFRCxvREFJQztJQXVCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQU9DO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBZ0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQXlEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWNDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQVdELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBZUM7SUFFRCw0REFTQztJQXlGRCwwREFnR0M7SUE3dkNELHFDQUF1RDtJQUV2RCxpREFBb0c7SUFFcEcsK0NBQStEO0lBRS9ELG1DQXNCaUI7SUFFakIsSUFBSSxVQUFVLEdBQUcsRUFHaEIsQ0FBQTtJQUNELFNBQWdCLG9CQUFvQixDQUFDLGlCQUFtRTtRQUNwRyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDcEQsQ0FBQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0Qs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QyxDQUFDO2dCQUN0RCxVQUFVLEdBQUMsY0FBYyxDQUFDO1lBQzlCLENBQUM7aUJBQUksQ0FBQztnQkFDRixVQUFVLEdBQUMsWUFBWSxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0csSUFBSSxhQUEyQixDQUFDO1FBQ2hDLElBQUksZ0JBQWdCLEdBQWlCLE9BQU8sQ0FBQztRQUM3QyxJQUFHLEtBQUssSUFBRSxNQUFNLEVBQUMsQ0FBQztZQUNkLGdCQUFnQixHQUFHLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7WUFDakQscUVBQXFFO1lBQ3JFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtRQUNwQyxDQUFDO2FBQUksQ0FBQztZQUNGLGFBQWEsR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFBO1FBQy9DLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBb0I7WUFDN0IsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvLFxyXG4gICAgaXRlcmF0b3IsXHJcbiAgICBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9QayxcclxuICAgIElkQ2FyZ2EsXHJcbiAgICBDYXJnYSxcclxuICAgIENhbXBvUGtSYWl6LFxyXG4gICAgVmFsdWVQa1JhaXpcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzKGNhbGN1bGFyVmFyaWFibGVzOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgIC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OmJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSA9IG51bGwgYXMgRXN0cnVjdHVyYTtcclxuXHJcbmxldCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm86KGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpPT5Qcm9taXNlPGFueT4gPSAoKT0+e1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwZXJzaXN0aXJEYXRvc0J5UGFzcyBTSU4gREVGSU5JUicpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZXJzaXN0aXJEYXRvc0J5UGFzcyhwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjp0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3Mpe1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgIGF3YWl0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWFyRW5jdWVzdGEgPSAoaWRDYXJnYTogSWRDYXJnYSwgY2FsbEJhY2s6KGZvclBrUmFpejpGb3JQa1JhaXopPT52b2lkKT0+IHtcclxuICAgIGNvbnN0IExBU1RfQVVUT19WQUxVRV9QS19SQUlaPSAncHJveGltb192YWxvcl9wa19yYWl6J1xyXG4gICAgY29uc3QgTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVo6IFZhbHVlUGtSYWl6ID0gbXkuZ2V0TG9jYWxWYXIoTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVopIHx8ICctMSdcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBteS5zZXRMb2NhbFZhcihMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiwgKE51bWJlcihORVhUX0FVVE9fVkFMVUVfUEtfUkFJWikgLSAxKS50b1N0cmluZygpKTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXT17fSBhcyBSZXNwdWVzdGFzUmFpejtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXSA9IHtcclxuICAgICAgICAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkciwgXHJcbiAgICAgICAgdGVtOiB7Li4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGVtfVxyXG4gICAgfTtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaXS50ZW0uY2FyZ2EgPSBpZENhcmdhO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKS50aGVuKFxyXG4gICAgICAgICgpPT5jYWxsQmFjayh7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86ZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGFyZWEubWFpbl9mb3JtLCBcclxuICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06TnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSBhcyBWYWx1ZVBrUmFpelxyXG4gICAgICAgIH0gYXMgRm9yUGtSYWl6KVxyXG4gICAgKS8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG59XHJcbiAgICBcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOkVzdHJ1Y3R1cmEpe1xyXG4gICAgZXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFBQ2FyZ2FyO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWE9PiEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZj0+KHtoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFub30pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpPT4oe1xyXG4gICAgICAgIHBrOnVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsIFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhOyBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7ZGlydHk/OmJvb2xlYW59KXtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OmZhbHNlLFxyXG4gICAgICAgIC4uLmRicHAsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86b2JqZWN0KXtcclxuICAgIGZvcih2YXIgayBpbiBvKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCl7XHJcbiAgICBpZighZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKXtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKXtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpe1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnR8SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiwgZWxlbWVudG86VCxcclxuICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+XHJcbn0gJiAoe1xyXG4gICAgcHJvcDprZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59fHtcclxuICAgIGRpcmVjdDp0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6c3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHtlbGVtZW50bz86VH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOlJlZ2lzdHJvRWxlbWVudG88VD4pe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOlJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0ge3Jlc3B1ZXN0YXM6UmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejpGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQayk6UmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhczp0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3Rhc31cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhcz86Ym9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzPzpSZXNwdWVzdGFzfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6OyBcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrOyBcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTpbdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOlVuaWRhZEFuYWxpc2lzLCBmb3JQazpGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUodW5pZGFkX2FuYWxpc2lzKXtcclxuICAgICAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGE9ey4uLmZvclBrQXBpbGFkYX07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXM9dWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlKHBpbGEubGVuZ3RoKXtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3I9cmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheT92YWxvclBrT1Bvc2ljaW9uIC0gMTp2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYocmVzcHVlc3RhcyA9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoYWdyZWdhclNpRmFsdGEpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmKGNvbkF1bWVudGFkYXMpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrT1Bvc2ljaW9ufVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejpGb3JQa1JhaXope1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcyl7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZihkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBpZighZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKXtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZigncHJvcCcgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ2F0dHInIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ3N0eWxlJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyb3dWYWxpZGF0b3IuYWN0dWFsKXtcclxuICAgICAgICB2YXIge3RvcCwgYm90dG9tfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZih0b3AgIT0gbnVsbCAmJiBib3R0b20gIT1udWxsKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlPT0nZmluJz9gYm90b24tdm9sdmVyLTJgOmB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0KjAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKFxyXG4gICAgICAgICAgICAoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSBcclxuICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uLXZvbHZlcicpIFxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29uZmlnQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwVUEgIT0gbnVsbCAmJiByZXNwVUEgaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0byl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbJyRCLicrIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7ICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXVxyXG4gICAgaWYocmVzcHVlc3RhICE9PSBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTKXtcclxuICAgICAgICBpZihyZXNwdWVzdGEgPT09ICcnKXtcclxuICAgICAgICAgICAgcmVzcHVlc3RhID0gbnVsbDtcclxuICAgICAgICB9ZWxzZSBpZihlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbz09J251bWVybycpe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGEgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYocmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW58bnVsbHx1bmRlZmluZWQ7XHJcbiAgICBpZih2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpe1xyXG4gICAgICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlciwgb3BjaW9uOmtleW9mIFZpc2l0YSAsIHZhbG9yOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3J9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXJ9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX06IHtmb3JQazpGb3JQaywgZm9yUGtQYWRyZTpGb3JQa30pe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgaW5kZXggPSBmb3JQa1t1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t1bmlkYWRfYW5hbGlzaXNdLnBvcCgpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGtQYWRyZSk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46KHBheWxvYWQ6VCwgZGF0b3M6dHlwZW9mIGRhdG9zQnlQYXNzKT0+UixcclxuICAgIHBheWxvYWQ6VFxyXG4pe1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUD0yMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcz17XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6YW55KXtcclxuICAgICAgICBpZihwb3NpYmxlTnVsbD09bnVsbCl7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6bnVtYmVyLCBkZW5vbWluYWRvcjpudW1iZXIsIHBrOnN0cmluZyl7XHJcbiAgICAgICAgaWYoZGVub21pbmFkb3I9PTApe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBlbiBcIitwaytcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIitudW1lcmFkb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVtZXJhZG9yL2Rlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6e1xyXG4gICAgICAgIGJsYW5jbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09MCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCl7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMS05XXwwWzEtOV18MVswMTJdKVxcLzIwXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICB2YXIgeERhdGU6IERhdGU7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJzaW9uT2s6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXRvX3ZhbGlkbyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbk9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vZmFsdGFyaWEgdmFsaWRhciBxdWUgbm8gc2VhIHVuYSBmZWNoYSBmdXR1cmEgeSBxdWUgc2VhIHVuYSBmZWNoYSBlbiBlbCByYW5nbyBkZWwgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyAmJiBjb252ZXJzaW9uT2tcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc2FuaW9fdmFsaWRvKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5mb3JtYWRvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT11bmRlZmluZWQgJiYgeCE9PW51bGwgJiYgKCEoeCBpbnN0YW5jZW9mIEFycmF5KXx8IHgubGVuZ3RoIT09MCApXHJcbiAgICAgICAgICAgICYmICghKHggaW5zdGFuY2VvZiBPYmplY3QpfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5zbmMoeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyPT0wXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlZGFkX21lc19hbm5pb192YWxpZG8oZWRhZDpudW1iZXIsbWVzQW5uaW86c3RyaW5nLCBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVk6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTpEYXRlLCBkMjpEYXRlKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIG1vbnRocztcclxuICAgICAgICAgICAgICAgIG1vbnRocyA9IChkMi5nZXRGdWxsWWVhcigpIC0gZDEuZ2V0RnVsbFllYXIoKSkgKiAxMjtcclxuICAgICAgICAgICAgICAgIG1vbnRocyAtPSBkMS5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzICs9IGQyLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIDw9IDAgPyAwIDogbW9udGhzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNSZWFsaXphY2lvbiA9IGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsyXSksIE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsxXSksTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gIG1lc0FubmlvLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciBuYWNpbWllbnRvID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc01lc0FubmlvWzFdKSwgTnVtYmVyKHBhcnRlc01lc0FubmlvWzBdKSwxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcy8xMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovICAgICAgIFxyXG4gICAgfVxyXG59O1xyXG5cclxudHlwZSBGdW5jaW9uSGFiaWxpdGFyID0gKHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+Ym9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25IYWJpbGl0YXJ9PXtcclxufVxyXG52YXIgZnVuY2lvbmVzVmFsb3Jhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25WYWxvcmFyfT17XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6c3RyaW5nKXtcclxuICAgIHZhciBleHByZXNpb24gPSBleHByZXNpb25DYXNpU1FMLnJlcGxhY2UoL1xcdTAwQTAvZywnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbihlbFRva2VuKXtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvPWVsVG9rZW4udHJpbSgpO1xyXG4gICAgICAgIGlmKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9ZWxzZSBpZigvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9ZWxzZSBpZigvXlxccyskLy50ZXN0KGVsVG9rZW4pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicrZWxUb2tlbisnKSc7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdWVycG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jaW9uQ29tcGlsYWRhPFQ+KGNvbmp1bnRvRGVGdW5jaW9uZXM6e1trZXk6c3RyaW5nXToodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5UfSl7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24obm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KczpzdHJpbmcpe1xyXG4gICAgICAgIGlmKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKXtcclxuICAgICAgICAgICAgdmFyIGN1ZXJwbyA9IG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gIG5ldyBGdW5jdGlvbigndmFsb3JlcycsICdoZWxwZXJzJywgJ3JldHVybiAnK2N1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24odmFsb3Jlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbG9yZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTVBJTEFDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcylcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgICA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHtnZXRGdW5jaW9uSGFiaWxpdGFyLCBnZXRGdW5jaW9uVmFsb3Jhcn0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06SWRVbmlkYWRBbmFsaXNpc1tdLHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsbm9SZWFzVGFyZWE6e31bXSxub21iTm9SZWE6c3RyaW5nKVxyXG46e25yY29kaWdvOnN0cmluZ3xudWxsLCBlc3ZhbG9yOmJvb2xlYW59PT57XHJcbiAgICB2YXIgbnJjb2RpZ286c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICB2YXIgZXN2YWxvcj1mYWxzZTtcclxuICAgIHZhciBydmFsb3I6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgIHZhciBydmFyaWFibGU6c3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYodW5pZGFkZXNBUmVjb3JyZXJQcm0uaW5jbHVkZXModW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzKSl7XHJcbiAgICAgICAgZm9yKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSl7IC8vZXN0cnVjdHVyYS5ub1JlYXMsIGVzdHJ1Y3R1cmEubm9SZWFzU3VwXHJcbiAgICAgICAgICAgIGlmIChub21iTm9SZWE9PSdub19yZWEnKXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGUgLCB2YWxvciwgbm9fcmVhfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYTtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZT12YXJpYWJsZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlX3N1cCAsIHZhbG9yX3N1cCwgbm9fcmVhX3N1cH0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWFfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZT12YXJpYWJsZV9zdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV09PXJ2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9cm5vcmVhOyAgLy9ub19yZWEsIG5vX3JlYV9zdXBcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yKGxldCB1YSBvZiAobGlrZUFyKHVuaWRhZEFuYWxpc2lzPy5oaWphcykuYXJyYXkoKSkpe1xyXG4gICAgICAgIGlmKHVhPy51bmlkYWRfYW5hbGlzaXMgJiYgcmVzcHVlc3Rhc1t1YS51bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSl7XHJcbiAgICAgICAgICAgICAgIGxldCByZXN1bHQ9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLHVhLHJlc3B1ZXN0YXNIaWphcyxub1JlYXNUYXJlYSxub21iTm9SZWEpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LmVzdmFsb3IgKXtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbz1yZXN1bHQubnJjb2RpZ287XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1yZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiB9XHJcblxyXG5cclxuXHJcbmV4cG9ydCB2YXIgZGVmT3BlcmF0aXZvOkRlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDonJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6e30gYXMge1tpIGluIElkVW5pZGFkQW5hbGlzaXNdOntwazpJZFZhcmlhYmxlLCBpbmNsdWlkYXM6SWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6SWRGb3JtdWxhcmlvW119fSxcclxuICAgIGRlZkZvcjp7fSBhcyB7W2YgaW4gSWRGb3JtdWxhcmlvXTp7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86dHJ1ZX19XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuZXhwb3J0IHZhciBzZXRDYWxjdWxvUmVhTm9SZWEgPSAoXHJcbiAgICBlc05vUmVhOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhOnN0cmluZ3xudWxsLCBlc05vUmVhOmJvb2xlYW59LFxyXG4gICAgZXNOb1JlYVN1cDoocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCwgZXNOb1JlYVN1cDpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYTpudW1iZXJ8bnVsbCwgZXNSZWE6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDoocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWFTdXA6bnVtYmVyfG51bGwsIGVzUmVhU3VwOmJvb2xlYW59XHJcbik9PntcclxuICAgIGRlZk9wZXJhdGl2byA9IHtcclxuICAgICAgICAuLi5kZWZPcGVyYXRpdm8sXHJcbiAgICAgICAgZXNOb1JlYSxcclxuICAgICAgICBlc05vUmVhU3VwLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhU3VwXHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbnR5cGUgUGVyc29uYT17cDE6c3RyaW5nLCBwMjpudW1iZXIsIHAzOm51bWJlciwgcDQ6bnVtYmVyfG51bGwsIHA1OjF8bnVsbCwgcDY6MXxudWxsfVxyXG5cclxuZnVuY3Rpb24gbnVtKG51bTpudW1iZXJ8c3RyaW5nfG51bGwpOm51bWJlcntcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmKGlzTmFOKG51bS0wKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtLTA7XHJcbn1cclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6e1trIGluIHN0cmluZ106Ym9vbGVhbn0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOntcclxuICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLFxyXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6XHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOklkVmFyaWFibGVcclxuXHJcbn0pe1xyXG4gICAgY29uc3QgcmVzZXRlYXJTb3J0ZW8gPSAob3B0czp7cmVzcHVlc3RhczpSZXNwdWVzdGFzfSk9PntcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ID0gb3B0cztcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1udWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1udWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9IG51bGw7XHJcbiAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+cmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09bnVsbCk7XHJcbiAgICAgICAgaWYoJ3Zhcl9sZXRyYScgaW4gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8pe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgICAgIGZvcih2YXIgcGVyIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7Y29uZmlndXJhY2lvblNvcnRlbywgdmFyaWFibGVBY3R1YWwsIHJlc3B1ZXN0YXMsIGZvclBrLCByZXNwdWVzdGFzUmFpen0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICB2YXIgZXhwcl9pbmNvbXBsZXRpdHVkX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5leHByX2luY29tcGxldGl0dWRfanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIGZpbHRyb19mdW4gPSAgZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3MuaW5jbHVkZXModmFyaWFibGVBY3R1YWwpKXtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11YVBhZHJlKT8ucGtfYWdyZWdhZGFcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKS0xXTtcclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeil7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXM6cGFkcmV9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gYXMgUmVzcHVlc3Rhc1tdXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSE9MSl7XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbnRpZGFkVG90YWwgPSBOdW1iZXIocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSk7XHJcbiAgICAgICAgICAgIGlmKGNhbnRpZGFkVG90YWw8cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCxpKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLnNvbWUoKHBhcmFtKT0+cFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsLTEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZShjYW50aWRhZFRvdGFsPnJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXJbdmFyJHAwXT1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6dmFyJHAwLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXT1sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApKzEpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsYUFsZWF0b3JpYU1pZW1icm9zID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udGFibGEubWFwKChsaXN0YSk9Pmxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0bz9yZXN0byAtIDE6OTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDEgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6UmVzcHVlc3Rhcyk9PnBbdmFyTGV0cmFdPT1sZXRyYVNlbGVjY2lvbmFkYSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1wb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109c29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09cmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV09J29rJztcclxuICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdPSdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIFVBOklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCAvLyBpbmNsdXllbiBsYSBkZSB0b2RvcyBsb3MgcGFkcmVzIHkgYW5zZXN0cm9zLFxyXG4gICAgcmVzcHVlc3Rhc1BhZHJlOlJlc3B1ZXN0YXN8bnVsbCwgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yLFxyXG4pe1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpe1xyXG4gICAgICAgIHZhciBwa051ZXZhID0gZGVmT3BlcmF0aXZvLmRlZlVBW1VBaW5jbHVpZGFdLnBrO1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbVUFpbmNsdWlkYV07XHJcbiAgICAgICAgbGlrZUFyKGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzSGlqbywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvciwgXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqbywgXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLCBcclxuICAgICAgICAgICAgICAgIHsuLi5mb3JQaywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSl7XHJcbiAgICAgICAgZm9yKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZighIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubyl7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbkZvclBrOlBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoey4uLmZvclBrLCBmb3JtdWxhcmlvfSlcclxuICAgICAgICAgICAgdmFyIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMgPSAxMDtcclxuICAgICAgICAgICAgdmFyIHZhckF1dG9JbmdyZXNhZGFzID0gW107XHJcbiAgICAgICAgICAgIGRve1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmNhRmluOidmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHtyZXN1bWVuLCBhdXRvSW5ncmVzYWRhc30gPSBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgICAgICAgICAgICAgIHZhciB2YXJOYW1lOklkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZihhdXRvSW5ncmVzYWRhcyE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhck5hbWUgaW4gYXV0b0luZ3Jlc2FkYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhbWJpbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Ym9BdXRvaW5ncmVzb3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tPjApO1xyXG4gICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5mb3JFYWNoKHZhcm5hbWU9PntcclxuICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdLmVzdGFkb3NbdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nK2Zvcm11bGFyaW8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXIgZm9ybVByaW5jaXBhbEZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgICAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9IFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJiBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZT9cclxuICAgICAgICAgICAgICAgICAgICAnb2snXHJcbiAgICAgICAgICAgICAgICA6cmVzdW1lbiA9PSAndmFjaW8nID8gXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW5cclxuICAgICAgICAgICAgaWYoZXNIZXJtYW5vKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsPT0nb2snPydvayc6bnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOm51bWJlcnxzdHJpbmcsIG9iamVjdDpvYmplY3R8YW55W10pOihudW1iZXJ8c3RyaW5nKXtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZihpc05hTihudW1iZXJPclN0cmluZykpe1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpKyhvYmplY3QgaW5zdGFuY2VvZiBBcnJheT8xOjApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6VmFsdWVQa1JhaXopOklkRm9ybXVsYXJpbz0+e1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZhbHVlUGtSYWl6XS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCl7XHJcbiAgICBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHVhRGVmPT4hdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWY9PntcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjpGb3JtdWxhcmlvLCBlbmM6YW55KT0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsP2Zvcm11bGFyaW9QcmluY2lwYWw9PWYuaWRfY2FzaWxsZXJvOmYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1t1YURlZi51bmlkYWRfYW5hbGlzaXNdXHJcbiAgICAgICAgYmVpbmdBcnJheShjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3RhcywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrfSBhcyBGb3JQa1JhaXpcclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKXtcclxuICAgIHZhciBmb3JQazpGb3JQayA9ey4uLmZvclBrUmFpen07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yKXtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzIDoge1t4IGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLElkRmluPn09e31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOmFueSwgcGxhaW5QazpQbGFpbkZvclBrKT0+SlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICE9IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LCBcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOklkRm9ybXVsYXJpb1tdPVtdKT0+e1xyXG4gICAgaWYoaWRGb3JtdWxhcmlvKXtcclxuICAgICAgICBmb3IgKGxldCBjYXNpbGxlcm8gb2YgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcyl7XHJcbiAgICAgICAgICAgIGlmKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKXtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6Jyk/Y2FzaWxsZXJvLnNhbHRvOidGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1IaWpvKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8sIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeiA9ICh2YWx1ZVBrUmFpejpWYWx1ZVBrUmFpeik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZhbHVlUGtSYWl6ID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSh2YWx1ZVBrUmFpeik7XHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IFttYWluRm9ybUZvclZhbHVlUGtSYWl6XTtcclxuICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MobWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiwgZm9ybXNGZWVkYmFjayk7XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckFjdHVhbEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBudW1BY3R1YWw6bnVtYmVyfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJlxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgPyBcclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpb3xudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBcclxuICAgIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCBcclxuICAgIHI6UmVzcHVlc3Rhc1xyXG4pPT57XHJcbiAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKXtcclxuICAgICAgICB2YXIgZXhwcl9oYWJpbGl0YXJfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uZXhwcl9oYWJpbGl0YXJfYm90b25fanMpO1xyXG4gICAgICAgIHJldHVybiAhZXhwcl9oYWJpbGl0YXJfZnVuKHJbaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc11bbnVtRWxlbWVudG9VQS0xXSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgICAgIChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvIHx8IFxyXG4gICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsKS5pbmNsdWRlcyhmb3JtdWxhcmlvKVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKSlcclxuICAgIH0gXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbnR5cGUgUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTpudW1iZXJ8bnVsbCxcclxuICAgIGNvZE5vUmVhOnN0cmluZ3xudWxsLFxyXG4gICAgY29kUmVhU3VwOm51bWJlcnxudWxsXHJcbiAgICBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OkZvclBrUmFpeiwgXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1xyXG4pOlJlc3VsdGFkb1Jlc3VtZW57XHJcbiAgICB2YXIge2NvZFJlYSwgZXNSZWF9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhLCBlc05vUmVhfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZFJlYVN1cCxlc1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWFTdXAsIGVzTm9SZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV1cclxuICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspPT57XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZih0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUpe1xyXG4gICAgICAgICAgICBwa0FncmVnYWRhID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhLF9pZFVBKT0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXM9PWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXT09Zm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gJiYgXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6dGllbmVJbmRpdmlkdWFsP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXI/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhcj9yZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOmZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOmNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzOnt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTpmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzpjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRm9yUGspLnJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6dHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6e1trZXkgaW4gUmVzdW1lbkVzdGFkb106IHtwcmlvcmlkYWQ6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ9fSA9IHtcclxuICAgICAgICAnbm8gcmVhJzp7cHJpb3JpZGFkOiAxLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6e3ByaW9yaWRhZDogMiwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOntwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICd2YWNpbyc6e3ByaW9yaWRhZDogNCwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6e3ByaW9yaWRhZDogNSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ29rJzp7cHJpb3JpZGFkOiA2LCBjYW50aWRhZDowfVxyXG4gICAgfVxyXG4gICAgdmFyIG1pbiA9IDY7XHJcbiAgICB2YXIgbWluUmVzdW1lbjogUmVzdW1lbkVzdGFkbyA9ICdvayc7XHJcbiAgICBmb3IodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpe1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmKHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDxtaW4pe1xyXG4gICAgICAgICAgICBtaW49cHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPXJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYobWluUmVzdW1lbj09J3ZhY2lvJyYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW49PSdpbmNvbXBsZXRvJyl7XHJcbiAgICAgICAgaWYoZmFsc2UgLypyZXNwdWVzdGFzW3NwMV09PTIgJiYgcmVzcHVlc3Rhc1tzcDZdPT1udWxsKi8pe1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdjaXRhIHBhY3RhZGEnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vVE9ETyBBUlJFR0xBUiBFU1RFIEhPUlJPUiwgR0VORVJBTElaQVJcclxuICAgIHZhciB0YXJlYSA9IGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nO1xyXG4gICAgaWYodGFyZWE9PSdzdXBlJyl7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCA9IGVzTm9SZWFTdXA/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gZXNOb1JlYT8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOlJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwLFxyXG4gICAgICAgIGNvZFJlYSxcclxuICAgICAgICBjb2ROb1JlYSxcclxuICAgICAgICBjb2RSZWFTdXAsXHJcbiAgICAgICAgY29kTm9SZWFTdXBcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRhZG9cclxufVxyXG4iXX0=
|