dmencu 1.0.0 → 1.0.2

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.
@@ -156,12 +156,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
156
156
  }
157
157
  var mostrarInfoLocal = (divAvisoSincro, titulo, nroSincro, mostrarLinkHdr) => {
158
158
  let datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
159
+ let estructura = my.getLocalVar(abrir_formulario_1.GLOVAR_ESTRUCTURA);
159
160
  if (datosByPass) {
160
161
  divAvisoSincro.append(js_to_html_1.html.div({ id: 'aviso-sincro' }, [
161
162
  nroSincro ? js_to_html_1.html.p(["Número de sincronización: ", js_to_html_1.html.b("" + nroSincro.toString())]) : null,
162
163
  js_to_html_1.html.h4(titulo),
163
164
  js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.cargas).array().length), ' areas: ', likeAr(datosByPass.cargas).keys().join(', ')]),
164
- js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.respuestas[(0, bypass_formulario_1.getEstructura)().mainTD]).array().length), ' viviendas']),
165
+ js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.respuestas[estructura.mainTD]).array().length), ' viviendas']),
165
166
  mostrarLinkHdr ? js_to_html_1.html.a({ href: './campo' }, [js_to_html_1.html.b('IR A LA HOJA DE RUTA')]) : null
166
167
  ]).create());
167
168
  }
@@ -704,4 +705,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
704
705
  return [].concat.apply([], arrays);
705
706
  }
706
707
  });
