dmencu 3.2.19 → 3.2.21

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.
Files changed (42) hide show
  1. package/dist/client/unlogged/bypass-formulario.js +2 -2
  2. package/dist/client/unlogged/calculos-encuesta.d.ts +7 -0
  3. package/dist/client/unlogged/calculos-encuesta.js +139 -0
  4. package/dist/client/unlogged/helpers-casilleros.d.ts +14 -0
  5. package/dist/client/unlogged/helpers-casilleros.js +129 -0
  6. package/dist/server/server/procedures-dmencu.js +141 -28
  7. package/dist/server/server/table-no_rea copy.d.ts +2 -0
  8. package/dist/server/server/table-no_rea copy.js +38 -0
  9. package/dist/server/server/table-no_rea_sup copy.d.ts +2 -0
  10. package/dist/server/server/table-no_rea_sup copy.js +36 -0
  11. package/dist/server/server/table-rea.d.ts +2 -0
  12. package/dist/server/server/table-rea.js +38 -0
  13. package/dist/server/server/table-rea_sup.d.ts +2 -0
  14. package/dist/server/server/table-rea_sup.js +38 -0
  15. package/dist/test/test-ejemplo.d.ts +1 -0
  16. package/dist/test/test-ejemplo.js +29 -0
  17. package/dist/test/test-rea-no-rea.d.ts +1 -0
  18. package/dist/test/test-rea-no-rea.js +589 -0
  19. package/dist/test/test.d.ts +2 -0
  20. package/dist/test/test.js +15 -0
  21. package/dist/unlogged/bypass-formulario.d.ts +198 -0
  22. package/dist/unlogged/bypass-formulario.js +1226 -0
  23. package/dist/unlogged/calculos-encuesta.d.ts +7 -0
  24. package/dist/unlogged/calculos-encuesta.js +213 -0
  25. package/dist/unlogged/helpers-casilleros.d.ts +14 -0
  26. package/dist/unlogged/helpers-casilleros.js +129 -0
  27. package/dist/unlogged/redux-formulario.d.ts +440 -0
  28. package/dist/unlogged/redux-formulario.js +324 -0
  29. package/dist/unlogged/render-config.d.ts +52 -0
  30. package/dist/unlogged/render-config.js +161 -0
  31. package/dist/unlogged/tipos.d.ts +575 -0
  32. package/dist/unlogged/tipos.js +21 -0
  33. package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +198 -0
  34. package/dist/unlogged/unlogged/bypass-formulario copy.js +1226 -0
  35. package/dist/unlogged/unlogged/bypass-formulario.js +2 -2
  36. package/dist/unlogged/unlogged/calculos-encuesta.d.ts +7 -0
  37. package/dist/unlogged/unlogged/calculos-encuesta.js +213 -0
  38. package/dist/unlogged/unlogged/helpers-casilleros.d.ts +14 -0
  39. package/dist/unlogged/unlogged/helpers-casilleros.js +130 -0
  40. package/dist/unlogged/unlogged/helpers.d.ts +14 -0
  41. package/dist/unlogged/unlogged/helpers.js +129 -0
  42. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ import { MapeoTipoItem, Respuestas, TipoCondicion, UnidadAnalisis } from "./tipos";
