dmencu 0.8.52 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ 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.calcularResumenVivienda = exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForIdVivienda = exports.buscarFormulariosHijos = exports.calcularFeedbackEncuesta = exports.calcularFeedbackHojaDeRuta = exports.getMainFormForVivienda = exports.numberOrStringIncIfArray = exports.calcularFeedbackUnidadAnalisis = exports.verificarSorteo = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.getFuncionCompilada = exports.miniCompiladorSQlJs = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.dispatchByPass = exports.accion_borrar_formulario = exports.accion_abrir_formulario = exports.accion_agregar_formulario = exports.accion_borrar_visita = exports.accion_modificar_visita = exports.accion_agregar_visita = exports.accion_registrar_nota = exports.accion_registrar_respuesta = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.accion_id_pregunta = exports.setValorDistinto = exports.setAttrDistinto = exports.calcularElementoEnfocado = exports.volcadoInicialElementosRegistrados = exports.respuestasForPk = exports.registrarElemento = exports.getEstructura = exports.getDirty = exports.getFeedbackRowValidator = exports.getDatosByPass = exports.setDatosByPass = exports.setEstructura = exports.intentarBackup = exports.setEncolarBackup = exports.persistirDatosByPass = exports.setPersistirDatosByPass = exports.setCalcularVariablesEspecificasOperativo = exports.setCalcularVariables = void 0;
21
+ exports.calcularResumenVivienda = exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.calcularFeedbackEncuesta = exports.calcularFeedbackHojaDeRuta = exports.getMainFormForVivienda = exports.numberOrStringIncIfArray = exports.calcularFeedbackUnidadAnalisis = exports.verificarSorteo = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.getFuncionCompilada = exports.miniCompiladorSQlJs = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.dispatchByPass = exports.accion_borrar_formulario = exports.accion_abrir_formulario = exports.accion_agregar_formulario = exports.accion_borrar_visita = exports.accion_modificar_visita = exports.accion_agregar_visita = exports.accion_registrar_nota = exports.accion_registrar_respuesta = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.accion_id_pregunta = exports.setValorDistinto = exports.setAttrDistinto = exports.calcularElementoEnfocado = exports.volcadoInicialElementosRegistrados = exports.respuestasForPk = exports.registrarElemento = exports.getEstructura = exports.getDirty = exports.getFeedbackRowValidator = exports.getDatosByPass = exports.setDatosByPass = exports.setEstructura = exports.intentarBackup = exports.setEncolarBackup = exports.crearEncuesta = exports.persistirDatosByPass = exports.setPersistirDatosByPass = exports.setCalcularVariablesEspecificasOperativo = exports.setCalcularVariables = void 0;
22
22
  const like_ar_1 = require("like-ar");
23
23
  const row_validator_1 = require("row-validator");
24
24
  const best_globals_1 = require("best-globals");
@@ -50,6 +50,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
50
50
  });
51
51
  }
52
52
  exports.persistirDatosByPass = persistirDatosByPass;
53
+ const crearEncuesta = (idCarga, callBack) => {
54
+ const LAST_AUTO_VALUE_PK_RAIZ = 'proximo_valor_pk_raiz';
55
+ const NEXT_AUTO_VALUE_PK_RAIZ = my.getLocalVar(LAST_AUTO_VALUE_PK_RAIZ) || '-1';
56
+ const estructura = getEstructura();
57
+ my.setLocalVar(LAST_AUTO_VALUE_PK_RAIZ, (Number(NEXT_AUTO_VALUE_PK_RAIZ) - 1).toString());
58
+ datosByPass.respuestas[estructura.mainTD][NEXT_AUTO_VALUE_PK_RAIZ] = {};
59
+ datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ] = Object.assign(Object.assign({}, estructura.defaultInformacionHdr), { tem: Object.assign({}, estructura.defaultInformacionHdr.tem) });
60
+ datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ].tem.carga = idCarga;
61
+ calcularFeedbackHojaDeRuta();
62
+ persistirDatosByPass(datosByPass).then(() => callBack({
63
+ formulario: estructura.defaultInformacionHdr.tarea.main_form,
64
+ [estructura.mainTDPK]: Number(NEXT_AUTO_VALUE_PK_RAIZ)
65
+ })); //no quitar el casteo porque viene como texto y necesito que sea número
66
+ };
67
+ exports.crearEncuesta = crearEncuesta;
53
68
  function setEncolarBackup(encolarBackupFun) {
54
69
  encolarBackup = encolarBackupFun;
55
70
  }
@@ -345,7 +360,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
345
360
  variablesCalculadas(respuestasRaiz, forPk);
346
361
  if (estructura.configSorteo && !(datosByPass === null || datosByPass === void 0 ? void 0 : datosByPass.soloLectura)) {
347
362
  verificarSorteo({
348
- configuracionSorteo: estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPk.vivienda)],
363
+ configuracionSorteo: estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPk[estructura.mainTDPK])],
349
364
  respuestas,
350
365
  respuestasRaiz,
351
366
  variableActual: variable,
@@ -378,30 +393,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
378
393
  exports.accion_registrar_nota = accion_registrar_nota;
379
394
  function accion_agregar_visita(payload, _datosByPass) {
380
395
  let { forPkRaiz, observaciones } = payload;
381
- /*
382
- if(!datosByPass.hojaDeRuta[vivienda].visitas){
383
- datosByPass.hojaDeRuta[vivienda].visitas = [];
384
- }
385
- var visitas = datosByPass.hojaDeRuta[vivienda].visitas;
386
- visitas.push({
387
- fecha: datetime.now().toYmd(),
388
- hora: datetime.now().toHm(),
389
- idper: null, // TODO: VER DE DONDE SE SACA EL IDPER state.datos.idper,
390
- observaciones:observaciones
391
- })
392
- */
393
396
  }
394
397
  exports.accion_agregar_visita = accion_agregar_visita;
395
398
  function accion_modificar_visita(payload, _datosByPass) {
396
399
  let { forPkRaiz, index, opcion, valor } = payload;
397
- // var visitas = datosByPass.hojaDeRuta[vivienda].visitas;
398
- // visitas[index][opcion] = valor;
399
400
  }
400
401
  exports.accion_modificar_visita = accion_modificar_visita;
401
402
  function accion_borrar_visita(payload, _datosByPass) {
402
403
  let { forPkRaiz, index } = payload;
403
- // var visitas = datosByPass.hojaDeRuta[vivienda].visitas;
404
- // visitas.splice(index, 1);
405
404
  }
406
405
  exports.accion_borrar_visita = accion_borrar_visita;
407
406
  function accion_agregar_formulario({ forPk }, _datosByPass) {
@@ -746,7 +745,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
746
745
  }
747
746
  };
748
747
  var { configuracionSorteo, variableActual, respuestas, forPk, respuestasRaiz } = opts;
749
- var idEnc = forPk.vivienda;
748
+ var idEnc = forPk[estructura.mainTDPK];
750
749
  var { respuestasAumentadas, respuestasRaiz } = respuestasForPk(forPk, true);
751
750
  var expr_incompletitud_fun = (0, exports.getFuncionHabilitar)(configuracionSorteo.expr_incompletitud_js[respuestasAumentadas.vdominio].expr);
752
751
  var filtro_fun = (0, exports.getFuncionHabilitar)(configuracionSorteo.filtro_js[respuestasAumentadas.vdominio].expr);
@@ -898,7 +897,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
898
897
  // feedbackRowValidator[plainForPk].estados[varname as IdVariable] = 'actual';
899
898
  });
900
899
  var BF_varname = '$B.' + formulario;
901
- var formPrincipalForVivienda = (0, exports.getMainFormForVivienda)(forPk.vivienda);
900
+ var formPrincipalForVivienda = (0, exports.getMainFormForVivienda)(forPk[estructura.mainTDPK]);
902
901
  if (estructura.configSorteo && !estructura.configSorteo[formPrincipalForVivienda]) {
903
902
  throw new Error(`no hay configuracion de sorteo para el formulario ${formPrincipalForVivienda}`);
904
903
  }
@@ -928,9 +927,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
928
927
  return Number(numberOrString) + (object instanceof Array ? 1 : 0);
929
928
  }
930
929
  exports.numberOrStringIncIfArray = numberOrStringIncIfArray;
931
- var getMainFormForVivienda = (vivienda) => {
932
- //@ts-ignore la vivienda es el parametro correcto
933
- return datosByPass.informacionHdr[vivienda].tarea.main_form;
930
+ var getMainFormForVivienda = (valuePkRaiz) => {
931
+ return datosByPass.informacionHdr[valuePkRaiz].tarea.main_form;
934
932
  };
935
933
  exports.getMainFormForVivienda = getMainFormForVivienda;
936
934
  function calcularFeedbackHojaDeRuta() {
@@ -960,9 +958,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
960
958
  // @ts-ignore Partial
961
959
  var nuevosRows = {};
962
960
  calcularFeedbackEncuesta(nuevosRows, estructura.formularios, forPkRaiz, respuestas, opts);
963
- datosByPass.feedbackRowValidator = (0, like_ar_1.strict)(datosByPass.feedbackRowValidator).filter((_feedback, plainPk) => JSON.parse(plainPk).vivienda != forPkRaiz.vivienda).plain();
961
+ datosByPass.feedbackRowValidator = (0, like_ar_1.strict)(datosByPass.feedbackRowValidator).filter((_feedback, plainPk) => JSON.parse(plainPk)[estructura.mainTDPK] != forPkRaiz[estructura.mainTDPK]).plain();
964
962
  datosByPass.feedbackRowValidator = Object.assign(Object.assign({}, datosByPass.feedbackRowValidator), nuevosRows);
965
- datosByPass.respuestas.viviendas[forPkRaiz.vivienda] = Object.assign(Object.assign({}, datosByPass.respuestas.viviendas[forPkRaiz.vivienda]), calcularResumenVivienda(forPkRaiz, nuevosRows, respuestas));
963
+ datosByPass.respuestas[estructura.mainTD][forPkRaiz[estructura.mainTDPK]] = Object.assign(Object.assign({}, datosByPass.respuestas[estructura.mainTD][forPkRaiz[estructura.mainTDPK]]), calcularResumenVivienda(forPkRaiz, nuevosRows, respuestas));
966
964
  }
967
965
  var buscarFormulariosHijos = (idFormulario, formsFeedback = []) => {
968
966
  var _a;
@@ -980,13 +978,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
980
978
  return formsFeedback;
981
979
  };
982
980
  exports.buscarFormulariosHijos = buscarFormulariosHijos;
983
- var getFormulariosForIdVivienda = (idVivienda) => {
984
- var mainFormForVivienda = (0, exports.getMainFormForVivienda)(idVivienda);
985
- var formsFeedback = [mainFormForVivienda];
986
- (0, exports.buscarFormulariosHijos)(mainFormForVivienda, formsFeedback);
981
+ var getFormulariosForValuePkRaiz = (valuePkRaiz) => {
982
+ var mainFormForValuePkRaiz = (0, exports.getMainFormForVivienda)(valuePkRaiz);
983
+ var formsFeedback = [mainFormForValuePkRaiz];
984
+ (0, exports.buscarFormulariosHijos)(mainFormForValuePkRaiz, formsFeedback);
987
985
  return formsFeedback;
988
986
  };
989
- exports.getFormulariosForIdVivienda = getFormulariosForIdVivienda;
987
+ exports.getFormulariosForValuePkRaiz = getFormulariosForValuePkRaiz;
990
988
  var calcularActualBF = (configSorteoFormulario, numElementoUA, numActual, formulario, r) => !!(configSorteoFormulario &&
991
989
  configSorteoFormulario.id_formulario_individual &&
992
990
  configSorteoFormulario.id_formulario_individual == formulario
@@ -1016,8 +1014,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1016
1014
  var { codNoRea, esNoRea } = exports.defOperativo.esNoRea(respuestas);
1017
1015
  var { codReaSup, esReaSup } = exports.defOperativo.esRealizadaSup(respuestas);
1018
1016
  var { codNoReaSup, esNoReaSup } = exports.defOperativo.esNoReaSup(respuestas);
1019
- var formsFeedback = (0, exports.getFormulariosForIdVivienda)(forPkRaiz.vivienda);
1020
- var configuracionSorteoFormulario = estructura.configSorteo && estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPkRaiz.vivienda)];
1017
+ var formsFeedback = (0, exports.getFormulariosForValuePkRaiz)(forPkRaiz[estructura.mainTDPK]);
1018
+ var configuracionSorteoFormulario = estructura.configSorteo && estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPkRaiz[estructura.mainTDPK])];
1021
1019
  var habilitacionBotonFormulario = estructura.habilitacionBotonFormulario;