707
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUs3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQU1sSixrQkFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFjLElBQUksQ0FBQztJQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVEsRUFBRTtRQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFHO1lBQ0MsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUFBLE9BQU0sR0FBRyxFQUFDO1lBQ1AsaUJBQWlCLEdBQUMsSUFBSSxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUM7WUFDMUIsVUFBVSxFQUFDO2dCQUNQLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBRyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsWUFBWSxFQUFDO2dCQUM3RixFQUFDLElBQUksRUFBQyxPQUFPLEVBQU8sUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUM7Z0JBQ3RGLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBUyxRQUFRLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLEVBQUM7YUFDL0Q7WUFDRCxVQUFVLEVBQUMsSUFBSTtZQUNmLFVBQVUsRUFBQyxDQUFPLE1BQU0sRUFBQyxFQUFFOztnQkFDdkIs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YUFDcEo7U0FDSjtJQUNMLENBQUMsQ0FBQTtJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFDLFVBQWUsV0FBVzs7WUFDMUMsOENBQThDO1lBQzlDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FBQSxDQUFBO0lBRUQsU0FBUyxTQUFTLENBQUksTUFBWTtRQUM5QixPQUFRLEVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtodG1sfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5pbXBvcnQge3RyYWVyRXN0cnVjdHVyYX0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgQ2Fzb1N0YXRlLCAgXHJcbiAgICBJZEZvcm11bGFyaW8sIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLCBJZEVuYywgSWRPcGVyYXRpdm8sIElkVGFyZWEsIEVzdGFkb0FjY2lvbiwgRGlyZWNjaW9uQWNjaW9uLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2dldEVzdHJ1Y3R1cmEsIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge0JBQ0tVUFMsIGNhcmdhckVzdHJ1Y3R1cmEsIGNhcmdhckhvamFEZVJ1dGEsIEdMT1ZBUl9EQVRPU0JZUEFTUywgR0xPVkFSX0VTVFJVQ1RVUkEsIEdMT1ZBUl9NT0RPQllQQVNTfSBmcm9tIFwiLi4vdW5sb2dnZWQvYWJyaXItZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IE9wZXJhdGl2byB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tIFwicXVlcnlzdHJpbmdcIjtcclxuXHJcblxyXG4vL1RPRE8gR0VORVJBTElaQVJcclxuXHJcbmNvbnN0IEFCUklSX1RBQiA9IFwiX2FicmlyXCI7XHJcbmNvbnN0IFRBUkVBX0RFRkFVTFQgPSAnZW5jdSc7XHJcbnZhciBPUEVSQVRJVk9fREVGQVVMVDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGFzeW5jICgpPT57XHJcbiAgICB2YXIgbXkgPSBteU93bjsgICAgXHJcbiAgICB0cnl7XHJcbiAgICAgICAgT1BFUkFUSVZPX0RFRkFVTFQgPSBhd2FpdCBteS5hamF4Lm9wZXJhdGl2b19nZXQoe30pO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgT1BFUkFUSVZPX0RFRkFVTFQ9bnVsbDtcclxuICAgIH1cclxuICAgIG15T3duLndTY3JlZW5zLmFicmlyX2VuY3Vlc3RhPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOlRBUkVBX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICd0YXJlYXMnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicsIGRlZmF1bHRWYWx1ZToxMzAwMzF9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBhdXRvcHJvY2VkOnRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjphc3luYyAocGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmMsIHRhcmVhfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgICAgIHZhciBjYXJnYSA9IGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Nhcmdhcih7b3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlOmVuYywgdGFyZWF9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgaWYoIWVzdHJ1Y3R1cmEgfHwgKGVzdHJ1Y3R1cmEudGltZXN0YW1wPz8wKSA8IGNhcmdhLnRpbWVzdGFtcEVzdHJ1Y3R1cmEhIHx8IGVzdHJ1Y3R1cmEub3BlcmF0aXZvICE9IG9wZXJhdGl2byB8fCBteS5jb25maWcuY29uZmlnLmRldmVsKXtcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICAgICAgICAgICAgICBjYXJnYXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB2YXIgc3RhdGU6Q2Fzb1N0YXRlID0ge31cclxuICAgICAgICAgICAgaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbzpjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgW2VzdHJ1Y3R1cmEubWFpblREUEtdOmVuY307XHJcbiAgICAgICAgICAgIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXN0w6EgaW50ZW50YW5kbyBtb2RpZmljYXIgdW5hIGVuY3Vlc3RhIGFiaWVydGEgY29tbyBzb2xvIGxlY3R1cmEsIG5vIHNlIGd1YXJkYXJvbiBsb3MgY2FtYmlvc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIoe29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYoIWNhcmdhLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS5tYWluVERdW2ZvclBrUmFpeltlc3RydWN0dXJhLm1haW5URFBLIGFzIENhbXBvUGtSYWl6XV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzZSBlbmN1ZW50cmEgZWwvbGEgJHtlc3RydWN0dXJhLm1haW5URFBLfSAke2ZvclBrUmFpeltlc3RydWN0dXJhLm1haW5URFBLXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXJnYXJIb2phRGVSdXRhKHsuLi5jYXJnYSwgbW9kb0FsbWFjZW5hbWllbnRvOidzZXNzaW9uJ30pO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe29wZXJhdGl2bywgbW9kb0RlbW86ZmFsc2UsIGZvclBrUmFpen0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5vYnRlbmVyX3RlbGVmb25vPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChfcGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYX0gPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk9fREVGQVVMVCwgdGFyZWE6IFRBUkVBX0RFRkFVTFR9O1xyXG4gICAgICAgICAgICBsZXQgZW5jID0gcGFyc2VJbnQoYXdhaXQgbXkuYWpheC5nZXRfcmFuZG9tX2ZyZWVfY2FzZSh7b3BlcmF0aXZvfSkpOyBcclxuICAgICAgICAgICAgYXdhaXQgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEubWFpbkFjdGlvbih7b3BlcmF0aXZvLCBlbmMsIHRhcmVhfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLmNvbnNpc3Rpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpblRvcEJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRvcC1iYXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYWluVG9wQmFyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgdGFyZWEsIGVuYyB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBlbmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ29wZXJhdGl2bycsIHZhbHVlOiBvcGVyYXRpdm99KTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuY30pO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2R3JpbGxhID0gaHRtbC5kaXYoe2lkOidpbmNvbnNpc3RlbmNpYXMnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZHcmlsbGEsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2Qm90b25lcyA9IGh0bWwuZGl2KHtpZDonYm90b25lcy1wb3N0LWNvbnNpc3Rpcid9LFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uQ2VycmFyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjZXJyYXIgZW5jdWVzdGFgXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZvbHZlciBhIGVuY3Vlc3RhICR7ZW5jfWBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2Qm90b25lcywgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIG15LnRhYmxlR3JpZChcImluY29uc2lzdGVuY2lhc1wiLCBkaXZHcmlsbGEse3RhYmxlRGVmOnt9LGZpeGVkRmllbGRzOiBmaXhlZEZpZWxkc30pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuXHJcbi8vcXVpdGEgYm9vdHN0cmFwIGRlbCBoZWFkIHBhcmEgcXVlIG5vIHJvbXBhIGxvcyBlc3RpbG9zIGRlIEJFUGx1cyAoc29sbyBzZSB1c2EgYm9vdHN0cmFwIGVuIGVsIGZvcm0pXHJcbnZhciBsaW5rTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tocmVmPVwiY3NzL2Jvb3RzdHJhcC5taW4uY3NzXCJdJyk7XHJcbmxpbmtOb2RlWzBdPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZVswXSk7XHJcblxyXG5mdW5jdGlvbiBjb25zaXN0aXJfZmlsdHJvKHRhcmVhLCByZWFfdGVtLCByZWEpe1xyXG4gICAgcmV0dXJuIHRhcmVhP3JlYV90ZW06cmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczphbnkgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gaHRtbE51bWVybyhudW06bnVtYmVyKXtcclxuICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOidudW1lcm8nfSwnJysobnVtPz8nJykpXHJcbn1cclxuXHJcbnZhciBwZXJzaXN0aXJFbk1lbW9yaWEgPSBhc3luYyAocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiB7XHJcbiAgICB2YXIge21vZG9BbG1hY2VuYW1pZW50b30gPSBwZXJzaXN0ZW50ZXNcclxuICAgICAgICBpZihtb2RvQWxtYWNlbmFtaWVudG89PSdsb2NhbCcpe1xyXG4gICAgICAgICAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfTU9ET0JZUEFTUywgbW9kb0FsbWFjZW5hbWllbnRvKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlc3xudWxsKXtcclxuICAgIHZhciBkYXRvcyA9IGF3YWl0IG15LmFqYXguZG1fc2luY3Jvbml6YXIoe3BlcnNpc3RlbnRlc30pO1xyXG4gICAgdmFyIG9wZXJhdGl2byA9IGRhdG9zLm9wZXJhdGl2bztcclxuICAgIHBlcnNpc3RpckVuTWVtb3JpYSh7Li4uZGF0b3MsIG1vZG9BbG1hY2VuYW1pZW50bzonbG9jYWwnfSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7b3BlcmF0aXZvfSlcclxuICAgIG15LnNldExvY2FsVmFyKEdMT1ZBUl9FU1RSVUNUVVJBLCBlc3RydWN0dXJhKTtcclxuICAgIG15LnJlbW92ZUxvY2FsVmFyKEJBQ0tVUFMpO1xyXG4gICAgcmV0dXJuIGRhdG9zO1xyXG59XHJcblxyXG5cclxuXHJcbnZhciBtb3N0cmFySW5mb0xvY2FsID0gKGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50LCB0aXR1bG86c3RyaW5nLCBucm9TaW5jcm86bnVtYmVyfG51bGwsIG1vc3RyYXJMaW5rSGRyOiBib29sZWFuKT0+e1xyXG4gICAgbGV0IGRhdG9zQnlQYXNzID0gbXkuZ2V0TG9jYWxWYXIoR0xPVkFSX0RBVE9TQllQQVNTKTtcclxuICAgIGlmKGRhdG9zQnlQYXNzKXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmQoaHRtbC5kaXYoe2lkOidhdmlzby1zaW5jcm8nfSwgW1xyXG4gICAgICAgICAgICBucm9TaW5jcm8/aHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIrbnJvU2luY3JvLnRvU3RyaW5nKCkpXSk6bnVsbCxcclxuICAgICAgICAgICAgaHRtbC5oNCh0aXR1bG8pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykuYXJyYXkoKS5sZW5ndGgpLCcgYXJlYXM6ICcsbGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2dldEVzdHJ1Y3R1cmEoKS5tYWluVERdKS5hcnJheSgpLmxlbmd0aCksJyB2aXZpZW5kYXMnXSksXHJcbiAgICAgICAgICAgIG1vc3RyYXJMaW5rSGRyP2h0bWwuYSh7aHJlZjonLi9jYW1wbyd9LFtodG1sLmIoJ0lSIEEgTEEgSE9KQSBERSBSVVRBJyldKTpudWxsXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe2NsYXNzOidhdmlzbyd9LFtcclxuICAgICAgICAgICAgaHRtbC5oNCgnU2lzdGVtYSB2YWPDrW8nKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSB2aXZpZW5kYXMnKVxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG52YXIgcHJvY2VkZXJTaW5jcm9GdW4gPSBhc3luYyAoYnV0dG9uOkhUTUxCdXR0b25FbGVtZW50LCBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCk9PntcclxuICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTD0nJztcclxuICAgIHRyeXtcclxuICAgICAgICB2YXIgZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgICAgIHZhciBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MoZGF0b3NCeVBhc3MpO1xyXG4gICAgICAgIG1vc3RyYXJJbmZvTG9jYWwoZGl2QXZpc29TaW5jcm8sICdkYXRvcyByZWNpYmlkb3MnLCBkYXRvcy5udW1fc2luY3JvLCB0cnVlKVxyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgIHRocm93IGVyclxyXG4gICAgfWZpbmFsbHl7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIGJ1dHRvbi5jbGFzc05hbWU9J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JztcclxuICAgIH1cclxufVxyXG5teU93bi53U2NyZWVucy5zaW5jcm9uaXphcl9kbT1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7Y2xhc3M6J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250J30sJ3Byb2NlZGVyIOKHkicpLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50PWh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBtb3N0cmFySW5mb0xvY2FsKG1haW5MYXlvdXQgYXMgSFRNTERpdkVsZW1lbnQsICdpbmZvcm1hY2nDs24gYSB0cmFuc21pdGlyJywgbnVsbCwgZmFsc2UpXHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKHByb2NlZGVyQnV0dG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoZGl2QXZpc29TaW5jcm8pO1xyXG4gICAgcHJvY2VkZXJCdXR0b24ub25jbGljayA9ICgpPT5wcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8pXHJcbn07XHJcblxyXG5mdW5jdGlvbiBpbmljaWFsaXphclN0YXRlKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgIHN0YXRlLm1vZG8gPSB7XHJcbiAgICAgICAgZGVtbzogZmFsc2VcclxuICAgIH07XHJcbiAgICAvLyBPSk8gc3RhdGUub3BjaW9uZXMgc2UgbW9kaWZpY2EgYWPDoSB5IGVuIG90cm8gbGFkbyBjb24gZXN0ZSBtaXNtbyBjYXJ0ZWxcclxuICAgIHN0YXRlLm9wY2lvbmVzID0ge1xyXG4gICAgICAgIGJpZW52ZW5pZG86IHRydWUsXHJcbiAgICAgICAgZm9yUGs6IG51bGwsXHJcbiAgICAgICAgcGlsYUZvclBrOiBbXSxcclxuICAgICAgICBtb2RvRGVzcGxpZWd1ZTogXCJyZWxldmFtaWVudG9cIixcclxuICAgICAgICBtb2RvRGlyZWN0bzogZmFsc2UsXHJcbiAgICAgICAgbW9kb0JvcnJhclJlc3B1ZXN0YTogbnVsbCxcclxuICAgICAgICBjb25DYW1wb09wY2lvbmVzOiBmYWxzZSxcclxuICAgICAgICBzYWx0b0F1dG9tYXRpY286IHRydWUsXHJcbiAgICB9O1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBzdGF0ZS5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHt9O1xyXG59XHJcbi8qXHJcbmZ1bmN0aW9uIG1vc3RyYXJEYXRvc1BlcnNvbmEoaGF5RGF0b3M6Ym9vbGVhbiwgZGF0b3M6YW55LCBkaXZSZXN1bHQ6SFRNTERpdkVsZW1lbnQpe1xyXG4gICAgLy9UT0RPOiBFVkFMVUFSIFNJIENPTlZJRU5FIFRSQUVSTE8gREUgTEEgQkFTRVxyXG4gICAgdmFyIHRpcG9zRG9jdW1lbnRvID0gWydETkkgYXJnZW50aW5vJywgJ0RvY3VtZW50byBleHRyYW5qZXJvJywgJ05vIHRpZW5lIGRvY3VtZW50bycsICdPdHJvJ107XHJcbiAgICB2YXIgcGFpc0RvY3VtZW50byA9IFsnVXJ1Z3VheScsICdQYXJhZ3VheScsICdCcmFzaWwnLCAnQm9saXZpYScsICdDaGlsZScsICdQZXLDuicsICdWZW5lenVlbGEnLCAnT3RybyddO1xyXG4gICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGhheURhdG9zP1xyXG4gICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2RhdG9zLXBlcnNvbmEtY2FyZ2FkYSd9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwuaDIoXCJEYXRvcyBwZXJzb25hXCIpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidmaWNoYS1wZXJzb25hJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtodG1sLmxhYmVsKCdBcGVsbGlkbzogJyksIGRhdG9zLmFwZWxsaWRvXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ05vbWJyZXM6ICcpLCBkYXRvcy5ub21icmVzXSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnVGlwbyBkb2N1bWVudG86ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcG9zRG9jdW1lbnRvW2RhdG9zLnRpcG9Eb2N1bWVudG8tMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT00ICYmIGRhdG9zLnRpcG9Eb2N1bWVudG9Fc3BlY2lmaWNhZG8/JyAoJysgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT0yICYmIGRhdG9zLnBhaXNEb2N1bWVudG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwubGFiZWwoJ1BhaXM6ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXNEb2N1bWVudG9bZGF0b3MucGFpc0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnBhaXNEb2N1bWVudG89PTggJiYgZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnK2RhdG9zLnBhaXNEb2N1bWVudG9Fc3BlY2lmaWNhZG8rJyknOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50byE9MyAmJiBkYXRvcy50aXBvRG9jdW1lbnRvP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdOwrogRG9jdW1lbnRvOiAnKSwgZGF0b3MuZG9jdW1lbnRvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MuY2VsdWxhcj9odG1sLmRpdihbaHRtbC5sYWJlbCgnQ2VsLjogJyksIGRhdG9zLmNlbHVsYXJdKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5lbWFpbD9odG1sLmRpdihbaHRtbC5sYWJlbCgnRW1haWw6ICcpLCBkYXRvcy5lbWFpbF0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ1RlbC4gYWx0ZXJuYXRpdm86ICcpLCBkYXRvcy50ZWxlZm9ub0FsdGVybmF0aXZvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3Mub2JzZXJ2YWNpb25lcz9odG1sLmRpdihbaHRtbC5sYWJlbCgnT2JzZXJ2YWNpb25lczogJyksIGRhdG9zLm9ic2VydmFjaW9uZXNdKTonJyxcclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgOlxyXG4gICAgICAgICAgICBodG1sLnAoXCJObyBzZSBlbmNvbnRyw7MgdW5hIGVuY3Vlc3RhIHBhcmEgbGEgZXRpcXVldGEgY2FyZ2FkYVwiKS5jcmVhdGUoKVxyXG4gICAgKVxyXG59XHJcbiovXHJcbi8qbXlPd24uY2xpZW50U2lkZXMudGFyZWFzVGVtUm93PXtcclxuICAgIHVwZGF0ZTooZGVwb3QpPT57XHJcbiAgICAgICAgdmFyIHRhcmVhOiduYWRhJ3wncHJlYXNpZ25hcid8J2Nhcmdhcid8J3JlYWxpemFyJ3wndmVyaWZpY2FyJz0nbmFkYSc7XHJcbiAgICAgICAgdmFyIHJvdz1kZXBvdC5yb3c7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHZhciBpZHBlcj1teS5jb25maWcuaWRwZXI7XHJcbiAgICAgICAgdmFyIGVzcGVyYXI6Ym9vbGVhbj1mYWxzZTtcclxuICAgICAgICBpZihyb3cuaGFiaWxpdGFkYSl7XHJcbiAgICAgICAgICAgIGlmKCFyb3cucmVjZXBjaW9uaXN0YSAmJiAhcm93LmFzaWduYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSdwcmVhc2lnbmFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9dHJ1ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5hc2lnbmFkbyB8fCAhcm93LmZlY2hhX2FzaWduYWNpb24gfHwgIXJvdy5vcGVyYWNpb24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J2Nhcmdhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5yZWEpe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3JlYWxpemFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LmFzaWduYWRvIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy52ZXJpZmljYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSd2ZXJpZmljYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cucmVjZXBjaW9uaXN0YSE9aWRwZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvbmVyPXtcclxuICAgICAgICAgICAgcmVjZXBjaW9uaXN0YSAgICAgICAgICA6dGFyZWE9PSdwcmVhc2lnbmFyJyAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBhc2lnbmFkbyAgICAgICAgICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgZmVjaGFfYXNpZ25hY2lvbiAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIG9wZXJhY2lvbiAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBjYXJnYV9vYnNlcnZhY2lvbmVzOih0YXJlYT09J2NhcmdhcicgICAgIHx8IHRhcmVhPT0ncmVhbGl6YXInICYmICFyb3cuY2FyZ2FkbyAmJiAhcm93LnJlYSApICYmIHJvdy5yZWNlcGNpb25pc3RhPT1pZHBlciAmJiAnb3B0YXRpdm8nLFxyXG4gICAgICAgICAgICB2ZXJpZmljYWRvICAgICAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb2JzX3ZlcmlmaWNhZG8gICAgIDp0YXJlYT09J3ZlcmlmaWNhcicgICYmIChlc3BlcmFyPydlc3BlcmFyJzonb3B0YXRpdm8nKSxcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHBvbmVyKS5mb3JFYWNoKCh2YWxvciwgY2FtcG8pPT57XHJcbiAgICAgICAgICAgIGlmKCF2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tjYW1wb10ucmVtb3ZlQXR0cmlidXRlKCdteS1tYW5kYXRvcnknKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5zZXRBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScsdmFsb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiBmdW5jdGlvbigpe31cclxufVxyXG4qL1xyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDpzdHJpbmcpPT57XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7Y2xhc3M6XCJzdmctY2VycmFyLWVuY3Vlc3RhXCJ9LFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOnBhdGhcclxuICAgICAgICB9KVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHtpZDonYm90b24tY2VycmFyLWVuY3Vlc3RhJ30sW3N2ZywgbGFiZWxdKS5jcmVhdGUoKTtcclxuICAgIHZlci5vbmNsaWNrID0gKCk9PiBjbG9zZSgpO1xyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmM6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBodG1sLmJ1dHRvbih7aWQ6J2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJ30sbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IHdpbmRvdy5vcGVuKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgLCBBQlJJUl9UQUIpXHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyA9IGFzeW5jIChkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgbGFiZWw6J2FicmlyJ3wndmVyJyk9PntcclxuICAgIHRhcmVhcyA9IHRhcmVhcz90YXJlYXM6KGF3YWl0IG15T3duLmFqYXgudGFibGVfZGF0YSh7dGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczpbXX0pKTtcclxuICAgIHZhciBtaXNUYXJlYXMgPSB0YXJlYXMuZmlsdGVyKCh0YXJlYSk9PlxyXG4gICAgICAgICEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2bz09ZGVwb3Qucm93Lm9wZXJhdGl2byAmJiAoZGVwb3QubWFuYWdlci5kZWYubXVlc3RyYUFicmlyRW5Ub2Rhc0xhc1RhcmVhcz90cnVlOmRlcG90LnJvdy50YXJlYSA9PSB0YXJlYS50YXJlYSlcclxuICAgICk7XHJcbiAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmlubmVySFRNTD0nJztcclxuICAgIG1pc1RhcmVhcy5mb3JFYWNoKCh0YXJlYTp7dGFyZWE6c3RyaW5nLCBub21icmU6c3RyaW5nLCBtYWluX2Zvcm06SWRGb3JtdWxhcmlvfSk9PntcclxuICAgICAgICBsZXQgYnV0dG9uTGFiZWwgPSBgJHtsYWJlbH0gJHt0YXJlYS50YXJlYX1gO1xyXG4gICAgICAgIGxldCB2ZXIgPSBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgZGVwb3Qucm93Lm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgdGFyZWEudGFyZWEgYXMgSWRUYXJlYSwgXHJcbiAgICAgICAgICAgIE51bWJlcihkZXBvdC5yb3cuZW5jKSxcclxuICAgICAgICAgICAgYnV0dG9uTGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICAgIHZlci5zdHlsZT0nbWFyZ2luOjBweCAycHg7JztcclxuICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmFwcGVuZENoaWxkKHZlcik7XHJcbiAgICB9KVxyXG59XHJcblxyXG52YXIgZ2V0QWJyaXJPdmVyID0gKGRlcG90Om15T3duLkRlcG90LF9maWVsZE5hbWU6c3RyaW5nKT0+XHJcbiAgICAoZGVwb3Qucm93LmNhcmdhZG9fZG0gfHwgIWRlcG90LnJvd1snZXN0YWRvc19fcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEnXSAmJiBkZXBvdC5yb3cuYXNpZ25hZG8gIT0gbXkuY29uZmlnLmlkcGVyKT9cclxuICAgICAgICAndmVyJzonYWJyaXInXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb249e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMudmVySWNvbm9Tdmc9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBpZihkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpe1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6XCJzdmctYWNjaW9uZXNcIlxyXG4gICAgICAgICAgICB9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDpkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzdmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBjcmVhclNWRyA9IChwYXRoOnN0cmluZyxwcm9wczphbnkpID0+IHtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyhwcm9wcyB8fCB7fSxbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDpwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgIHJldHVybiBzdmdcclxufVxyXG52YXIgY3JlYXJCb3RvbkFjY2lvbiA9IChkZXBvdDpteU93bi5EZXBvdCwgYWN0aW9uOkVzdGFkb0FjY2lvbik9PntcclxuICAgIGxldCAgYWNjaW9uU2luR3Vpb25lcyA9IGFjdGlvbi5lYWNjaW9uLnJlcGxhY2UoJ18nLCcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLHtjbGFzczpcInN2Zy1hY2Npb25lc1wifSlcclxuICAgIGlmKGFjdGlvbi5kZXNhY3RpdmFfYm90b24pe1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOmBzaW4tYm90b24tYWNjaW9uYH0sW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6YGJvdG9uLWFjY2lvbiBib3Rvbi1hY2Npb24tJHthY3Rpb24uZWFjY2lvbl9kaXJlY2Npb259YFxyXG4gICAgfSxbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmc/c3ZnOm51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PiB7XHJcbiAgICAgICAgdmFyIGFjdGlvbkZ1biA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhc1RlbVRhYmxlOiBkZXBvdC5kZWYubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3Qse3JldHJpZXZlSWdub3JpbmdXaGVyZTp0cnVlfSkgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGFjdGlvbi5ub21icmVfd3NjcmVlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86cGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6cGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IE51bWJlcihwYXJhbXMuZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbihsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrbXkubWVudVNlcGFyYXRvcitgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWAsIEFCUklSX1RBQilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgfWZpbmFsbHl7XHJcbiAgICAgICAgICAgICAgICAvL3JldHJhc28gbGEgaGFiaWxpdGFjacOzbiBwb3JxdWUgYSB2ZWNlcyB0YXJkYSBlbiByZWRpYnVqYXJzZSBsYSBib3RvbmVyYSB5IHB1ZWRlIHRyYWVyIHByb2JsZW1hcyBzaSBkYW4gZG9ibGUgY2xpY2sgXHJcbiAgICAgICAgICAgICAgICAvL3lhIHF1ZSBlamVjdXRhIG51ZXZhbWVudGUgdW5hIGFjY2nDs24gcXVlIHlhIHNlIGVqZWN1dMOzICh5IHRlcm1pbsOzKSBhbnRlc1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+YnV0dG9uLmRpc2FibGVkPWZhbHNlLDMwMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGNvbmZpcm1Qcm9taXNlT3B0czogRGlhbG9nT3B0aW9ucyA9IHt9XHJcbiAgICAgICAgaWYoYWN0aW9uLmNvbmZpcm1hKXtcclxuICAgICAgICAgICAgY29uZmlybVByb21pc2VPcHRzLmFza0Zvck5vUmVwZWF0ID0gJ25vIHZvbHZlciBhIG1vc3RyYXInOyAvL211ZXN0cmEgbWVuc2FqZSBwb3IgZGVmYXVsdCBwZXJvIGFuZGEgaWd1YWxcclxuICAgICAgICAgICAgdmFyIGJ1dHRvbnNEZWYgPSBbXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6J3PDrScsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAge2xhYmVsOidubycsIHZhbHVlOmZhbHNlfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlKGBjb25maXJtYSBhY2Npw7NuIFwiJHthY2Npb25TaW5HdWlvbmVzfVwiP2AsIHsuLi5jb25maXJtUHJvbWlzZU9wdHMsIGJ1dHRvbnNEZWZ9KS50aGVuKGFjdGlvbkZ1bik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGFjdGlvbkZ1bigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidXR0b25cclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc0FjY2lvbmVzID0gYXN5bmMgKG9wdHM6e2RlcG90Om15T3duLkRlcG90LCBmaWVsZE5hbWU6c3RyaW5nLCBkaXJlY2Npb246IERpcmVjY2lvbkFjY2lvbn0pPT57XHJcbiAgICBsZXQge2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb259ID0gb3B0cztcclxuICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAoZGVwb3Qucm93Q29udHJvbHMuYWNjaW9uZXMuZ2V0VHlwZWRWYWx1ZSgpfHxbXSlcclxuICAgICAgICAuZmlsdGVyKChhY3Rpb246RXN0YWRvQWNjaW9uKT0+YWN0aW9uLmVhY2Npb25fZGlyZWNjaW9uPT1kaXJlY2Npb24pXHJcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbjpFc3RhZG9BY2Npb24pPT50ZC5hcHBlbmRDaGlsZChjcmVhckJvdG9uQWNjaW9uKGRlcG90LCBhY3Rpb24pKSk7XHJcbn1cclxuXHJcbnZhciBjcmVhclN3aXRjaCA9IChvcHRzOntyb3VuZD86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW4sIGNoZWNrZWQ/OmJvb2xlYW4sIG9uQ2xpY2tGdW46RnVuY3Rpb24sIG9uRXJyRnVuPzpGdW5jdGlvbn0pPT57XHJcbiAgICB2YXIgY2hlY2tib3ggPSBodG1sLmlucHV0KHt0eXBlOidjaGVja2JveCcsIGNoZWNrZWQ6b3B0cy5jaGVja2VkfSkuY3JlYXRlKCk7XHJcbiAgICBjaGVja2JveC5vbmNsaWNrID0gYXN5bmMoKT0+e1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgb3B0cy5vbkNsaWNrRnVuKClcclxuICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0bWwubGFiZWwoe2NsYXNzOidzd2l0Y2gnfSxbXHJcbiAgICAgICAgY2hlY2tib3gsXHJcbiAgICAgICAgaHRtbC5zcGFuKHtjbGFzczpgc2xpZGVyICR7b3B0cy5yb3VuZD8ncm91bmQnOicnfWB9KSxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG59XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5oYWJpbGl0YXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGNyZWFyU3dpdGNoKHtcclxuICAgICAgICAgICAgICAgIHJvdW5kOnRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGVja2VkOmRlcG90LnJvdy5oYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgb25DbGlja0Z1bjogYXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmVuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+Z3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpLDMwMCk7Ly9wYXJhIHF1ZSBzZSB2ZWEgZWwgZWZlY3RvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQXZhbmNlPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J2F2YW5jZSd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzUmV0cm9jZXNvPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J3JldHJvY2Vzbyd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQmxhbnF1ZW89e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjonYmxhbnF1ZW8nfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5mdW5jdGlvbiBcclxuYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcG90LmRldGFpbENvbnRyb2xzLmluY29uc2lzdGVuY2lhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXN0YXVyYXJCb3RvbiwgMjUwMCk7XHJcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjRkY4JztcclxuICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmICgoZGVwb3Qucm93LmNvbnNpc3RpZG89PW51bGwgICYmIGRlcG90LnJvdy5yZWEhPW51bGwpIHx8IGRlcG90LnJvdy5tb2RpZmljYWRvIT1udWxsICYmIGRlcG90LnJvdy5jb25zaXN0aWRvIT1udWxsICYmIGRlcG90LnJvdy5tb2RpZmljYWRvID5kZXBvdC5yb3cuY29uc2lzdGlkbyl7XHJcbiAgICAgICAgICAgIC8vICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nIzhDRidcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9O1xyXG59XHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuY29uc2lzdGlyID0gYm90b25DbGllbnRTaWRlRW5HcmlsbGEoe1xyXG4gICAgbm9tYnJlQm90b246ICdjb25zaXN0aXInLFxyXG4gICAgbGxhbWFkYTogZnVuY3Rpb24gKGRlcG90OiBteU93bi5EZXBvdCkge1xyXG4gICAgICAgIHZhciBteVJlYUZpZWxkTmFtZSA9IGRlcG90Lm1hbmFnZXIuZGVmLnRhYmxlTmFtZT09XCJ0ZW1cIj8ncmVhJzondWx0X3JlYSc7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYT1jb25zaXN0aXJfZmlsdHJvKGRlcG90LnJvdy50YXJlYSwgZGVwb3Qucm93W215UmVhRmllbGROYW1lXSwgZGVwb3Qucm93LnJlYSlcclxuICAgICAgICByZXR1cm4gZmlsdHJvUmVhPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pOiBhbGVydFByb21pc2UoJ0xhIGVuY3Vlc3RhIGRlYmUgdGVuZXIgZGF0byBlbiByZWEgcGFyYSBwb2RlciBjb25zaXN0aXJsYS4nKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5teU93bi53U2NyZWVucy5wcm9jLnJlc3VsdC5tb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcj1mdW5jdGlvbihyZXN1bHQsIGRpdlJlc3VsdCl7XHJcbiAgICBpZihyZXN1bHQucm93cy5sZW5ndGgpe1xyXG4gICAgICAgIHZhciBjdXJyZW50VG9rZW46c3RyaW5nfG51bGwgPSBudWxsXHJcbiAgICAgICAgdmFyIG5yb0NhcmdhID0gMDtcclxuICAgICAgICB2YXIgZW5jdWVzdGFzRGl2OiBudWxsfEhUTUxEaXZFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oMignb3BlcmF0aXZvOiAnICsgcmVzdWx0Lm9wZXJhdGl2bykuY3JlYXRlKCkpO1xyXG4gICAgICAgIHJlc3VsdC5yb3dzLmZvckVhY2goKGVuY3Vlc3RhKT0+e1xyXG4gICAgICAgICAgICBpZihjdXJyZW50VG9rZW4gIT0gZW5jdWVzdGEuY2FyZ2Fkb19kbSl7XHJcbiAgICAgICAgICAgICAgICBucm9DYXJnYSsrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gZW5jdWVzdGEuY2FyZ2Fkb19kbTtcclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChodG1sLmg0KCdjYXJnYSBOwrogJyArIG5yb0NhcmdhLnRvU3RyaW5nKCkpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIGVuY3Vlc3Rhc0RpdiA9IGh0bWwuZGl2KHtjbGFzczonZW5jdWVzdGFzLWEtYmxhbnF1ZWFyJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy9sYXMgY29waW8gY29uIGxldCBwYXJhIHF1ZSB0b21lIGVsIHZhbG9yIGFjdHVhbCB5IG5vIGVsIMO6bHRpbW9cclxuICAgICAgICAgICAgICAgIGxldCBtaVRva2VuID0gY3VycmVudFRva2VuO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pTnJvQ2FyZ2EgPSBucm9DYXJnYTtcclxuICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6YGJvdG9uLWJsYW5xdWVhci1kbSBib3Rvbi1hY2Npb25gXHJcbiAgICAgICAgICAgICAgICB9LCAnYmxhbnF1ZWFyIGNhcmdhICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCk9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1haW5EaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidkYW5nZXInfSwgW2BFc3TDoSBwb3IgYmxhbnF1ZWFyIGxhIGNhcmdhICR7bWlOcm9DYXJnYX0uIE5vIHNlIHBvZHLDoSBkZXNjYXJnYXIgZWwgZGlzcG9zaXRpdm8uYF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRGb3J6YXIgPSBodG1sLmlucHV0KHtjbGFzczonaW5wdXQtZm9yemFyJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbJ1NlIHB1ZWRlIGZvcnphciBlbCBibGFucXVlbyAnLGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zRGVmOltcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsYWJlbDonZm9yemFyIGJsYW5xdWVvJywgdmFsdWU6dHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2NhbmNlbGFyIGJsYW5xdWVvJywgdmFsdWU6ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZihmb3J6YXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpbnB1dEZvcnphci52YWx1ZT09J2Zvcnphcicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRCbGFucXVlbyA9IGF3YWl0IG15LmFqYXguZG1fYmxhbnF1ZWFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiByZXN1bHQub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogbWlUb2tlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0QmxhbnF1ZW8uZm9yRWFjaCgodHQ6YW55KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zcGFuKHt9LGAke3R0LnJlc3VsdF9ibGFucXVlb31gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKCdzaSBuZWNlc2l0YSBibGFucXVlYXIgZXNjcmliYSBmb3J6YXIuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChlbmN1ZXN0YXNEaXYpO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW5jdWVzdGFzRGl2Py5hcHBlbmRDaGlsZChodG1sLmRpdih7fSxbXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYGVuY3Vlc3RhOiAke2VuY3Vlc3RhLmVuY30gYCksXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYHRhcmVhOiAgJHtlbmN1ZXN0YS50YXJlYX0gYCksXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIGxldCB7Y2Fzb1RlbX0gPSAgcmVzdWx0O1xyXG4gICAgaWYoY2Fzb1RlbSl7XHJcbiAgICAgICAgaWYoY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKXtcclxuICAgICAgICAgICAgdmFyIGVuY3Vlc3RhRGl2ID0gaHRtbC5kaXYoe2lkOidiYWNrdXAtZGl2J30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFEaXYpO1xyXG4gICAgICAgICAgICBteS5hZ3JlZ2FyX2pzb24oZW5jdWVzdGFEaXYsIGNhc29UZW0uanNvbl9lbmN1ZXN0YSk7XHJcbiAgICAgICAgICAgIHZhciBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgICAgICAgICBjbGFzczpgYm90b24tYmxhbnF1ZWFyLWVuY3Vlc3RhLWFjY2lvbmBcclxuICAgICAgICAgICAgfSwgJ2JsYW5xdWVhciBlbmN1ZXN0YScpLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5EaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidkYW5nZXInfSwgW2BFc3TDoSBwb3IgYmxhbnF1ZWFyIGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9LiBTZSBwZXJkZXLDoW4gbG9zIGRhdG9zIGRlIGxhIG1pc21hLmBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7Y2xhc3M6J2lucHV0LWZvcnphcid9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFsnU2UgcHVlZGUgZm9yemFyIGVsIGJsYW5xdWVvICcsaW5wdXRGb3J6YXJdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgICAgICB3aXRoQ2xvc2VCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdDpmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBidXR0b25zRGVmOltcclxuICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsOidmb3J6YXIgYmxhbnF1ZW8nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsOidjYW5jZWxhciBibGFucXVlbycsIHZhbHVlOmZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9yemFyKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihpbnB1dEZvcnphci52YWx1ZT09J2Zvcnphcicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdEdpZiA9IGh0bWwuaW1nKHtzcmM6J2ltZy9sb2FkaW5nMTYuZ2lmJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRHaWYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQod2FpdEdpZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmVuY3Vlc3RhX2JsYW5xdWVhcihjYXNvVGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5pbm5lckhUTUw9cmVzdWx0QmxhbnF1ZW87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRHaWYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKCdzaSBuZWNlc2l0YSBibGFucXVlYXIgZXNjcmliYSBmb3J6YXIuJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChodG1sLnAoe2lkOidtZW5zYWplLW5vLWhheS1qc29uLWVuY3Vlc3RhJ30sYG5vIHNlIGVuY29udHLDsyBpbmZvcm1hY2lvbiBjYXJnYWRhIHBhcmEgbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5teU93bi53U2NyZWVucy5kZW1vPWFzeW5jIGZ1bmN0aW9uKF9hZGRyUGFyYW1zKXtcclxuICAgIC8vIEB0cy1pZ25vcmUgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCBnbG9iYWxcclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKHttb2RvRGVtbzp0cnVlfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdDxUPihhcnJheXM6VFtdW10pOlRbXXtcclxuICAgIHJldHVybiAoW10gYXMgVFtdKS5jb25jYXQuYXBwbHkoW10sIGFycmF5cyk7XHJcbn1cclxuIl19
708
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUs3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQU1sSixrQkFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFjLElBQUksQ0FBQztJQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVEsRUFBRTtRQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFHO1lBQ0MsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUFBLE9BQU0sR0FBRyxFQUFDO1lBQ1AsaUJBQWlCLEdBQUMsSUFBSSxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUM7WUFDMUIsVUFBVSxFQUFDO2dCQUNQLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBRyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsWUFBWSxFQUFDO2dCQUM3RixFQUFDLElBQUksRUFBQyxPQUFPLEVBQU8sUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUM7Z0JBQ3RGLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBUyxRQUFRLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLEVBQUM7YUFDL0Q7WUFDRCxVQUFVLEVBQUMsSUFBSTtZQUNmLFVBQVUsRUFBQyxDQUFPLE1BQU0sRUFBQyxFQUFFOztnQkFDdkIs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TyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNwSjtTQUNKO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUMsVUFBZSxXQUFXOztZQUMxQyw4Q0FBOEM7WUFDOUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBLENBQUE7SUFFRCxTQUFTLFNBQVMsQ0FBSSxNQUFZO1FBQzlCLE9BQVEsRUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2h0bWx9IGZyb20gXCJqcy10by1odG1sXCI7XHJcbmltcG9ydCB7dHJhZXJFc3RydWN0dXJhfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyBDYXNvU3RhdGUsICBcclxuICAgIElkRm9ybXVsYXJpbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkRW5jLCBJZE9wZXJhdGl2bywgSWRUYXJlYSwgRXN0YWRvQWNjaW9uLCBEaXJlY2Npb25BY2Npb24sXHJcbiAgICBDYW1wb1BrUmFpeixcclxufSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7Z2V0RXN0cnVjdHVyYSwgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3N9IGZyb20gXCIuLi91bmxvZ2dlZC9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7QkFDS1VQUywgY2FyZ2FyRXN0cnVjdHVyYSwgY2FyZ2FySG9qYURlUnV0YSwgR0xPVkFSX0RBVE9TQllQQVNTLCBHTE9WQVJfRVNUUlVDVFVSQSwgR0xPVkFSX01PRE9CWVBBU1N9IGZyb20gXCIuLi91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgT3BlcmF0aXZvIH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gXCJxdWVyeXN0cmluZ1wiO1xyXG5cclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgQUJSSVJfVEFCID0gXCJfYWJyaXJcIjtcclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOnN0cmluZ3xudWxsPSBudWxsO1xyXG5cclxubXlPd24uYXV0b1NldHVwRnVuY3Rpb25zLnB1c2goYXN5bmMgKCk9PntcclxuICAgIHZhciBteSA9IG15T3duOyAgICBcclxuICAgIHRyeXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVD1udWxsO1xyXG4gICAgfVxyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGE9e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOk9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6VEFSRUFfREVGQVVMVCwgcmVmZXJlbmNlczogJ3RhcmVhcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOjEzMDAzMX1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICAgICAgdmFyIGNhcmdhID0gYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfY2FyZ2FyKHtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWU6ZW5jLCB0YXJlYX0pIGFzIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzO1xyXG4gICAgICAgICAgICBpZighZXN0cnVjdHVyYSB8fCAoZXN0cnVjdHVyYS50aW1lc3RhbXA/PzApIDwgY2FyZ2EudGltZXN0YW1wRXN0cnVjdHVyYSEgfHwgZXN0cnVjdHVyYS5vcGVyYXRpdm8gIT0gb3BlcmF0aXZvIHx8IG15LmNvbmZpZy5jb25maWcuZGV2ZWwpe1xyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7b3BlcmF0aXZvfSlcclxuICAgICAgICAgICAgICAgIGNhcmdhckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBzdGF0ZTpDYXNvU3RhdGUgPSB7fVxyXG4gICAgICAgICAgICBpbmljaWFsaXphclN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvOmNhcmdhLmluZm9ybWFjaW9uSGRyW2VuYyBhcyBJZEVuY10udGFyZWEubWFpbl9mb3JtLCBbZXN0cnVjdHVyYS5tYWluVERQS106ZW5jfTtcclxuICAgICAgICAgICAgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MoXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzc0VuQmFzZURlRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihwZXJzaXN0ZW50ZXMuc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFc3TDoSBpbnRlbnRhbmRvIG1vZGlmaWNhciB1bmEgZW5jdWVzdGEgYWJpZXJ0YSBjb21vIHNvbG8gbGVjdHVyYSwgbm8gc2UgZ3VhcmRhcm9uIGxvcyBjYW1iaW9zXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhcih7b3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXN9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBpZighY2FyZ2EucmVzcHVlc3Rhc1tlc3RydWN0dXJhLm1haW5URF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEubWFpblREUEsgYXMgQ2FtcG9Qa1JhaXpdXSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEubWFpblREUEt9ICR7Zm9yUGtSYWl6W2VzdHJ1Y3R1cmEubWFpblREUEtdfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhcmdhckhvamFEZVJ1dGEoey4uLmNhcmdhLCBtb2RvQWxtYWNlbmFtaWVudG86J3Nlc3Npb24nfSk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCh7b3BlcmF0aXZvLCBtb2RvRGVtbzpmYWxzZSwgZm9yUGtSYWl6fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLm9idGVuZXJfdGVsZWZvbm89e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKF9wYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIHRhcmVhfSA9IHtvcGVyYXRpdm86IE9QRVJBVElWT19ERUZBVUxULCB0YXJlYTogVEFSRUFfREVGQVVMVH07XHJcbiAgICAgICAgICAgIGxldCBlbmMgPSBwYXJzZUludChhd2FpdCBteS5hamF4LmdldF9yYW5kb21fZnJlZV9jYXNlKHtvcGVyYXRpdm99KSk7IFxyXG4gICAgICAgICAgICBhd2FpdCBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YS5tYWluQWN0aW9uKHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluVG9wQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdG9wLWJhcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1haW5Ub3BCYXIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblRvcEJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYSwgZW5jIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IGVuY1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgIHZhciBmaXhlZEZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAnb3BlcmF0aXZvJywgdmFsdWU6IG9wZXJhdGl2b30pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAndml2aWVuZGEnLCB2YWx1ZTogZW5jfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZHcmlsbGEgPSBodG1sLmRpdih7aWQ6J2luY29uc2lzdGVuY2lhcyd9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkdyaWxsYSwgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZCb3RvbmVzID0gaHRtbC5kaXYoe2lkOidib3RvbmVzLXBvc3QtY29uc2lzdGlyJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdm9sdmVyIGEgZW5jdWVzdGEgJHtlbmN9YFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZCb3RvbmVzLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgbXkudGFibGVHcmlkKFwiaW5jb25zaXN0ZW5jaWFzXCIsIGRpdkdyaWxsYSx7dGFibGVEZWY6e30sZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWEsIHJlYV90ZW0sIHJlYSl7XHJcbiAgICByZXR1cm4gdGFyZWE/cmVhX3RlbTpyZWE7XHJcbn07XHJcblxyXG52YXIgdGFyZWFzOmFueSA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBodG1sTnVtZXJvKG51bTpudW1iZXIpe1xyXG4gICAgcmV0dXJuIGh0bWwuc3Bhbih7Y2xhc3M6J251bWVybyd9LCcnKyhudW0/PycnKSlcclxufVxyXG5cclxudmFyIHBlcnNpc3RpckVuTWVtb3JpYSA9IGFzeW5jIChwZXJzaXN0ZW50ZXM6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IHtcclxuICAgIHZhciB7bW9kb0FsbWFjZW5hbWllbnRvfSA9IHBlcnNpc3RlbnRlc1xyXG4gICAgICAgIGlmKG1vZG9BbG1hY2VuYW1pZW50bz09J2xvY2FsJyl7XHJcbiAgICAgICAgICAgIG15LnNldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9NT0RPQllQQVNTLCBtb2RvQWxtYWNlbmFtaWVudG8pXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzfG51bGwpe1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7cGVyc2lzdGVudGVzfSk7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gZGF0b3Mub3BlcmF0aXZvO1xyXG4gICAgcGVyc2lzdGlyRW5NZW1vcmlhKHsuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOidsb2NhbCd9KTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHtvcGVyYXRpdm99KVxyXG4gICAgbXkuc2V0TG9jYWxWYXIoR0xPVkFSX0VTVFJVQ1RVUkEsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcblxyXG5cclxudmFyIG1vc3RyYXJJbmZvTG9jYWwgPSAoZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQsIHRpdHVsbzpzdHJpbmcsIG5yb1NpbmNybzpudW1iZXJ8bnVsbCwgbW9zdHJhckxpbmtIZHI6IGJvb2xlYW4pPT57XHJcbiAgICBsZXQgZGF0b3NCeVBhc3MgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgbGV0IGVzdHJ1Y3R1cmEgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSk7XHJcbiAgICBpZihkYXRvc0J5UGFzcyl7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kKGh0bWwuZGl2KHtpZDonYXZpc28tc2luY3JvJ30sIFtcclxuICAgICAgICAgICAgbnJvU2luY3JvP2h0bWwucChbXCJOw7ptZXJvIGRlIHNpbmNyb25pemFjacOzbjogXCIsIGh0bWwuYihcIlwiK25yb1NpbmNyby50b1N0cmluZygpKV0pOm51bGwsXHJcbiAgICAgICAgICAgIGh0bWwuaDQodGl0dWxvKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoKSwnIGFyZWFzOiAnLGxpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmtleXMoKS5qb2luKCcsICcpXSksXHJcbiAgICAgICAgICAgIGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLm1haW5URF0pLmFycmF5KCkubGVuZ3RoKSwnIHZpdmllbmRhcyddKSxcclxuICAgICAgICAgICAgbW9zdHJhckxpbmtIZHI/aHRtbC5hKHtocmVmOicuL2NhbXBvJ30sW2h0bWwuYignSVIgQSBMQSBIT0pBIERFIFJVVEEnKV0pOm51bGxcclxuICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmRDaGlsZChodG1sLmRpdih7Y2xhc3M6J2F2aXNvJ30sW1xyXG4gICAgICAgICAgICBodG1sLmg0KCdTaXN0ZW1hIHZhY8OtbycpLFxyXG4gICAgICAgICAgICBodG1sLnAoJ05vIGhheSBpbmZvcm1hY2nDs24gZGUgZm9ybXVsYXJpb3MnKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIHZpdmllbmRhcycpXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG59XHJcbnZhciBwcm9jZWRlclNpbmNyb0Z1biA9IGFzeW5jIChidXR0b246SFRNTEJ1dHRvbkVsZW1lbnQsIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50KT0+e1xyXG4gICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICBidXR0b24uY2xhc3NOYW1lPSdkb3dubG9hZC1kbS1idXR0b24nO1xyXG4gICAgZGl2QXZpc29TaW5jcm8uaW5uZXJIVE1MPScnO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHZhciBkYXRvc0J5UGFzczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICAgICAgdmFyIGRhdG9zID0gYXdhaXQgc2luY3Jvbml6YXJEYXRvcyhkYXRvc0J5UGFzcyk7XHJcbiAgICAgICAgbW9zdHJhckluZm9Mb2NhbChkaXZBdmlzb1NpbmNybywgJ2RhdG9zIHJlY2liaWRvcycsIGRhdG9zLm51bV9zaW5jcm8sIHRydWUpXHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgdGhyb3cgZXJyXHJcbiAgICB9ZmluYWxseXtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uLWNvbnQnO1xyXG4gICAgfVxyXG59XHJcbm15T3duLndTY3JlZW5zLnNpbmNyb25pemFyX2RtPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBwcm9jZWRlckJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtjbGFzczonZG93bmxvYWQtZG0tYnV0dG9uLWNvbnQnfSwncHJvY2VkZXIg4oeSJykuY3JlYXRlKCk7XHJcbiAgICB2YXIgZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQ9aHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgIG1vc3RyYXJJbmZvTG9jYWwobWFpbkxheW91dCBhcyBIVE1MRGl2RWxlbWVudCwgJ2luZm9ybWFjacOzbiBhIHRyYW5zbWl0aXInLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gKCk9PnByb2NlZGVyU2luY3JvRnVuKHByb2NlZGVyQnV0dG9uLCBkaXZBdmlzb1NpbmNybylcclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaWNpYWxpemFyU3RhdGUoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgc3RhdGUubW9kbyA9IHtcclxuICAgICAgICBkZW1vOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIC8vIE9KTyBzdGF0ZS5vcGNpb25lcyBzZSBtb2RpZmljYSBhY8OhIHkgZW4gb3RybyBsYWRvIGNvbiBlc3RlIG1pc21vIGNhcnRlbFxyXG4gICAgc3RhdGUub3BjaW9uZXMgPSB7XHJcbiAgICAgICAgYmllbnZlbmlkbzogdHJ1ZSxcclxuICAgICAgICBmb3JQazogbnVsbCxcclxuICAgICAgICBwaWxhRm9yUGs6IFtdLFxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOiBcInJlbGV2YW1pZW50b1wiLFxyXG4gICAgICAgIG1vZG9EaXJlY3RvOiBmYWxzZSxcclxuICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOiBudWxsLFxyXG4gICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6IGZhbHNlLFxyXG4gICAgICAgIHNhbHRvQXV0b21hdGljbzogdHJ1ZSxcclxuICAgIH07XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHN0YXRlLmZlZWRiYWNrUm93VmFsaWRhdG9yID0ge307XHJcbn1cclxuLypcclxuZnVuY3Rpb24gbW9zdHJhckRhdG9zUGVyc29uYShoYXlEYXRvczpib29sZWFuLCBkYXRvczphbnksIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCl7XHJcbiAgICAvL1RPRE86IEVWQUxVQVIgU0kgQ09OVklFTkUgVFJBRVJMTyBERSBMQSBCQVNFXHJcbiAgICB2YXIgdGlwb3NEb2N1bWVudG8gPSBbJ0ROSSBhcmdlbnRpbm8nLCAnRG9jdW1lbnRvIGV4dHJhbmplcm8nLCAnTm8gdGllbmUgZG9jdW1lbnRvJywgJ090cm8nXTtcclxuICAgIHZhciBwYWlzRG9jdW1lbnRvID0gWydVcnVndWF5JywgJ1BhcmFndWF5JywgJ0JyYXNpbCcsICdCb2xpdmlhJywgJ0NoaWxlJywgJ1BlcsO6JywgJ1ZlbmV6dWVsYScsICdPdHJvJ107XHJcbiAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgaGF5RGF0b3M/XHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGF0b3MtcGVyc29uYS1jYXJnYWRhJ30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5oMihcIkRhdG9zIHBlcnNvbmFcIiksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2ZpY2hhLXBlcnNvbmEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ0FwZWxsaWRvOiAnKSwgZGF0b3MuYXBlbGxpZG9dKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbaHRtbC5sYWJlbCgnTm9tYnJlczogJyksIGRhdG9zLm5vbWJyZXNdKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmxhYmVsKCdUaXBvIGRvY3VtZW50bzogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwb3NEb2N1bWVudG9bZGF0b3MudGlwb0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTQgJiYgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnKyBkYXRvcy50aXBvRG9jdW1lbnRvRXNwZWNpZmljYWRvKycpJzonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTIgJiYgZGF0b3MucGFpc0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnUGFpczogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpc0RvY3VtZW50b1tkYXRvcy5wYWlzRG9jdW1lbnRvLTFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0b3MucGFpc0RvY3VtZW50bz09OCAmJiBkYXRvcy5wYWlzRG9jdW1lbnRvRXNwZWNpZmljYWRvPycgKCcrZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvIT0zICYmIGRhdG9zLnRpcG9Eb2N1bWVudG8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ07CuiBEb2N1bWVudG86ICcpLCBkYXRvcy5kb2N1bWVudG9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5jZWx1bGFyP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdDZWwuOiAnKSwgZGF0b3MuY2VsdWxhcl0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLmVtYWlsP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdFbWFpbDogJyksIGRhdG9zLmVtYWlsXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGVsZWZvbm9BbHRlcm5hdGl2bz9odG1sLmRpdihbaHRtbC5sYWJlbCgnVGVsLiBhbHRlcm5hdGl2bzogJyksIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5vYnNlcnZhY2lvbmVzP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdPYnNlcnZhY2lvbmVzOiAnKSwgZGF0b3Mub2JzZXJ2YWNpb25lc10pOicnLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICA6XHJcbiAgICAgICAgICAgIGh0bWwucChcIk5vIHNlIGVuY29udHLDsyB1bmEgZW5jdWVzdGEgcGFyYSBsYSBldGlxdWV0YSBjYXJnYWRhXCIpLmNyZWF0ZSgpXHJcbiAgICApXHJcbn1cclxuKi9cclxuLypteU93bi5jbGllbnRTaWRlcy50YXJlYXNUZW1Sb3c9e1xyXG4gICAgdXBkYXRlOihkZXBvdCk9PntcclxuICAgICAgICB2YXIgdGFyZWE6J25hZGEnfCdwcmVhc2lnbmFyJ3wnY2FyZ2FyJ3wncmVhbGl6YXInfCd2ZXJpZmljYXInPSduYWRhJztcclxuICAgICAgICB2YXIgcm93PWRlcG90LnJvdztcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdmFyIGlkcGVyPW15LmNvbmZpZy5pZHBlcjtcclxuICAgICAgICB2YXIgZXNwZXJhcjpib29sZWFuPWZhbHNlO1xyXG4gICAgICAgIGlmKHJvdy5oYWJpbGl0YWRhKXtcclxuICAgICAgICAgICAgaWYoIXJvdy5yZWNlcGNpb25pc3RhICYmICFyb3cuYXNpZ25hZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ByZWFzaWduYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj10cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LmFzaWduYWRvIHx8ICFyb3cuZmVjaGFfYXNpZ25hY2lvbiB8fCAhcm93Lm9wZXJhY2lvbil7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0nY2FyZ2FyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LnJlY2VwY2lvbmlzdGEhPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnJlYSl7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0ncmVhbGl6YXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hZG8hPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnZlcmlmaWNhZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ZlcmlmaWNhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9uZXI9e1xyXG4gICAgICAgICAgICByZWNlcGNpb25pc3RhICAgICAgICAgIDp0YXJlYT09J3ByZWFzaWduYXInICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGFzaWduYWRvICAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBmZWNoYV9hc2lnbmFjaW9uICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb3BlcmFjaW9uICAgICAgICAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGNhcmdhX29ic2VydmFjaW9uZXM6KHRhcmVhPT0nY2FyZ2FyJyAgICAgfHwgdGFyZWE9PSdyZWFsaXphcicgJiYgIXJvdy5jYXJnYWRvICYmICFyb3cucmVhICkgJiYgcm93LnJlY2VwY2lvbmlzdGE9PWlkcGVyICYmICdvcHRhdGl2bycsXHJcbiAgICAgICAgICAgIHZlcmlmaWNhZG8gICAgICAgICA6dGFyZWE9PSd2ZXJpZmljYXInICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBvYnNfdmVyaWZpY2FkbyAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidvcHRhdGl2bycpLFxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIocG9uZXIpLmZvckVhY2goKHZhbG9yLCBjYW1wbyk9PntcclxuICAgICAgICAgICAgaWYoIXZhbG9yKXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5yZW1vdmVBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbY2FtcG9dLnNldEF0dHJpYnV0ZSgnbXktbWFuZGF0b3J5Jyx2YWxvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uKCl7fVxyXG59XHJcbiovXHJcblxyXG52YXIgY3JlYXJCb3RvbkNlcnJhckVuY3Vlc3RhID0gKGxhYmVsOnN0cmluZyk9PntcclxuICAgIGxldCBwYXRoID0gXCJNMyAzdjE4aDE4VjNIM3ptMTQgMTIuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5elwiO1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtjbGFzczpcInN2Zy1jZXJyYXItZW5jdWVzdGFcIn0sW1xyXG4gICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgIGQ6cGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgMjYgMjZcIik7XHJcbiAgICBsZXQgdmVyID0gaHRtbC5idXR0b24oe2lkOidib3Rvbi1jZXJyYXItZW5jdWVzdGEnfSxbc3ZnLCBsYWJlbF0pLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YSA9IChvcGVyYXRpdm86SWRPcGVyYXRpdm8sdGFyZWE6SWRUYXJlYSxlbmN1ZXN0YTpudW1iZXIsIGxhYmVsOnN0cmluZyk9PntcclxuICAgIHZhciB1cCA9IHtcclxuICAgICAgICBvcGVyYXRpdm86b3BlcmF0aXZvLFxyXG4gICAgICAgIHRhcmVhOnRhcmVhLFxyXG4gICAgICAgIGVuYzplbmN1ZXN0YVxyXG4gICAgfVxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHtpZDonYm90b24tdm9sdmVyLWEtZW5jdWVzdGEnfSxsYWJlbCkuY3JlYXRlKCk7XHJcbiAgICB2ZXIub25jbGljayA9ICgpPT4gd2luZG93Lm9wZW4obG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lK215Lm1lbnVTZXBhcmF0b3IrYHc9YWJyaXJfZW5jdWVzdGEmdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWAsIEFCUklSX1RBQilcclxuICAgIHJldHVybiB2ZXJcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzID0gYXN5bmMgKGRlcG90Om15T3duLkRlcG90LCBmaWVsZE5hbWU6c3RyaW5nLCBsYWJlbDonYWJyaXInfCd2ZXInKT0+e1xyXG4gICAgdGFyZWFzID0gdGFyZWFzP3RhcmVhczooYXdhaXQgbXlPd24uYWpheC50YWJsZV9kYXRhKHt0YWJsZTogYHRhcmVhc2AsIGZpeGVkRmllbGRzOltdfSkpO1xyXG4gICAgdmFyIG1pc1RhcmVhcyA9IHRhcmVhcy5maWx0ZXIoKHRhcmVhKT0+XHJcbiAgICAgICAgISF0YXJlYS5tYWluX2Zvcm0gJiYgdGFyZWEub3BlcmF0aXZvPT1kZXBvdC5yb3cub3BlcmF0aXZvICYmIChkZXBvdC5tYW5hZ2VyLmRlZi5tdWVzdHJhQWJyaXJFblRvZGFzTGFzVGFyZWFzP3RydWU6ZGVwb3Qucm93LnRhcmVhID09IHRhcmVhLnRhcmVhKVxyXG4gICAgKTtcclxuICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uaW5uZXJIVE1MPScnO1xyXG4gICAgbWlzVGFyZWFzLmZvckVhY2goKHRhcmVhOnt0YXJlYTpzdHJpbmcsIG5vbWJyZTpzdHJpbmcsIG1haW5fZm9ybTpJZEZvcm11bGFyaW99KT0+e1xyXG4gICAgICAgIGxldCBidXR0b25MYWJlbCA9IGAke2xhYmVsfSAke3RhcmVhLnRhcmVhfWA7XHJcbiAgICAgICAgbGV0IHZlciA9IGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICBkZXBvdC5yb3cub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICB0YXJlYS50YXJlYSBhcyBJZFRhcmVhLCBcclxuICAgICAgICAgICAgTnVtYmVyKGRlcG90LnJvdy5lbmMpLFxyXG4gICAgICAgICAgICBidXR0b25MYWJlbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmVyLnN0eWxlPSdtYXJnaW46MHB4IDJweDsnO1xyXG4gICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uYXBwZW5kQ2hpbGQodmVyKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbnZhciBnZXRBYnJpck92ZXIgPSAoZGVwb3Q6bXlPd24uRGVwb3QsX2ZpZWxkTmFtZTpzdHJpbmcpPT5cclxuICAgIChkZXBvdC5yb3cuY2FyZ2Fkb19kbSB8fCAhZGVwb3Qucm93Wydlc3RhZG9zX19wZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSddICYmIGRlcG90LnJvdy5hc2lnbmFkbyAhPSBteS5jb25maWcuaWRwZXIpP1xyXG4gICAgICAgICd2ZXInOidhYnJpcidcclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciBsYWJlbDondmVyJ3wnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsZmllbGROYW1lLGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpclJlY2VwY2lvbj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciBsYWJlbDondmVyJ3wnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsZmllbGROYW1lLGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy52ZXJJY29ub1N2Zz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgIGlmKGRlcG90LnJvdy5wYXRoX2ljb25vX3N2Zyl7XHJcbiAgICAgICAgICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7XHJcbiAgICAgICAgICAgICAgICBjbGFzczpcInN2Zy1hY2Npb25lc1wiXHJcbiAgICAgICAgICAgIH0sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgICAgICAgICBkOmRlcG90LnJvdy5wYXRoX2ljb25vX3N2Z1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgNTAgNTBcIik7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKHN2Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGNyZWFyU1ZHID0gKHBhdGg6c3RyaW5nLHByb3BzOmFueSkgPT4ge1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHByb3BzIHx8IHt9LFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOnBhdGhcclxuICAgICAgICB9KVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgcmV0dXJuIHN2Z1xyXG59XHJcbnZhciBjcmVhckJvdG9uQWNjaW9uID0gKGRlcG90Om15T3duLkRlcG90LCBhY3Rpb246RXN0YWRvQWNjaW9uKT0+e1xyXG4gICAgbGV0ICBhY2Npb25TaW5HdWlvbmVzID0gYWN0aW9uLmVhY2Npb24ucmVwbGFjZSgnXycsJyAnKTtcclxuICAgIHZhciBzdmcgPSBjcmVhclNWRyhhY3Rpb24ucGF0aF9pY29ub19zdmcse2NsYXNzOlwic3ZnLWFjY2lvbmVzXCJ9KVxyXG4gICAgaWYoYWN0aW9uLmRlc2FjdGl2YV9ib3Rvbil7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwuc3Bhbih7Y2xhc3M6YHNpbi1ib3Rvbi1hY2Npb25gfSxbYWNjaW9uU2luR3Vpb25lcywgc3ZnIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnRdKS5jcmVhdGUoKVxyXG4gICAgfVxyXG4gICAgbGV0IGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICBjbGFzczpgYm90b24tYWNjaW9uIGJvdG9uLWFjY2lvbi0ke2FjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbn1gXHJcbiAgICB9LFtcclxuICAgICAgICBgJHthY2Npb25TaW5HdWlvbmVzfWAsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIHN2ZyBlcyBodG1sZWxlbWVudFxyXG4gICAgICAgIGFjdGlvbi5wYXRoX2ljb25vX3N2Zz9zdmc6bnVsbCxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgYnV0dG9uLm9uY2xpY2sgPSAoKT0+IHtcclxuICAgICAgICB2YXIgYWN0aW9uRnVuID0gYXN5bmMgKCk9PntcclxuICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguYWNjaW9uX3RhcmVhc190ZW1fZWplY3V0YXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYTogZGVwb3Qucm93LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBjb25kaWNpb246IGFjdGlvbi5jb25kaWNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uOiBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWFzVGVtVGFibGU6IGRlcG90LmRlZi5uYW1lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCx7cmV0cmlldmVJZ25vcmluZ1doZXJlOnRydWV9KSAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoYWN0aW9uLm5vbWJyZV93c2NyZWVuKXtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE8gYWNvbW9kYXIgZXN0byBlbiBhbGd1biBtb21lbnRvXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IGRlcG90LnJvdztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzpwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTpwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYzogTnVtYmVyKHBhcmFtcy5lbmMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PSR7YWN0aW9uLm5vbWJyZV93c2NyZWVufSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYCwgQUJSSVJfVEFCKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgIC8vcmV0cmFzbyBsYSBoYWJpbGl0YWNpw7NuIHBvcnF1ZSBhIHZlY2VzIHRhcmRhIGVuIHJlZGlidWphcnNlIGxhIGJvdG9uZXJhIHkgcHVlZGUgdHJhZXIgcHJvYmxlbWFzIHNpIGRhbiBkb2JsZSBjbGljayBcclxuICAgICAgICAgICAgICAgIC8veWEgcXVlIGVqZWN1dGEgbnVldmFtZW50ZSB1bmEgYWNjacOzbiBxdWUgeWEgc2UgZWplY3V0w7MgKHkgdGVybWluw7MpIGFudGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5idXR0b24uZGlzYWJsZWQ9ZmFsc2UsMzAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgY29uZmlybVByb21pc2VPcHRzOiBEaWFsb2dPcHRpb25zID0ge31cclxuICAgICAgICBpZihhY3Rpb24uY29uZmlybWEpe1xyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZU9wdHMuYXNrRm9yTm9SZXBlYXQgPSAnbm8gdm9sdmVyIGEgbW9zdHJhcic7IC8vbXVlc3RyYSBtZW5zYWplIHBvciBkZWZhdWx0IHBlcm8gYW5kYSBpZ3VhbFxyXG4gICAgICAgICAgICB2YXIgYnV0dG9uc0RlZiA9IFtcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonc8OtJywgdmFsdWU6dHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6J25vJywgdmFsdWU6ZmFsc2V9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgY29uZmlybVByb21pc2UoYGNvbmZpcm1hIGFjY2nDs24gXCIke2FjY2lvblNpbkd1aW9uZXN9XCI/YCwgey4uLmNvbmZpcm1Qcm9taXNlT3B0cywgYnV0dG9uc0RlZn0pLnRoZW4oYWN0aW9uRnVuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWN0aW9uRnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1dHRvblxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzQWNjaW9uZXMgPSBhc3luYyAob3B0czp7ZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGRpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9ufSk9PntcclxuICAgIGxldCB7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbn0gPSBvcHRzO1xyXG4gICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgIChkZXBvdC5yb3dDb250cm9scy5hY2Npb25lcy5nZXRUeXBlZFZhbHVlKCl8fFtdKVxyXG4gICAgICAgIC5maWx0ZXIoKGFjdGlvbjpFc3RhZG9BY2Npb24pPT5hY3Rpb24uZWFjY2lvbl9kaXJlY2Npb249PWRpcmVjY2lvbilcclxuICAgICAgICAuZm9yRWFjaCgoYWN0aW9uOkVzdGFkb0FjY2lvbik9PnRkLmFwcGVuZENoaWxkKGNyZWFyQm90b25BY2Npb24oZGVwb3QsIGFjdGlvbikpKTtcclxufVxyXG5cclxudmFyIGNyZWFyU3dpdGNoID0gKG9wdHM6e3JvdW5kPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbiwgY2hlY2tlZD86Ym9vbGVhbiwgb25DbGlja0Z1bjpGdW5jdGlvbiwgb25FcnJGdW4/OkZ1bmN0aW9ufSk9PntcclxuICAgIHZhciBjaGVja2JveCA9IGh0bWwuaW5wdXQoe3R5cGU6J2NoZWNrYm94JywgY2hlY2tlZDpvcHRzLmNoZWNrZWR9KS5jcmVhdGUoKTtcclxuICAgIGNoZWNrYm94Lm9uY2xpY2sgPSBhc3luYygpPT57XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uQ2xpY2tGdW4oKVxyXG4gICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHRtbC5sYWJlbCh7Y2xhc3M6J3N3aXRjaCd9LFtcclxuICAgICAgICBjaGVja2JveCxcclxuICAgICAgICBodG1sLnNwYW4oe2NsYXNzOmBzbGlkZXIgJHtvcHRzLnJvdW5kPydyb3VuZCc6Jyd9YH0pLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbn1cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmhhYmlsaXRhcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgY3JlYXJTd2l0Y2goe1xyXG4gICAgICAgICAgICAgICAgcm91bmQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6ZGVwb3Qucm93LmhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRnVuOiBhc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5ncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCksMzAwKTsvL3BhcmEgcXVlIHNlIHZlYSBlbCBlZmVjdG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNBdmFuY2U9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjonYXZhbmNlJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNSZXRyb2Nlc289e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjoncmV0cm9jZXNvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNCbGFucXVlbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidibGFucXVlbyd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIFxyXG5ib3RvbkNsaWVudFNpZGVFbkdyaWxsYShvcHRzOiB7IG5vbWJyZUJvdG9uOiBzdHJpbmcsIGxsYW1hZGE6IChkZXBvdDogbXlPd24uRGVwb3QpID0+IFByb21pc2U8YW55PiB9KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKG9wdHMubm9tYnJlQm90b24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIHZhciByZXN0YXVyYXJCb3RvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9IG9wdHMubm9tYnJlQm90b247XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYm90b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ3Byb2Nlc2FuZG8uLi4nO1xyXG4gICAgICAgICAgICAgICAgb3B0cy5sbGFtYWRhKGRlcG90KS50aGVuKGFzeW5jIGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICdvaycgaW4gcmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMuZm9yY2VEaXNwbGF5RGV0YWlsR3JpZCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gIHJlc3VsdC5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGl0bGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzhGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGRjgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYgKChkZXBvdC5yb3cuY29uc2lzdGlkbz09bnVsbCAgJiYgZGVwb3Qucm93LnJlYSE9bnVsbCkgfHwgZGVwb3Qucm93Lm1vZGlmaWNhZG8hPW51bGwgJiYgZGVwb3Qucm93LmNvbnNpc3RpZG8hPW51bGwgJiYgZGVwb3Qucm93Lm1vZGlmaWNhZG8gPmRlcG90LnJvdy5jb25zaXN0aWRvKXtcclxuICAgICAgICAgICAgLy8gICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yPScjOENGJ1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIG15UmVhRmllbGROYW1lID0gZGVwb3QubWFuYWdlci5kZWYudGFibGVOYW1lPT1cInRlbVwiPydyZWEnOid1bHRfcmVhJztcclxuICAgICAgICB2YXIgZmlsdHJvUmVhPWNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbbXlSZWFGaWVsZE5hbWVdLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWE/IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBpZF9jYXNvOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgfSk6IGFsZXJ0UHJvbWlzZSgnTGEgZW5jdWVzdGEgZGViZSB0ZW5lciBkYXRvIGVuIHJlYSBwYXJhIHBvZGVyIGNvbnNpc3RpcmxhLicpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIGlmKHJlc3VsdC5yb3dzLmxlbmd0aCl7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRUb2tlbjpzdHJpbmd8bnVsbCA9IG51bGxcclxuICAgICAgICB2YXIgbnJvQ2FyZ2EgPSAwO1xyXG4gICAgICAgIHZhciBlbmN1ZXN0YXNEaXY6IG51bGx8SFRNTERpdkVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChodG1sLmgyKCdvcGVyYXRpdm86ICcgKyByZXN1bHQub3BlcmF0aXZvKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgcmVzdWx0LnJvd3MuZm9yRWFjaCgoZW5jdWVzdGEpPT57XHJcbiAgICAgICAgICAgIGlmKGN1cnJlbnRUb2tlbiAhPSBlbmN1ZXN0YS5jYXJnYWRvX2RtKXtcclxuICAgICAgICAgICAgICAgIG5yb0NhcmdhKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBlbmN1ZXN0YS5jYXJnYWRvX2RtO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDQoJ2NhcmdhIE7CuiAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgZW5jdWVzdGFzRGl2ID0gaHRtbC5kaXYoe2NsYXNzOidlbmN1ZXN0YXMtYS1ibGFucXVlYXInfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvL2xhcyBjb3BpbyBjb24gbGV0IHBhcmEgcXVlIHRvbWUgZWwgdmFsb3IgYWN0dWFsIHkgbm8gZWwgw7psdGltb1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pVG9rZW4gPSBjdXJyZW50VG9rZW47XHJcbiAgICAgICAgICAgICAgICBsZXQgbWlOcm9DYXJnYSA9IG5yb0NhcmdhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczpgYm90b24tYmxhbnF1ZWFyLWRtIGJvdG9uLWFjY2lvbmBcclxuICAgICAgICAgICAgICAgIH0sICdibGFucXVlYXIgY2FyZ2EgJyArIG5yb0NhcmdhLnRvU3RyaW5nKCkpLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSBhc3luYyAoKT0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2Rhbmdlcid9LCBbYEVzdMOhIHBvciBibGFucXVlYXIgbGEgY2FyZ2EgJHttaU5yb0NhcmdhfS4gTm8gc2UgcG9kcsOhIGRlc2NhcmdhciBlbCBkaXNwb3NpdGl2by5gXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEZvcnphciA9IGh0bWwuaW5wdXQoe2NsYXNzOidpbnB1dC1mb3J6YXInfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFsnU2UgcHVlZGUgZm9yemFyIGVsIGJsYW5xdWVvICcsaW5wdXRGb3J6YXJdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yemFyID0gYXdhaXQgY29uZmlybVByb21pc2UobWFpbkRpdiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ2xvc2VCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNEZWY6W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsOidmb3J6YXIgYmxhbnF1ZW8nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsYWJlbDonY2FuY2VsYXIgYmxhbnF1ZW8nLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGZvcnphcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlucHV0Rm9yemFyLnZhbHVlPT0nZm9yemFyJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdEJsYW5xdWVvID0gYXdhaXQgbXkuYWpheC5kbV9ibGFucXVlYXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHJlc3VsdC5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBtaVRva2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmlubmVySFRNTD0nJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRCbGFucXVlby5mb3JFYWNoKCh0dDphbnkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnNwYW4oe30sYCR7dHQucmVzdWx0X2JsYW5xdWVvfWApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWZpbmFsbHl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ3NpIG5lY2VzaXRhIGJsYW5xdWVhciBlc2NyaWJhIGZvcnphci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3Rhc0Rpdik7XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbmN1ZXN0YXNEaXY/LmFwcGVuZENoaWxkKGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwuc3BhbihgZW5jdWVzdGE6ICR7ZW5jdWVzdGEuZW5jfSBgKSxcclxuICAgICAgICAgICAgICAgIGh0bWwuc3BhbihgdGFyZWE6ICAke2VuY3Vlc3RhLnRhcmVhfSBgKSxcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG89ZnVuY3Rpb24ocmVzdWx0LCBkaXZSZXN1bHQpe1xyXG4gICAgbGV0IHtjYXNvVGVtfSA9ICByZXN1bHQ7XHJcbiAgICBpZihjYXNvVGVtKXtcclxuICAgICAgICBpZihjYXNvVGVtLmpzb25fZW5jdWVzdGEpe1xyXG4gICAgICAgICAgICB2YXIgZW5jdWVzdGFEaXYgPSBodG1sLmRpdih7aWQ6J2JhY2t1cC1kaXYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChlbmN1ZXN0YURpdik7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOmBib3Rvbi1ibGFucXVlYXItZW5jdWVzdGEtYWNjaW9uYFxyXG4gICAgICAgICAgICB9LCAnYmxhbnF1ZWFyIGVuY3Vlc3RhJykuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCk9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2Rhbmdlcid9LCBbYEVzdMOhIHBvciBibGFucXVlYXIgbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY30uIFNlIHBlcmRlcsOhbiBsb3MgZGF0b3MgZGUgbGEgbWlzbWEuYF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRGb3J6YXIgPSBodG1sLmlucHV0KHtjbGFzczonaW5wdXQtZm9yemFyJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoWydTZSBwdWVkZSBmb3J6YXIgZWwgYmxhbnF1ZW8gJyxpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yemFyID0gYXdhaXQgY29uZmlybVByb21pc2UobWFpbkRpdiwge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0OmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNEZWY6W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2ZvcnphciBibGFucXVlbycsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2NhbmNlbGFyIGJsYW5xdWVvJywgdmFsdWU6ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZihmb3J6YXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0Rm9yemFyLnZhbHVlPT0nZm9yemFyJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoe3NyYzonaW1nL2xvYWRpbmcxNi5naWYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZCh3YWl0R2lmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRCbGFucXVlbyA9IGF3YWl0IG15LmFqYXguZW5jdWVzdGFfYmxhbnF1ZWFyKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmlubmVySFRNTD1yZXN1bHRCbGFucXVlbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ3NpIG5lY2VzaXRhIGJsYW5xdWVhciBlc2NyaWJhIGZvcnphci4nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7aWQ6J21lbnNhamUtbm8taGF5LWpzb24tZW5jdWVzdGEnfSxgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgcGFyYSBsYSBlbmN1ZXN0YSAke2Nhc29UZW0uZW5jfWApLmNyZWF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLmRlbW89YXN5bmMgZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsIGdsb2JhbFxyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe21vZG9EZW1vOnRydWV9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0PFQ+KGFycmF5czpUW11bXSk6VFtde1xyXG4gICAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcclxufVxyXG4iXX0=
@@ -8,7 +8,7 @@ export * from "./types-dmencu";
8
8
  export declare function emergeAppDmEncu<T extends procesamiento.Constructor<procesamiento.AppProcesamientoType>>(Base: T): {
9
9
  new (...args: any[]): {
10
10
  canChangePass(reqOrContext: any, userToChangePass: any): Promise<boolean>;
11
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
11
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
12
12
  checkDatabaseStructure(_client: Client): Promise<void>;
13
13
  addSchrödingerServices(mainApp: procesamiento.Express, baseUrl: string): void;
14
14
  getColorsJson(_sufijo: SufijosAmbiente): {
@@ -27,7 +27,7 @@ export declare function emergeAppDmEncu<T extends procesamiento.Constructor<proc
27
27
  getClientSetupForSendToFrontEnd(req: Request): Promise<{
28
28
  idper: string | undefined;
29
29
  setup: Record<string, any>;
30
- procedures: procesamiento.ProcedureDef[];
30
+ procedures: procesamiento.ProcedureDef<any>[];
31
31
  }>;
32
32
  createResourcesForCacheJson(): {
33
33
  version: string;
@@ -83,43 +83,43 @@ export declare function emergeAppDmEncu<T extends procesamiento.Constructor<proc
83
83
  };
84
84
  prepareGetTables(): void;
85
85
  tablasDatos: procesamiento.TablaDatos[];
86
- procedures: procesamiento.ProcedureDef[];
86
+ procedures: procesamiento.ProcedureDef<any>[];
87
87
  procedure: {
88
- [key: string]: procesamiento.ProcedureDef;
88
+ [key: string]: procesamiento.ProcedureDef<any>;
89
89
  } & {
90
- [key: string]: procesamiento.ProcedureDef;
90
+ [key: string]: procesamiento.ProcedureDef<any>;
91
91
  } & {
92
- [key: string]: procesamiento.ProcedureDef;
92
+ [key: string]: procesamiento.ProcedureDef<any>;
93
93
  } & {
94
- [key: string]: procesamiento.ProcedureDef;
94
+ [key: string]: procesamiento.ProcedureDef<any>;
95
95
  } & {
96
- [key: string]: procesamiento.ProcedureDef;
96
+ [key: string]: procesamiento.ProcedureDef<any>;
97
97
  } & {
98
- [key: string]: procesamiento.ProcedureDef;
98
+ [key: string]: procesamiento.ProcedureDef<any>;
99
99
  } & {
100
- [key: string]: procesamiento.ProcedureDef;
100
+ [key: string]: procesamiento.ProcedureDef<any>;
101
101
  } & {
102
- [key: string]: procesamiento.ProcedureDef;
102
+ [key: string]: procesamiento.ProcedureDef<any>;
103
103
  } & {
104
- [key: string]: procesamiento.ProcedureDef;
104
+ [key: string]: procesamiento.ProcedureDef<any>;
105
105
  } & {
106
- [key: string]: procesamiento.ProcedureDef;
106
+ [key: string]: procesamiento.ProcedureDef<any>;
107
107
  } & {
108
- [key: string]: procesamiento.ProcedureDef;
108
+ [key: string]: procesamiento.ProcedureDef<any>;
109
109
  } & {
110
- [key: string]: procesamiento.ProcedureDef;
110
+ [key: string]: procesamiento.ProcedureDef<any>;
111
111
  } & {
112
- [key: string]: procesamiento.ProcedureDef;
112
+ [key: string]: procesamiento.ProcedureDef<any>;
113
113
  } & {
114
- [key: string]: procesamiento.ProcedureDef;
114
+ [key: string]: procesamiento.ProcedureDef<any>;
115
115
  } & {
116
- [key: string]: procesamiento.ProcedureDef;
116
+ [key: string]: procesamiento.ProcedureDef<any>;
117
117
  } & {
118
- [key: string]: procesamiento.ProcedureDef;
118
+ [key: string]: procesamiento.ProcedureDef<any>;
119
119
  } & {
120
- [key: string]: procesamiento.ProcedureDef;
120
+ [key: string]: procesamiento.ProcedureDef<any>;
121
121
  } & {
122
- [key: string]: procesamiento.ProcedureDef;
122
+ [key: string]: procesamiento.ProcedureDef<any>;
123
123
  };
124
124
  app: procesamiento.ExpressPlus;
125
125
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -424,10 +424,10 @@ export declare function emergeAppDmEncu<T extends procesamiento.Constructor<proc
424
424
  appendToTableDefinition: ((tableName: string, appenderFunction: (tableDef: procesamiento.TableDefinition, context?: procesamiento.TableContext | undefined) => void) => void) & ((tableName: string, appenderFunction: (tableDef: procesamiento.TableDefinition, context?: procesamiento.TableContext | undefined) => void) => void);
425
425
  addUnloggedServices: ((mainApp: procesamiento.ExpressPlus, baseUrl: string) => void) & ((mainApp: procesamiento.ExpressPlus, baseUrl: string) => void);
426
426
  isAdmin: (() => boolean) & (() => boolean);
427
- inDbClient: (<T_6>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_6>) => Promise<T_6>) & (<T>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T>) => Promise<T>);
428
- inTransaction: (<T_1_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1_1>) => Promise<T_1_1>) & (<T_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1>) => Promise<T_1>);
427
+ inDbClient: (<T_6>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_6>) => Promise<T_6>) & (<T>(req: procesamiento.RequestDb | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T>) => Promise<T>);
428
+ inTransaction: (<T_1_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1_1>) => Promise<T_1_1>) & (<T_1>(req: procesamiento.RequestDb | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1>) => Promise<T_1>);
429
429
  inTransactionProcedureContext: (<T_2_1>(req: procesamiento.Request | null, coreFunction: (context: procesamiento.ProcedureContext) => Promise<T_2_1>) => Promise<T_2_1>) & (<T_2>(req: procesamiento.Request | null, coreFunction: (context: procesamiento.ProcedureContext) => Promise<T_2>) => Promise<T_2>);
