dmencu 0.1.52 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/client/unlogged/bypass-formulario.js +3 -1
  2. package/dist/client/unlogged/render-formulario.tsx +21 -1
  3. package/dist/client/unlogged/tipos.d.ts +9 -2
  4. package/dist/client/unlogged/tipos.js +1 -1
  5. package/dist/server/server/app-dmencu.d.ts +4 -0
  6. package/dist/server/server/app-dmencu.js +3 -3
  7. package/dist/server/server/table-acciones.d.ts +3 -0
  8. package/dist/server/server/table-acciones.js +55 -0
  9. package/dist/server/server/table-estados.d.ts +3 -0
  10. package/dist/server/server/table-estados.js +51 -0
  11. package/dist/server/server/table-estados_acciones.d.ts +3 -0
  12. package/dist/server/server/table-estados_acciones.js +43 -0
  13. package/dist/server/server/table-mis_tareas_tem copy.d.ts +3 -0
  14. package/dist/server/server/table-mis_tareas_tem copy.js +19 -0
  15. package/dist/server/server/table-tareas_tem copy.d.ts +3 -0
  16. package/dist/server/server/table-tareas_tem copy.js +176 -0
  17. package/dist/server/server/table-tareas_tem disponibles.d.ts +3 -0
  18. package/dist/server/server/table-tareas_tem disponibles.js +19 -0
  19. package/dist/server/server/table-tareas_tem_asignables copy.d.ts +3 -0
  20. package/dist/server/server/table-tareas_tem_asignables copy.js +24 -0
  21. package/dist/server/server/table-tareas_tem_asignables.d.ts +5 -0
  22. package/dist/server/server/table-tareas_tem_asignables.js +53 -0
  23. package/dist/server/server/table-tareas_tem_disponibles.d.ts +3 -0
  24. package/dist/server/server/table-tareas_tem_disponibles.js +19 -0
  25. package/dist/server/server/table-tareas_tem_recepcion.d.ts +3 -0
  26. package/dist/server/server/table-tareas_tem_recepcion.js +28 -0
  27. package/dist/server/unlogged/tipos.d.ts +9 -2
  28. package/dist/server/unlogged/tipos.js +1 -1
  29. package/dist/unlogged/unlogged/bypass-formulario.js +3 -1
  30. package/dist/unlogged/unlogged/render-formulario.d.ts +8 -1
  31. package/dist/unlogged/unlogged/render-formulario.js +9 -3
  32. package/dist/unlogged/unlogged/render-formulario.tsx +21 -1
  33. package/dist/unlogged/unlogged/tipos.d.ts +9 -2
  34. package/dist/unlogged/unlogged/tipos.js +1 -1
  35. package/install/esquema_comun.sql +2 -2
  36. package/install/metadatos/tipoc.tab +14 -12
  37. package/install/metadatos/tipoc_tipoc.tab +24 -22
  38. package/package.json +1 -1
  39. package/install/control_cargado_tareas_tem_trg.sql.bak +0 -37
@@ -393,6 +393,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
393
393
  variablesCalculadas(respuestasRaiz, forPk);
394
394
  calcularFeedbackUnidadAnalisis(datosByPass.feedbackRowValidator, estructura.formularios, respuestas, unidadAnalisis.unidad_analisis, forPk, respuestasAumentadas, null, {});
395
395
  calcularVariablesBotonFormulario(forPk);
396
+ persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
396
397
  }
397
398
  exports.accion_agregar_formulario = accion_agregar_formulario;
398
399
  function accion_abrir_formulario({ forPk }, _datosByPass) {
@@ -400,6 +401,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
400
401
  variablesCalculadas(respuestasRaiz, forPk);
401
402
  calcularFeedbackUnidadAnalisis(datosByPass.feedbackRowValidator, estructura.formularios, respuestas, unidadAnalisis.unidad_analisis, forPk, respuestasAumentadas, null, {});
402
403
  calcularVariablesBotonFormulario(forPk);
404
+ persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
403
405
  }
404
406
  exports.accion_abrir_formulario = accion_abrir_formulario;
405
407
  function accion_borrar_formulario({ forPk, forPkPadre }) {
@@ -1151,4 +1153,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1151
1153
  }
1152
1154
  exports.calcularResumenVivienda = calcularResumenVivienda;
1153
1155
  });