2
+ export type EvaluadorExpresion = (condicionJs: string, respuestas: Respuestas) => boolean;
3
+ export type ResultadoBusqueda = {
4
+ codigo: number | null;
5
+ resultado: boolean;
6
+ };
7
+ export declare function buscarReaNoReaEnRespuestas<T extends TipoCondicion>(unidadAnalisis: UnidadAnalisis, respuestas: Respuestas, lista: MapeoTipoItem[T][], tipo: T, tarea: string, evaluarExpresion?: EvaluadorExpresion): ResultadoBusqueda;
@@ -0,0 +1,213 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.buscarReaNoReaEnRespuestas = buscarReaNoReaEnRespuestas;
13
+ const estrategiasCondicion = {
14
+ 'rea': {
15
+ getCondicion: (item) => item.condicion_js,
16
+ getVariable: () => null,
17
+ getValor: () => null,
18
+ getCodigo: (item) => item.rea,
19
+ getResultado: (item) => item.es_positiva,
20
+ getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
21
+ },
22
+ 'no_rea': {
23
+ getCondicion: () => null,
24
+ getVariable: (item) => item.variable,
25
+ getValor: (item) => item.valor,
26
+ getCodigo: (item) => item.no_rea,
27
+ getResultado: () => true,
28
+ getTarea: (_item) => null,
29
+ },
30
+ 'rea_sup': {
31
+ getCondicion: (item) => item.condicion_js,
32
+ getVariable: () => null,
33
+ getValor: () => null,
34
+ getCodigo: (item) => item.rea_sup,
35
+ getResultado: (item) => item.es_positiva,
36
+ getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
37
+ },
38
+ 'no_rea_sup': {
39
+ getCondicion: () => null,
40
+ getVariable: (item) => item.variable_sup,
41
+ getValor: (item) => item.valor_sup,
42
+ getCodigo: (item) => item.no_rea_sup,
43
+ getResultado: () => true,
44
+ getTarea: (_item) => null,
45
+ }
46
+ };
47
+ // Caché en memoria para no volver a analizar la estructura teórica en cada cambio de input
48
+ const cacheDiccionarioRutas = new WeakMap();
49
+ /**
50
+ * Mapea toda la estructura de UAs produciendo un diccionario O(1):
51
+ * { "viviendas" -> Set("viviendas", "hogares", "personas", "visitas"), "hogares" -> Set("hogares", "personas") }
52
+ */
53
+ function obtenerDiccionarioRutas(uaRaiz) {
54
+ let mapa = cacheDiccionarioRutas.get(uaRaiz);
55
+ if (mapa)
56
+ return mapa;
57
+ mapa = new Map();
58
+ function mapearNodo(nodo) {
59
+ const descendientes = new Set();
60
+ if (nodo === null || nodo === void 0 ? void 0 : nodo.unidad_analisis) {
61
+ descendientes.add(nodo.unidad_analisis);
62
+ }
63
+ const hijas = nodo === null || nodo === void 0 ? void 0 : nodo.hijas;
64
+ if (hijas) {
65
+ for (const key in hijas) {
66
+ const descHija = mapearNodo(hijas[key]);
67
+ descHija.forEach((d) => descendientes.add(d));
68
+ }
69
+ }
70
+ if (nodo === null || nodo === void 0 ? void 0 : nodo.unidad_analisis) {
71
+ mapa.set(nodo.unidad_analisis, descendientes);
72
+ }
73
+ return descendientes;
74
+ }
75
+ mapearNodo(uaRaiz);
76
+ cacheDiccionarioRutas.set(uaRaiz, mapa);
77
+ return mapa;
78
+ }
79
+ function itemCumpleCondicion(item, respuestas, estrategia, evaluarExpresion) {
80
+ const condicion = estrategia.getCondicion(item);
81
+ if (condicion !== null) {
82
+ if (!evaluarExpresion) {
83
+ throw new Error('Se requiere evaluarExpresion para evaluar una condicion JS');
84
+ }
85
+ return evaluarExpresion(condicion, respuestas);
86
+ }
87
+ const variable = estrategia.getVariable(item);
88
+ const valor = estrategia.getValor(item);
89
+ return !!variable && variable in respuestas && respuestas[variable] == valor;
90
+ }
91
+ function fusionarRespuestasPlanas(contextoAcumulado, respuestas) {
92
+ const res = Object.assign({}, contextoAcumulado);
93
+ for (const key in respuestas) {
94
+ const val = respuestas[key];
95
+ if (!Array.isArray(val)) {
96
+ res[key] = val;
97
+ }
98
+ }
99
+ return res;
100
+ }
101
+ /**
102
+ * Recolecta el contexto completo de TODAS las instancias de targetUaNombre en la encuesta.
103
+ * Usa el diccionario precalculado para filtrar ramas en O(1) sin hacer recursión innecesaria.
104
+ */
105
+ function obtenerTodasLasInstanciasDeUa(unidadAnalisis, respuestas, targetUaNombre, diccionarioRutas, contextoAcumulado = {}) {
106
+ const contextoActual = fusionarRespuestasPlanas(contextoAcumulado, respuestas);
107
+ if ((unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.unidad_analisis) === targetUaNombre) {
108
+ return { completa: true, instancias: [contextoActual] };
109
+ }
110
+ const hijas = unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.hijas;
111
+ if (!hijas) {
112
+ return { completa: false, instancias: [] };
113
+ }
114
+ const instanciasResultantes = [];
115
+ for (const key in hijas) {
116
+ const uaHija = hijas[key];
117
+ const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
118
+ if (!nombreUaHija)
119
+ continue;
120
+ // CONSULTA DICCIONARIO O(1): ¿Esta rama contiene a la UA que buscamos?
121
+ const descendientesDeHija = diccionarioRutas.get(nombreUaHija);
122
+ if (!descendientesDeHija || !descendientesDeHija.has(targetUaNombre)) {
123
+ continue; // Ignora ramas como 'visitas' instantáneamente
124
+ }
125
+ const arregloHijas = respuestas[nombreUaHija];
126
+ // Integridad estructural: rama válida pero sin array o vacío
127
+ if (!Array.isArray(arregloHijas) || arregloHijas.length === 0) {
128
+ return { completa: false, instancias: [] };
129
+ }
130
+ for (let i = 0; i < arregloHijas.length; i++) {
131
+ const respuestasHija = arregloHijas[i];
132
+ const res = obtenerTodasLasInstanciasDeUa(uaHija, respuestasHija, targetUaNombre, diccionarioRutas, contextoActual);
133
+ if (!res.completa) {
134
+ return { completa: false, instancias: [] };
135
+ }
136
+ for (let j = 0; j < res.instancias.length; j++) {
137
+ instanciasResultantes.push(res.instancias[j]);
138
+ }
139
+ }
140
+ }
141
+ return {
142
+ completa: instanciasResultantes.length > 0,
143
+ instancias: instanciasResultantes,
144
+ };
145
+ }
146
+ function buscarRecursivo(uaRaiz, respuestasRaiz, unidadAnalisisActual, respuestasActuales, listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas) {
147
+ const estrategia = estrategiasCondicion[tipo];
148
+ for (let i = 0; i < listaOrdenada.length; i++) {
149
+ const item = listaOrdenada[i];
150
+ const itemTarea = estrategia.getTarea(item);
151
+ if (itemTarea && itemTarea !== tarea) {
152
+ continue;
153
+ }
154
+ if (itemCumpleCondicion(item, respuestasActuales, estrategia, evaluarExpresion)) {
155
+ const resultado = estrategia.getResultado(item);
156
+ const esReaPositiva = (tipo === 'rea' || tipo === 'rea_sup') && resultado === true;
157
+ if (esReaPositiva) {
158
+ const nombreUaActual = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.unidad_analisis;
159
+ if (nombreUaActual) {
160
+ const resInstancias = obtenerTodasLasInstanciasDeUa(uaRaiz, respuestasRaiz, nombreUaActual, diccionarioRutas);
161
+ if (!resInstancias.completa) {
162
+ continue;
163
+ }
164
+ if (resInstancias.instancias.length > 1) {
165
+ let todasCumplen = true;
166
+ for (let k = 0; k < resInstancias.instancias.length; k++) {
167
+ if (!itemCumpleCondicion(item, resInstancias.instancias[k], estrategia, evaluarExpresion)) {
168
+ todasCumplen = false;
169
+ break;
170
+ }
171
+ }
172
+ if (!todasCumplen) {
173
+ continue;
174
+ }
175
+ }
176
+ }
177
+ }
178
+ return {
179
+ codigo: estrategia.getCodigo(item),
180
+ resultado,
181
+ };
182
+ }
183
+ }
184
+ const hijas = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.hijas;
185
+ if (hijas) {
186
+ for (const key in hijas) {
187
+ const uaHija = hijas[key];
188
+ const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
189
+ if (nombreUaHija && Array.isArray(respuestasActuales[nombreUaHija])) {
190
+ const arregloHijas = respuestasActuales[nombreUaHija];
191
+ for (let i = 0; i < arregloHijas.length; i++) {
192
+ const respuestasHija = arregloHijas[i];
193
+ const res = buscarRecursivo(uaRaiz, respuestasRaiz, uaHija, Object.assign({}, respuestasActuales, respuestasHija), listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas);
194
+ if (res.codigo !== null) {
195
+ return res;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ return { codigo: null, resultado: false };
202
+ }
203
+ function buscarReaNoReaEnRespuestas(unidadAnalisis, respuestas, lista, tipo, tarea, evaluarExpresion) {
204
+ if (!estrategiasCondicion[tipo]) {
205
+ throw new Error(`Tipo de condición desconocido: ${tipo}`);
206
+ }
207
+ // Obtiene o crea el diccionario de rutas para la estructura recibida
208
+ const diccionarioRutas = obtenerDiccionarioRutas(unidadAnalisis);
209
+ const listaOrdenada = [...lista].sort((a, b) => { var _a, _b; return ((_a = a.orden) !== null && _a !== void 0 ? _a : 0) - ((_b = b.orden) !== null && _b !== void 0 ? _b : 0); });
210
+ return buscarRecursivo(unidadAnalisis, respuestas, unidadAnalisis, respuestas, listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas);
211
+ }
212
+ });
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3Vsb3MtZW5jdWVzdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5sb2dnZWQvY2FsY3Vsb3MtZW5jdWVzdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUEwUkEsZ0VBNEJDO0lBbFRELE1BQU0sb0JBQW9CLEdBU3RCO1FBQ0EsS0FBSyxFQUFFO1lBQ0gsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFZLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNwQixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQVksQ0FBQyxHQUFHO1lBQ3RDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBWSxDQUFDLFdBQVc7WUFDakQsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUMsSUFBWSxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFBLEVBQUE7U0FDbEQ7UUFDRCxRQUFRLEVBQUU7WUFDTixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN4QixXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWMsQ0FBQyxRQUFRO1lBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBYyxDQUFDLEtBQUs7WUFDekMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFjLENBQUMsTUFBTTtZQUMzQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN4QixRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUk7U0FDNUI7UUFDRCxTQUFTLEVBQUU7WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWUsQ0FB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IE5vUmVhLCBOb1JlYVN1cCwgUmVhLCBSZWFTdXAsIFJlc3B1ZXN0YXMsIFRpcG9Db25kaWNpb24sIFVuaWRhZEFuYWxpc2lzLCBWYWxvciB9IGZyb20gXCIuL3RpcG9zXCI7XG5cbmV4cG9ydCB0eXBlIEV2YWx1YWRvckV4cHJlc2lvbiA9IChjb25kaWNpb25Kczogc3RyaW5nLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBib29sZWFuO1xuXG5jb25zdCBlc3RyYXRlZ2lhc0NvbmRpY2lvbjoge1xuICAgIFtLIGluIFRpcG9Db25kaWNpb25dOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBnZXRDb2RpZ286IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBudW1iZXI7XG4gICAgICAgIGdldFJlc3VsdGFkbzogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IGJvb2xlYW47XG4gICAgICAgIGdldFRhcmVhOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICB9XG59ID0ge1xuICAgICdyZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkuY29uZGljaW9uX2pzLFxuICAgICAgICBnZXRWYXJpYWJsZTogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFsb3I6ICgpID0+IG51bGwsXG4gICAgICAgIGdldENvZGlnbzogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkucmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWEpLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFyaWFibGU6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkudmFyaWFibGUsXG4gICAgICAgIGdldFZhbG9yOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWEpLnZhbG9yLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkubm9fcmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86ICgpID0+IHRydWUsXG4gICAgICAgIGdldFRhcmVhOiAoX2l0ZW0pID0+IG51bGwsXG4gICAgfSxcbiAgICAncmVhX3N1cCc6IHtcbiAgICAgICAgZ2V0Q29uZGljaW9uOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5jb25kaWNpb25fanMsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoKSA9PiBudWxsLFxuICAgICAgICBnZXRWYWxvcjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0Q29kaWdvOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5yZWFfc3VwLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWFTdXApLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYVN1cCkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWFfc3VwJzoge1xuICAgICAgICBnZXRDb25kaWNpb246ICgpID0+IG51bGwsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWFTdXApLnZhcmlhYmxlX3N1cCxcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkudmFsb3Jfc3VwLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkubm9fcmVhX3N1cCxcbiAgICAgICAgZ2V0UmVzdWx0YWRvOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRUYXJlYTogKF9pdGVtKSA9PiBudWxsLFxuICAgIH1cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3VsdGFkb0J1c3F1ZWRhID0ge1xuICAgIGNvZGlnbzogbnVtYmVyIHwgbnVsbDtcbiAgICByZXN1bHRhZG86IGJvb2xlYW47XG59O1xuXG4vLyBDYWNow6kgZW4gbWVtb3JpYSBwYXJhIG5vIHZvbHZlciBhIGFuYWxpemFyIGxhIGVzdHJ1Y3R1cmEgdGXDs3JpY2EgZW4gY2FkYSBjYW1iaW8gZGUgaW5wdXRcbmNvbnN0IGNhY2hlRGljY2lvbmFyaW9SdXRhcyA9IG5ldyBXZWFrTWFwPFVuaWRhZEFuYWxpc2lzLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+KCk7XG5cbi8qKlxuICogTWFwZWEgdG9kYSBsYSBlc3RydWN0dXJhIGRlIFVBcyBwcm9kdWNpZW5kbyB1biBkaWNjaW9uYXJpbyBPKDEpOlxuICogeyBcInZpdmllbmRhc1wiIC0+IFNldChcInZpdmllbmRhc1wiLCBcImhvZ2FyZXNcIiwgXCJwZXJzb25hc1wiLCBcInZpc2l0YXNcIiksIFwiaG9nYXJlc1wiIC0+IFNldChcImhvZ2FyZXNcIiwgXCJwZXJzb25hc1wiKSB9XG4gKi9cbmZ1bmN0aW9uIG9idGVuZXJEaWNjaW9uYXJpb1J1dGFzKHVhUmFpejogVW5pZGFkQW5hbGlzaXMpOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4ge1xuICAgIGxldCBtYXBhID0gY2FjaGVEaWNjaW9uYXJpb1J1dGFzLmdldCh1YVJhaXopO1xuICAgIGlmIChtYXBhKSByZXR1cm4gbWFwYTtcblxuICAgIG1hcGEgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgICBmdW5jdGlvbiBtYXBlYXJOb2RvKG5vZG86IFVuaWRhZEFuYWxpc2lzKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kaWVudGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGlmIChub2RvPy51bmlkYWRfYW5hbGlzaXMpIHtcbiAgICAgICAgICAgIGRlc2NlbmRpZW50ZXMuYWRkKG5vZG8udW5pZGFkX2FuYWxpc2lzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoaWphcyA9IG5vZG8/LmhpamFzO1xuICAgICAgICBpZiAoaGlqYXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhpamFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY0hpamEgPSBtYXBlYXJOb2RvKGhpamFzW2tleSBhcyBJZFVuaWRhZEFuYWxpc2lzXSEpO1xuICAgICAgICAgICAgICAgIGRlc2NIaWphLmZvckVhY2goKGQpID0+IGRlc2NlbmRpZW50ZXMuYWRkKGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kbz8udW5pZGFkX2FuYWxpc2lzKSB7XG4gICAgICAgICAgICBtYXBhIS5zZXQobm9kby51bmlkYWRfYW5hbGlzaXMsIGRlc2NlbmRpZW50ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjZW5kaWVudGVzO1xuICAgIH1cblxuICAgIG1hcGVhck5vZG8odWFSYWl6KTtcbiAgICBjYWNoZURpY2Npb25hcmlvUnV0YXMuc2V0KHVhUmFpeiwgbWFwYSk7XG4gICAgcmV0dXJuIG1hcGE7XG59XG5cbmZ1bmN0aW9uIGl0ZW1DdW1wbGVDb25kaWNpb248VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIGl0ZW06IE1hcGVvVGlwb0l0ZW1bVF0sXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICBlc3RyYXRlZ2lhOiB0eXBlb2YgZXN0cmF0ZWdpYXNDb25kaWNpb25bVF0sXG4gICAgZXZhbHVhckV4cHJlc2lvbjogRXZhbHVhZG9yRXhwcmVzaW9uIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgICBjb25zdCBjb25kaWNpb24gPSBlc3RyYXRlZ2lhLmdldENvbmRpY2lvbihpdGVtKTtcbiAgICBpZiAoY29uZGljaW9uICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghZXZhbHVhckV4cHJlc2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZSByZXF1aWVyZSBldmFsdWFyRXhwcmVzaW9uIHBhcmEgZXZhbHVhciB1bmEgY29uZGljaW9uIEpTJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2YWx1YXJFeHByZXNpb24oY29uZGljaW9uLCByZXNwdWVzdGFzKTtcbiAgICB9XG4gICAgY29uc3QgdmFyaWFibGUgPSBlc3RyYXRlZ2lhLmdldFZhcmlhYmxlKGl0ZW0pO1xuICAgIGNvbnN0IHZhbG9yID0gZXN0cmF0ZWdpYS5nZXRWYWxvcihpdGVtKTtcbiAgICByZXR1cm4gISF2YXJpYWJsZSAmJiB2YXJpYWJsZSBpbiByZXNwdWVzdGFzICYmIHJlc3B1ZXN0YXNbdmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gdmFsb3I7XG59XG5cbmZ1bmN0aW9uIGZ1c2lvbmFyUmVzcHVlc3Rhc1BsYW5hcyhjb250ZXh0b0FjdW11bGFkbzogUmVzcHVlc3RhcywgcmVzcHVlc3RhczogUmVzcHVlc3Rhcyk6IFJlc3B1ZXN0YXMge1xuICAgIGNvbnN0IHJlczogUmVzcHVlc3RhcyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHRvQWN1bXVsYWRvKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByZXNwdWVzdGFzKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHJlc3B1ZXN0YXNba2V5IGFzIElkVmFyaWFibGVdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgcmVzW2tleSBhcyBJZFZhcmlhYmxlXSA9IHZhbCBhcyBWYWxvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG50eXBlIFJlc3VsdGFkb0luc3RhbmNpYXMgPSB7XG4gICAgY29tcGxldGE6IGJvb2xlYW47XG4gICAgaW5zdGFuY2lhczogUmVzcHVlc3Rhc1tdO1xufTtcblxuLyoqXG4gKiBSZWNvbGVjdGEgZWwgY29udGV4dG8gY29tcGxldG8gZGUgVE9EQVMgbGFzIGluc3RhbmNpYXMgZGUgdGFyZ2V0VWFOb21icmUgZW4gbGEgZW5jdWVzdGEuXG4gKiBVc2EgZWwgZGljY2lvbmFyaW8gcHJlY2FsY3VsYWRvIHBhcmEgZmlsdHJhciByYW1hcyBlbiBPKDEpIHNpbiBoYWNlciByZWN1cnNpw7NuIGlubmVjZXNhcmlhLlxuICovXG5mdW5jdGlvbiBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICB0YXJnZXRVYU5vbWJyZTogc3RyaW5nLFxuICAgIGRpY2Npb25hcmlvUnV0YXM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PixcbiAgICBjb250ZXh0b0FjdW11bGFkbyA9IHt9IGFzIFJlc3B1ZXN0YXNcbik6IFJlc3VsdGFkb0luc3RhbmNpYXMge1xuICAgIGNvbnN0IGNvbnRleHRvQWN0dWFsID0gZnVzaW9uYXJSZXNwdWVzdGFzUGxhbmFzKGNvbnRleHRvQWN1bXVsYWRvLCByZXNwdWVzdGFzKTtcblxuICAgIGlmICh1bmlkYWRBbmFsaXNpcz8udW5pZGFkX2FuYWxpc2lzID09PSB0YXJnZXRVYU5vbWJyZSkge1xuICAgICAgICByZXR1cm4geyBjb21wbGV0YTogdHJ1ZSwgaW5zdGFuY2lhczogW2NvbnRleHRvQWN0dWFsXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhpamFzID0gdW5pZGFkQW5hbGlzaXM/LmhpamFzO1xuICAgIGlmICghaGlqYXMpIHtcbiAgICAgICAgcmV0dXJuIHsgY29tcGxldGE6IGZhbHNlLCBpbnN0YW5jaWFzOiBbXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNpYXNSZXN1bHRhbnRlczogUmVzcHVlc3Rhc1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBoaWphcykge1xuICAgICAgICBjb25zdCB1YUhpamEgPSBoaWphc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc107XG4gICAgICAgIGNvbnN0IG5vbWJyZVVhSGlqYSA9IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzO1xuICAgICAgICBpZiAoIW5vbWJyZVVhSGlqYSkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ09OU1VMVEEgRElDQ0lPTkFSSU8gTygxKTogwr9Fc3RhIHJhbWEgY29udGllbmUgYSBsYSBVQSBxdWUgYnVzY2Ftb3M/XG4gICAgICAgIGNvbnN0IGRlc2NlbmRpZW50ZXNEZUhpamEgPSBkaWNjaW9uYXJpb1J1dGFzLmdldChub21icmVVYUhpamEpO1xuICAgICAgICBpZiAoIWRlc2NlbmRpZW50ZXNEZUhpamEgfHwgIWRlc2NlbmRpZW50ZXNEZUhpamEuaGFzKHRhcmdldFVhTm9tYnJlKSkge1xuICAgICAgICAgICAgY29udGludWU7IC8vIElnbm9yYSByYW1hcyBjb21vICd2aXNpdGFzJyBpbnN0YW50w6FuZWFtZW50ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyZWdsb0hpamFzID0gcmVzcHVlc3Rhc1tub21icmVVYUhpamEgYXMgSWRWYXJpYWJsZV07XG5cbiAgICAgICAgLy8gSW50ZWdyaWRhZCBlc3RydWN0dXJhbDogcmFtYSB2w6FsaWRhIHBlcm8gc2luIGFycmF5IG8gdmFjw61vXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJlZ2xvSGlqYXMpIHx8IGFycmVnbG9IaWphcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbXBsZXRhOiBmYWxzZSwgaW5zdGFuY2lhczogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyZWdsb0hpamFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzSGlqYSA9IGFycmVnbG9IaWphc1tpXSBhcyBSZXNwdWVzdGFzO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gb2J0ZW5lclRvZGFzTGFzSW5zdGFuY2lhc0RlVWEoXG4gICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWphLFxuICAgICAgICAgICAgICAgIHRhcmdldFVhTm9tYnJlLFxuICAgICAgICAgICAgICAgIGRpY2Npb25hcmlvUnV0YXMsXG4gICAgICAgICAgICAgICAgY29udGV4dG9BY3R1YWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXJlcy5jb21wbGV0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbXBsZXRhOiBmYWxzZSwgaW5zdGFuY2lhczogW10gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzLmluc3RhbmNpYXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jaWFzUmVzdWx0YW50ZXMucHVzaChyZXMuaW5zdGFuY2lhc1tqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb21wbGV0YTogaW5zdGFuY2lhc1Jlc3VsdGFudGVzLmxlbmd0aCA+IDAsXG4gICAgICAgIGluc3RhbmNpYXM6IGluc3RhbmNpYXNSZXN1bHRhbnRlcyxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBidXNjYXJSZWN1cnNpdm88VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVhUmFpejogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMsXG4gICAgdW5pZGFkQW5hbGlzaXNBY3R1YWw6IFVuaWRhZEFuYWxpc2lzLFxuICAgIHJlc3B1ZXN0YXNBY3R1YWxlczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YU9yZGVuYWRhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZCxcbiAgICBkaWNjaW9uYXJpb1J1dGFzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj5cbik6IFJlc3VsdGFkb0J1c3F1ZWRhIHtcblxuICAgIGNvbnN0IGVzdHJhdGVnaWEgPSBlc3RyYXRlZ2lhc0NvbmRpY2lvblt0aXBvXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGFPcmRlbmFkYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gbGlzdGFPcmRlbmFkYVtpXTtcbiAgICAgICAgY29uc3QgaXRlbVRhcmVhID0gZXN0cmF0ZWdpYS5nZXRUYXJlYShpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW1UYXJlYSAmJiBpdGVtVGFyZWEgIT09IHRhcmVhKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtQ3VtcGxlQ29uZGljaW9uKGl0ZW0sIHJlc3B1ZXN0YXNBY3R1YWxlcywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdGFkbyA9IGVzdHJhdGVnaWEuZ2V0UmVzdWx0YWRvKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgZXNSZWFQb3NpdGl2YSA9ICh0aXBvID09PSAncmVhJyB8fCB0aXBvID09PSAncmVhX3N1cCcpICYmIHJlc3VsdGFkbyA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGVzUmVhUG9zaXRpdmEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21icmVVYUFjdHVhbCA9IHVuaWRhZEFuYWxpc2lzQWN0dWFsPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgICAgICAgICAgaWYgKG5vbWJyZVVhQWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0luc3RhbmNpYXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlVWFBY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWNjaW9uYXJpb1J1dGFzXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNJbnN0YW5jaWFzLmNvbXBsZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNJbnN0YW5jaWFzLmluc3RhbmNpYXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvZGFzQ3VtcGxlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc0luc3RhbmNpYXMuaW5zdGFuY2lhcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbUN1bXBsZUNvbmRpY2lvbihpdGVtLCByZXNJbnN0YW5jaWFzLmluc3RhbmNpYXNba10sIGVzdHJhdGVnaWEsIGV2YWx1YXJFeHByZXNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGFzQ3VtcGxlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9kYXNDdW1wbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kaWdvOiBlc3RyYXRlZ2lhLmdldENvZGlnbyhpdGVtKSxcbiAgICAgICAgICAgICAgICByZXN1bHRhZG8sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGlqYXMgPSB1bmlkYWRBbmFsaXNpc0FjdHVhbD8uaGlqYXM7XG4gICAgaWYgKGhpamFzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhpamFzKSB7XG4gICAgICAgICAgICBjb25zdCB1YUhpamEgPSBoaWphc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc107XG4gICAgICAgICAgICBjb25zdCBub21icmVVYUhpamEgPSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcztcbiAgICAgICAgICAgIGlmIChub21icmVVYUhpamEgJiYgQXJyYXkuaXNBcnJheShyZXNwdWVzdGFzQWN0dWFsZXNbbm9tYnJlVWFIaWphIGFzIElkVmFyaWFibGVdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmVnbG9IaWphcyA9IHJlc3B1ZXN0YXNBY3R1YWxlc1tub21icmVVYUhpamEgYXMgSWRWYXJpYWJsZV0gYXMgdW5rbm93biBhcyBSZXNwdWVzdGFzW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJlZ2xvSGlqYXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcHVlc3Rhc0hpamEgPSBhcnJlZ2xvSGlqYXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1c2NhclJlY3Vyc2l2byhcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcmVzcHVlc3Rhc0FjdHVhbGVzLCByZXNwdWVzdGFzSGlqYSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YU9yZGVuYWRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGlwbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhckV4cHJlc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY2Npb25hcmlvUnV0YXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RpZ28gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RpZ286IG51bGwsIHJlc3VsdGFkbzogZmFsc2UgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1c2NhclJlYU5vUmVhRW5SZXNwdWVzdGFzPFQgZXh0ZW5kcyBUaXBvQ29uZGljaW9uPihcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YTogTWFwZW9UaXBvSXRlbVtUXVtdLFxuICAgIHRpcG86IFQsXG4gICAgdGFyZWE6IHN0cmluZyxcbiAgICBldmFsdWFyRXhwcmVzaW9uPzogRXZhbHVhZG9yRXhwcmVzaW9uXG4pOiBSZXN1bHRhZG9CdXNxdWVkYSB7XG5cbiAgICBpZiAoIWVzdHJhdGVnaWFzQ29uZGljaW9uW3RpcG9dKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGlwbyBkZSBjb25kaWNpw7NuIGRlc2Nvbm9jaWRvOiAke3RpcG99YCk7XG4gICAgfVxuXG4gICAgLy8gT2J0aWVuZSBvIGNyZWEgZWwgZGljY2lvbmFyaW8gZGUgcnV0YXMgcGFyYSBsYSBlc3RydWN0dXJhIHJlY2liaWRhXG4gICAgY29uc3QgZGljY2lvbmFyaW9SdXRhcyA9IG9idGVuZXJEaWNjaW9uYXJpb1J1dGFzKHVuaWRhZEFuYWxpc2lzKTtcblxuICAgIGNvbnN0IGxpc3RhT3JkZW5hZGEgPSBbLi4ubGlzdGFdLnNvcnQoKGEsIGIpID0+IChhLm9yZGVuID8/IDApIC0gKGIub3JkZW4gPz8gMCkpO1xuICAgIHJldHVybiBidXNjYXJSZWN1cnNpdm8oXG4gICAgICAgIHVuaWRhZEFuYWxpc2lzLFxuICAgICAgICByZXNwdWVzdGFzLFxuICAgICAgICB1bmlkYWRBbmFsaXNpcyxcbiAgICAgICAgcmVzcHVlc3RhcyxcbiAgICAgICAgbGlzdGFPcmRlbmFkYSxcbiAgICAgICAgdGlwbyxcbiAgICAgICAgdGFyZWEsXG4gICAgICAgIGV2YWx1YXJFeHByZXNpb24sXG4gICAgICAgIGRpY2Npb25hcmlvUnV0YXNcbiAgICApO1xufSJdfQ==
@@ -0,0 +1,14 @@
1
+ export declare const helpersCasilleros: {
2
+ null2zero(posibleNull: any): any;
3
+ div0err(numerador: number, denominador: number, pk: string): number;
4
+ funs: {
5
+ blanco(x: any): boolean;
6
+ hoy(): any;
7
+ fecha_valida(x: string): boolean;
8
+ mesanio_valido(x: string): boolean;
9
+ informado(x: any): boolean;
10
+ nsnc(x: any): boolean;
11
+ par(x: number): boolean;
12
+ edad_mes_annio_valido(edad: number, mesAnnio: string, fechaRealizacionDDMMYYYY: string): boolean;
13
+ };
14
+ };
@@ -0,0 +1,129 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.helpersCasilleros = void 0;
13
+ exports.helpersCasilleros = {
14
+ null2zero(posibleNull) {
15
+ if (posibleNull == null) {
16
+ return 0;
17
+ }
18
+ return posibleNull;
19
+ },
20
+ div0err(numerador, denominador, pk) {
21
+ if (denominador == 0) {
22
+ throw new Error("Error en " + pk + " division por cero de " + numerador);
23
+ }
24
+ return numerador / denominador;
25
+ },
26
+ funs: {
27
+ blanco(x) {
28
+ return x !== 0 && !x;
29
+ },
30
+ hoy() {
31
+ return date.today().toDmy();
32
+ },
33
+ fecha_valida(x) {
34
+ var formato_valido = /^([1-9]|0[1-9]|[12]\d|3[01])\/([1-9]|0[1-9]|1[012])\/20\d\d$/.test(x);
35
+ var xDate;
36
+ var conversionOk;
37
+ conversionOk = true;
38
+ if (formato_valido) {
39
+ const [d, m, y] = x.split('/');
40
+ try {
41
+ xDate = new Date(`${y}/${m}/${d}`);
42
+ }
43
+ catch (err) {
44
+ conversionOk = false;
45
+ }
46
+ }
47
+ ;
48
+ //faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
49
+ return formato_valido && conversionOk;
50
+ },
51
+ mesanio_valido(x) {
52
+ var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
53
+ return formato_valido;
54
+ },
55
+ informado(x) {
56
+ return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
57
+ && (!(x instanceof Object) || Object.keys(x).length !== 0);
58
+ },
59
+ nsnc(x) {
60
+ return x == -9;
61
+ },
62
+ par(x) {
63
+ return x % 2 == 0;
64
+ },
65
+ edad_mes_annio_valido(edad, mesAnnio, fechaRealizacionDDMMYYYY) {
66
+ var mesesDiferencia = (d1, d2) => {
67
+ var months;
68
+ months = (d2.getFullYear() - d1.getFullYear()) * 12;
69
+ months -= d1.getMonth();
70
+ months += d2.getMonth();
71
+ return months <= 0 ? 0 : months;
72
+ };
73
+ var partesRealizacion = fechaRealizacionDDMMYYYY.split("/");
74
+ //@ts-ignore las partes corresponden a una fecha válida
75
+ var today = date.ymd(Number(partesRealizacion[2]), Number(partesRealizacion[1]), Number(partesRealizacion[0]));
76
+ var partesMesAnnio = mesAnnio.split('/');
77
+ //@ts-ignore las partes corresponden a una fecha válida
78
+ var nacimiento = date.ymd(Number(partesMesAnnio[1]), Number(partesMesAnnio[0]), 1);
79
+ //@ts-ignore RealDate es Date y se puede restar
80
+ var diferenciaMeses = mesesDiferencia(nacimiento, today);
81
+ var edadDecimales = diferenciaMeses / 12; //ej 36.5
82
+ return (Math.floor(edadDecimales) == edad || //misma edad
83
+ edadDecimales == edad + 1 //mes de tolerancia
84
+ );
85
+ },
86
+ //copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
87
+ // return condicion?(respuestasOrigen && respuestasOrigen[posicion-1] && respuestasOrigen[posicion-1][`${camino}`][variableOrigen]):null
88
+ // return condicion?eval(`respuestasOrigen[${posicion-1}].`+camino+'.'+variableOrigen):null;
89
+ //}
90
+ /*
91
+ dbo:{
92
+ datoFamiliar(encu:string,hog:number,per:number, dato:string){
93
+ var xpersonas=personas;
94
+ return encu==enc && hog==hogar && informado(xpersonas) && per<= xpersonas.length && per>=1 && !!xpersonas[per-1][dato]? xpersonas[per-1][dato]:null
95
+ },
96
+ edadfamiliar(encu:string,hog:number,per:number){
97
+ var xpersonas=personas;
98
+ return datoFamiliar(encu:string,hog:number,per:number,'edad')
99
+ },
100
+ existeindividual(encu:string,hog:number,per:number){
101
+ var xpersonas=personas;
102
+ return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1 && !!personas[per-1]['entreaind']
103
+ },
104
+ existemiembro(encu:string,hog:number,per:number){
105
+ var xpersonas=personas;
106
+ return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1
107
+ },
108
+ nroconyuges(encu:string,hog:number){
109
+ var xpersonas=personas
110
+ return xpersonas.filter( per->per.p4==2).length
111
+ },
112
+ nrojefes(encu:string,hog:number,per:number){
113
+ return personas.filter( per->per.p4==1).length
114
+ },
115
+ parentescofamiliar(encu:string,hog:number,per:number){
116
+ return datoFamiliar(encu:string,hog:number,per:number,'p4')
117
+ },
118
+ sexofamiliar(encu:string,hog:number,per:number){
119
+ var xpersonas=personas;
120
+ return encu==enc && hog==hogar && !!xpersonas && per<= xpersonas.length && per>=1 && !!xpersonas[per-1].sexo? xpersonas[per-1]['sexo']:null
121
+ },
122
+ sitconyjefe(encu:string,hog:number){
123
+ return datoFamiliar(encu:string,hog:number,1,'p5')
124
+ }
125
+ } */
126
+ }
127
+ };
128
+ });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1jYXNpbGxlcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VubG9nZ2VkL2hlbHBlcnMtY2FzaWxsZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDYSxRQUFBLGlCQUFpQixHQUFHO1FBQzdCLFNBQVMsQ0FBQyxXQUFnQjtZQUN0QixJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUM7WUFDYixDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFpQixFQUFFLFdBQW1CLEVBQUUsRUFBVTtZQUN0RCxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxPQUFPLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksRUFBRTtZQUNGLE1BQU0sQ0FBQyxDQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN4QixDQUFDO1lBQ0QsR0FBRztnQkFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsWUFBWSxDQUFDLENBQVM7Z0JBQ2xCLElBQUksY0FBYyxHQUFHLDhEQUE4RCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDM0YsSUFBSSxLQUFXLENBQUM7Z0JBQ2hCLElBQUksWUFBcUIsQ0FBQztnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFD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LFlBQVk7b0JBQ2pELGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDaEQsQ0FBQTtZQUNMLENBQUM7WUFDRCxxSUFBcUk7WUFDckksMklBQTJJO1lBQzNJLCtGQUErRjtZQUMvRixHQUFHO1lBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQW1DSTtTQUNQO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3MgPSB7XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6IGFueSkge1xyXG4gICAgICAgIGlmIChwb3NpYmxlTnVsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6IG51bWJlciwgZGVub21pbmFkb3I6IG51bWJlciwgcGs6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChkZW5vbWluYWRvciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiICsgcGsgKyBcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIiArIG51bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IgLyBkZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOiB7XHJcbiAgICAgICAgYmxhbmNvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gMCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpIHx8IHgubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyID09IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOiBudW1iZXIsIG1lc0FubmlvOiBzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6IERhdGUsIGQyOiBEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLCAxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sIHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMgLyAxMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcbn07Il19