430
- procedureDefCompleter: ((procedureDef: procesamiento.ProcedureDef) => procesamiento.ProcedureDef) & ((procedureDef: procesamiento.ProcedureDef) => procesamiento.ProcedureDef);
430
+ procedureDefCompleter: ((procedureDef: procesamiento.ProcedureDef<any>) => procesamiento.ProcedureDef<any>) & (<T_3>(procedureDef: procesamiento.ProcedureDef<any>) => procesamiento.ProcedureDef<T_3>);
431
431
  tableDefAdapt: ((tableDef: procesamiento.TableDefinition, context: procesamiento.Context) => procesamiento.TableDefinition) & ((tableDef: procesamiento.TableDefinition, context: procesamiento.Context) => procesamiento.TableDefinition);
432
432
  pushApp: ((dirname: string) => void) & ((dirname: string) => void);
433
433
  dumpDbTableFields: ((tableDefinition: procesamiento.TableDefinition) => string[]) & ((tableDefinition: procesamiento.TableDefinition) => string[]);
@@ -445,10 +445,10 @@ export declare function emergeAppDmEncu<T extends procesamiento.Constructor<proc
445
445
  }) & ((req: {} | procesamiento.Request, offlineMode?: boolean | undefined, opts?: procesamiento.OptsClientPage | undefined) => {
446
446
  toHtmlDoc: () => string;
447
447
  });