1154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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U0FDSjtRQUNELElBQUcsVUFBVSxJQUFFLE9BQU8sSUFBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBRSxZQUFZLEVBQUM7WUFDNUUsSUFBRyxLQUFLLENBQUMsK0NBQStDLEVBQUM7Z0JBQ3JELFVBQVUsR0FBQyxjQUFjLENBQUM7YUFDN0I7aUJBQUk7Z0JBQ0QsVUFBVSxHQUFDLFlBQVksQ0FBQzthQUMzQjtTQUNKO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNGLElBQUksYUFBMkIsQ0FBQztRQUNoQyxJQUFJLGdCQUE4QixDQUFDO1FBQ25DLElBQUcsS0FBSyxJQUFFLE1BQU0sRUFBQztZQUNiLGdCQUFnQixHQUFHLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7WUFDakQscUVBQXFFO1lBQ3JFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtTQUNuQzthQUFJO1lBQ0QsYUFBYSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7U0FDOUM7UUFDRCxJQUFJLFNBQVMsR0FBb0I7WUFDN0IsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUExRUQsMERBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRXN0cnVjdHVyYSwgXHJcbiAgICBGb3JQaywgRm9yUGtSYWl6LFxyXG4gICAgSWRGaW4sIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sIFxyXG4gICAgUGxhaW5Gb3JQaywgUmVzcHVlc3RhcywgUmVzcHVlc3Rhc1JhaXosIFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBWYWxvciwgVmlzaXRhLCBcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgRm9ybXVsYXJpbyxcclxuICAgIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsXHJcbiAgICBJZEVuYyxcclxuICAgIERlZk9wZXJhdGl2b1xyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6Ym9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTpFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzooZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyk9PlByb21pc2U8YW55PiA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOnR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcyl7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICBhd2FpdCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8oZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6RXN0cnVjdHVyYSl7XHJcbiAgICBlc3RydWN0dXJhID0gZXN0cnVjdHVyYUFDYXJnYXI7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YT0+ISF1YS5wcmluY2lwYWwpPy51bmlkYWRfYW5hbGlzaXMhXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmRm9yID0gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLm1hcChmPT4oe2hlcm1hbm86IGYuY2FzaWxsZXJvcy5oZXJtYW5vfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSk9Pih7XHJcbiAgICAgICAgcGs6dWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSwgXHJcbiAgICAgICAgaW5jbHVpZGFzOiBsaWtlQXIodWFEZWYuaGlqYXMpLmtleXMoKSxcclxuICAgICAgICBpZHNGb3I6IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7IFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtkaXJ0eT86Ym9vbGVhbn0pe1xyXG4gICAgZGF0b3NCeVBhc3MgPSB7XHJcbiAgICAgICAgZGlydHk6ZmFsc2UsXHJcbiAgICAgICAgLi4uZGJwcCxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCk9PiBkYXRvc0J5UGFzc1xyXG5cclxuZnVuY3Rpb24gb2JqZXRvVmFjaW8obzpvYmplY3Qpe1xyXG4gICAgZm9yKHZhciBrIGluIG8pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKXtcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciB8fCBvYmpldG9WYWNpbyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikpe1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpe1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCl7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxudHlwZSBFbGVtZW50b3NSZWdpc3RyYWJsZXMgPSBIVE1MRGl2RWxlbWVudHxIVE1MQnV0dG9uRWxlbWVudHxIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+LCBlbGVtZW50bzpULFxyXG4gICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfSxcclxuICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZywgXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIGFueT5cclxufSAmICh7XHJcbiAgICBwcm9wOmtleW9mIFRcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgVFtrZXlvZiBUXT5cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+XHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvblxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+XHJcbn18e1xyXG4gICAgZGlyZWN0OnRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD5cclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDpzdHJpbmddOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+ICYge2VsZW1lbnRvPzpUfSB9O1xyXG5cclxudmFyIHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsID0ge30gYXMgUmVnaXN0cm9FbGVtZW50b3M8RWxlbWVudG9zUmVnaXN0cmFibGVzPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJFbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPihkZWY6UmVnaXN0cm9FbGVtZW50bzxUPil7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6UmVnaXN0cm9FbGVtZW50b3M8VD4gPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHJlZ2lzdHJvRWxlbWVudG9zW2RlZi5pZF0gPSBkZWY7XHJcbn1cclxuXHJcbnR5cGUgUmVzcHVlc3Rhc0ZvclBrQ29tdW4gPSB7cmVzcHVlc3RhczpSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OkZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6VW5pZGFkQW5hbGlzaXN9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrKTpSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzOnRydWUsIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzfVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzPzpib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM/OlJlc3B1ZXN0YXN9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7IFxyXG4gICAgdmFyIGZvclBrUmFpejogRm9yUGs7IFxyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOlt1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6VW5pZGFkQW5hbGlzaXMsIGZvclBrOkZvclBrXVtdID0gW107XHJcbiAgICB3aGlsZSh1bmlkYWRfYW5hbGlzaXMpe1xyXG4gICAgICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICBwaWxhLnB1c2goW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0pO1xyXG4gICAgICAgIGZvclBrQXBpbGFkYT17Li4uZm9yUGtBcGlsYWRhfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcz11YURlZi5wYWRyZVxyXG4gICAgfVxyXG4gICAgd2hpbGUocGlsYS5sZW5ndGgpe1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYodmFsb3JQa09Qb3NpY2lvbiA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3B1ZXN0YXNBbnRlcmlvcj1yZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5P3ZhbG9yUGtPUG9zaWNpb24gLSAxOnZhbG9yUGtPUG9zaWNpb25cclxuICAgICAgICByZXNwdWVzdGFzID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXTtcclxuICAgICAgICBpZihyZXNwdWVzdGFzID09IG51bGwpe1xyXG4gICAgICAgICAgICBpZihhZ3JlZ2FyU2lGYWx0YSl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXhpc3RlIGVsIGVsZW1lbnRvICcke3Bvc2ljaW9ufScgZW4gbGEgdW5pZGFkX2FuYWxpc2lzICcke3VuaWRhZF9hbmFsaXNpc30nYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yUGtSYWl6IHx8PSBmb3JQa0FwaWxhZGE7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTw6kgcXVlIGVzIHJhw616IHBvciBjw7NtbyBlc3RveSByZXZvbHZpZW5kbyBsYSBwaWxhXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXogfHw9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgaWYoY29uQXVtZW50YWRhcyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0gey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGtPUG9zaWNpb259XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OkZvclBrUmFpeil7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKXtcclxuICAgICAgICB2YXIgZGVmID0gcmVnaXN0cm9FbGVtZW50b3NbaWRdO1xyXG4gICAgICAgIGlmKGRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGlmKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGRlZi5lbGVtZW50bykpe1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBkZWYuZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWYuaWQpIGFzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmKCdwcm9wJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignYXR0cicgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLmF0dHIsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignc3R5bGUnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJvd1ZhbGlkYXRvci5hY3R1YWwpe1xyXG4gICAgICAgIHZhciB7dG9wLCBib3R0b219ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHJvd1ZhbGlkYXRvci5hY3R1YWwpO1xyXG4gICAgICAgIGlmKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPW51bGwpe1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpLmVsVG9wVmlzaWJpbGl6YXIgPSB0b3A7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKS5lbEJvdHRvbVZpc2liaWxpemFyID0gYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhpZFZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGU9PSdmaW4nP2Bib3Rvbi12b2x2ZXItMmA6YHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtpZFZhcmlhYmxlfWApO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQqMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzpIVE1MRWxlbWVudHxudWxsID0gZWxlbWVudG87IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgKXtcclxuICAgICAgICAgICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsICYmIGVsZW1lbnRvLmNsaWVudEhlaWdodCA8IGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhfZm9yUGs6Rm9yUGspe1xyXG4gICAgXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdLnRpcG89PSdudW1lcm8nKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3RhICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhID0gTnVtYmVyKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2kgZXMgdW4gZmFsc3kgKDAgPT0gZmFsc2UpIHRlbmdvIHF1ZSBjb21wYXJhciBjb24gIT09XHJcbiAgICAgICAgcmVjZW50TW9kaWZpZWQgPSByZXNwdWVzdGEgPyB2YWxvckFudGVyaW9yICE9IHJlc3B1ZXN0YSA6IHZhbG9yQW50ZXJpb3IgIT09IHJlc3B1ZXN0YVxyXG4gICAgICAgIGlmKHJlY2VudE1vZGlmaWVkKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW58bnVsbHx1bmRlZmluZWQ7XHJcbiAgICBpZih2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpe1xyXG4gICAgICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEhKV0sIFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLCBcclxuICAgICAgICAgICAgICAgIGZvclBrOiBmb3JQa1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7YXV0b0luZ3Jlc286IHRydWV9KTtcclxuICAgICAgICBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICBkb3tcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tzaWd1aWVudGVWYXJpYWJsZV0uc2lndWllbnRlO1xyXG4gICAgICAgIH13aGlsZSh2YWxvckFudGVyaW9yID09IG51bGwgJiYgcmVjZW50TW9kaWZpZWQgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gbnVsbCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSAnZmluJyAmJiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3NpZ3VpZW50ZVZhcmlhYmxlXS5mdW5jaW9uQXV0b0luZ3Jlc2FyKVxyXG4gICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdLmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG4gICAgLypcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzKXtcclxuICAgICAgICBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzID0gW107XHJcbiAgICB9XHJcbiAgICB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICB2aXNpdGFzLnB1c2goe1xyXG4gICAgICAgIGZlY2hhOiBkYXRldGltZS5ub3coKS50b1ltZCgpLFxyXG4gICAgICAgIGhvcmE6IGRhdGV0aW1lLm5vdygpLnRvSG0oKSxcclxuICAgICAgICBpZHBlcjogbnVsbCwgLy8gVE9ETzogVkVSIERFIERPTkRFIFNFIFNBQ0EgRUwgSURQRVIgc3RhdGUuZGF0b3MuaWRwZXIsXHJcbiAgICAgICAgb2JzZXJ2YWNpb25lczpvYnNlcnZhY2lvbmVzXHJcbiAgICB9KVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXIsIG9wY2lvbjprZXlvZiBWaXNpdGEgLCB2YWxvcjpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzW2luZGV4XVtvcGNpb25dID0gdmFsb3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXh9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9OiB7Zm9yUGs6Rm9yUGssIGZvclBrUGFkcmU6Rm9yUGt9KXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdW5pZGFkX2FuYWxpc2lzXS5wb3AoKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOihwYXlsb2FkOlQsIGRhdG9zOnR5cGVvZiBkYXRvc0J5UGFzcyk9PlIsXHJcbiAgICBwYXlsb2FkOlRcclxuKXtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1A9MjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09dW5kZWZpbmVkICYmIHghPT1udWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSl8fCB4Lmxlbmd0aCE9PTAgKVxyXG4gICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KXx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMCApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMj09MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6bnVtYmVyLG1lc0FubmlvOnN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6RGF0ZSwgZDI6RGF0ZSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMvMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucm9jb2RpZ286c3RyaW5nfG51bGwsIGVzVmFsb3I6Ym9vbGVhbn09PntcclxuICAgIHZhciBucmNvZGlnbzpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTpzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZih1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKXtcclxuICAgICAgICBmb3IobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKXsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYT09J25vX3JlYScpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZSAsIHZhbG9yLCBub19yZWF9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGVfc3VwICwgdmFsb3Jfc3VwLCBub19yZWFfc3VwfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXT09cnZhbG9yKXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID1ybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSl7XHJcbiAgICAgICAgaWYodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuIH1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86RGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgdW5pZGFkZXNBUmVjb3JyZXIgPSBbJ3ZpdmllbmRhcycsJ2hvZ2FyZXMnLCdwZXJzb25hcyddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAgLy92YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIC8vICBsZXQgcmVzbm9yZWEgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXIsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXMsJ25vX3JlYScpO1xyXG4gICAgICAgIC8vY29kTm9SZWE9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAgLy9lc05vUmVhPXJlc25vcmVhLmVzdmFsb3I7XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgYnVzY2FyTm9yZWFSZXNwdWVzdGFzXHJcbiAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlclN1cCA9IFsndml2aWVuZGFzJywnaG9nYXJlc19zdXAnLCdwZXJzb25hc19zdXAnXSBhcyBJZFVuaWRhZEFuYWxpc2lzW107XHJcbiAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAvL3ZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAvL3ZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgIC8vbGV0IHJlc25vcmVhID1idXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXJTdXAsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXNTdXAsJ25vX3JlYV9zdXAnKTsvL2NvbiBsb3MgcGFyYW1ldHJvcyBxdWUgbmVjZXNpdGFyaWFtb3MgcGFyYSBnZW5lcmFsaXphclxyXG4gICAgICAgLy8gIGNvZE5vUmVhU3VwPXJlc25vcmVhLm5yY29kaWdvO1xyXG4gICAgICAgLy8gIGVzTm9SZWFTdXA9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgIC8vcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kUmVhOm51bWJlcnxudWxsPSBudWxsO1xyXG4gICAgICAgIC8vaWYoIXJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYSwgZXNSZWF9XHJcbiAgICAgICAgLy99ZWxzZSBpZihyZXNwdWVzdGFzWydpZGVudGlmJyBhcyBJZFZhcmlhYmxlXT09MiB8fHJlc3B1ZXN0YXNbJ3Jlc2lkX2hvZycgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ2NvbnRhY3QnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWEgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlcyddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhJyBdICE9IDF8fHJlc3B1ZXN0YXNIWydwcmVqdWUxJ109PTJ8fHJlc3B1ZXN0YXNIWyd0cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBzZWxlYz1yZXNwdWVzdGFzSFsnY3JfbnVtX21pZW1icm8nXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydwZXJzb25hcyddICYmIHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdICl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwdWVzdGFzUCA9IHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcF9lbnRyZWFfaW5kID0gcmVzcHVlc3Rhc1BbJ2VudHJlYWluZCcgYXMgSWRWYXJpYWJsZSBdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZihyZXNwX2VudHJlYV9pbmQ9PW51bGwpeyAvL3F1ZXJlbW9zIGNvbnRlbXBsYXIgZWwgdW5kZWZpbmVkXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gTnVtYmVyKHJlc3BfZW50cmVhX2luZCk7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgcmVhaCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgXHJcbiAgICAgICAgLy92YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdICYmICFyZXNwdWVzdGFzWydzcDFhJyBhcyBJZFZhcmlhYmxlXSl7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIHtjb2RSZWFTdXAsIGVzUmVhU3VwfVxyXG4gICAgICAgIC8vfWVsc2UgaWYoIHJlc3B1ZXN0YXNbJ2NvbmZpcl90ZWxfc3VwJyBhcyBJZFZhcmlhYmxlXT09MiB8fCByZXNwdWVzdGFzWydjb25maXJfZG9tX3N1cCcgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1snc3AxYicgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWMnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlc19zdXAnXTtcclxuICAgICAgICAvLyAgICBpZihyZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIIG9mIHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgcmVhaDpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgc2VsZWM6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ2VudHJlYV9zdXAnIF0gPT0gMnx8cmVzcHVlc3Rhc0hbJ3NwcjFfc3VwJ109PTJ8fHJlc3B1ZXN0YXNIWydzcDQnXT09M3x8cmVzcHVlc3Rhc0hbJ3RvdGFsX3JhbmdvX3N1cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaCA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHJlYWg9MztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAvLyAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgIHJlYWhzLnB1c2gocmVhaCk7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgaWYgKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MSkpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0yKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0xfHxyaD09Mykpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gNDtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICB9IGVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgIGNvZFJlYVN1cCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8vcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn1cclxuKT0+e1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hPXtwMTpzdHJpbmcsIHAyOm51bWJlciwgcDM6bnVtYmVyLCBwNDpudW1iZXJ8bnVsbCwgcDU6MXxudWxsLCBwNjoxfG51bGx9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOm51bWJlcnxzdHJpbmd8bnVsbCk6bnVtYmVye1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYoaXNOYU4obnVtLTApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0tMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6e1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6SWRWYXJpYWJsZVxyXG5cclxufSl7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KT0+e1xyXG4gICAgICAgIHZhciB7cmVzcHVlc3Rhc30gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5yZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1udWxsKTtcclxuICAgICAgICBpZigndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBwZXIgb2YgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTEgJiZcclxuICAgICAgICAgICAgICAgICFyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXT09MFxyXG4gICAgICAgICAgICApe1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRlYXI9cmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5maWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZm9yRWFjaCgocGVyLCBpKT0+cGVyLiRwMD1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6XCIkcDBcIiBhcyBJZFZhcmlhYmxlLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmEuJHAwLTEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbil7XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPXsuLi5mb3JQa1JhaXp9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OkZvclBrUmFpeiwgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcil7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93cyA6IHtbeCBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxJZEZpbj59PXt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazphbnksIHBsYWluUGs6UGxhaW5Gb3JQayk9PkpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGEgIT0gZm9yUGtSYWl6LnZpdmllbmRhKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0gPSB7XHJcbiAgICAgICAgLi4uZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeiwgXHJcbiAgICAgICAgICAgIG51ZXZvc1Jvd3MsXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNcclxuICAgICAgICApXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSA9IChpZFZpdmllbmRhOm51bWJlcik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShpZFZpdmllbmRhKTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVml2aWVuZGFdO1xyXG4gICAgdmFyIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MgPSAoaWRGb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zLmZvckVhY2goKGNhc2lsbGVybyk9PntcclxuICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKT9jYXNpbGxlcm8uc2FsdG86J0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9ybUhpam8pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZpdmllbmRhKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDpudW1iZXJ8bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICA/IFxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyAmJlxyXG4gICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICkpXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6bnVtYmVyfG51bGwsXHJcbiAgICBjb2ROb1JlYTpzdHJpbmd8bnVsbCxcclxuICAgIGNvZFJlYVN1cDpudW1iZXJ8bnVsbFxyXG4gICAgY29kTm9SZWFTdXA6c3RyaW5nfG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejpGb3JQa1JhaXosIFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNcclxuKTpSZXN1bHRhZG9SZXN1bWVue1xyXG4gICAgdmFyIHtjb2RSZWEsIGVzUmVhfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYSwgZXNOb1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2RSZWFTdXAsZXNSZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhU3VwLCBlc05vUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISldXHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYT09Zm9yUGtSYWl6LnZpdmllbmRhICYmIFxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lSW5kaXZpZHVhbD9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyP3Jlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhOmZvclBrUmFpei52aXZpZW5kYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgfSkucmVzcHVlc3Rhczp7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDp0cnVlKVxyXG4gICAgfSkuYXJyYXkoKTtcclxuICAgIHZhciBwcmlvcmlkYWRlczp7W2tleSBpbiBSZXN1bWVuRXN0YWRvXToge3ByaW9yaWRhZDpudW1iZXIsIGNhbnRpZGFkOm51bWJlcn19ID0ge1xyXG4gICAgICAgICdubyByZWEnOntwcmlvcmlkYWQ6IDEsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzp7cHJpb3JpZGFkOiAyLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnaW5jb21wbGV0byc6e3ByaW9yaWRhZDogMywgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ3ZhY2lvJzp7cHJpb3JpZGFkOiA0LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzp7cHJpb3JpZGFkOiA1LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnb2snOntwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOjB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvcih2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSl7XHJcbiAgICAgICAgdmFyIHJlc3VtZW4gPSBmZWVkYmFjay5yZXN1bWVuO1xyXG4gICAgICAgIHByaW9yaWRhZGVzW3Jlc3VtZW5dLmNhbnRpZGFkKys7XHJcbiAgICAgICAgaWYocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkPG1pbil7XHJcbiAgICAgICAgICAgIG1pbj1wcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49cmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihtaW5SZXN1bWVuPT0ndmFjaW8nJiYgcHJpb3JpZGFkZXNbJ29rJ10uY2FudGlkYWQgfHwgbWluUmVzdW1lbj09J2luY29tcGxldG8nKXtcclxuICAgICAgICBpZihmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLyl7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6LnZpdmllbmRhIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG87XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==
1156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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RUFBQztnQkFDbEMsR0FBRyxHQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ25DLFVBQVUsR0FBQyxPQUFPLENBQUM7YUFDdEI7U0FDSjtRQUNELElBQUcsVUFBVSxJQUFFLE9BQU8sSUFBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBRSxZQUFZLEVBQUM7WUFDNUUsSUFBRyxLQUFLLENBQUMsK0NBQStDLEVBQUM7Z0JBQ3JELFVBQVUsR0FBQyxjQUFjLENBQUM7YUFDN0I7aUJBQUk7Z0JBQ0QsVUFBVSxHQUFDLFlBQVksQ0FBQzthQUMzQjtTQUNKO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNGLElBQUksYUFBMkIsQ0FBQztRQUNoQyxJQUFJLGdCQUE4QixDQUFDO1FBQ25DLElBQUcsS0FBSyxJQUFFLE1BQU0sRUFBQztZQUNiLGdCQUFnQixHQUFHLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7WUFDakQscUVBQXFFO1lBQ3JFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtTQUNuQzthQUFJO1lBQ0QsYUFBYSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7U0FDOUM7UUFDRCxJQUFJLFNBQVMsR0FBb0I7WUFDN0IsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUExRUQsMERBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRXN0cnVjdHVyYSwgXHJcbiAgICBGb3JQaywgRm9yUGtSYWl6LFxyXG4gICAgSWRGaW4sIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sIFxyXG4gICAgUGxhaW5Gb3JQaywgUmVzcHVlc3RhcywgUmVzcHVlc3Rhc1JhaXosIFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBWYWxvciwgVmlzaXRhLCBcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgRm9ybXVsYXJpbyxcclxuICAgIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsXHJcbiAgICBJZEVuYyxcclxuICAgIERlZk9wZXJhdGl2b1xyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6Ym9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTpFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzooZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyk9PlByb21pc2U8YW55PiA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOnR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcyl7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICBhd2FpdCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8oZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6RXN0cnVjdHVyYSl7XHJcbiAgICBlc3RydWN0dXJhID0gZXN0cnVjdHVyYUFDYXJnYXI7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YT0+ISF1YS5wcmluY2lwYWwpPy51bmlkYWRfYW5hbGlzaXMhXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmRm9yID0gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLm1hcChmPT4oe2hlcm1hbm86IGYuY2FzaWxsZXJvcy5oZXJtYW5vfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSk9Pih7XHJcbiAgICAgICAgcGs6dWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSwgXHJcbiAgICAgICAgaW5jbHVpZGFzOiBsaWtlQXIodWFEZWYuaGlqYXMpLmtleXMoKSxcclxuICAgICAgICBpZHNGb3I6IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7IFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtkaXJ0eT86Ym9vbGVhbn0pe1xyXG4gICAgZGF0b3NCeVBhc3MgPSB7XHJcbiAgICAgICAgZGlydHk6ZmFsc2UsXHJcbiAgICAgICAgLi4uZGJwcCxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCk9PiBkYXRvc0J5UGFzc1xyXG5cclxuZnVuY3Rpb24gb2JqZXRvVmFjaW8obzpvYmplY3Qpe1xyXG4gICAgZm9yKHZhciBrIGluIG8pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKXtcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciB8fCBvYmpldG9WYWNpbyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikpe1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpe1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCl7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxudHlwZSBFbGVtZW50b3NSZWdpc3RyYWJsZXMgPSBIVE1MRGl2RWxlbWVudHxIVE1MQnV0dG9uRWxlbWVudHxIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+LCBlbGVtZW50bzpULFxyXG4gICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfSxcclxuICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZywgXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIGFueT5cclxufSAmICh7XHJcbiAgICBwcm9wOmtleW9mIFRcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgVFtrZXlvZiBUXT5cclxufXx7XHJcbiAgICBhdHRyOnN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+XHJcbn18e1xyXG4gICAgc3R5bGU6a2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvblxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+XHJcbn18e1xyXG4gICAgZGlyZWN0OnRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD5cclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDpzdHJpbmddOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+ICYge2VsZW1lbnRvPzpUfSB9O1xyXG5cclxudmFyIHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsID0ge30gYXMgUmVnaXN0cm9FbGVtZW50b3M8RWxlbWVudG9zUmVnaXN0cmFibGVzPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJFbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPihkZWY6UmVnaXN0cm9FbGVtZW50bzxUPil7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6UmVnaXN0cm9FbGVtZW50b3M8VD4gPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHJlZ2lzdHJvRWxlbWVudG9zW2RlZi5pZF0gPSBkZWY7XHJcbn1cclxuXHJcbnR5cGUgUmVzcHVlc3Rhc0ZvclBrQ29tdW4gPSB7cmVzcHVlc3RhczpSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OkZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6VW5pZGFkQW5hbGlzaXN9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrKTpSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzOnRydWUsIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzfVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzPzpib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM/OlJlc3B1ZXN0YXN9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7IFxyXG4gICAgdmFyIGZvclBrUmFpejogRm9yUGs7IFxyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOlt1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6VW5pZGFkQW5hbGlzaXMsIGZvclBrOkZvclBrXVtdID0gW107XHJcbiAgICB3aGlsZSh1bmlkYWRfYW5hbGlzaXMpe1xyXG4gICAgICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICBwaWxhLnB1c2goW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0pO1xyXG4gICAgICAgIGZvclBrQXBpbGFkYT17Li4uZm9yUGtBcGlsYWRhfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcz11YURlZi5wYWRyZVxyXG4gICAgfVxyXG4gICAgd2hpbGUocGlsYS5sZW5ndGgpe1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYodmFsb3JQa09Qb3NpY2lvbiA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3B1ZXN0YXNBbnRlcmlvcj1yZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5P3ZhbG9yUGtPUG9zaWNpb24gLSAxOnZhbG9yUGtPUG9zaWNpb25cclxuICAgICAgICByZXNwdWVzdGFzID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXTtcclxuICAgICAgICBpZihyZXNwdWVzdGFzID09IG51bGwpe1xyXG4gICAgICAgICAgICBpZihhZ3JlZ2FyU2lGYWx0YSl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXhpc3RlIGVsIGVsZW1lbnRvICcke3Bvc2ljaW9ufScgZW4gbGEgdW5pZGFkX2FuYWxpc2lzICcke3VuaWRhZF9hbmFsaXNpc30nYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yUGtSYWl6IHx8PSBmb3JQa0FwaWxhZGE7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTw6kgcXVlIGVzIHJhw616IHBvciBjw7NtbyBlc3RveSByZXZvbHZpZW5kbyBsYSBwaWxhXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXogfHw9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgaWYoY29uQXVtZW50YWRhcyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0gey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGtPUG9zaWNpb259XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OkZvclBrUmFpeil7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKXtcclxuICAgICAgICB2YXIgZGVmID0gcmVnaXN0cm9FbGVtZW50b3NbaWRdO1xyXG4gICAgICAgIGlmKGRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGlmKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGRlZi5lbGVtZW50bykpe1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBkZWYuZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWYuaWQpIGFzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmKCdwcm9wJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignYXR0cicgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLmF0dHIsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignc3R5bGUnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJvd1ZhbGlkYXRvci5hY3R1YWwpe1xyXG4gICAgICAgIHZhciB7dG9wLCBib3R0b219ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHJvd1ZhbGlkYXRvci5hY3R1YWwpO1xyXG4gICAgICAgIGlmKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPW51bGwpe1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpLmVsVG9wVmlzaWJpbGl6YXIgPSB0b3A7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKS5lbEJvdHRvbVZpc2liaWxpemFyID0gYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhpZFZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGU9PSdmaW4nP2Bib3Rvbi12b2x2ZXItMmA6YHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtpZFZhcmlhYmxlfWApO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQqMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzpIVE1MRWxlbWVudHxudWxsID0gZWxlbWVudG87IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgKXtcclxuICAgICAgICAgICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsICYmIGVsZW1lbnRvLmNsaWVudEhlaWdodCA8IGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhfZm9yUGs6Rm9yUGspe1xyXG4gICAgXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdLnRpcG89PSdudW1lcm8nKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3RhICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhID0gTnVtYmVyKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2kgZXMgdW4gZmFsc3kgKDAgPT0gZmFsc2UpIHRlbmdvIHF1ZSBjb21wYXJhciBjb24gIT09XHJcbiAgICAgICAgcmVjZW50TW9kaWZpZWQgPSByZXNwdWVzdGEgPyB2YWxvckFudGVyaW9yICE9IHJlc3B1ZXN0YSA6IHZhbG9yQW50ZXJpb3IgIT09IHJlc3B1ZXN0YVxyXG4gICAgICAgIGlmKHJlY2VudE1vZGlmaWVkKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW58bnVsbHx1bmRlZmluZWQ7XHJcbiAgICBpZih2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpe1xyXG4gICAgICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgICAgICBpZihlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEhKV0sIFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLCBcclxuICAgICAgICAgICAgICAgIGZvclBrOiBmb3JQa1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7YXV0b0luZ3Jlc286IHRydWV9KTtcclxuICAgICAgICBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICBkb3tcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tzaWd1aWVudGVWYXJpYWJsZV0uc2lndWllbnRlO1xyXG4gICAgICAgIH13aGlsZSh2YWxvckFudGVyaW9yID09IG51bGwgJiYgcmVjZW50TW9kaWZpZWQgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gbnVsbCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSAnZmluJyAmJiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3NpZ3VpZW50ZVZhcmlhYmxlXS5mdW5jaW9uQXV0b0luZ3Jlc2FyKVxyXG4gICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdLmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG4gICAgLypcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzKXtcclxuICAgICAgICBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzID0gW107XHJcbiAgICB9XHJcbiAgICB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICB2aXNpdGFzLnB1c2goe1xyXG4gICAgICAgIGZlY2hhOiBkYXRldGltZS5ub3coKS50b1ltZCgpLFxyXG4gICAgICAgIGhvcmE6IGRhdGV0aW1lLm5vdygpLnRvSG0oKSxcclxuICAgICAgICBpZHBlcjogbnVsbCwgLy8gVE9ETzogVkVSIERFIERPTkRFIFNFIFNBQ0EgRUwgSURQRVIgc3RhdGUuZGF0b3MuaWRwZXIsXHJcbiAgICAgICAgb2JzZXJ2YWNpb25lczpvYnNlcnZhY2lvbmVzXHJcbiAgICB9KVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXIsIG9wY2lvbjprZXlvZiBWaXNpdGEgLCB2YWxvcjpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzW2luZGV4XVtvcGNpb25dID0gdmFsb3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXh9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9OiB7Zm9yUGs6Rm9yUGssIGZvclBrUGFkcmU6Rm9yUGt9KXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdW5pZGFkX2FuYWxpc2lzXS5wb3AoKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOihwYXlsb2FkOlQsIGRhdG9zOnR5cGVvZiBkYXRvc0J5UGFzcyk9PlIsXHJcbiAgICBwYXlsb2FkOlRcclxuKXtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1A9MjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09dW5kZWZpbmVkICYmIHghPT1udWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSl8fCB4Lmxlbmd0aCE9PTAgKVxyXG4gICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KXx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMCApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMj09MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6bnVtYmVyLG1lc0FubmlvOnN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6RGF0ZSwgZDI6RGF0ZSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMvMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucm9jb2RpZ286c3RyaW5nfG51bGwsIGVzVmFsb3I6Ym9vbGVhbn09PntcclxuICAgIHZhciBucmNvZGlnbzpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTpzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZih1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKXtcclxuICAgICAgICBmb3IobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKXsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYT09J25vX3JlYScpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZSAsIHZhbG9yLCBub19yZWF9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGVfc3VwICwgdmFsb3Jfc3VwLCBub19yZWFfc3VwfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXT09cnZhbG9yKXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID1ybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSl7XHJcbiAgICAgICAgaWYodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuIH1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86RGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgdW5pZGFkZXNBUmVjb3JyZXIgPSBbJ3ZpdmllbmRhcycsJ2hvZ2FyZXMnLCdwZXJzb25hcyddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAgLy92YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIC8vICBsZXQgcmVzbm9yZWEgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXIsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXMsJ25vX3JlYScpO1xyXG4gICAgICAgIC8vY29kTm9SZWE9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAgLy9lc05vUmVhPXJlc25vcmVhLmVzdmFsb3I7XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgYnVzY2FyTm9yZWFSZXNwdWVzdGFzXHJcbiAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlclN1cCA9IFsndml2aWVuZGFzJywnaG9nYXJlc19zdXAnLCdwZXJzb25hc19zdXAnXSBhcyBJZFVuaWRhZEFuYWxpc2lzW107XHJcbiAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAvL3ZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAvL3ZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgIC8vbGV0IHJlc25vcmVhID1idXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXJTdXAsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXNTdXAsJ25vX3JlYV9zdXAnKTsvL2NvbiBsb3MgcGFyYW1ldHJvcyBxdWUgbmVjZXNpdGFyaWFtb3MgcGFyYSBnZW5lcmFsaXphclxyXG4gICAgICAgLy8gIGNvZE5vUmVhU3VwPXJlc25vcmVhLm5yY29kaWdvO1xyXG4gICAgICAgLy8gIGVzTm9SZWFTdXA9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgIC8vcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kUmVhOm51bWJlcnxudWxsPSBudWxsO1xyXG4gICAgICAgIC8vaWYoIXJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYSwgZXNSZWF9XHJcbiAgICAgICAgLy99ZWxzZSBpZihyZXNwdWVzdGFzWydpZGVudGlmJyBhcyBJZFZhcmlhYmxlXT09MiB8fHJlc3B1ZXN0YXNbJ3Jlc2lkX2hvZycgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ2NvbnRhY3QnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWEgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlcyddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhJyBdICE9IDF8fHJlc3B1ZXN0YXNIWydwcmVqdWUxJ109PTJ8fHJlc3B1ZXN0YXNIWyd0cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBzZWxlYz1yZXNwdWVzdGFzSFsnY3JfbnVtX21pZW1icm8nXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydwZXJzb25hcyddICYmIHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdICl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwdWVzdGFzUCA9IHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcF9lbnRyZWFfaW5kID0gcmVzcHVlc3Rhc1BbJ2VudHJlYWluZCcgYXMgSWRWYXJpYWJsZSBdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZihyZXNwX2VudHJlYV9pbmQ9PW51bGwpeyAvL3F1ZXJlbW9zIGNvbnRlbXBsYXIgZWwgdW5kZWZpbmVkXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gTnVtYmVyKHJlc3BfZW50cmVhX2luZCk7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgcmVhaCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgXHJcbiAgICAgICAgLy92YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdICYmICFyZXNwdWVzdGFzWydzcDFhJyBhcyBJZFZhcmlhYmxlXSl7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIHtjb2RSZWFTdXAsIGVzUmVhU3VwfVxyXG4gICAgICAgIC8vfWVsc2UgaWYoIHJlc3B1ZXN0YXNbJ2NvbmZpcl90ZWxfc3VwJyBhcyBJZFZhcmlhYmxlXT09MiB8fCByZXNwdWVzdGFzWydjb25maXJfZG9tX3N1cCcgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1snc3AxYicgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWMnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlc19zdXAnXTtcclxuICAgICAgICAvLyAgICBpZihyZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIIG9mIHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgcmVhaDpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgc2VsZWM6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ2VudHJlYV9zdXAnIF0gPT0gMnx8cmVzcHVlc3Rhc0hbJ3NwcjFfc3VwJ109PTJ8fHJlc3B1ZXN0YXNIWydzcDQnXT09M3x8cmVzcHVlc3Rhc0hbJ3RvdGFsX3JhbmdvX3N1cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaCA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHJlYWg9MztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAvLyAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgIHJlYWhzLnB1c2gocmVhaCk7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgaWYgKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MSkpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0yKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0xfHxyaD09Mykpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gNDtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICB9IGVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgIGNvZFJlYVN1cCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8vcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn1cclxuKT0+e1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hPXtwMTpzdHJpbmcsIHAyOm51bWJlciwgcDM6bnVtYmVyLCBwNDpudW1iZXJ8bnVsbCwgcDU6MXxudWxsLCBwNjoxfG51bGx9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOm51bWJlcnxzdHJpbmd8bnVsbCk6bnVtYmVye1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYoaXNOYU4obnVtLTApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0tMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6e1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6SWRWYXJpYWJsZVxyXG5cclxufSl7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KT0+e1xyXG4gICAgICAgIHZhciB7cmVzcHVlc3Rhc30gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5yZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1udWxsKTtcclxuICAgICAgICBpZigndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBwZXIgb2YgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTEgJiZcclxuICAgICAgICAgICAgICAgICFyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXT09MFxyXG4gICAgICAgICAgICApe1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRlYXI9cmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5maWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZm9yRWFjaCgocGVyLCBpKT0+cGVyLiRwMD1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6XCIkcDBcIiBhcyBJZFZhcmlhYmxlLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmEuJHAwLTEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbil7XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPXsuLi5mb3JQa1JhaXp9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OkZvclBrUmFpeiwgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcil7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93cyA6IHtbeCBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxJZEZpbj59PXt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazphbnksIHBsYWluUGs6UGxhaW5Gb3JQayk9PkpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGEgIT0gZm9yUGtSYWl6LnZpdmllbmRhKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0gPSB7XHJcbiAgICAgICAgLi4uZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeiwgXHJcbiAgICAgICAgICAgIG51ZXZvc1Jvd3MsXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNcclxuICAgICAgICApXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSA9IChpZFZpdmllbmRhOm51bWJlcik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShpZFZpdmllbmRhKTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVml2aWVuZGFdO1xyXG4gICAgdmFyIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MgPSAoaWRGb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zLmZvckVhY2goKGNhc2lsbGVybyk9PntcclxuICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKT9jYXNpbGxlcm8uc2FsdG86J0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9ybUhpam8pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZpdmllbmRhKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDpudW1iZXJ8bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICA/IFxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyAmJlxyXG4gICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICkpXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6bnVtYmVyfG51bGwsXHJcbiAgICBjb2ROb1JlYTpzdHJpbmd8bnVsbCxcclxuICAgIGNvZFJlYVN1cDpudW1iZXJ8bnVsbFxyXG4gICAgY29kTm9SZWFTdXA6c3RyaW5nfG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejpGb3JQa1JhaXosIFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNcclxuKTpSZXN1bHRhZG9SZXN1bWVue1xyXG4gICAgdmFyIHtjb2RSZWEsIGVzUmVhfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYSwgZXNOb1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2RSZWFTdXAsZXNSZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhU3VwLCBlc05vUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISldXHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYT09Zm9yUGtSYWl6LnZpdmllbmRhICYmIFxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lSW5kaXZpZHVhbD9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyP3Jlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhOmZvclBrUmFpei52aXZpZW5kYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgfSkucmVzcHVlc3Rhczp7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDp0cnVlKVxyXG4gICAgfSkuYXJyYXkoKTtcclxuICAgIHZhciBwcmlvcmlkYWRlczp7W2tleSBpbiBSZXN1bWVuRXN0YWRvXToge3ByaW9yaWRhZDpudW1iZXIsIGNhbnRpZGFkOm51bWJlcn19ID0ge1xyXG4gICAgICAgICdubyByZWEnOntwcmlvcmlkYWQ6IDEsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzp7cHJpb3JpZGFkOiAyLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnaW5jb21wbGV0byc6e3ByaW9yaWRhZDogMywgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ3ZhY2lvJzp7cHJpb3JpZGFkOiA0LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzp7cHJpb3JpZGFkOiA1LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnb2snOntwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOjB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvcih2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSl7XHJcbiAgICAgICAgdmFyIHJlc3VtZW4gPSBmZWVkYmFjay5yZXN1bWVuO1xyXG4gICAgICAgIHByaW9yaWRhZGVzW3Jlc3VtZW5dLmNhbnRpZGFkKys7XHJcbiAgICAgICAgaWYocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkPG1pbil7XHJcbiAgICAgICAgICAgIG1pbj1wcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49cmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihtaW5SZXN1bWVuPT0ndmFjaW8nJiYgcHJpb3JpZGFkZXNbJ29rJ10uY2FudGlkYWQgfHwgbWluUmVzdW1lbj09J2luY29tcGxldG8nKXtcclxuICAgICAgICBpZihmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLyl7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6LnZpdmllbmRhIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG87XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==