1022
1020
  var feedBackVivienda = (0, like_ar_1.strict)(feedbackRowValidator).filter((_row, plainPk) => {
1023
1021
  var _a;
@@ -1025,22 +1023,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1025
1023
  var tieneBotonDesHabilitable = habilitacionBotonFormulario && habilitacionBotonFormulario[JSON.parse(plainPk).formulario];
1026
1024
  var pkAgregada = null;
1027
1025
  if (tieneBotonDesHabilitable) {
1028
- pkAgregada = (_a = (0, like_ar_1.strict)(estructura.unidades_analisis).find((ua, idUA) => ua.unidad_analisis == habilitacionBotonFormulario[JSON.parse(plainPk).formulario].unidad_analisis)) === null || _a === void 0 ? void 0 : _a.pk_agregada;
1026
+ pkAgregada = (_a = (0, like_ar_1.strict)(estructura.unidades_analisis).find((ua, _idUA) => ua.unidad_analisis == habilitacionBotonFormulario[JSON.parse(plainPk).formulario].unidad_analisis)) === null || _a === void 0 ? void 0 : _a.pk_agregada;
1029
1027
  }
1030
- return JSON.parse(plainPk).vivienda == forPkRaiz.vivienda &&
1028
+ return JSON.parse(plainPk)[estructura.mainTDPK] == forPkRaiz[estructura.mainTDPK] &&
1031
1029
  formsFeedback.includes(JSON.parse(plainPk).formulario) &&
1032
1030
  (tieneBotonDesHabilitable ?
1033
1031
  !(0, exports.calcularDisabledBF)(configuracionSorteoFormulario, habilitacionBotonFormulario, JSON.parse(plainPk)[pkAgregada], JSON.parse(plainPk).formulario, respuestasForPk(JSON.parse(plainPk), true).respuestasAumentadas)
1034
1032
  : tieneIndividual ?
1035
1033
  !(0, exports.calcularDisabledBF)(configuracionSorteoFormulario, habilitacionBotonFormulario, JSON.parse(plainPk).persona, JSON.parse(plainPk).formulario, estructura.conReaHogar ?
1036
1034
  JSON.parse(plainPk).hogar ? respuestasForPk({
1037
- vivienda: forPkRaiz.vivienda,
1035
+ [estructura.mainTDPK]: forPkRaiz[estructura.mainTDPK],
1038
1036
  formulario: configuracionSorteoFormulario.id_formulario_padre,
1039
1037
  hogar: JSON.parse(plainPk).hogar
1040
1038
  }).respuestas : {}
1041
1039
  :
1042
1040
  respuestasForPk({
1043
- vivienda: forPkRaiz.vivienda,
1041
+ [estructura.mainTDPK]: forPkRaiz[estructura.mainTDPK],
1044
1042
  formulario: configuracionSorteoFormulario.id_formulario_padre,
1045
1043
  }).respuestas)
1046
1044
  : true);
@@ -1072,7 +1070,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1072
1070
  }
1073
1071
  }
1074
1072
  //TODO ARREGLAR ESTE HORROR, GENERALIZAR
1075
- var tarea = datosByPass.informacionHdr[forPkRaiz.vivienda].tarea.tarea;
1073
+ var tarea = datosByPass.informacionHdr[forPkRaiz[estructura.mainTDPK]].tarea.tarea;
1076
1074
  var resumenEstado;
1077
1075
  var resumenEstadoSup = 'vacio';
1078
1076
  if (tarea == 'supe') {
@@ -1095,4 +1093,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1095
1093
  }
1096
1094
  exports.calcularResumenVivienda = calcularResumenVivienda;
1097
1095
  });