448
- isThisProcedureAllowed: (<T_3_1>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef, params: {
448
+ isThisProcedureAllowed: (<T_3_1>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef<any>, params: {
449
449
  [key: string]: T_3_1;
450
- }) => Promise<boolean>) & (<T_3>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef, params: {
451
- [key: string]: T_3;
450
+ }) => Promise<boolean>) & (<T_4>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef<any>, params: {
451
+ [key: string]: T_4;
452
452
  }) => Promise<boolean>);
453
453
  shootDownBackend(): Promise<void>;
454
454
  setLog: ((opts: {
@@ -477,7 +477,7 @@ export declare function emergeAppDmEncu<T extends procesamiento.Constructor<proc
477
477
  export declare var AppDmEncu: {
478
478
  new (...args: any[]): {
479
479
  canChangePass(reqOrContext: any, userToChangePass: any): Promise<boolean>;
480
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
480
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
481
481
  checkDatabaseStructure(_client: Client): Promise<void>;
482
482
  addSchrödingerServices(mainApp: procesamiento.Express, baseUrl: string): void;
483
483
  getColorsJson(_sufijo: SufijosAmbiente): {
@@ -496,7 +496,7 @@ export declare var AppDmEncu: {
496
496
  getClientSetupForSendToFrontEnd(req: Request): Promise<{
497
497
  idper: string | undefined;
498
498
  setup: Record<string, any>;
499
- procedures: procesamiento.ProcedureDef[];
499
+ procedures: procesamiento.ProcedureDef<any>[];
500
500
  }>;
501
501
  createResourcesForCacheJson(): {
502
502
  version: string;
@@ -552,43 +552,43 @@ export declare var AppDmEncu: {
552
552
  };
553
553
  prepareGetTables(): void;
554
554
  tablasDatos: procesamiento.TablaDatos[];
555
- procedures: procesamiento.ProcedureDef[];
555
+ procedures: procesamiento.ProcedureDef<any>[];
556
556
  procedure: {
557
- [key: string]: procesamiento.ProcedureDef;
557
+ [key: string]: procesamiento.ProcedureDef<any>;
558
558
  } & {
559
- [key: string]: procesamiento.ProcedureDef;
559
+ [key: string]: procesamiento.ProcedureDef<any>;
560
560
  } & {
561
- [key: string]: procesamiento.ProcedureDef;
561
+ [key: string]: procesamiento.ProcedureDef<any>;
562
562
  } & {
563
- [key: string]: procesamiento.ProcedureDef;
563
+ [key: string]: procesamiento.ProcedureDef<any>;
564
564
  } & {
565
- [key: string]: procesamiento.ProcedureDef;
565
+ [key: string]: procesamiento.ProcedureDef<any>;
566
566
  } & {
567
- [key: string]: procesamiento.ProcedureDef;
567
+ [key: string]: procesamiento.ProcedureDef<any>;
568
568
  } & {
569
- [key: string]: procesamiento.ProcedureDef;
569
+ [key: string]: procesamiento.ProcedureDef<any>;
570
570
  } & {
571
- [key: string]: procesamiento.ProcedureDef;
571
+ [key: string]: procesamiento.ProcedureDef<any>;
572
572
  } & {
573
- [key: string]: procesamiento.ProcedureDef;
573
+ [key: string]: procesamiento.ProcedureDef<any>;
574
574
  } & {
575
- [key: string]: procesamiento.ProcedureDef;
575
+ [key: string]: procesamiento.ProcedureDef<any>;
576
576
  } & {
577
- [key: string]: procesamiento.ProcedureDef;
577
+ [key: string]: procesamiento.ProcedureDef<any>;
578
578
  } & {
579
- [key: string]: procesamiento.ProcedureDef;
579
+ [key: string]: procesamiento.ProcedureDef<any>;
580
580
  } & {
581
- [key: string]: procesamiento.ProcedureDef;
581
+ [key: string]: procesamiento.ProcedureDef<any>;
582
582
  } & {
583
- [key: string]: procesamiento.ProcedureDef;
583
+ [key: string]: procesamiento.ProcedureDef<any>;
584
584
  } & {
585
- [key: string]: procesamiento.ProcedureDef;
585
+ [key: string]: procesamiento.ProcedureDef<any>;
586
586
  } & {
587
- [key: string]: procesamiento.ProcedureDef;
587
+ [key: string]: procesamiento.ProcedureDef<any>;
588
588
  } & {
589
- [key: string]: procesamiento.ProcedureDef;
589
+ [key: string]: procesamiento.ProcedureDef<any>;
590
590
  } & {
591
- [key: string]: procesamiento.ProcedureDef;
591
+ [key: string]: procesamiento.ProcedureDef<any>;
592
592
  };
593
593
  app: procesamiento.ExpressPlus;
594
594
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -893,10 +893,10 @@ export declare var AppDmEncu: {
893
893
  appendToTableDefinition: ((tableName: string, appenderFunction: (tableDef: procesamiento.TableDefinition, context?: procesamiento.TableContext | undefined) => void) => void) & ((tableName: string, appenderFunction: (tableDef: procesamiento.TableDefinition, context?: procesamiento.TableContext | undefined) => void) => void);
894
894
  addUnloggedServices: ((mainApp: procesamiento.ExpressPlus, baseUrl: string) => void) & ((mainApp: procesamiento.ExpressPlus, baseUrl: string) => void);
895
895
  isAdmin: (() => boolean) & (() => boolean);
896
- inDbClient: (<T_6>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_6>) => Promise<T_6>) & (<T>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T>) => Promise<T>);
897
- inTransaction: (<T_1_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1_1>) => Promise<T_1_1>) & (<T_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1>) => Promise<T_1>);
896
+ inDbClient: (<T_6>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_6>) => Promise<T_6>) & (<T>(req: procesamiento.RequestDb | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T>) => Promise<T>);
897
+ inTransaction: (<T_1_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1_1>) => Promise<T_1_1>) & (<T_1>(req: procesamiento.RequestDb | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1>) => Promise<T_1>);
898
898
  inTransactionProcedureContext: (<T_2_1>(req: procesamiento.Request | null, coreFunction: (context: procesamiento.ProcedureContext) => Promise<T_2_1>) => Promise<T_2_1>) & (<T_2>(req: procesamiento.Request | null, coreFunction: (context: procesamiento.ProcedureContext) => Promise<T_2>) => Promise<T_2>);
899
- procedureDefCompleter: ((procedureDef: procesamiento.ProcedureDef) => procesamiento.ProcedureDef) & ((procedureDef: procesamiento.ProcedureDef) => procesamiento.ProcedureDef);
899
+ procedureDefCompleter: ((procedureDef: procesamiento.ProcedureDef<any>) => procesamiento.ProcedureDef<any>) & (<T_3>(procedureDef: procesamiento.ProcedureDef<any>) => procesamiento.ProcedureDef<T_3>);
900
900
  tableDefAdapt: ((tableDef: procesamiento.TableDefinition, context: procesamiento.Context) => procesamiento.TableDefinition) & ((tableDef: procesamiento.TableDefinition, context: procesamiento.Context) => procesamiento.TableDefinition);
901
901
  pushApp: ((dirname: string) => void) & ((dirname: string) => void);
902
902
  dumpDbTableFields: ((tableDefinition: procesamiento.TableDefinition) => string[]) & ((tableDefinition: procesamiento.TableDefinition) => string[]);
@@ -914,10 +914,10 @@ export declare var AppDmEncu: {
914
914
  }) & ((req: {} | procesamiento.Request, offlineMode?: boolean | undefined, opts?: procesamiento.OptsClientPage | undefined) => {
915
915
  toHtmlDoc: () => string;
916
916
  });
917
- isThisProcedureAllowed: (<T_3_1>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef, params: {
917
+ isThisProcedureAllowed: (<T_3_1>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef<any>, params: {
918
918
  [key: string]: T_3_1;
919
- }) => Promise<boolean>) & (<T_3>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef, params: {
920
- [key: string]: T_3;
919
+ }) => Promise<boolean>) & (<T_4>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef<any>, params: {
920
+ [key: string]: T_4;
921
921
  }) => Promise<boolean>);
922
922
  shootDownBackend(): Promise<void>;
923
923
  setLog: ((opts: {
@@ -943,27 +943,27 @@ export declare var AppDmEncu: {
943
943
  shutdownBackend(): Promise<void>;
944
944
  };
945
945
  } & (new (...args: any[]) => {
946
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
946
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
947
947
  clientIncludes(req: procesamiento.Request, hideBEPlusInclusions: procesamiento.OptsClientPage): procesamiento.ClientModuleDefinition[];
948
948
  configStaticConfig(): void;
949
949
  tablasDatos: procesamiento.TablaDatos[];
950
- procedures: procesamiento.ProcedureDef[];
950
+ procedures: procesamiento.ProcedureDef<any>[];
951
951
  procedure: {
952
- [key: string]: procesamiento.ProcedureDef;
952
+ [key: string]: procesamiento.ProcedureDef<any>;
953
953
  } & {
954
- [key: string]: procesamiento.ProcedureDef;
954
+ [key: string]: procesamiento.ProcedureDef<any>;
955
955
  } & {
956
- [key: string]: procesamiento.ProcedureDef;
956
+ [key: string]: procesamiento.ProcedureDef<any>;
957
957
  } & {
958
- [key: string]: procesamiento.ProcedureDef;
958
+ [key: string]: procesamiento.ProcedureDef<any>;
959
959
  } & {
960
- [key: string]: procesamiento.ProcedureDef;
960
+ [key: string]: procesamiento.ProcedureDef<any>;
961
961
  } & {
962
- [key: string]: procesamiento.ProcedureDef;
962
+ [key: string]: procesamiento.ProcedureDef<any>;
963
963
  } & {
964
- [key: string]: procesamiento.ProcedureDef;
964
+ [key: string]: procesamiento.ProcedureDef<any>;
965
965
  } & {
966
- [key: string]: procesamiento.ProcedureDef;
966
+ [key: string]: procesamiento.ProcedureDef<any>;
967
967
  };
968
968
  app: procesamiento.ExpressPlus;
969
969
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -1102,7 +1102,7 @@ export declare var AppDmEncu: {
1102
1102
  messages: Record<procesamiento.LangId, Record<string, string>>;
1103
1103
  };
1104
1104
  }) & (new (...args: any[]) => {
1105
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
1105
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
1106
1106
  clientIncludes(req: procesamiento.Request, hideBEPlusInclusions: procesamiento.OptsClientPage): procesamiento.ClientModuleDefinition[];
1107
1107
  configStaticConfig(): void;
1108
1108
  getMenu(): procesamiento.MenuDefinition;
@@ -1110,15 +1110,15 @@ export declare var AppDmEncu: {
1110
1110
  prepareGetTables(): void;
1111
1111
  generateAndLoadTableDefs(): procesamiento.TableDefinitions;
1112
1112
  tablasDatos: procesamiento.TablaDatos[];
1113
- procedures: procesamiento.ProcedureDef[];
1113
+ procedures: procesamiento.ProcedureDef<any>[];
1114
1114
  procedure: {
1115
- [key: string]: procesamiento.ProcedureDef;
1115
+ [key: string]: procesamiento.ProcedureDef<any>;
1116
1116
  } & {
1117
- [key: string]: procesamiento.ProcedureDef;
1117
+ [key: string]: procesamiento.ProcedureDef<any>;
1118
1118
  } & {
1119
- [key: string]: procesamiento.ProcedureDef;
1119
+ [key: string]: procesamiento.ProcedureDef<any>;
1120
1120
  } & {
1121
- [key: string]: procesamiento.ProcedureDef;
1121
+ [key: string]: procesamiento.ProcedureDef<any>;
1122
1122
  };
1123
1123
  app: procesamiento.ExpressPlus;
1124
1124
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -1198,7 +1198,7 @@ export declare var AppDmEncu: {
1198
1198
  };
1199
1199
  }) & (new (...args: any[]) => {
1200
1200
  configStaticConfig(): void;
1201
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
1201
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
1202
1202
  clientIncludes(req: procesamiento.Request, hideBEPlusInclusions: procesamiento.OptsClientPage): procesamiento.ClientModuleDefinition[];
1203
1203
  generateAndLoadTableDefs(): procesamiento.TableDefinitions;
1204
1204
  generateBaseTableDef(tablaDatos: procesamiento.TablaDatos): procesamiento.TableDefinition;
@@ -1208,11 +1208,11 @@ export declare var AppDmEncu: {
1208
1208
  getTableDefFunction(tableDef: procesamiento.TableDefinition): procesamiento.TableDefinitionFunction;
1209
1209
  loadTableDef(tableDef: procesamiento.TableDefinition): procesamiento.TableDefinitionFunction;
1210
1210
  generateAndLoadTableDef(tablaDatos: procesamiento.TablaDatos): procesamiento.TableDefinitionFunction;
1211
- procedures: procesamiento.ProcedureDef[];
1211
+ procedures: procesamiento.ProcedureDef<any>[];
1212
1212
  procedure: {
1213
- [key: string]: procesamiento.ProcedureDef;
1213
+ [key: string]: procesamiento.ProcedureDef<any>;
1214
1214
  } & {
1215
- [key: string]: procesamiento.ProcedureDef;
1215
+ [key: string]: procesamiento.ProcedureDef<any>;
1216
1216
  };
1217
1217
  app: procesamiento.ExpressPlus;
1218
1218
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -1263,7 +1263,7 @@ export declare var AppDmEncu: {
1263
1263
  }) & (new (...args: any[]) => {
1264
1264
  configStaticConfig(): void;
1265
1265
  generateBaseTableDef(tablaDatos: procesamiento.TablaDatos): procesamiento.TableDefinition;
1266
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
1266
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
1267
1267
  clientIncludes(req: procesamiento.Request, hideBEPlusInclusions: procesamiento.OptsClientPage): procesamiento.ClientModuleDefinition[];
1268
1268
  prepareGetTables(): void;
1269
1269
  tablasDatos: procesamiento.TablaDatos[];
@@ -1271,11 +1271,11 @@ export declare var AppDmEncu: {
1271
1271
  getTableDefFunction(tableDef: procesamiento.TableDefinition): procesamiento.TableDefinitionFunction;
1272
1272
  loadTableDef(tableDef: procesamiento.TableDefinition): procesamiento.TableDefinitionFunction;
1273
1273
  generateAndLoadTableDef(tablaDatos: procesamiento.TablaDatos): procesamiento.TableDefinitionFunction;
1274
- procedures: procesamiento.ProcedureDef[];
1274
+ procedures: procesamiento.ProcedureDef<any>[];
1275
1275
  procedure: {
1276
- [key: string]: procesamiento.ProcedureDef;
1276
+ [key: string]: procesamiento.ProcedureDef<any>;
1277
1277
  } & {
1278
- [key: string]: procesamiento.ProcedureDef;
1278
+ [key: string]: procesamiento.ProcedureDef<any>;
1279
1279
  };
1280
1280
  app: procesamiento.ExpressPlus;
1281
1281
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -1340,9 +1340,9 @@ export declare var AppDmEncu: {
1340
1340
  getDbFunctions(opts: procesamiento.DumpOptions): Promise<{
1341
1341
  dumpText: string;
1342
1342
  }[]>;
1343
- procedures: procesamiento.ProcedureDef[];
1343
+ procedures: procesamiento.ProcedureDef<any>[];
1344
1344
  procedure: {
1345
- [key: string]: procesamiento.ProcedureDef;
1345
+ [key: string]: procesamiento.ProcedureDef<any>;
1346
1346
  };
1347
1347
  app: procesamiento.ExpressPlus;
1348
1348
  getTableDefinition: procesamiento.TableDefinitionsGetters;
@@ -1380,13 +1380,13 @@ export declare var AppDmEncu: {
1380
1380
  addSchrödingerServices(mainApp: procesamiento.ExpressPlus, baseUrl: string): void;
1381
1381
  addUnloggedServices(mainApp: procesamiento.ExpressPlus, baseUrl: string): void;
1382
1382
  addLoggedServices(): void;
1383
- getProcedures(): Promise<procesamiento.ProcedureDef[]>;
1383
+ getProcedures(): Promise<procesamiento.ProcedureDef<any>[]>;
1384
1384
  isAdmin(): boolean;
1385
1385
  canChangePass(): Promise<boolean>;
1386
- inDbClient<T_4>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_4>): Promise<T_4>;
1386
+ inDbClient<T_5>(req: procesamiento.Request | null, doThisWithDbClient: (client: procesamiento.Client) => Promise<T_5>): Promise<T_5>;
1387
1387
  inTransaction<T_1>(req: procesamiento.Request | null, doThisWithDbTransaction: (client: procesamiento.Client) => Promise<T_1>): Promise<T_1>;
1388
1388
  inTransactionProcedureContext<T_2>(req: procesamiento.Request | null, coreFunction: (context: procesamiento.ProcedureContext) => Promise<T_2>): Promise<T_2>;
1389
- procedureDefCompleter(procedureDef: procesamiento.ProcedureDef): procesamiento.ProcedureDef;
1389
+ procedureDefCompleter(procedureDef: procesamiento.ProcedureDef<any>): procesamiento.ProcedureDef<any>;
1390
1390
  tableDefAdapt(tableDef: procesamiento.TableDefinition, context: procesamiento.Context): procesamiento.TableDefinition;
1391
1391
  pushApp(dirname: string): void;
1392
1392
  dumpDbTableFields(tableDefinition: procesamiento.TableDefinition): string[];
@@ -1401,7 +1401,7 @@ export declare var AppDmEncu: {
1401
1401
  mainPage(req: {} | procesamiento.Request, offlineMode?: boolean | undefined, opts?: procesamiento.OptsClientPage | undefined): {
1402
1402
  toHtmlDoc: () => string;
1403
1403
  };
1404
- isThisProcedureAllowed<T_3>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef, params: {
1404
+ isThisProcedureAllowed<T_3>(context: procesamiento.Context, procedureDef: procesamiento.ProcedureDef<any>, params: {
1405
1405
  [key: string]: T_3;
1406
1406
  }): Promise<boolean>;
1407
1407
  i18n: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dmencu",
3
3
  "description": "DM Encu - Encuestas en dispositivo móvil",
4
- "version": "1.0.0",
4
+ "version": "1.0.2",
5
5
  "author": "Codenautas <codenautas@googlegroups.com>",
6
6
  "license": "MIT",
7
7
  "main": "dist/server/server/app-dmencu.js",
@@ -15,7 +15,7 @@
15
15
  "memoize-one": "~6.0.0",
16
16
  "meta-enc": "^1.4.9",
17
17
  "procesamiento": "^1.0.16",
18
- "backend-plus": "^2.0.0-rc.13",
18
+ "backend-plus": "^2.0.0-rc.31",
19
19
  "qrcode": "^1.5.3",
20
20
  "react": "~17.0.2",
21
21
  "react-dom": "~17.0.2",