1098
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBa0JpQjtJQUVqQixJQUFJLFVBQVUsR0FBRyxFQUdoQixDQUFBO0lBQ0QsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW1FO1FBQ3BHLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBdUY7UUFDNUksVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFGRCw0RkFFQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0QsR0FBRSxFQUFFO1FBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyx1QkFBbUQ7UUFDdkYsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFDMUQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNEI7O1lBQ25FLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFKRCxvREFJQztJQUVELFNBQWdCLGdCQUFnQixDQUM1QixnQkFBK0Y7UUFFL0YsYUFBYSxHQUFHLGdCQUFnQixDQUFBO0lBQ3BDLENB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R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvLFxyXG4gICAgaXRlcmF0b3IsXHJcbiAgICBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9Qa1xyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6Ym9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTpFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzooZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyk9PlByb21pc2U8YW55PiA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOnR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcyl7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpe1xyXG4gICAgYXdhaXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46KHRva2VuOnN0cmluZ3x1bmRlZmluZWQsIGZvclBrUmFpejpGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXMpPT52b2lkXHJcbil7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWQgPSAoKT0+e1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU0lOIEVTUEVDSUZJQ0FSIGVuY29sYXJCYWNrdXBcIilcclxufVxyXG5cclxuZXhwb3J0IHZhciBpbnRlbnRhckJhY2t1cCA9IChmb3JQazpGb3JQayk9PntcclxuICAgIHZhciB7cmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmKHRva2VuKXtcclxuICAgICAgICBlbmNvbGFyQmFja3VwKHRva2VuLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOkVzdHJ1Y3R1cmEpe1xyXG4gICAgZXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFBQ2FyZ2FyO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWE9PiEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZj0+KHtoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFub30pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpPT4oe1xyXG4gICAgICAgIHBrOnVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsIFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhOyBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7ZGlydHk/OmJvb2xlYW59KXtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OmZhbHNlLFxyXG4gICAgICAgIC4uLmRicHAsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86b2JqZWN0KXtcclxuICAgIGZvcih2YXIgayBpbiBvKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCl7XHJcbiAgICBpZighZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKXtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKXtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpe1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnR8SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiwgZWxlbWVudG86VCxcclxuICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+XHJcbn0gJiAoe1xyXG4gICAgcHJvcDprZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59fHtcclxuICAgIGRpcmVjdDp0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6c3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHtlbGVtZW50bz86VH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOlJlZ2lzdHJvRWxlbWVudG88VD4pe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOlJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0ge3Jlc3B1ZXN0YXM6UmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejpGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQayk6UmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhczp0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3Rhc31cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhcz86Ym9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzPzpSZXNwdWVzdGFzfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6OyBcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrOyBcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTpbdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOlVuaWRhZEFuYWxpc2lzLCBmb3JQazpGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUodW5pZGFkX2FuYWxpc2lzKXtcclxuICAgICAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGE9ey4uLmZvclBrQXBpbGFkYX07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXM9dWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlKHBpbGEubGVuZ3RoKXtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3I9cmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheT92YWxvclBrT1Bvc2ljaW9uIC0gMTp2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYocmVzcHVlc3RhcyA9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoYWdyZWdhclNpRmFsdGEpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmKGNvbkF1bWVudGFkYXMpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrT1Bvc2ljaW9ufVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejpGb3JQa1JhaXope1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcyl7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZihkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBpZighZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKXtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZigncHJvcCcgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ2F0dHInIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ3N0eWxlJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyb3dWYWxpZGF0b3IuYWN0dWFsKXtcclxuICAgICAgICB2YXIge3RvcCwgYm90dG9tfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZih0b3AgIT0gbnVsbCAmJiBib3R0b20gIT1udWxsKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlPT0nZmluJz9gYm90b24tdm9sdmVyLTJgOmB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0KjAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKFxyXG4gICAgICAgICAgICAoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSBcclxuICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uLXZvbHZlcicpIFxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29uZmlnQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwVUEgIT0gbnVsbCAmJiByZXNwVUEgaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0byl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbJyRCLicrIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7ICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdPy50aXBvPT0nbnVtZXJvJyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZihyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmlufG51bGx8dW5kZWZpbmVkO1xyXG4gICAgaWYodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKXtcclxuICAgICAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSl7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG4gICAgLypcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzKXtcclxuICAgICAgICBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzID0gW107XHJcbiAgICB9XHJcbiAgICB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICB2aXNpdGFzLnB1c2goe1xyXG4gICAgICAgIGZlY2hhOiBkYXRldGltZS5ub3coKS50b1ltZCgpLFxyXG4gICAgICAgIGhvcmE6IGRhdGV0aW1lLm5vdygpLnRvSG0oKSxcclxuICAgICAgICBpZHBlcjogbnVsbCwgLy8gVE9ETzogVkVSIERFIERPTkRFIFNFIFNBQ0EgRUwgSURQRVIgc3RhdGUuZGF0b3MuaWRwZXIsXHJcbiAgICAgICAgb2JzZXJ2YWNpb25lczpvYnNlcnZhY2lvbmVzXHJcbiAgICB9KVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXIsIG9wY2lvbjprZXlvZiBWaXNpdGEgLCB2YWxvcjpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzW2luZGV4XVtvcGNpb25dID0gdmFsb3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXh9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9OiB7Zm9yUGs6Rm9yUGssIGZvclBrUGFkcmU6Rm9yUGt9KXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdW5pZGFkX2FuYWxpc2lzXS5wb3AoKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOihwYXlsb2FkOlQsIGRhdG9zOnR5cGVvZiBkYXRvc0J5UGFzcyk9PlIsXHJcbiAgICBwYXlsb2FkOlRcclxuKXtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1A9MjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09dW5kZWZpbmVkICYmIHghPT1udWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSl8fCB4Lmxlbmd0aCE9PTAgKVxyXG4gICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KXx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMCApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMj09MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6bnVtYmVyLG1lc0FubmlvOnN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6RGF0ZSwgZDI6RGF0ZSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMvMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucmNvZGlnbzpzdHJpbmd8bnVsbCwgZXN2YWxvcjpib29sZWFufT0+e1xyXG4gICAgdmFyIG5yY29kaWdvOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOnN0cmluZztcclxuICAgIHZhciBybm9yZWE6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpe1xyXG4gICAgICAgIGZvcihsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhPT0nbm9fcmVhJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlICwgdmFsb3IsIG5vX3JlYX0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZV9zdXAgLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdPT1ydmFsb3Ipe1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPXJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcihsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKXtcclxuICAgICAgICBpZih1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSA/PyBbXSkpe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gfVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzpEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYSwgZXNOb1JlYX07XHJcbiAgICB9LFxyXG4gICBlc05vUmVhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWFTdXA6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYTpzdHJpbmd8bnVsbCwgZXNOb1JlYTpib29sZWFufSxcclxuICAgIGVzTm9SZWFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWFTdXA6c3RyaW5nfG51bGwsIGVzTm9SZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWE6bnVtYmVyfG51bGwsIGVzUmVhOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhU3VwOm51bWJlcnxudWxsLCBlc1JlYVN1cDpib29sZWFufVxyXG4pPT57XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmE9e3AxOnN0cmluZywgcDI6bnVtYmVyLCBwMzpudW1iZXIsIHA0Om51bWJlcnxudWxsLCBwNToxfG51bGwsIHA2OjF8bnVsbH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06bnVtYmVyfHN0cmluZ3xudWxsKTpudW1iZXJ7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZihpc05hTihudW0tMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bS0wO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czp7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDpJZFZhcmlhYmxlXHJcblxyXG59KXtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pPT57XHJcbiAgICAgICAgdmFyIHtyZXNwdWVzdGFzfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PnJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPW51bGwpO1xyXG4gICAgICAgIGlmKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHBlciBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICB2YXIgZXhwcl9pbmNvbXBsZXRpdHVkX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5leHByX2luY29tcGxldGl0dWRfanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIGZpbHRyb19mdW4gPSAgZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3MuaW5jbHVkZXModmFyaWFibGVBY3R1YWwpKXtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11YVBhZHJlKT8ucGtfYWdyZWdhZGFcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKS0xXTtcclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeil7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXM6cGFkcmV9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gYXMgUmVzcHVlc3Rhc1tdXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSE9MSl7XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbnRpZGFkVG90YWwgPSBOdW1iZXIocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSk7XHJcbiAgICAgICAgICAgIGlmKGNhbnRpZGFkVG90YWw8cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCxpKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLnNvbWUoKHBhcmFtKT0+cFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsLTEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZShjYW50aWRhZFRvdGFsPnJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXJbdmFyJHAwXT1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6dmFyJHAwLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXT1sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApKzEpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsYUFsZWF0b3JpYU1pZW1icm9zID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udGFibGEubWFwKChsaXN0YSk9Pmxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0bz9yZXN0byAtIDE6OTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDEgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6UmVzcHVlc3Rhcyk9PnBbdmFyTGV0cmFdPT1sZXRyYVNlbGVjY2lvbmFkYSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1wb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109c29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09cmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV09J29rJztcclxuICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdPSdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIFVBOklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCAvLyBpbmNsdXllbiBsYSBkZSB0b2RvcyBsb3MgcGFkcmVzIHkgYW5zZXN0cm9zLFxyXG4gICAgcmVzcHVlc3Rhc1BhZHJlOlJlc3B1ZXN0YXN8bnVsbCwgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yLFxyXG4pe1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpe1xyXG4gICAgICAgIHZhciBwa051ZXZhID0gZGVmT3BlcmF0aXZvLmRlZlVBW1VBaW5jbHVpZGFdLnBrO1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbVUFpbmNsdWlkYV07XHJcbiAgICAgICAgbGlrZUFyKGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzSGlqbywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvciwgXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqbywgXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLCBcclxuICAgICAgICAgICAgICAgIHsuLi5mb3JQaywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSl7XHJcbiAgICAgICAgZm9yKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZighIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubyl7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbkZvclBrOlBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoey4uLmZvclBrLCBmb3JtdWxhcmlvfSlcclxuICAgICAgICAgICAgdmFyIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMgPSAxMDtcclxuICAgICAgICAgICAgdmFyIHZhckF1dG9JbmdyZXNhZGFzID0gW107XHJcbiAgICAgICAgICAgIGRve1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmNhRmluOidmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHtyZXN1bWVuLCBhdXRvSW5ncmVzYWRhc30gPSBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgICAgICAgICAgICAgIHZhciB2YXJOYW1lOklkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZihhdXRvSW5ncmVzYWRhcyE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhck5hbWUgaW4gYXV0b0luZ3Jlc2FkYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhbWJpbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Ym9BdXRvaW5ncmVzb3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tPjApO1xyXG4gICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5mb3JFYWNoKHZhcm5hbWU9PntcclxuICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdLmVzdGFkb3NbdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nK2Zvcm11bGFyaW8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXIgZm9ybVByaW5jaXBhbEZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQay52aXZpZW5kYSEpO1xyXG4gICAgICAgICAgICBpZihlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGhheSBjb25maWd1cmFjaW9uIGRlIHNvcnRlbyBwYXJhIGVsIGZvcm11bGFyaW8gJHtmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGF9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV07XHJcbiAgICAgICAgICAgIHZhciByZXN1bWVuT3JOdWxsID0gXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsICYmIFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCA9PSBCRl92YXJuYW1lP1xyXG4gICAgICAgICAgICAgICAgICAgICdvaydcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuID09ICd2YWNpbycgPyBcclxuICAgICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICA6cmVzdW1lblxyXG4gICAgICAgICAgICBpZihlc0hlcm1hbm8pe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGw9PSdvayc/J29rJzpudWxsO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAvL3Jlc3B1ZXN0YXNQYWRyZVtCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkobnVtYmVyT3JTdHJpbmc6bnVtYmVyfHN0cmluZywgb2JqZWN0Om9iamVjdHxhbnlbXSk6KG51bWJlcnxzdHJpbmcpe1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3RveSB1c2FuZG8gaXNOYU4gcGFyYSB2ZXIgc2kgZXMgbyBubyB1biBuw7ptZXJvIHN1bWFibGVcclxuICAgIGlmKGlzTmFOKG51bWJlck9yU3RyaW5nKSl7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlck9yU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE51bWJlcihudW1iZXJPclN0cmluZykrKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5PzE6MCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSA9ICh2aXZpZW5kYTpudW1iZXIpOklkRm9ybXVsYXJpbz0+e1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIHZpdmllbmRhIGVzIGVsIHBhcmFtZXRybyBjb3JyZWN0b1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZpdmllbmRhXS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCl7XHJcbiAgICBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHVhRGVmPT4hdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWY9PntcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjpGb3JtdWxhcmlvLCBlbmM6YW55KT0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsP2Zvcm11bGFyaW9QcmluY2lwYWw9PWYuaWRfY2FzaWxsZXJvOmYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1t1YURlZi51bmlkYWRfYW5hbGlzaXNdXHJcbiAgICAgICAgYmVpbmdBcnJheShjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3RhcywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrfSBhcyBGb3JQa1JhaXpcclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKXtcclxuICAgIHZhciBmb3JQazpGb3JQayA9ey4uLmZvclBrUmFpen07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yKXtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzIDoge1t4IGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLElkRmluPn09e31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOmFueSwgcGxhaW5QazpQbGFpbkZvclBrKT0+SlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYSAhPSBmb3JQa1JhaXoudml2aWVuZGEpLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93c307XHJcbiAgICBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LCBcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOklkRm9ybXVsYXJpb1tdPVtdKT0+e1xyXG4gICAgaWYoaWRGb3JtdWxhcmlvKXtcclxuICAgICAgICBmb3IgKGxldCBjYXNpbGxlcm8gb2YgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcyl7XHJcbiAgICAgICAgICAgIGlmKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKXtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6Jyk/Y2FzaWxsZXJvLnNhbHRvOidGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1IaWpvKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8sIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhID0gKGlkVml2aWVuZGE6bnVtYmVyKT0+e1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGlkVml2aWVuZGEpO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWaXZpZW5kYV07XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVml2aWVuZGEsIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOm51bWJlcnxudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW9cclxuICAgID8gXHJcbiAgICAgICAgbnVtRWxlbWVudG9VQSA9PSBjb2FsZXNjZShcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgIClcclxuICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW98bnVsbCxcclxuICAgIG51bUVsZW1lbnRvVUE6IG51bWJlciwgXHJcbiAgICBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgXHJcbiAgICByOlJlc3B1ZXN0YXNcclxuKT0+e1xyXG4gICAgaWYoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXSl7XHJcbiAgICAgICAgdmFyIGV4cHJfaGFiaWxpdGFyX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzKTtcclxuICAgICAgICByZXR1cm4gIWV4cHJfaGFiaWxpdGFyX2Z1bihyW2hhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdW251bUVsZW1lbnRvVUEtMV0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgICAgICAoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyB8fCBcclxuICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCkuaW5jbHVkZXMoZm9ybXVsYXJpbylcclxuICAgICAgICApICYmXHJcbiAgICAgICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgICkpXHJcbiAgICB9IFxyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6bnVtYmVyfG51bGwsXHJcbiAgICBjb2ROb1JlYTpzdHJpbmd8bnVsbCxcclxuICAgIGNvZFJlYVN1cDpudW1iZXJ8bnVsbFxyXG4gICAgY29kTm9SZWFTdXA6c3RyaW5nfG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejpGb3JQa1JhaXosIFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNcclxuKTpSZXN1bHRhZG9SZXN1bWVue1xyXG4gICAgdmFyIHtjb2RSZWEsIGVzUmVhfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYSwgZXNOb1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2RSZWFTdXAsZXNSZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhU3VwLCBlc05vUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICB2YXIgdGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYSA9IG51bGw7XHJcbiAgICAgICAgaWYodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKXtcclxuICAgICAgICAgICAgcGtBZ3JlZ2FkYSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSxpZFVBKT0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXM9PWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGE9PWZvclBrUmFpei52aXZpZW5kYSAmJiBcclxuICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5pbmNsdWRlcyhKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8pICYmXHJcbiAgICAgICAgICAgICh0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGU/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKVtwa0FncmVnYWRhIGFzIENhbXBvUGtdLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKEpTT04ucGFyc2UocGxhaW5QayksdHJ1ZSkucmVzcHVlc3Rhc0F1bWVudGFkYXNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDp0aWVuZUluZGl2aWR1YWw/XHJcbiAgICAgICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5jb25SZWFIb2dhcj8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyP3Jlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGE6Zm9yUGtSYWl6LnZpdmllbmRhLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOmNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5yZXNwdWVzdGFzOnt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXZpZW5kYTpmb3JQa1JhaXoudml2aWVuZGEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5yZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOnRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOntba2V5IGluIFJlc3VtZW5Fc3RhZG9dOiB7cHJpb3JpZGFkOm51bWJlciwgY2FudGlkYWQ6bnVtYmVyfX0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6e3ByaW9yaWRhZDogMSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NvbiBwcm9ibGVtYXMnOntwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzp7cHJpb3JpZGFkOiAzLCBjYW50aWRhZDowfSxcclxuICAgICAgICAndmFjaW8nOntwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjaXRhIHBhY3RhZGEnOntwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdvayc6e3ByaW9yaWRhZDogNiwgY2FudGlkYWQ6MH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yKHZhciBmZWVkYmFjayBvZiBmZWVkQmFja1ZpdmllbmRhKXtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZihwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ8bWluKXtcclxuICAgICAgICAgICAgbWluPXByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj1yZXN1bWVuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKG1pblJlc3VtZW49PSd2YWNpbycmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuPT0naW5jb21wbGV0bycpe1xyXG4gICAgICAgIGlmKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0nY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0naW5jb21wbGV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXoudml2aWVuZGEgYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyA9ICd2YWNpbyc7XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==
1096
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBc0JpQjtJQUVqQixJQUFJLFVBQVUsR0FBRyxFQUdoQixDQUFBO0lBQ0QsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW1FO1FBQ3BHLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBdUY7UUFDNUksVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFGRCw0RkFFQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0QsR0FBRSxFQUFFO1FBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyx1QkFBbUQ7UUFDdkYsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFDMUQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNEI7O1lBQ25FLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFKRCxvREFJQztJQUVNLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxRQUFvQyxFQUFDLEVBQUU7UUFDbkYsTUFBTSx1QkFBdUIsR0FBRSx1QkFBdUIsQ0FBQTtRQUN0RCxNQUFNLHVCQUF1QixHQUFnQixFQUFFLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFBO1FBQzVGLE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUMsRUFBb0IsQ0FBQztRQUN4RixXQUFXLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLG1DQUM1QyxVQUFVLENBQUMscUJBQXFCLEtBQ25DLEdBQUcsb0JBQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFDaEQsQ0FBQztRQUNGLFdBQVcsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUN4RSwwQkFBMEIsRUFBRSxDQUFDO1FBQzdCLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDbEMsR0FBRSxFQUFFLENBQUEsUUFBUSxDQUFDO1lBQ1QsVUFBVSxFQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUztZQUMzRCxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBQyxNQUFNLENBQUMsdUJBQXVCLENBQWdCO1NBQzFELENBQUMsQ0FDbEIsQ0FBQSxDQUFBLHVFQUF1RTtJQUM1RSxDQUFDLENBQUE7SUFsQlksUUFBQSxhQUFhLGlCQWtCekI7SUFHRCxTQUFnQixnQkFBZ0IsQ0FDNUIsZ0JBQStGO1FBRS9GLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtJQUNwQyxDQUFDO0lBSkQsNENBSUM7SUFFRCxJQUFJLGFBQWEsR0FBa0YsR0FBRSxFQUFFO1FBQ25HLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUE7SUFFTSxJQUFJLGNBQWMsR0FBRyxDQUFDLEtBQVcsRUFBQyxFQUFFO1FBQ3ZDLElBQUksRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM5RCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUcsS0FBSyxFQUFDO1lBQ0wsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbkQ7YUFBSTtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQTtTQUMxRDtJQUNMLENBQUMsQ0FBQTtJQVJVLFFBQUEsY0FBYyxrQkFReEI7SUFFRCxTQUFnQixhQUFhLENBQUMsaUJBQTRCOztRQUN0RCxVQUFVLEdBQUcsaUJBQWlCLENBQUM7UUFDL0Isb0JBQVksQ0FBQyxXQUFXLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsMENBQUUsZUFBZ0IsQ0FBQTtRQUMxRyxvQkFBWSxDQUFDLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdEcsb0JBQVksQ0FBQyxLQUFLLEdBQUcsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsRUFBRSxDQUFBLENBQUM7WUFDeEUsRUFBRSxFQUFDLEtBQUssQ0FBQyxXQUF5QjtZQUNsQyxTQUFTLEVBQUUsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDckMsTUFBTSxFQUFFLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQzlGLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQVZELHNDQVVDO0lBRUQsU0FBZ0IsY0FBYyxDQUFDLElBQStDO1FBQzFFLFdBQVcsaUNBQ1AsS0FBSyxFQUFDLEtBQUssSUFDUixJQUFJLEtBQ1Asb0JBQW9CLEVBQUMsRUFBeUMsR0FDakUsQ0FBQTtRQUNELDBCQUEwQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQVBELHdDQU9DO0lBRU0sSUFBSSxjQUFjLEdBQUcsR0FBRSxFQUFFLENBQUMsV0FBVyxDQUFBO0lBQWpDLFFBQUEsY0FBYyxrQkFBbUI7SUFFNUMsU0FBUyxXQUFXLENBQUMsQ0FBUTtRQUN6QixLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQWdCLHVCQUF1QjtRQUNuQyxJQUFHLENBQUMsV0FBVyxDQUFDLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBQztZQUNsRiwwQkFBMEIsRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDNUMsQ0FBQztJQUxELDBEQUtDO0lBRUQsU0FBZ0IsUUFBUTtRQUNwQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUE7SUFDNUIsQ0FBQztJQUZELDRCQUVDO0lBRUQsU0FBZ0IsYUFBYTtRQUN6QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRkQsc0NBRUM7SUE4QkQsSUFBSSx1QkFBdUIsR0FBRyxFQUE4QyxDQUFDO0lBRTdFLFNBQWdCLGlCQUFpQixDQUFrQyxHQUF1QjtRQUN0Rix5RkFBeUY7UUFDekYsSUFBSSxpQkFBaUIsR0FBd0IsdUJBQXVCLENBQUM7UUFDckUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBSkQsOENBSUM7SUFNRCxTQUFnQixlQUFlLENBQUMsS0FBVyxFQUFFLGFBQXNCLEVBQUUsY0FBdUI7UUFDeEYsSUFBSSxvQkFBb0IsR0FBRyxFQUFnQixDQUFDO1FBQzVDLGdFQUFnRTtRQUNoRSxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBd0IsQ0FBQztRQUN0RCxJQUFJLGNBQThCLENBQUM7UUFDbkMsSUFBSSxTQUFnQixDQUFDO1FBQ3JCLElBQUksZUFBZSxHQUE4QixVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFBO1FBQ3BILElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLElBQUksR0FBMkUsRUFBRSxDQUFDO1FBQ3RGLE9BQU0sZUFBZSxFQUFDO1lBQ2xCLElBQUksS0FBSyxHQUFrQixVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsRCxZQUFZLHFCQUFLLFlBQVksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN0QyxlQUFlLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQTtTQUM5QjtRQUNELE9BQU0sSUFBSSxDQUFDLE1BQU0sRUFBQztZQUNkLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUE7WUFDcEQsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELElBQUcsZ0JBQWdCLElBQUksU0FBUyxFQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7YUFDOUU7WUFDRCxJQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ25DLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDcEM7WUFDRCxJQUFJLGtCQUFrQixHQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFlBQVksS0FBSyxDQUFBLENBQUMsQ0FBQSxnQkFBZ0IsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFBLGdCQUFnQixDQUFBO1lBQ2pHLFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBRyxVQUFVLElBQUksSUFBSSxFQUFDO2dCQUNsQixJQUFHLGNBQWMsRUFBQztvQkFDZCxVQUFVLEdBQUcsRUFBZ0IsQ0FBQTtvQkFDN0Isa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFBO29CQUMxRCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtpQkFDaEU7cUJBQUk7b0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsUUFBUSw0QkFBNEIsZUFBZSxHQUFHLENBQUMsQ0FBQztpQkFDckc7YUFDSjtZQUNELFNBQVMsS0FBVCxTQUFTLEdBQUssWUFBWSxFQUFDO1lBQzNCLHFFQUFxRTtZQUNyRSxjQUFjLEtBQWQsY0FBYyxHQUFLLFVBQVUsRUFBQztZQUM5QixJQUFHLGFBQWEsRUFBQztnQkFDYixvQkFBb0IsaURBQU8sb0JBQW9CLEdBQUssVUFBVSxLQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFDLGdCQUFnQixHQUFDLENBQUE7YUFDeEc7U0FDSjtRQUNELE9BQU87WUFDSCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLDZGQUE2RjtZQUM3RixjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLO1NBQ25ELENBQUE7SUFDTCxDQUFDO0lBakRELDBDQWlEQztJQUVELFNBQWdCLGtDQUFrQyxDQUFDLFNBQW1CO1FBQ2xFLElBQUksRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDN0QsSUFBSSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztRQUNoRCxJQUFJLFVBQVUsR0FBRyxJQUFBLG9CQUFZLEVBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEMsSUFBSSxZQUFZLEdBQUksV0FBVyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLEtBQUksSUFBSSxFQUFFLElBQUksaUJBQWlCLEVBQUM7WUFDNUIsSUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBRyxHQUFHLENBQUMsUUFBUSxFQUFDO2dCQUNaLElBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUM7b0JBQ3JDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2lCQUM1QjthQUNKO1lBQ0QsSUFBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUM7Z0JBQ2IsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQTBCLENBQUM7YUFDM0U7WUFDRCxJQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBQztnQkFDYix5RUFBeUU7Z0JBQ3pFLFNBQVM7YUFDWjtZQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BILElBQUcsTUFBTSxJQUFJLEdBQUcsRUFBQztnQkFDYixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7YUFDbEQ7WUFDRCxJQUFHLE1BQU0sSUFBSSxHQUFHLEVBQUM7Z0JBQ2IsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTthQUNqRDtZQUNELElBQUcsT0FBTyxJQUFJLEdBQUcsRUFBQztnQkFDZCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO2FBQ3pEO1NBQ0o7UUFDRCxJQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUM7WUFDbkIsSUFBSSxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUMsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsSUFBRyxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBRyxJQUFJLEVBQUM7Z0JBQzVCLGFBQWE7Z0JBQ2IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztnQkFDcEUsYUFBYTtnQkFDYixRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDO2FBQzVFO1NBQ0o7SUFDTCxDQUFDO0lBdkNELGdGQXVDQztJQUVELFNBQWdCLHdCQUF3QixDQUFDLFVBQTJCOztRQUNoRSxJQUFJLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxJQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsZ0JBQWdCLENBQUEsQ0FBQyxDQUFBLE9BQU8sVUFBVSxFQUFFLENBQUM7ZUFDeEcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQztRQUN4QyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1FBQzFELElBQUksY0FBYyxHQUFvQixJQUFJLENBQUMsQ0FBQyxxRUFBcUU7UUFDakgsSUFBSSxrQkFBa0IsR0FBeUMsSUFBSSxDQUFDO1FBQ3BFLElBQUksZ0JBQWdCLEdBQW9CLElBQUksQ0FBQyxDQUFDLHVGQUF1RjtRQUNySSxJQUFJLG9CQUFvQixHQUF5QyxJQUFJLENBQUM7UUFDdEUsT0FBTSxRQUFRLElBQUksSUFBSSxFQUFDO1lBQ25CLElBQ0ksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7bUJBQ3JDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzttQkFDdkMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO21CQUN2QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQzttQkFDaEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUM7bUJBQ3ZELFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO21CQUM5QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FDN0MsSUFBSSxRQUFRLENBQUMsWUFBWSxHQUFHLENBQUMsRUFDakM7Z0JBQ0csSUFBRyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLFlBQVksR0FBRyxZQUFZLEVBQUM7b0JBQ2hFLGNBQWMsR0FBRyxRQUFRLENBQUM7aUJBQzdCO3FCQUFJO29CQUNELElBQUcsY0FBYyxJQUFJLElBQUk7d0JBQUUsY0FBYyxHQUFHLFFBQVEsQ0FBQztvQkFDckQsSUFBRyxrQkFBa0IsSUFBSSxJQUFJLEVBQUM7d0JBQzFCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQTt3QkFDakMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFlLENBQUMsQ0FBQTt3QkFDbkQsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7cUJBQzdDO29CQUNELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ25DLElBQUcsa0JBQWtCLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksRUFBQzt3QkFDNUUsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO3dCQUM1QixvQkFBb0IsR0FBRyxJQUFJLENBQUM7cUJBQy9CO3lCQUFJO3dCQUNELFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ25CO2lCQUNKO2FBQ0o7WUFDRCxRQUFRLEdBQUcsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJLENBQUM7U0FDOUM7UUFDRCxJQUFHLGdCQUFnQixJQUFJLElBQUksRUFBQztZQUN4QixnQkFBZ0IsR0FBRyxjQUFjLENBQUM7U0FDckM7UUFDRCxJQUFJLE1BQU0sR0FNTixFQUFFLENBQUM7UUFDUCxJQUFHLGNBQWMsSUFBSSxJQUFJLEVBQUM7WUFDdEIsSUFBRyxrQkFBa0IsSUFBSSxJQUFJLEVBQUM7Z0JBQzFCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7YUFDckQ7WUFDRCxNQUFNLENBQUMscUJBQXFCLEdBQUcsd0JBQXdCLENBQUM7WUFDeEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsYUFBcEIsb0JBQW9CLGNBQXBCLG9CQUFvQixHQUFFLGtCQUFrQixDQUFDLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztZQUN6RSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsR0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDakUsSUFBRyxHQUFHLEdBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxVQUFVLEdBQUMsUUFBUSxDQUFDO2FBQzlCO2lCQUFLLElBQUcsa0JBQWtCLENBQUMsR0FBRyxHQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUM7Z0JBQzFHLE1BQU0sQ0FBQyxVQUFVLEdBQUMsT0FBTyxDQUFDO2FBQzdCO2lCQUFJO2dCQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFBO2FBQ3ZCO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBcEVELDREQW9FQztJQUVELFNBQWdCLGVBQWUsQ0FDM0IsTUFBc0YsRUFDdEYsSUFBTSxFQUNOLEtBQVk7UUFFWixJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBQztZQUM1QyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFSRCwwQ0FRQztJQUVELFNBQWdCLGdCQUFnQixDQUM1QixNQUFRLEVBQ1IsSUFBTSxFQUNOLEtBQVU7UUFFVixJQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUM7WUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFSRCw0Q0FRQztJQUVELFNBQVMsZ0NBQWdDLENBQUMsS0FBVztRQUNqRCxJQUFHLFVBQVUsQ0FBQywyQkFBMkIsSUFBSSxDQUFDLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFdBQVcsQ0FBQSxFQUFDO1lBQ25FLElBQUksRUFBQyxVQUFVLEVBQUMsR0FBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDekMsT0FBTyxDQUFDLENBQUMscUJBQXFCLEVBQUUsWUFBWSxFQUFDLEVBQUU7Z0JBQzVDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzlGLElBQUcsTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFDO29CQUN6QyxJQUFHLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUM7d0JBQzlDLFVBQVUsQ0FBQyxLQUFLLEdBQUUsWUFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDeEQ7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNUO0lBQ0wsQ0FBQztJQUFBLENBQUM7SUFHRixTQUFnQixrQkFBa0IsQ0FBQyxRQUE2QyxFQUFFLFlBQXdCO0lBQzFHLENBQUM7SUFERCxnREFDQztJQUVZLFFBQUEsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDdEUsUUFBQSxxQ0FBcUMsR0FBRyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtJQUVuRyxTQUFTLG1CQUFtQjtRQUN4QixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztRQUM5RSxJQUFHLFdBQVcsRUFBQztZQUNYLElBQUcsV0FBVyxDQUFDLFFBQVEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUM7Z0JBQzNDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQzdDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsU0FBZ0IsMEJBQTBCLENBQUMsT0FJMUMsRUFBRSxZQUF3Qjs7UUFDdkIsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUE7UUFDNUIsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzdDLElBQUksRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBQyxHQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxhQUFhLEdBQUcsUUFBUSxJQUFJLHFDQUE2QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RixJQUFHLFNBQVMsS0FBSyw2Q0FBcUMsSUFBSSxRQUFRLElBQUkscUNBQTZCLEVBQUM7WUFDaEcsSUFBRyxTQUFTLEtBQUssRUFBRSxFQUFDO2dCQUNoQixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3BCO2lCQUFLLElBQUcsQ0FBQSxNQUFBLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMENBQUUsSUFBSSxLQUFFLFFBQVEsRUFBQztnQkFDekcsSUFBRyxTQUFTLElBQUksSUFBSSxFQUFDO29CQUNqQixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNqQzthQUNKO1lBQ0QseURBQXlEO1lBQ3pELGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUE7WUFDckYsSUFBRyxjQUFjLEVBQUM7Z0JBQ2QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsYUFBVCxTQUFTLGNBQVQsU0FBUyxHQUFJLElBQUksQ0FBQyxDQUFDLDRCQUE0QjthQUN6RTtTQUNKO1FBQ0QsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUEsb0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksaUJBQWlELENBQUM7UUFDdEQsSUFBRyxRQUFRLElBQUkscUNBQTZCLElBQUksQ0FBQyxjQUFjLElBQUksNkNBQXFDLEtBQUksTUFBQSxXQUFXLENBQUMsY0FBYywwQ0FBRyxRQUFRLENBQUMsQ0FBQSxDQUFDLEVBQUM7WUFDaEosbUJBQW1CLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFdBQVcsQ0FBQSxFQUFDO2dCQUNwRCxlQUFlLENBQUM7b0JBQ1osbUJBQW1CLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFBLDhCQUFzQixFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDaEcsVUFBVTtvQkFDVixjQUFjO29CQUNkLGNBQWMsRUFBRSxRQUFRO29CQUN4QixLQUFLLEVBQUUsS0FBSztpQkFDZixDQUFDLENBQUE7YUFDTDtZQUNELFdBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxjQUFjLENBQUM7WUFDeEQsY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQztZQUNoRSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUNqRSxXQUFXLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUEsb0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO1lBQzdELGlCQUFpQixHQUFHLFFBQVEsQ0FBQztZQUM3QixHQUFFO2dCQUNFLGlCQUFpQixHQUFHLE1BQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQywwQ0FBRSxTQUFTLENBQUM7YUFDMUUsUUFBTSxhQUFhLElBQUksSUFBSSxJQUFJLGNBQWMsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLElBQUksaUJBQWlCLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLG1CQUFtQixFQUFDO1lBQzlOLElBQUcsaUJBQWlCLElBQUksSUFBSSxJQUFJLENBQUEsTUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQywwQ0FBRSxNQUFNLEtBQUksUUFBUSxFQUFDO2dCQUMvRSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7YUFDN0I7U0FDSjtRQUNELE9BQU8sRUFBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUMsQ0FBQztJQUNuRixDQUFDO0lBdkRELGdFQXVEQztJQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQThELEVBQUUsWUFBd0I7UUFDMUgsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUhELHNEQUdDO0lBRUQsU0FBZ0IscUJBQXFCLENBQUMsT0FBd0QsRUFBRSxZQUF3QjtRQUNwSCxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRkQsc0RBRUM7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxPQUFxRixFQUFFLFlBQXdCO1FBQ25KLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxPQUFPLENBQUM7SUFDckQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBZ0Isb0JBQW9CLENBQUMsT0FBNEMsRUFBRSxZQUF3QjtRQUN2RyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxHQUFHLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxFQUFDLEtBQUssRUFBZ0IsRUFBRSxZQUF3QjtRQUN0RixJQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsOEJBQThCLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMzSyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRSxDQUFDO0lBTkQsOERBTUM7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxFQUFDLEtBQUssRUFBZ0IsRUFBRSxZQUF3QjtRQUNwRixJQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsOEJBQThCLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMzSyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRSxDQUFDO0lBTkQsMERBTUM7SUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQWtDO1FBQ3pGLElBQUksRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2SCxJQUFJLGVBQWUsR0FBOEIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQTtRQUNwSCxJQUFJLEtBQUssR0FBa0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELFdBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDOUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUN0RCxtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNqRSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxrQ0FBa0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRSxDQUFDO0lBZEQsNERBY0M7SUFHRCxTQUFnQixjQUFjLENBQzFCLEdBQTRDLEVBQzVDLE9BQVM7UUFFVCxPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUxELHdDQUtDO0lBRUQsMEVBQTBFO0lBRzdELFFBQUEscUJBQXFCLEdBQUcsNEJBQTBDLENBQUM7SUFFbkUsUUFBQSxLQUFLLEdBQUMsRUFBRSxDQUFDO0lBRXRCLGNBQWM7SUFFZCxJQUFJLG1CQUFtQixHQUF1QjtRQUMxQyxLQUFLLEVBQUUsT0FBTztRQUNkLElBQUksRUFBRSxNQUFNO1FBQ1osR0FBRyxFQUFFLElBQUk7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLEdBQUcsRUFBRSxJQUFJO1FBQ1QsR0FBRyxFQUFFLElBQUk7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxHQUFHO1FBQ1YsS0FBSyxFQUFFLEdBQUc7S0FDYixDQUFDO0lBRVcsUUFBQSxpQkFBaUIsR0FBQztRQUMzQixTQUFTLENBQUMsV0FBZTtZQUNyQixJQUFHLFdBQVcsSUFBRSxJQUFJLEVBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQWdCLEVBQUUsV0FBa0IsRUFBRSxFQUFTO1lBQ25ELElBQUcsV0FBVyxJQUFFLENBQUMsRUFBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBQyxFQUFFLEdBQUMsd0JBQXdCLEdBQUMsU0FBUyxDQUFDLENBQUM7YUFDdEU7WUFDRCxPQUFPLFNBQVMsR0FBQyxXQUFXLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksRUFBQztZQUNELE1BQU0sQ0FBQyxDQUFLO2dCQUNSLE9BQU8sQ0FBQyxLQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN0QixDQUFDO1lBQ0QsR0FBRztnQkFDQyxPQUFPLG1CQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDL0IsQ0FBQztZQUNELFlBQVksQ0FBQyxDQUFRO2dCQUNqQixJQUFJLGNBQWMsR0FBQyw4REFBOEQsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pGLElBQUksS0FBVyxDQUFDO2dCQUNoQixJQUFJLFlBQXFCLENBQUM7Z0JBQzFCLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksY0FBYyxFQUFDO29CQUNmLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLElBQUk7d0JBQ0EsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN0QztvQkFBQyxPQUFNLEdBQUcsRUFBQzt3QkFDUixZQUFZLEdBQUcsS0FBSyxDQUFDO3FCQUN4QjtpQkFDSjtnQkFBQSxDQUFDO2dCQUNGLDRGQUE0RjtnQkFDNUYsT0FBTyxjQUFjLElBQUksWUFBWSxDQUFBO1lBQ3pDLENBQUM7WUFDRCxjQUFjLENBQUMsQ0FBUTtnQkFDbkIsSUFBSSxjQUFjLEdBQUMsc0NBQXNDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqRSxPQUFPLGNBQWMsQ0FBQTtZQUN6QixDQUFDO1lBQ0QsU0FBUyxDQUFDLENBQUs7Z0JBQ1gsT0FBTyxDQUFDLEtBQUcsU0FBUyxJQUFJLENBQUMsS0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxJQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFFO3VCQUN4RSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDLElBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFFLENBQUE7WUFDOUQsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFLO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ2xCLENBQUM7WUFDRCxHQUFHLENBQUMsQ0FBUTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFBO1lBQ25CLENBQUM7WUFDRCxxQkFBcUIsQ0FBQyxJQUFXLEVBQUMsUUFBZSxFQUFFLHdCQUErQjtnQkFDOUUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBTyxFQUFDLEVBQUU7b0JBQ3RDLElBQUksTUFBTSxDQUFDO29CQUNYLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3BELE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQTtnQkFDRCxJQUFJLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsdURBQXVEO2dCQUN2RCxJQUFJLEtBQUssR0FBRyxtQkFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM3RyxJQUFJLGNBQWMsR0FBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyx1REFBdUQ7Z0JBQ3ZELElBQUksVUFBVSxHQUFHLG1CQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pGLCtDQUErQztnQkFDL0MsSUFBSSxlQUFlLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxhQUFhLEdBQUcsZUFBZSxHQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2pELE9BQU8sQ0FDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZO29CQUNqRCxhQUFhLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxtQkFBbUI7aUJBQ2hELENBQUE7WUFDTCxDQUFDO1lBQ0QscUlBQXFJO1lBQ3JJLDJJQUEySTtZQUMzSSwrRkFBK0Y7WUFDL0YsR0FBRztZQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFtQ0k7U0FDUDtLQUNKLENBQUM7SUFJRixJQUFJLGtCQUFrQixHQUFpQyxFQUN0RCxDQUFBO0lBQ0QsSUFBSSxnQkFBZ0IsR0FBK0IsRUFDbEQsQ0FBQTtJQUVELFNBQWdCLG1CQUFtQixDQUFDLGdCQUF1QjtRQUN2RCxJQUFJLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFTLE9BQU87WUFDOUYsSUFBSSxlQUFlLEdBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUcsZUFBZSxJQUFJLG1CQUFtQixFQUFDO2dCQUN0QyxPQUFPLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQy9DO2lCQUFLLElBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBQztnQkFDekMsT0FBTyxPQUFPLENBQUE7YUFDakI7aUJBQUssSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQTthQUNqQjtpQkFBSyxJQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUM7Z0JBQzNCLE9BQU8sT0FBTyxDQUFBO2FBQ2pCO1lBQ0QsT0FBTyw0QkFBNEIsR0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQWhCRCxrREFnQkM7SUFFRCxTQUFnQixtQkFBbUIsQ0FBSSxtQkFBa0U7UUFDckcsT0FBTyxVQUFTLDRCQUFtQztZQUMvQyxJQUFHLENBQUMsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsRUFBQztnQkFDbEQsSUFBSSxNQUFNLEdBQUcsNEJBQTRCLENBQUM7Z0JBQzFDLElBQUc7b0JBQ0Msa0VBQWtFO29CQUNsRSxJQUFJLFdBQVcsR0FBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEUsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsR0FBRyxVQUFTLE9BQU87d0JBQ2hFLElBQUc7NEJBQ0MsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSx5QkFBaUIsQ0FBQyxDQUFDO3lCQUN4RDt3QkFBQSxPQUFNLEdBQUcsRUFBQzs0QkFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxFQUFDLDRCQUE0QixDQUFDLENBQUE7NEJBQy9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ3JCLE1BQU0sR0FBRyxDQUFDO3lCQUNiO3dCQUNELE9BQU8sTUFBTSxDQUFDO29CQUNsQixDQUFDLENBQUE7aUJBQ0o7Z0JBQUEsT0FBTSxHQUFHLEVBQUM7b0JBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBQyw0QkFBNEIsQ0FBQyxDQUFBO29CQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQixNQUFNLEdBQUcsQ0FBQztpQkFDYjthQUNKO1lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQTtJQUNMLENBQUM7SUExQkQsa0RBMEJDO0lBRVksUUFBQSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlELFFBQUEsaUJBQWlCLEdBQUssbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUd6RSxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEVBQTJCLEVBQUMsbUJBQW1CLEVBQW5CLDJCQUFtQixFQUFFLGlCQUFpQixFQUFqQix5QkFBaUIsRUFBQyxDQUFDLENBQUE7SUFDL0YsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLG9CQUF1QyxFQUFDLGNBQTZCLEVBQUUsVUFBcUIsRUFBQyxXQUFnQixFQUFDLFNBQWdCLEVBQzVILEVBQUU7O1FBQ3RDLElBQUksUUFBUSxHQUFjLElBQUksQ0FBQztRQUMvQixJQUFJLE9BQU8sR0FBQyxLQUFLLENBQUM7UUFDbEIsSUFBSSxNQUFNLEdBQWEsSUFBSSxDQUFDO1FBQzVCLElBQUksU0FBZ0IsQ0FBQztRQUNyQixJQUFJLE1BQU0sR0FBYSxJQUFJLENBQUM7UUFDN0IsNENBQTRDO1FBQzNDLElBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBQztZQUM3RCxLQUFJLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBQyxFQUFFLHlDQUF5QztnQkFDcEUsSUFBSSxTQUFTLElBQUUsUUFBUSxFQUFDO29CQUNwQixJQUFJLEVBQUMsUUFBUSxFQUFHLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZDLE1BQU0sR0FBQyxNQUFNLENBQUM7b0JBQ2QsTUFBTSxHQUFDLEtBQUssQ0FBQztvQkFDYixTQUFTLEdBQUMsUUFBUSxDQUFDO2lCQUN0QjtxQkFBSTtvQkFDRCxJQUFJLEVBQUMsWUFBWSxFQUFHLFNBQVMsRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ25ELE1BQU0sR0FBQyxVQUFVLENBQUM7b0JBQ2xCLE1BQU0sR0FBQyxTQUFTLENBQUM7b0JBQ2pCLFNBQVMsR0FBQyxZQUFZLENBQUM7aUJBQzFCO2dCQUNELElBQUcsVUFBVSxDQUFDLFNBQXVCLENBQUMsSUFBRSxNQUFNLEVBQUM7b0JBQzNDLFFBQVEsR0FBRSxNQUFNLENBQUMsQ0FBRSxvQkFBb0I7b0JBQ3ZDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsQ0FBQTtpQkFDNUI7cUJBQUk7b0JBQ0QsUUFBUSxHQUFDLElBQUksQ0FBQztvQkFDZCxPQUFPLEdBQUMsS0FBSyxDQUFDO2lCQUNqQjthQUNKO1NBQ0o7UUFDRCxLQUFJLElBQUksRUFBRSxJQUFJLENBQUMsSUFBQSxnQkFBTSxFQUFDLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDO1lBQ2xELElBQUcsQ0FBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsZUFBZSxLQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksS0FBSyxFQUFDO2dCQUN0RSxLQUFJLElBQUksZUFBZSxJQUFJLElBQUEsZ0JBQVEsRUFBQyxNQUFBLFVBQVUsQ0FBQyxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsZUFBZSxDQUFDLG1DQUFJLEVBQUUsQ0FBQyxFQUFDO29CQUN4RSxJQUFJLE1BQU0sR0FBRSxJQUFBLCtCQUF1QixFQUFDLG9CQUFvQixFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsV0FBVyxFQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNsRyxJQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUU7d0JBQ2YsUUFBUSxHQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7d0JBQ3pCLE9BQU8sR0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO3dCQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxDQUFBO3dCQUN6QixNQUFNO3FCQUNUO3lCQUFLO3dCQUNGLFFBQVEsR0FBQyxJQUFJLENBQUM7d0JBQ2QsT0FBTyxHQUFDLEtBQUssQ0FBQzt3QkFDZiw2QkFBNkI7cUJBQy9CO2lCQUNKO2FBQ0o7U0FDSjtRQUNELE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFDN0IsQ0FBQyxDQUFBO0lBakRTLFFBQUEsdUJBQXVCLDJCQWlEaEM7SUFJUyxRQUFBLFlBQVksR0FBZ0I7UUFDbkMsT0FBTyxFQUFDLENBQUMsV0FBc0IsRUFBQyxFQUFFO1lBQzlCLDBCQUEwQjtZQUMxQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxRQUFRLEdBQWMsSUFBSSxDQUFDO1lBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNGLFVBQVUsRUFBQyxDQUFDLFdBQXNCLEVBQUMsRUFBRTtZQUNoQywwQkFBMEI7WUFDMUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksV0FBVyxHQUFjLElBQUksQ0FBQztZQUNsQyxPQUFPLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxDQUFBO1FBQ25DLENBQUM7UUFDRCxXQUFXLEVBQUMsQ0FBQyxXQUFzQixFQUFDLEVBQUU7WUFDbEMsMEJBQTBCO1lBQzFCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLE1BQU0sR0FBYyxJQUFJLENBQUM7WUFDN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsQ0FBQTtRQUN6QixDQUFDO1FBQ0QsY0FBYyxFQUFDLENBQUMsV0FBc0IsRUFBQyxFQUFFO1lBQ3JDLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxTQUFTLEdBQWMsSUFBSSxDQUFDO1lBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLENBQUE7UUFDL0IsQ0FBQztRQUNELFdBQVcsRUFBQyxFQUFzQjtRQUNsQyxLQUFLLEVBQUMsRUFBb0c7UUFDMUcsTUFBTSxFQUFDLEVBQTRFO0tBQ3RGLENBQUE7SUFDRCx5R0FBeUc7SUFFbEcsSUFBSSxrQkFBa0IsR0FBRyxDQUM1QixPQUF5RSxFQUN6RSxVQUFrRixFQUNsRixXQUF5RSxFQUN6RSxjQUFrRixFQUNyRixFQUFFO1FBQ0Msb0JBQVksbUNBQ0wsb0JBQVksS0FDZixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVc7WUFDWCxjQUFjLEdBQ2pCLENBQUE7SUFDTCxDQUFDLENBQUE7SUFiVSxRQUFBLGtCQUFrQixzQkFhNUI7SUFLRCxTQUFTLEdBQUcsQ0FBQyxHQUFzQjtRQUMvQixvREFBb0Q7UUFDcEQsSUFBRyxLQUFLLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLG9EQUFvRDtRQUNwRCxPQUFPLEdBQUcsR0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksa0JBQWtCLEdBQTJCLEVBQUUsQ0FBQTtJQUVuRCxTQUFnQixlQUFlLENBQUMsSUFPL0I7O1FBQ0csTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUE0QixFQUFDLEVBQUU7O1lBQ25ELElBQUksRUFBQyxVQUFVLEVBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFDLElBQUksQ0FBQztZQUMvQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsR0FBQyxJQUFJLENBQUM7WUFDekQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNsRCxNQUFBLG1CQUFtQixDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFBLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUYsSUFBRyxXQUFXLElBQUksbUJBQW1CLENBQUMsWUFBWSxFQUFDO2dCQUMvQyxJQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksS0FBSyxFQUFDO29CQUN6RSxLQUFJLElBQUksR0FBRyxJQUFJLElBQUEsZ0JBQVEsRUFBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBQzt3QkFDaEQsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQzFEO2lCQUNKO2FBQ0o7UUFDTCxDQUFDLENBQUE7UUFFRCxJQUFJLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BGLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFDLG9CQUFvQixFQUFFLGNBQWMsRUFBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUUsSUFBSSxzQkFBc0IsR0FBRyxJQUFBLDJCQUFtQixFQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hJLElBQUksVUFBVSxHQUFJLElBQUEsMkJBQW1CLEVBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pHLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUV6RCxJQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUM7WUFDdkQsSUFBSSxPQUFPLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUMsZUFBZSxJQUFFLGNBQWMsQ0FBQywwQ0FBRSxLQUFLLENBQUM7WUFDekcsSUFBSSxlQUFlLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUMsZUFBZSxJQUFFLE9BQU8sQ0FBQywwQ0FBRSxXQUFXLENBQUE7WUFDL0csSUFBRyxVQUFVLENBQUMsV0FBVyxFQUFDO2dCQUN0QixJQUFHLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBQztvQkFDeEMsa0VBQWtFO29CQUNsRSxJQUFJLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0YsSUFBRyxjQUFjLElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFDO3dCQUNwRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLCtCQUErQjtxQkFDMUc7b0JBQ0QsY0FBYyxDQUFDLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ25DLFVBQVUsR0FBRyxLQUFLLENBQUM7aUJBQ3RCO2FBQ0o7aUJBQUk7Z0JBQ0QsSUFBRyxPQUFPLElBQUksY0FBYyxFQUFDO29CQUN6QixrRUFBa0U7b0JBQ2xFLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQztvQkFDM0IsSUFBRyxjQUFjLElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFDO3dCQUNwRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLCtCQUErQjtxQkFDMUc7b0JBQ0QsY0FBYyxDQUFDLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ25DLFVBQVUsR0FBRyxLQUFLLENBQUM7aUJBQ3RCO2FBQ0o7U0FDSjtRQUNELElBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksRUFBQztZQUNsQyxJQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxLQUFLLEVBQUM7Z0JBQzNDLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQWlCLENBQUE7Z0JBQzdELElBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFFLENBQUMsRUFBQztvQkFDN0MsSUFBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUUsQ0FBQyxFQUFDO3dCQUM3QyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7cUJBQ3pFO29CQUNELGNBQWMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUM7aUJBQ2hDO2dCQUNELElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsSUFBRyxhQUFhLEdBQUMsWUFBWSxDQUFDLE1BQU0sRUFBQztvQkFDakMsb0RBQW9EO29CQUNwRCxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUN0QyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsR0FBQyxDQUFDLENBQUMsQ0FDakYsQ0FBQztvQkFDRixVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFBO2lCQUM1QztnQkFDRCxPQUFNLGFBQWEsR0FBQyxZQUFZLENBQUMsTUFBTSxFQUFDO29CQUNwQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQWdCLENBQUMsQ0FBQTtpQkFDdEM7Z0JBRUQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdkcsSUFBSSxNQUFNLEdBQUcsS0FBbUIsQ0FBQTtnQkFDaEMsSUFBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUUsQ0FBQztvQkFDNUMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDO29CQUMxQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUUsQ0FBQyxFQUNqRDtvQkFDRyxJQUFJLE9BQU8sR0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUcsT0FBTyxDQUFDLE1BQU0sRUFBQzt3QkFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBQyxFQUFFLENBQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7d0JBQzNELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBQSw4QkFBZSxFQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqSCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQzt3QkFDNUIsSUFBRyxtQkFBbUIsQ0FBQyxNQUFNLElBQUUsTUFBTSxFQUFDOzRCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQ25DOzs7OztnREFLb0I7eUJBQ3ZCOzZCQUFJOzRCQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQzs0QkFDaEIsTUFBTSxRQUFRLEdBQWMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQzs0QkFDdkUsS0FBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUM7Z0NBQ3ZCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQSxDQUFDLElBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBVyxHQUFHLENBQUMsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDakYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFDLEtBQUssQ0FBQztnQ0FDeEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDdEQ7NEJBQ0QsSUFBSSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNsRyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDOzRCQUN2QixJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUEsS0FBSyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDOzRCQUM5QyxJQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFDO2dDQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsNERBQTREOzZCQUM3Rzs0QkFDRCxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFFOzRCQUM3QyxJQUFJLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQzs0QkFDMUYsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVksRUFBQyxFQUFFLENBQUEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM5RixVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUMsZ0JBQWdCLENBQUM7NEJBQzNELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7NEJBQ25FLE1BQUEsbUJBQW1CLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxFQUFFLENBQ3JELFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQVcsR0FBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQ2xILENBQUE7eUJBQ0o7cUJBQ0o7eUJBQUk7d0JBQ0QsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEdBQUMsQ0FBQyxDQUFDO3FCQUN6RDtpQkFDSjtnQkFDRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUUsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7Z0JBQ3JHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFDLElBQUksQ0FBQztnQkFDL0QsSUFBRyxtQkFBbUIsQ0FBQyxtQ0FBbUMsRUFBQztvQkFDdkQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1DQUFtQyxDQUFDLEdBQUMsSUFBSSxDQUFDO2lCQUM1RTthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBbElELDBDQWtJQztJQUVELFNBQVMsbUJBQW1CLENBQUMsY0FBOEIsRUFBRSxLQUFXO1FBQ3BFLElBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFDO1lBQzVCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFHLFVBQVUsQ0FBQyxxQ0FBcUMsRUFBQztZQUNoRCxVQUFVLENBQUMscUNBQXFDLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNFO0lBQ0wsQ0FBQztJQUVELFNBQWdCLDhCQUE4QixDQUMxQyxvQkFBZ0csRUFDaEcsV0FBaUUsRUFDakUsVUFBcUIsRUFDckIsRUFBbUIsRUFDbkIsS0FBVyxFQUNYLG9CQUErQixFQUFFLCtDQUErQztJQUNoRixlQUErQixFQUMvQixJQUF5QjtRQUV6QixvQ0FBb0M7UUFDcEMsS0FBSSxJQUFJLFVBQVUsSUFBSSxvQkFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUM7WUFDbkQsSUFBSSxPQUFPLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksb0JBQW9CLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUEsZ0JBQU0sRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBQyxFQUFFO2dCQUNyRSxJQUFJLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMvRSw4QkFBOEIsQ0FDMUIsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsVUFBVSxrQ0FDTixLQUFLLEtBQUUsQ0FBQyxPQUFPLENBQUMsRUFBQyxPQUFPLG1EQUN4QixvQkFBb0IsR0FBSyxjQUFjLEtBQUUsQ0FBQyxPQUFPLENBQUMsRUFBQyxPQUFPLEtBQzlELFVBQVUsRUFDVixJQUFJLENBQ1AsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFBO1NBQ0w7UUFDRCxVQUFVO1FBQ1YsS0FBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBQztZQUMvQixLQUFJLElBQUksVUFBVSxJQUFJLG9CQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQUUsSUFBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUM7b0JBQzdHLElBQUksVUFBVSxHQUFjLElBQUEsb0JBQVksa0NBQUssS0FBSyxLQUFFLFVBQVUsSUFBRSxDQUFBO29CQUNoRSxJQUFJLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7b0JBQzNCLEdBQUU7d0JBQ0UsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7d0JBQzdCLG9CQUFvQixDQUFDLFVBQVUsQ0FBQzs0QkFDNUIsWUFBWSxpQkFDUCxRQUFRLEVBQUMsS0FBSyxJQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsR0FDbEUsb0JBQW9CLEVBQ3BCLElBQUksQ0FDUCxDQUFBO3dCQUNMLElBQUksRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2pFLElBQUksT0FBa0IsQ0FBQzt3QkFDdkIsSUFBRyxjQUFjLElBQUUsSUFBSSxFQUFDOzRCQUNwQixLQUFJLE9BQU8sSUFBSSxjQUFjLEVBQUM7Z0NBQzFCLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxjQUFjLENBQUMsT0FBTyxDQUFVLENBQUM7Z0NBQ3RFLElBQUcsTUFBTSxFQUFDO29DQUNOLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFVLENBQUM7b0NBQ3ZELG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQVUsQ0FBQztvQ0FDakUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29DQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7aUNBQzNCOzZCQUNKO3lCQUNKO3FCQUNKLFFBQU8sZ0JBQWdCLElBQUksc0JBQXNCLEVBQUUsR0FBQyxDQUFDLEVBQUU7b0JBQ3hELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUEsRUFBRTt3QkFDL0IsOEVBQThFO29CQUNsRixDQUFDLENBQUMsQ0FBQTtvQkFDRixJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUMsVUFBd0IsQ0FBQTtvQkFDL0MsSUFBSSx3QkFBd0IsR0FBRyxJQUFBLDhCQUFzQixFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDbEYsSUFBRyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFDO3dCQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCx3QkFBd0IsRUFBRSxDQUFDLENBQUE7cUJBQ25HO29CQUNELElBQUksc0JBQXNCLEdBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzFHLElBQUksYUFBYSxHQUNiLHNCQUFzQjt3QkFDdEIsc0JBQXNCLENBQUMsbUNBQW1DO3dCQUMxRCxzQkFBc0IsQ0FBQyxtQ0FBbUMsSUFBSSxVQUFVLENBQUEsQ0FBQzt3QkFDckUsSUFBSTt3QkFDUixDQUFDLENBQUEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDOzRCQUNqQixJQUFJOzRCQUNSLENBQUMsQ0FBQSxPQUFPLENBQUE7b0JBQ1osSUFBRyxTQUFTLEVBQUM7d0JBQ1QsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsSUFBRSxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDO3FCQUMxRDt5QkFBSyxJQUFHLGVBQWUsSUFBSSxJQUFJLEVBQUM7d0JBQzdCLDhDQUE4QztxQkFDakQ7aUJBQ0o7U0FDSjtJQUNMLENBQUM7SUFoRkQsd0VBZ0ZDO0lBRUQsU0FBZ0Isd0JBQXdCLENBQUMsY0FBNEIsRUFBRSxNQUFtQjtRQUN0Riw0RUFBNEU7UUFDNUUsSUFBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUM7WUFDckIsT0FBTyxjQUFjLENBQUM7U0FDekI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBQyxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQU5ELDREQU1DO0lBRU0sSUFBSSxzQkFBc0IsR0FBRyxDQUFDLFdBQXVCLEVBQWMsRUFBRTtRQUN4RSxPQUFPLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQTtJQUNsRSxDQUFDLENBQUE7SUFGVSxRQUFBLHNCQUFzQiwwQkFFaEM7SUFFRCxTQUFnQiwwQkFBMEI7UUFDdEMsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUEsRUFBRSxDQUFBLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUEsRUFBRTtZQUM1RSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQVksRUFBRSxHQUFPLEVBQUMsRUFBRTtnQkFDdkMsSUFBSSxtQkFBbUIsR0FBRyxJQUFBLDhCQUFzQixFQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLG1CQUFtQixDQUFBLENBQUMsQ0FBQSxtQkFBbUIsSUFBRSxDQUFDLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsb0JBQW9CLENBQUE7WUFDekYsQ0FBQyxDQUFBO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUN4RSxJQUFBLG9CQUFVLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsRUFBRTtnQkFDckUsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0UsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsRUFBRTtvQkFDekssSUFBSSxTQUFTLEdBQUcsRUFBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUMsT0FBTyxFQUFjLENBQUE7b0JBQ3RFLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFmRCxnRUFlQztJQUVELFNBQWdCLHdCQUF3QixDQUNwQyxvQkFBZ0csRUFDaEcsV0FBaUUsRUFDakUsU0FBb0IsRUFDcEIsVUFBcUIsRUFDckIsSUFBeUI7UUFFekIsSUFBSSxLQUFLLHFCQUFZLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLDhCQUE4QixDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsb0JBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQVRELDREQVNDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFzQixFQUFFLFNBQW1CLEVBQUUsSUFBeUI7UUFDNUYsSUFBSSxhQUEyQixDQUFDO1FBQ2hDLHFCQUFxQjtRQUNyQixJQUFJLFVBQVUsR0FBNEQsRUFBRSxDQUFBO1FBQzVFLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUYsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFhLEVBQUUsT0FBa0IsRUFBQyxFQUFFLENBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVNLFdBQVcsQ0FBQyxvQkFBb0IsbUNBQU8sV0FBVyxDQUFDLG9CQUFvQixHQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3hGLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsbUNBQ2xFLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsR0FDekUsdUJBQXVCLENBQ3RCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxDQUNiLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTSxJQUFJLHNCQUFzQixHQUFHLENBQUMsWUFBcUMsRUFBRSxnQkFBNkIsRUFBRSxFQUFDLEVBQUU7O1FBQzFHLElBQUcsWUFBWSxFQUFDO1lBQ1osS0FBSyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUM7Z0JBQzdFLElBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUM7b0JBQ3ZCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxLQUFLLDBDQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQSxDQUFDLENBQUEsU0FBUyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUEsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQWlCLENBQUM7b0JBQzFHLElBQUcsUUFBUSxFQUFDO3dCQUNSLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzdCLElBQUEsOEJBQXNCLEVBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3FCQUNuRDtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDLENBQUE7SUFiVSxRQUFBLHNCQUFzQiwwQkFhaEM7SUFFTSxJQUFJLDRCQUE0QixHQUFHLENBQUMsV0FBdUIsRUFBQyxFQUFFO1FBQ2pFLElBQUksc0JBQXNCLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLGFBQWEsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDN0MsSUFBQSw4QkFBc0IsRUFBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM5RCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDLENBQUE7SUFMVSxRQUFBLDRCQUE0QixnQ0FLdEM7SUFFTSxJQUFJLGdCQUFnQixHQUFHLENBQUMsc0JBQXlELEVBQUUsYUFBcUIsRUFBRSxTQUFxQixFQUFFLFVBQXVCLEVBQUUsQ0FBWSxFQUFDLEVBQUUsQ0FDNUssQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1FBQ3pCLHNCQUFzQixDQUFDLHdCQUF3QjtRQUMvQyxzQkFBc0IsQ0FBQyx3QkFBd0IsSUFBSSxVQUFVO1FBQzdELENBQUM7WUFDRyxhQUFhLElBQUksSUFBQSx1QkFBUSxFQUNyQixDQUFDLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsRUFDMUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUN0QztRQUNMLENBQUM7WUFDRyxTQUFTLElBQUksYUFBYSxDQUM3QixDQUFBO0lBWE0sUUFBQSxnQkFBZ0Isb0JBV3RCO0lBRUUsSUFBSSxrQkFBa0IsR0FBRyxDQUM1QixzQkFBeUQsRUFDekQsMkJBQXVFLEVBQ3ZFLGFBQXFCLEVBQ3JCLFVBQXVCLEVBQ3ZCLENBQVksRUFDZixFQUFFO1FBQ0MsSUFBRywyQkFBMkIsSUFBSSwyQkFBMkIsQ0FBQyxVQUFVLENBQUMsRUFBQztZQUN0RSxJQUFJLGtCQUFrQixHQUFHLElBQUEsMkJBQW1CLEVBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUM5RyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQzFHO2FBQUk7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtnQkFDaEMsQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsSUFBSSxVQUFVO29CQUMxRCxJQUFBLDhCQUFzQixFQUFDLHNCQUFzQixDQUFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUMvRjtnQkFDRCxhQUFhLElBQUksSUFBQSx1QkFBUSxFQUNyQixDQUFDLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsRUFDMUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUN0QyxDQUFDLENBQUE7U0FDTDtJQUNMLENBQUMsQ0FBQTtJQXBCVSxRQUFBLGtCQUFrQixzQkFvQjVCO0lBRU0sSUFBSSx1QkFBdUIsR0FBRyxDQUFDLHNCQUF5RCxFQUFFLFVBQXVCLEVBQUMsRUFBRSxDQUN2SCxDQUFDLENBQUMsc0JBQXNCO1FBQ3hCLHNCQUFzQixDQUFDLHdCQUF3QixJQUFJLFVBQVUsQ0FBQyxDQUFBO0lBRnZELFFBQUEsdUJBQXVCLDJCQUVnQztJQVdsRSxTQUFnQix1QkFBdUIsQ0FDbkMsU0FBbUIsRUFDbkIsb0JBQThGLEVBQzlGLFVBQXFCO1FBRXJCLElBQUksRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsb0JBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDMUQsSUFBSSxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsR0FBRyxvQkFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMxRCxJQUFJLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxHQUFHLG9CQUFZLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2xFLElBQUksRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsb0JBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbkUsSUFBSSxhQUFhLEdBQUcsSUFBQSxvQ0FBNEIsRUFBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSw2QkFBNkIsR0FBRyxVQUFVLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBQSw4QkFBc0IsRUFBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5SSxJQUFJLDJCQUEyQixHQUFHLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQztRQUN6RSxJQUFJLGdCQUFnQixHQUFHLElBQUEsZ0JBQU0sRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsRUFBRTs7WUFDeEUsSUFBSSxlQUFlLEdBQUcsNkJBQTZCLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsd0JBQXdCLElBQUksNkJBQTZCLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtZQUN0SyxJQUFJLHdCQUF3QixHQUFHLDJCQUEyQixJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBMEIsQ0FBQyxDQUFDO1lBQzFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFHLHdCQUF3QixFQUFDO2dCQUN4QixVQUFVLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBQyxFQUFFLENBQy9ELEVBQUUsQ0FBQyxlQUFlLElBQUUsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUEwQixDQUFDLENBQUMsZUFBZSxDQUFDLDBDQUFFLFdBQVcsQ0FBQzthQUNySTtZQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzNFLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RELENBQUMsd0JBQXdCLENBQUEsQ0FBQztvQkFDdEIsQ0FBQyxJQUFBLDBCQUFrQixFQUNmLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFxQixDQUFDLEVBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FDakU7b0JBQ0QsQ0FBQyxDQUFBLGVBQWUsQ0FBQSxDQUFDO3dCQUNiLENBQUMsSUFBQSwwQkFBa0IsRUFDZiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQSxDQUFDOzRCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUEsZUFBZSxDQUFDO2dDQUN0QyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQ0FDcEQsVUFBVSxFQUFDLDZCQUE2QixDQUFDLG1CQUFvQjtnQ0FDN0QsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSzs2QkFDekIsQ0FBQyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUEsRUFBZ0I7NEJBQzNDLENBQUM7Z0NBQ0csZUFBZSxDQUFDO29DQUNaLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO29DQUNwRCxVQUFVLEVBQUMsNkJBQTZCLENBQUMsbUJBQW9CO2lDQUN2RCxDQUFDLENBQUMsVUFBVSxDQUM3Qjt3QkFDTCxDQUFDLENBQUEsSUFBSSxDQUFDLENBQUE7UUFDbEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFdBQVcsR0FBaUU7WUFDNUUsUUFBUSxFQUFDLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUFDO1lBQ25DLGVBQWUsRUFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBQztZQUMxQyxZQUFZLEVBQUMsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQUM7WUFDdkMsT0FBTyxFQUFDLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUFDO1lBQ2xDLGNBQWMsRUFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBQztZQUN6QyxJQUFJLEVBQUMsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQUM7U0FDbEMsQ0FBQTtRQUNELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksVUFBVSxHQUFrQixJQUFJLENBQUM7UUFDckMsS0FBSSxJQUFJLFFBQVEsSUFBSSxnQkFBZ0IsRUFBQztZQUNqQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUMsR0FBRyxFQUFDO2dCQUNsQyxHQUFHLEdBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsVUFBVSxHQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsSUFBRyxVQUFVLElBQUUsT0FBTyxJQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksVUFBVSxJQUFFLFlBQVksRUFBQztZQUM1RSxJQUFHLEtBQUssQ0FBQywrQ0FBK0MsRUFBQztnQkFDckQsVUFBVSxHQUFDLGNBQWMsQ0FBQzthQUM3QjtpQkFBSTtnQkFDRCxVQUFVLEdBQUMsWUFBWSxDQUFDO2FBQzNCO1NBQ0o7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDdkcsSUFBSSxhQUEyQixDQUFDO1FBQ2hDLElBQUksZ0JBQWdCLEdBQWlCLE9BQU8sQ0FBQztRQUM3QyxJQUFHLEtBQUssSUFBRSxNQUFNLEVBQUM7WUFDYixnQkFBZ0IsR0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFBO1lBQ2pELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7U0FDbkM7YUFBSTtZQUNELGFBQWEsR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFBO1NBQzlDO1FBQ0QsSUFBSSxTQUFTLEdBQW9CO1lBQzdCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDO0lBaEdELDBEQWdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIsIGJlaW5nQXJyYXkgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5cclxuaW1wb3J0IHsgZ2V0Um93VmFsaWRhdG9yLCBGb3JtU3RydWN0dXJlU3RhdGUsIE9wY2lvbmVzUm93VmFsaWRhdG9yLCBGZWVkYmFjayB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQgeyBkYXRlLCBjb21wYXJlRm9yT3JkZXIsIGNvYWxlc2NlIH0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEVzdHJ1Y3R1cmEsIFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsIFxyXG4gICAgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIEluZm9Gb3JtdWxhcmlvLCBcclxuICAgIFBsYWluRm9yUGssIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YXNSYWl6LCBSZXN1bWVuRXN0YWRvLFxyXG4gICAgVmFsb3IsIFZpc2l0YSwgXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6Ym9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTpFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzooZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyk9PlByb21pc2U8YW55PiA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOnR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcyl7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpe1xyXG4gICAgYXdhaXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazooZm9yUGtSYWl6OkZvclBrUmFpeik9PnZvaWQpPT4ge1xyXG4gICAgY29uc3QgTEFTVF9BVVRPX1ZBTFVFX1BLX1JBSVo9ICdwcm94aW1vX3ZhbG9yX3BrX3JhaXonXHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWjogVmFsdWVQa1JhaXogPSBteS5nZXRMb2NhbFZhcihMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWikgfHwgJy0xJ1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIG15LnNldExvY2FsVmFyKExBU1RfQVVUT19WQUxVRV9QS19SQUlaLCAoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLm1haW5URF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdPXt9IGFzIFJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdID0ge1xyXG4gICAgICAgIC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLCBcclxuICAgICAgICB0ZW06IHsuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50ZW19XHJcbiAgICB9O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCk9PmNhbGxCYWNrKHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzplc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sIFxyXG4gICAgICAgICAgICBbZXN0cnVjdHVyYS5tYWluVERQS106TnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSBhcyBWYWx1ZVBrUmFpelxyXG4gICAgICAgIH0gYXMgRm9yUGtSYWl6KVxyXG4gICAgKS8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG59XHJcbiAgICBcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOkVzdHJ1Y3R1cmEpe1xyXG4gICAgZXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFBQ2FyZ2FyO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWE9PiEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZj0+KHtoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFub30pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpPT4oe1xyXG4gICAgICAgIHBrOnVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsIFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhOyBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7ZGlydHk/OmJvb2xlYW59KXtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OmZhbHNlLFxyXG4gICAgICAgIC4uLmRicHAsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86b2JqZWN0KXtcclxuICAgIGZvcih2YXIgayBpbiBvKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCl7XHJcbiAgICBpZighZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKXtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKXtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpe1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnR8SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiwgZWxlbWVudG86VCxcclxuICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+XHJcbn0gJiAoe1xyXG4gICAgcHJvcDprZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59fHtcclxuICAgIGRpcmVjdDp0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6c3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHtlbGVtZW50bz86VH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOlJlZ2lzdHJvRWxlbWVudG88VD4pe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOlJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0ge3Jlc3B1ZXN0YXM6UmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejpGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQayk6UmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhczp0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3Rhc31cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhcz86Ym9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzPzpSZXNwdWVzdGFzfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6OyBcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrOyBcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTpbdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOlVuaWRhZEFuYWxpc2lzLCBmb3JQazpGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUodW5pZGFkX2FuYWxpc2lzKXtcclxuICAgICAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGE9ey4uLmZvclBrQXBpbGFkYX07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXM9dWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlKHBpbGEubGVuZ3RoKXtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3I9cmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheT92YWxvclBrT1Bvc2ljaW9uIC0gMTp2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYocmVzcHVlc3RhcyA9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoYWdyZWdhclNpRmFsdGEpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmKGNvbkF1bWVudGFkYXMpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrT1Bvc2ljaW9ufVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejpGb3JQa1JhaXope1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcyl7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZihkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBpZighZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKXtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZigncHJvcCcgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ2F0dHInIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ3N0eWxlJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyb3dWYWxpZGF0b3IuYWN0dWFsKXtcclxuICAgICAgICB2YXIge3RvcCwgYm90dG9tfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZih0b3AgIT0gbnVsbCAmJiBib3R0b20gIT1udWxsKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlPT0nZmluJz9gYm90b24tdm9sdmVyLTJgOmB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0KjAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKFxyXG4gICAgICAgICAgICAoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSBcclxuICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uLXZvbHZlcicpIFxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICB2YXIge3Jlc3B1ZXN0YXN9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29uZmlnQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwVUEgIT0gbnVsbCAmJiByZXNwVUEgaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0byl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbJyRCLicrIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7ICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdPy50aXBvPT0nbnVtZXJvJyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZihyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmlufG51bGx8dW5kZWZpbmVkO1xyXG4gICAgaWYodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKXtcclxuICAgICAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSl7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEubWFpblREUEtdKV0sIFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLCBcclxuICAgICAgICAgICAgICAgIGZvclBrOiBmb3JQa1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7YXV0b0luZ3Jlc286IHRydWV9KTtcclxuICAgICAgICBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICBkb3tcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tzaWd1aWVudGVWYXJpYWJsZV0/LnNpZ3VpZW50ZTtcclxuICAgICAgICB9d2hpbGUodmFsb3JBbnRlcmlvciA9PSBudWxsICYmIHJlY2VudE1vZGlmaWVkICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9IG51bGwgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gJ2ZpbicgJiYgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1tzaWd1aWVudGVWYXJpYWJsZV0uZnVuY2lvbkF1dG9JbmdyZXNhcilcclxuICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSA9PSBudWxsICYmIGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uZXN0YWRvID09ICd2YWxpZGEnKXtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWw6IGZlZWRiYWNrUm93LmFjdHVhbH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX25vdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgdGFyZWE6SWRUYXJlYSwgbm90YTpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyLCBvcGNpb246a2V5b2YgVmlzaXRhICwgdmFsb3I6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvcn0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlcn0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4fSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oe2ZvclBrLCBmb3JQa1BhZHJlfToge2ZvclBrOkZvclBrLCBmb3JQa1BhZHJlOkZvclBrfSl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBpbmRleCA9IGZvclBrW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VuaWRhZF9hbmFsaXNpc10ucG9wKCk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1BhZHJlKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7YXV0b0luZ3Jlc286IHRydWV9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjoocGF5bG9hZDpULCBkYXRvczp0eXBlb2YgZGF0b3NCeVBhc3MpPT5SLFxyXG4gICAgcGF5bG9hZDpUXHJcbil7XHJcbiAgICByZXR1cm4gZnVuKHBheWxvYWQsIGRhdG9zQnlQYXNzKTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5leHBvcnQgY29uc3QgdWx0aW1hVmFyaWJsZVZpdmllbmRhID0gJ05PX0VTVEFfREVGSU5JREFfQVVOLy9UT0RPJyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWENQPTIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOntba2V5OnN0cmluZ106c3RyaW5nfT17XHJcbiAgICBmYWxzZTogJ2ZhbHNlJyxcclxuICAgIHRydWU6ICd0cnVlJyxcclxuICAgIFwiPVwiOiAnPT0nLFxyXG4gICAgXCI8PlwiOiAnIT0nLFxyXG4gICAgXCImXCI6ICcmJicsXHJcbiAgICBcInxcIjogJ3x8JyxcclxuICAgIFwiT1JcIjogJ3x8JyxcclxuICAgIFwiQU5EXCI6ICcmJicsXHJcbiAgICBcIm9yXCI6ICd8fCcsXHJcbiAgICBcImFuZFwiOiAnJiYnLFxyXG4gICAgXCJub3RcIjogJyEnLFxyXG4gICAgXCJOT1RcIjogJyEnLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGhlbHBlcnNDYXNpbGxlcm9zPXtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDphbnkpe1xyXG4gICAgICAgIGlmKHBvc2libGVOdWxsPT1udWxsKXtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjpudW1iZXIsIGRlbm9taW5hZG9yOm51bWJlciwgcGs6c3RyaW5nKXtcclxuICAgICAgICBpZihkZW5vbWluYWRvcj09MCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiK3BrK1wiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiK251bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IvZGVub21pbmFkb3I7XHJcbiAgICB9LFxyXG4gICAgZnVuczp7XHJcbiAgICAgICAgYmxhbmNvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT0wICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKXtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9kYXkoKS50b0RteSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmZWNoYV92YWxpZGEoeDpzdHJpbmcpe1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG89L14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDpzdHJpbmcpe1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG89L14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PXVuZGVmaW5lZCAmJiB4IT09bnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpfHwgeC5sZW5ndGghPT0wIClcclxuICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCl8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4ID09IC05XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXIoeDpudW1iZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDI9PTBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOm51bWJlcixtZXNBbm5pbzpzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTpzdHJpbmcpe1xyXG4gICAgICAgICAgICB2YXIgbWVzZXNEaWZlcmVuY2lhID0gKGQxOkRhdGUsIGQyOkRhdGUpPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSxOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSAgbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50byx0b2RheSk7XHJcbiAgICAgICAgICAgIHZhciBlZGFkRGVjaW1hbGVzID0gZGlmZXJlbmNpYU1lc2VzLzEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi8gICAgICAgXHJcbiAgICB9XHJcbn07XHJcblxyXG50eXBlIEZ1bmNpb25IYWJpbGl0YXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5ib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+YW55O1xyXG52YXIgZnVuY2lvbmVzSGFiaWxpdGFyOntba2V5OnN0cmluZ106RnVuY2lvbkhhYmlsaXRhcn09e1xyXG59XHJcbnZhciBmdW5jaW9uZXNWYWxvcmFyOntba2V5OnN0cmluZ106RnVuY2lvblZhbG9yYXJ9PXtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDpzdHJpbmcpe1xyXG4gICAgdmFyIGV4cHJlc2lvbiA9IGV4cHJlc2lvbkNhc2lTUUwucmVwbGFjZSgvXFx1MDBBMC9nLCcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksJyE9JykucmVwbGFjZSgvXFxiLis/XFxiL2csIGZ1bmN0aW9uKGVsVG9rZW4pe1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG89ZWxUb2tlbi50cmltKCk7XHJcbiAgICAgICAgaWYoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gcmVlbXBsYXpvc0hhYmlsaXRhcltlbFRva2VuVHJpbWVhZG9dO1xyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9ZWxzZSBpZigvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ2hlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJytlbFRva2VuKycpJztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGN1ZXJwbztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmNpb25Db21waWxhZGE8VD4oY29uanVudG9EZUZ1bmNpb25lczp7W2tleTpzdHJpbmddOih2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PlR9KXtcclxuICAgIHJldHVybiBmdW5jdGlvbihub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzOnN0cmluZyl7XHJcbiAgICAgICAgaWYoIWNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc10pe1xyXG4gICAgICAgICAgICB2YXIgY3VlcnBvID0gbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcztcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSAgbmV3IEZ1bmN0aW9uKCd2YWxvcmVzJywgJ2hlbHBlcnMnLCAncmV0dXJuICcrY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc10gPSBmdW5jdGlvbih2YWxvcmVzKXtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcm5hbEZ1bih2YWxvcmVzLCBoZWxwZXJzQ2FzaWxsZXJvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBFSkVDVUNDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codmFsb3Jlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgQ09NUElMQUNJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciAgID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNWYWxvcmFyKTtcclxuXHJcblxyXG52YXIgcm93VmFsaWRhdG9yID0gZ2V0Um93VmFsaWRhdG9yPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4oe2dldEZ1bmNpb25IYWJpbGl0YXIsIGdldEZ1bmNpb25WYWxvcmFyfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTpJZFVuaWRhZEFuYWxpc2lzW10sdW5pZGFkQW5hbGlzaXM6VW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyxub1JlYXNUYXJlYTp7fVtdLG5vbWJOb1JlYTpzdHJpbmcpXHJcbjp7bnJjb2RpZ286c3RyaW5nfG51bGwsIGVzdmFsb3I6Ym9vbGVhbn09PntcclxuICAgIHZhciBucmNvZGlnbzpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTpzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZih1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKXtcclxuICAgICAgICBmb3IobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKXsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYT09J25vX3JlYScpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZSAsIHZhbG9yLCBub19yZWF9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGVfc3VwICwgdmFsb3Jfc3VwLCBub19yZWFfc3VwfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXT09cnZhbG9yKXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID1ybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSl7XHJcbiAgICAgICAgaWYodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10gPz8gW10pKXtcclxuICAgICAgICAgICAgICAgbGV0IHJlc3VsdD0gYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXModW5pZGFkZXNBUmVjb3JyZXJQcm0sdWEscmVzcHVlc3Rhc0hpamFzLG5vUmVhc1RhcmVhLG5vbWJOb1JlYSk7XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuZXN2YWxvciApe1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPXJlc3VsdC5ucmNvZGlnbztcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yPXJlc3VsdC5lc3ZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuIH1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86RGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgfSxcclxuICAgZXNOb1JlYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWFTdXAsZXNOb1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWEsZXNSZWF9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhU3VwOm51bWJlcnxudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhU3VwLGVzUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIFVBcHJpbmNpcGFsOicnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQTp7fSBhcyB7W2kgaW4gSWRVbmlkYWRBbmFsaXNpc106e3BrOklkVmFyaWFibGUsIGluY2x1aWRhczpJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjpJZEZvcm11bGFyaW9bXX19LFxyXG4gICAgZGVmRm9yOnt9IGFzIHtbZiBpbiBJZEZvcm11bGFyaW9dOnsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzp0cnVlfX1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn1cclxuKT0+e1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hPXtwMTpzdHJpbmcsIHAyOm51bWJlciwgcDM6bnVtYmVyLCBwNDpudW1iZXJ8bnVsbCwgcDU6MXxudWxsLCBwNjoxfG51bGx9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOm51bWJlcnxzdHJpbmd8bnVsbCk6bnVtYmVye1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYoaXNOYU4obnVtLTApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0tMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6e1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6SWRWYXJpYWJsZVxyXG5cclxufSl7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KT0+e1xyXG4gICAgICAgIHZhciB7cmVzcHVlc3Rhc30gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5yZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1udWxsKTtcclxuICAgICAgICBpZigndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKXtcclxuICAgICAgICAgICAgICAgICAgICBwZXJbY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHtjb25maWd1cmFjaW9uU29ydGVvLCB2YXJpYWJsZUFjdHVhbCwgcmVzcHVlc3RhcywgZm9yUGssIHJlc3B1ZXN0YXNSYWl6fSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLm1haW5URFBLXTtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICB2YXIgZXhwcl9pbmNvbXBsZXRpdHVkX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5leHByX2luY29tcGxldGl0dWRfanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIGZpbHRyb19mdW4gPSAgZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3MuaW5jbHVkZXModmFyaWFibGVBY3R1YWwpKXtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11YVBhZHJlKT8ucGtfYWdyZWdhZGFcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKS0xXTtcclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeil7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXM6cGFkcmV9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gYXMgUmVzcHVlc3Rhc1tdXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSE9MSl7XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbnRpZGFkVG90YWwgPSBOdW1iZXIocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSk7XHJcbiAgICAgICAgICAgIGlmKGNhbnRpZGFkVG90YWw8cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCxpKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLnNvbWUoKHBhcmFtKT0+cFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsLTEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZShjYW50aWRhZFRvdGFsPnJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXJbdmFyJHAwXT1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6dmFyJHAwLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXT1sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApKzEpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsYUFsZWF0b3JpYU1pZW1icm9zID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udGFibGEubWFwKChsaXN0YSk9Pmxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0bz9yZXN0byAtIDE6OTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDEgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6UmVzcHVlc3Rhcyk9PnBbdmFyTGV0cmFdPT1sZXRyYVNlbGVjY2lvbmFkYSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXT1wb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109c29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF09cmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV09J29rJztcclxuICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdPSdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayl7XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbiAgICBpZihlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIFVBOklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCAvLyBpbmNsdXllbiBsYSBkZSB0b2RvcyBsb3MgcGFkcmVzIHkgYW5zZXN0cm9zLFxyXG4gICAgcmVzcHVlc3Rhc1BhZHJlOlJlc3B1ZXN0YXN8bnVsbCwgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yLFxyXG4pe1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpe1xyXG4gICAgICAgIHZhciBwa051ZXZhID0gZGVmT3BlcmF0aXZvLmRlZlVBW1VBaW5jbHVpZGFdLnBrO1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbVUFpbmNsdWlkYV07XHJcbiAgICAgICAgbGlrZUFyKGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzSGlqbywgdmFsb3JQa09Qb3NpY2lvbik9PntcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvciwgXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqbywgXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLCBcclxuICAgICAgICAgICAgICAgIHsuLi5mb3JQaywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOnZhbG9yUGt9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSl7XHJcbiAgICAgICAgZm9yKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZighIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubyl7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbkZvclBrOlBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoey4uLmZvclBrLCBmb3JtdWxhcmlvfSlcclxuICAgICAgICAgICAgdmFyIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMgPSAxMDtcclxuICAgICAgICAgICAgdmFyIHZhckF1dG9JbmdyZXNhZGFzID0gW107XHJcbiAgICAgICAgICAgIGRve1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmNhRmluOidmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHtyZXN1bWVuLCBhdXRvSW5ncmVzYWRhc30gPSBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgICAgICAgICAgICAgIHZhciB2YXJOYW1lOklkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZihhdXRvSW5ncmVzYWRhcyE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhck5hbWUgaW4gYXV0b0luZ3Jlc2FkYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhbWJpbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Ym9BdXRvaW5ncmVzb3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tPjApO1xyXG4gICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5mb3JFYWNoKHZhcm5hbWU9PntcclxuICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdLmVzdGFkb3NbdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nK2Zvcm11bGFyaW8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXIgZm9ybVByaW5jaXBhbEZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLm1haW5URFBLXSk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbD09J29rJz8nb2snOm51bGw7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHJlc3B1ZXN0YXNQYWRyZSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIC8vcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZhbHVlUGtSYWl6OlZhbHVlUGtSYWl6KTpJZEZvcm11bGFyaW89PntcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2YWx1ZVBrUmFpel0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpe1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZj0+IXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmPT57XHJcbiAgICAgICAgdmFyIGVzUHJpbmNpcGFsID0gKGY6Rm9ybXVsYXJpbywgZW5jOmFueSk9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtdWxhcmlvUHJpbmNpcGFsID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShlbmMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybXVsYXJpb1ByaW5jaXBhbD9mb3JtdWxhcmlvUHJpbmNpcGFsPT1mLmlkX2Nhc2lsbGVybzpmLmZvcm11bGFyaW9fcHJpbmNpcGFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pPT57XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhRGVmLnVuaWRhZF9hbmFsaXNpcyAmJiBlc1ByaW5jaXBhbChmLmNhc2lsbGVyb3MsIHZhbG9yUGsgYXMgbnVtYmVyKSkuZm9yRWFjaCgoX2RlZkYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0ge2Zvcm11bGFyaW8sIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa30gYXMgRm9yUGtSYWl6XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbil7XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPXsuLi5mb3JQa1JhaXp9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OkZvclBrUmFpeiwgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcil7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93cyA6IHtbeCBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxJZEZpbj59PXt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazphbnksIHBsYWluUGs6UGxhaW5Gb3JQayk9PkpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5tYWluVERQS10gIT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEubWFpblREUEtdKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLm1haW5URF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEubWFpblREUEtdXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEubWFpblREXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5tYWluVERQS11dLFxyXG4gICAgICAgIC4uLmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgICAgICAgICBmb3JQa1JhaXosIFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzpJZEZvcm11bGFyaW8gfCB1bmRlZmluZWQsIGZvcm1zRmVlZGJhY2s6SWRGb3JtdWxhcmlvW109W10pPT57XHJcbiAgICBpZihpZEZvcm11bGFyaW8pe1xyXG4gICAgICAgIGZvciAobGV0IGNhc2lsbGVybyBvZiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zKXtcclxuICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKT9jYXNpbGxlcm8uc2FsdG86J0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9ybUhpam8pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbywgZm9ybXNGZWVkYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6ID0gKHZhbHVlUGtSYWl6OlZhbHVlUGtSYWl6KT0+e1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVmFsdWVQa1JhaXogPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKHZhbHVlUGtSYWl6KTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVmFsdWVQa1JhaXpdO1xyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZhbHVlUGtSYWl6LCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDpudW1iZXJ8bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICA/IFxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvfG51bGwsXHJcbiAgICBudW1FbGVtZW50b1VBOiBudW1iZXIsIFxyXG4gICAgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIFxyXG4gICAgcjpSZXNwdWVzdGFzXHJcbik9PntcclxuICAgIGlmKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pe1xyXG4gICAgICAgIHZhciBleHByX2hhYmlsaXRhcl9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyk7XHJcbiAgICAgICAgcmV0dXJuICFleHByX2hhYmlsaXRhcl9mdW4ocltoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10udW5pZGFkX2FuYWxpc2lzXVtudW1FbGVtZW50b1VBLTFdKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICAgICAgKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gfHwgXHJcbiAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwpLmluY2x1ZGVzKGZvcm11bGFyaW8pXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgIT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApKVxyXG4gICAgfSBcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvLFxyXG4gICAgY29kUmVhOm51bWJlcnxudWxsLFxyXG4gICAgY29kTm9SZWE6c3RyaW5nfG51bGwsXHJcbiAgICBjb2RSZWFTdXA6bnVtYmVyfG51bGxcclxuICAgIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsLFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzXHJcbik6UmVzdWx0YWRvUmVzdW1lbntcclxuICAgIHZhciB7Y29kUmVhLCBlc1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWEsIGVzTm9SZWF9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kUmVhU3VwLGVzUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6KGZvclBrUmFpeltlc3RydWN0dXJhLm1haW5URFBLXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLm1haW5URFBLXSldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICB2YXIgdGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYSA9IG51bGw7XHJcbiAgICAgICAgaWYodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKXtcclxuICAgICAgICAgICAgcGtBZ3JlZ2FkYSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSxfaWRVQSk9PlxyXG4gICAgICAgICAgICAgICAgdWEudW5pZGFkX2FuYWxpc2lzPT1oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpb10udW5pZGFkX2FuYWxpc2lzKT8ucGtfYWdyZWdhZGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEubWFpblREUEtdPT1mb3JQa1JhaXpbZXN0cnVjdHVyYS5tYWluVERQS10gJiYgXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6dGllbmVJbmRpdmlkdWFsP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXI/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhcj9yZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLm1haW5URFBLXTpmb3JQa1JhaXpbZXN0cnVjdHVyYS5tYWluVERQS10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9nYXI6SlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRm9yUGspLnJlc3B1ZXN0YXM6e30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLm1haW5URFBLXTpmb3JQa1JhaXpbZXN0cnVjdHVyYS5tYWluVERQS10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOnRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOntba2V5IGluIFJlc3VtZW5Fc3RhZG9dOiB7cHJpb3JpZGFkOm51bWJlciwgY2FudGlkYWQ6bnVtYmVyfX0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6e3ByaW9yaWRhZDogMSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NvbiBwcm9ibGVtYXMnOntwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzp7cHJpb3JpZGFkOiAzLCBjYW50aWRhZDowfSxcclxuICAgICAgICAndmFjaW8nOntwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjaXRhIHBhY3RhZGEnOntwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdvayc6e3ByaW9yaWRhZDogNiwgY2FudGlkYWQ6MH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yKHZhciBmZWVkYmFjayBvZiBmZWVkQmFja1ZpdmllbmRhKXtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZihwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ8bWluKXtcclxuICAgICAgICAgICAgbWluPXByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj1yZXN1bWVuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKG1pblJlc3VtZW49PSd2YWNpbycmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuPT0naW5jb21wbGV0bycpe1xyXG4gICAgICAgIGlmKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0nY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0naW5jb21wbGV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXpbZXN0cnVjdHVyYS5tYWluVERQS10gYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyA9ICd2YWNpbyc7XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==