diff --git a/dist/main.js b/dist/main.js index ce4e94e..fb60209 100644 --- a/dist/main.js +++ b/dist/main.js @@ -25011,12 +25011,24 @@ async function runCodexExec({ await new Promise((resolve, reject) => { const child = (0, import_child_process2.spawn)(program2, command, { env, - stdio: ["pipe", "inherit", "inherit"] + stdio: ["pipe", "pipe", "pipe"] }); + child.stdout.pipe(process.stdout, { end: false }); + child.stderr.pipe(process.stderr, { end: false }); child.stdin.write(input); child.stdin.end(); - child.on("error", reject); - child.on("close", async (code) => { + const closeOutputStreams = () => { + child.stdout.unpipe(process.stdout); + child.stderr.unpipe(process.stderr); + child.stdout.destroy(); + child.stderr.destroy(); + }; + child.once("error", (err) => { + closeOutputStreams(); + reject(err); + }); + child.once("exit", async (code) => { + closeOutputStreams(); if (code !== 0) { reject(new Error(`${program2} exited with code ${code}`)); return; @@ -29986,4 +29998,4 @@ undici/lib/fetch/body.js: undici/lib/websocket/frame.js: (*! ws. MIT License. Einar Otto Stangvik *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYm90dGxlbmVja0AyLjE5LjUvbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtY29udGVudC10eXBlLXBhcnNlQDIuMC4xL25vZGVfbW9kdWxlcy9mYXN0LWNvbnRlbnQtdHlwZS1wYXJzZS9pbmRleC5qcyIsICIuLi9zcmMvbWFpbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2VzbS5tanMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9yZWFkU2VydmVySW5mby50cyIsICIuLi9zcmMvcnVuQ29kZXhFeGVjLnRzIiwgIi4uL3NyYy9jaGVja091dHB1dC50cyIsICIuLi9zcmMvbGludXhDcmVkZW50aWFscy50cyIsICIuLi9zcmMvZHJvcFN1ZG8udHMiLCAiLi4vc3JjL2NoZWNrQWN0b3JQZXJtaXNzaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJldHJ5QDcuMi4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdC1lcnJvckA2LjEuOC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pdmVyc2FsLXVzZXItYWdlbnRANy4wLjMvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC11c2VyLWFnZW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlZ2lzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZW5kcG9pbnRAMTAuMS40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9lbmRwb2ludC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdEA5LjIuNC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZ3JhcGhxbEA4LjIuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrYXV0aC10b2tlbkA1LjEuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANS4zLjFfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1wYWdpbmF0ZS1yZXN0QDExLjYuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZy1hcmd2QDAuMy4yL25vZGVfbW9kdWxlcy9zdHJpbmctYXJndi9pbmRleC5qcyIsICIuLi9zcmMvd3JpdGVQcm94eUNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb21tYW5kZXJFcnJvciBjbGFzc1xuICovXG5jbGFzcyBDb21tYW5kZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIENvbW1hbmRlckVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSBzdWdnZXN0ZWQgZXhpdCBjb2RlIHdoaWNoIGNvdWxkIGJlIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuZXhpdENvZGUgPSBleGl0Q29kZTtcbiAgICB0aGlzLm5lc3RlZEVycm9yID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBDb21tYW5kZXJFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGV4cGxhbmF0aW9uIG9mIHdoeSBhcmd1bWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoMSwgJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLCBtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuIiwgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgQXJndW1lbnQge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBjb21tYW5kIGFyZ3VtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRlc2NyaXB0aW9uLlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgdGhpcy52YXJpYWRpYyA9IGZhbHNlO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKG5hbWVbMF0pIHtcbiAgICAgIGNhc2UgJzwnOiAvLyBlLmcuIDxyZXF1aXJlZD5cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdbJzogLy8gZS5nLiBbb3B0aW9uYWxdXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX25hbWUuZW5kc1dpdGgoJy4uLicpKSB7XG4gICAgICB0aGlzLnZhcmlhZGljID0gdHJ1ZTtcbiAgICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lLnNsaWNlKDAsIC0zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFyZ3VtZW50IG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfY29sbGVjdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcmV2aW91cy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gcHJldmlvdXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBjb21tYW5kIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgYXJndW1lbnQgdmFsdWUgdG8gYmUgb25lIG9mIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgcmVxdWlyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ1JlcXVpcmVkKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgb3B0aW9uYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ09wdGlvbmFsKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGl0cyBodW1hbiByZWFkYWJsZSBlcXVpdmFsZW50IGZvciBoZWxwIHVzYWdlLlxuICpcbiAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpIHtcbiAgY29uc3QgbmFtZU91dHB1dCA9IGFyZy5uYW1lKCkgKyAoYXJnLnZhcmlhZGljID09PSB0cnVlID8gJy4uLicgOiAnJyk7XG5cbiAgcmV0dXJuIGFyZy5yZXF1aXJlZCA/ICc8JyArIG5hbWVPdXRwdXQgKyAnPicgOiAnWycgKyBuYW1lT3V0cHV0ICsgJ10nO1xufVxuXG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLmh1bWFuUmVhZGFibGVBcmdOYW1lID0gaHVtYW5SZWFkYWJsZUFyZ05hbWU7XG4iLCAiY29uc3QgeyBodW1hblJlYWRhYmxlQXJnTmFtZSB9ID0gcmVxdWlyZSgnLi9hcmd1bWVudC5qcycpO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaW1wb3J0IHR5cGVzIGZvciBKU0RvYywgdXNlZCBieSBWaXN1YWwgU3R1ZGlvIENvZGUgSW50ZWxsaVNlbnNlIGFuZCBgbnBtIHJ1biB0eXBlc2NyaXB0LWNoZWNrSlNgXG4gKiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9qc2RvYy1zdXBwb3J0ZWQtdHlwZXMuaHRtbCNpbXBvcnQtdHlwZXNcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9hcmd1bWVudC5qc1wiKS5Bcmd1bWVudCB9IEFyZ3VtZW50XG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vY29tbWFuZC5qc1wiKS5Db21tYW5kIH0gQ29tbWFuZFxuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL29wdGlvbi5qc1wiKS5PcHRpb24gfSBPcHRpb25cbiAqL1xuXG4vLyBBbHRob3VnaCB0aGlzIGlzIGEgY2xhc3MsIG1ldGhvZHMgYXJlIHN0YXRpYyBpbiBzdHlsZSB0byBhbGxvdyBvdmVycmlkZSB1c2luZyBzdWJjbGFzcyBvciBqdXN0IGZ1bmN0aW9ucy5cbmNsYXNzIEhlbHAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1pbldpZHRoVG9XcmFwID0gNDA7XG4gICAgdGhpcy5zb3J0U3ViY29tbWFuZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnRPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5zaG93R2xvYmFsT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIHByZXBhcmVDb250ZXh0IGlzIGNhbGxlZCBieSBDb21tYW5kZXIgYWZ0ZXIgYXBwbHlpbmcgb3ZlcnJpZGVzIGZyb20gYENvbW1hbmQuY29uZmlndXJlSGVscCgpYFxuICAgKiBhbmQganVzdCBiZWZvcmUgY2FsbGluZyBgZm9ybWF0SGVscCgpYC5cbiAgICpcbiAgICogQ29tbWFuZGVyIGp1c3QgdXNlcyB0aGUgaGVscFdpZHRoIGFuZCB0aGUgcmVzdCBpcyBwcm92aWRlZCBmb3Igb3B0aW9uYWwgdXNlIGJ5IG1vcmUgY29tcGxleCBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I/OiBib29sZWFuLCBoZWxwV2lkdGg/OiBudW1iZXIsIG91dHB1dEhhc0NvbG9ycz86IGJvb2xlYW4gfX0gY29udGV4dE9wdGlvbnNcbiAgICovXG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oZWxwV2lkdGggPSB0aGlzLmhlbHBXaWR0aCA/PyBjb250ZXh0T3B0aW9ucy5oZWxwV2lkdGggPz8gODA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIHN1YmNvbW1hbmRzLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBjb21tYW5kLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtDb21tYW5kW119XG4gICAqL1xuXG4gIHZpc2libGVDb21tYW5kcyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlQ29tbWFuZHMgPSBjbWQuY29tbWFuZHMuZmlsdGVyKChjbWQpID0+ICFjbWQuX2hpZGRlbik7XG4gICAgY29uc3QgaGVscENvbW1hbmQgPSBjbWQuX2dldEhlbHBDb21tYW5kKCk7XG4gICAgaWYgKGhlbHBDb21tYW5kICYmICFoZWxwQ29tbWFuZC5faGlkZGVuKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMucHVzaChoZWxwQ29tbWFuZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRTdWJjb21tYW5kcykge1xuICAgICAgdmlzaWJsZUNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgICAgIHJldHVybiBhLm5hbWUoKS5sb2NhbGVDb21wYXJlKGIubmFtZSgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUNvbW1hbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgb3B0aW9ucyBmb3Igc29ydC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IGFcbiAgICogQHBhcmFtIHtPcHRpb259IGJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvbXBhcmVPcHRpb25zKGEsIGIpIHtcbiAgICBjb25zdCBnZXRTb3J0S2V5ID0gKG9wdGlvbikgPT4ge1xuICAgICAgLy8gV1lTSVdZRyBmb3Igb3JkZXIgZGlzcGxheWVkIGluIGhlbHAuIFNob3J0IHVzZWQgZm9yIGNvbXBhcmlzb24gaWYgcHJlc2VudC4gTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgbmVnYXRlZC5cbiAgICAgIHJldHVybiBvcHRpb24uc2hvcnRcbiAgICAgICAgPyBvcHRpb24uc2hvcnQucmVwbGFjZSgvXi0vLCAnJylcbiAgICAgICAgOiBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0U29ydEtleShhKS5sb2NhbGVDb21wYXJlKGdldFNvcnRLZXkoYikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBvcHRpb25zLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBvcHRpb24sIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlT3B0aW9ucyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGNtZC5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbik7XG4gICAgLy8gQnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgY29uc3QgaGVscE9wdGlvbiA9IGNtZC5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGlmIChoZWxwT3B0aW9uICYmICFoZWxwT3B0aW9uLmhpZGRlbikge1xuICAgICAgLy8gQXV0b21hdGljYWxseSBoaWRlIGNvbmZsaWN0aW5nIGZsYWdzLiBCaXQgZHViaW91cyBidXQgYSBoaXN0b3JpY2FsIGJlaGF2aW91ciB0aGF0IGlzIGNvbnZlbmllbnQgZm9yIHNpbmdsZS1jb21tYW5kIHByb2dyYW1zLlxuICAgICAgY29uc3QgcmVtb3ZlU2hvcnQgPSBoZWxwT3B0aW9uLnNob3J0ICYmIGNtZC5fZmluZE9wdGlvbihoZWxwT3B0aW9uLnNob3J0KTtcbiAgICAgIGNvbnN0IHJlbW92ZUxvbmcgPSBoZWxwT3B0aW9uLmxvbmcgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24ubG9uZyk7XG4gICAgICBpZiAoIXJlbW92ZVNob3J0ICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goaGVscE9wdGlvbik7IC8vIG5vIGNoYW5nZXMgbmVlZGVkXG4gICAgICB9IGVsc2UgaWYgKGhlbHBPcHRpb24ubG9uZyAmJiAhcmVtb3ZlTG9uZykge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5sb25nLCBoZWxwT3B0aW9uLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5zaG9ydCAmJiAhcmVtb3ZlU2hvcnQpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChcbiAgICAgICAgICBjbWQuY3JlYXRlT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgdmlzaWJsZU9wdGlvbnMuc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBnbG9iYWwgb3B0aW9ucy4gKE5vdCBpbmNsdWRpbmcgaGVscC4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtPcHRpb25bXX1cbiAgICovXG5cbiAgdmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKSB7XG4gICAgaWYgKCF0aGlzLnNob3dHbG9iYWxPcHRpb25zKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBnbG9iYWxPcHRpb25zID0gW107XG4gICAgZm9yIChcbiAgICAgIGxldCBhbmNlc3RvckNtZCA9IGNtZC5wYXJlbnQ7XG4gICAgICBhbmNlc3RvckNtZDtcbiAgICAgIGFuY2VzdG9yQ21kID0gYW5jZXN0b3JDbWQucGFyZW50XG4gICAgKSB7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGFuY2VzdG9yQ21kLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbixcbiAgICAgICk7XG4gICAgICBnbG9iYWxPcHRpb25zLnB1c2goLi4udmlzaWJsZU9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgZ2xvYmFsT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIGFyZ3VtZW50cyBpZiBhbnkgaGF2ZSBhIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7QXJndW1lbnRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUFyZ3VtZW50cyhjbWQpIHtcbiAgICAvLyBTaWRlIGVmZmVjdCEgQXBwbHkgdGhlIGxlZ2FjeSBkZXNjcmlwdGlvbnMgYmVmb3JlIHRoZSBhcmd1bWVudHMgYXJlIGRpc3BsYXllZC5cbiAgICBpZiAoY21kLl9hcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50KSA9PiB7XG4gICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uID1cbiAgICAgICAgICBhcmd1bWVudC5kZXNjcmlwdGlvbiB8fCBjbWQuX2FyZ3NEZXNjcmlwdGlvblthcmd1bWVudC5uYW1lKCldIHx8ICcnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBhcmd1bWVudHMgd2l0aCBhIGRlc2NyaXB0aW9uIHRoZW4gcmV0dXJuIGFsbCB0aGUgYXJndW1lbnRzLlxuICAgIGlmIChjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cy5maW5kKChhcmd1bWVudCkgPT4gYXJndW1lbnQuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHM7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kVGVybShjbWQpIHtcbiAgICAvLyBMZWdhY3kuIElnbm9yZXMgY3VzdG9tIHVzYWdlIHN0cmluZywgYW5kIG5lc3RlZCBjb21tYW5kcy5cbiAgICBjb25zdCBhcmdzID0gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHNcbiAgICAgIC5tYXAoKGFyZykgPT4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIGNtZC5fbmFtZSArXG4gICAgICAoY21kLl9hbGlhc2VzWzBdID8gJ3wnICsgY21kLl9hbGlhc2VzWzBdIDogJycpICtcbiAgICAgIChjbWQub3B0aW9ucy5sZW5ndGggPyAnIFtvcHRpb25zXScgOiAnJykgKyAvLyBzaW1wbGlzdGljIGNoZWNrIGZvciBub24taGVscCBvcHRpb25cbiAgICAgIChhcmdzID8gJyAnICsgYXJncyA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uVGVybShvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmZsYWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnRUZXJtKGFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50Lm5hbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgY29tbWFuZCB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKS5yZWR1Y2UoKG1heCwgY29tbWFuZCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShjb21tYW5kKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGdsb2JhbCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGFyZ3VtZW50IHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkucmVkdWNlKChtYXgsIGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnRUZXJtKGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHVzYWdlIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kVXNhZ2UoY21kKSB7XG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgY21kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAoY21kLl9hbGlhc2VzWzBdKSB7XG4gICAgICBjbWROYW1lID0gY21kTmFtZSArICd8JyArIGNtZC5fYWxpYXNlc1swXTtcbiAgICB9XG4gICAgbGV0IGFuY2VzdG9yQ21kTmFtZXMgPSAnJztcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGFuY2VzdG9yQ21kTmFtZXMgPSBhbmNlc3RvckNtZC5uYW1lKCkgKyAnICcgKyBhbmNlc3RvckNtZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JDbWROYW1lcyArIGNtZE5hbWUgKyAnICcgKyBjbWQudXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN1YmNvbW1hbmQgc3VtbWFyeSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKiAoRmFsbGJhY2sgdG8gZGVzY3JpcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuc3VtbWFyeSgpIHx8IGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHtvcHRpb24uYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZGVmYXVsdCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXIsXG4gICAgICAvLyBidXQgc2hvdyB0cnVlL2ZhbHNlIGZvciBib29sZWFuIG9wdGlvbiBhcyBtYXkgYmUgZm9yIGhhbmQtcm9sbGVkIGVudiBvciBjb25maWcgcHJvY2Vzc2luZy5cbiAgICAgIGNvbnN0IHNob3dEZWZhdWx0ID1cbiAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgIG9wdGlvbi5vcHRpb25hbCB8fFxuICAgICAgICAob3B0aW9uLmlzQm9vbGVhbigpICYmIHR5cGVvZiBvcHRpb24uZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgaWYgKHNob3dEZWZhdWx0KSB7XG4gICAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAgIGBkZWZhdWx0OiAke29wdGlvbi5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShvcHRpb24uZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwcmVzZXQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgYXJlIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlclxuICAgIGlmIChvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgcHJlc2V0OiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbi5wcmVzZXRBcmcpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmVudlZhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgZW52OiAke29wdGlvbi5lbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChvcHRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbi5kZXNjcmlwdGlvbn0gJHtleHRyYURlc2NyaXB0aW9ufWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFEZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCkge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuICAgIGlmIChhcmd1bWVudC5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHthcmd1bWVudC5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICBgZGVmYXVsdDogJHthcmd1bWVudC5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShhcmd1bWVudC5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZXh0cmFJbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dHJhRGVzY3JpcHRpb24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAoYXJndW1lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke2FyZ3VtZW50LmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXJndW1lbnQuZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgbGlzdCBvZiBpdGVtcywgZ2l2ZW4gYSBoZWFkaW5nIGFuZCBhbiBhcnJheSBvZiBmb3JtYXR0ZWQgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGl0ZW1zXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHN0cmluZ1tdXG4gICAqL1xuICBmb3JtYXRJdGVtTGlzdChoZWFkaW5nLCBpdGVtcywgaGVscGVyKSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIFtoZWxwZXIuc3R5bGVUaXRsZShoZWFkaW5nKSwgLi4uaXRlbXMsICcnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cCBpdGVtcyBieSB0aGVpciBoZWxwIGdyb3VwIGhlYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZFtdIHwgT3B0aW9uW119IHVuc29ydGVkSXRlbXNcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdmlzaWJsZUl0ZW1zXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEdyb3VwXG4gICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBDb21tYW5kW10gfCBPcHRpb25bXT59XG4gICAqL1xuICBncm91cEl0ZW1zKHVuc29ydGVkSXRlbXMsIHZpc2libGVJdGVtcywgZ2V0R3JvdXApIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgLy8gQWRkIGdyb3VwcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHVuc29ydGVkSXRlbXMuXG4gICAgdW5zb3J0ZWRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgIH0pO1xuICAgIC8vIEFkZCBpdGVtcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHZpc2libGVJdGVtcy5cbiAgICB2aXNpYmxlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRHcm91cChpdGVtKTtcbiAgICAgIGlmICghcmVzdWx0Lmhhcyhncm91cCkpIHtcbiAgICAgICAgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmdldChncm91cCkucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBidWlsdC1pbiBoZWxwIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGZvcm1hdEhlbHAoY21kLCBoZWxwZXIpIHtcbiAgICBjb25zdCB0ZXJtV2lkdGggPSBoZWxwZXIucGFkV2lkdGgoY21kLCBoZWxwZXIpO1xuICAgIGNvbnN0IGhlbHBXaWR0aCA9IGhlbHBlci5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuXG4gICAgZnVuY3Rpb24gY2FsbEZvcm1hdEl0ZW0odGVybSwgZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBoZWxwZXIuZm9ybWF0SXRlbSh0ZXJtLCB0ZXJtV2lkdGgsIGRlc2NyaXB0aW9uLCBoZWxwZXIpO1xuICAgIH1cblxuICAgIC8vIFVzYWdlXG4gICAgbGV0IG91dHB1dCA9IFtcbiAgICAgIGAke2hlbHBlci5zdHlsZVRpdGxlKCdVc2FnZTonKX0gJHtoZWxwZXIuc3R5bGVVc2FnZShoZWxwZXIuY29tbWFuZFVzYWdlKGNtZCkpfWAsXG4gICAgICAnJyxcbiAgICBdO1xuXG4gICAgLy8gRGVzY3JpcHRpb25cbiAgICBjb25zdCBjb21tYW5kRGVzY3JpcHRpb24gPSBoZWxwZXIuY29tbWFuZERlc2NyaXB0aW9uKGNtZCk7XG4gICAgaWYgKGNvbW1hbmREZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFtcbiAgICAgICAgaGVscGVyLmJveFdyYXAoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKGNvbW1hbmREZXNjcmlwdGlvbiksXG4gICAgICAgICAgaGVscFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICAnJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIEFyZ3VtZW50c1xuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkubWFwKChhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKGhlbHBlci5hcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSksXG4gICAgICApO1xuICAgIH0pO1xuICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICB0aGlzLmZvcm1hdEl0ZW1MaXN0KCdBcmd1bWVudHM6JywgYXJndW1lbnRMaXN0LCBoZWxwZXIpLFxuICAgICk7XG5cbiAgICAvLyBPcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLm9wdGlvbnMsXG4gICAgICBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKSxcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5oZWxwR3JvdXBIZWFkaW5nID8/ICdPcHRpb25zOicsXG4gICAgKTtcbiAgICBvcHRpb25Hcm91cHMuZm9yRWFjaCgob3B0aW9ucywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBvcHRpb25MaXN0LCBoZWxwZXIpKTtcbiAgICB9KTtcblxuICAgIGlmIChoZWxwZXIuc2hvd0dsb2JhbE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGdsb2JhbE9wdGlvbkxpc3QgPSBoZWxwZXJcbiAgICAgICAgLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZClcbiAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSxcbiAgICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0dsb2JhbCBPcHRpb25zOicsIGdsb2JhbE9wdGlvbkxpc3QsIGhlbHBlciksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbW1hbmRzXG4gICAgY29uc3QgY29tbWFuZEdyb3VwcyA9IHRoaXMuZ3JvdXBJdGVtcyhcbiAgICAgIGNtZC5jb21tYW5kcyxcbiAgICAgIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKSxcbiAgICAgIChzdWIpID0+IHN1Yi5oZWxwR3JvdXAoKSB8fCAnQ29tbWFuZHM6JyxcbiAgICApO1xuICAgIGNvbW1hbmRHcm91cHMuZm9yRWFjaCgoY29tbWFuZHMsIGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBjb21tYW5kTGlzdCA9IGNvbW1hbmRzLm1hcCgoc3ViKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kVGVybShoZWxwZXIuc3ViY29tbWFuZFRlcm0oc3ViKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKGhlbHBlci5zdWJjb21tYW5kRGVzY3JpcHRpb24oc3ViKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQodGhpcy5mb3JtYXRJdGVtTGlzdChncm91cCwgY29tbWFuZExpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGlzcGxheSB3aWR0aCBvZiBzdHJpbmcsIGlnbm9yaW5nIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gVXNlZCBpbiBwYWRkaW5nIGFuZCB3cmFwcGluZyBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3BsYXlXaWR0aChzdHIpIHtcbiAgICByZXR1cm4gc3RyaXBDb2xvcihzdHIpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSB0aGUgdGl0bGUgZm9yIGRpc3BsYXlpbmcgaW4gdGhlIGhlbHAuIENhbGxlZCB3aXRoICdVc2FnZTonLCAnT3B0aW9uczonLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0eWxlVGl0bGUoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0eWxlVXNhZ2Uoc3RyKSB7XG4gICAgLy8gVXNhZ2UgaGFzIGxvdHMgb2YgcGFydHMgdGhlIHVzZXIgbWlnaHQgbGlrZSB0byBjb2xvciBzZXBhcmF0ZWx5ISBBc3N1bWUgZGVmYXVsdCB1c2FnZSBzdHJpbmcgd2hpY2ggaXMgZm9ybWVkIGxpa2U6XG4gICAgLy8gICAgY29tbWFuZCBzdWJjb21tYW5kIFtvcHRpb25zXSBbY29tbWFuZF0gPGZvbz4gW2Jhcl1cbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLm1hcCgod29yZCkgPT4ge1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tvcHRpb25zXScpIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbY29tbWFuZF0nKSByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVDb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25EZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZU9wdGlvblRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kVGVybShzdHIpIHtcbiAgICAvLyBUaGlzIGlzIHZlcnkgbGlrZSB1c2FnZSB3aXRoIGxvdHMgb2YgcGFydHMhIEFzc3VtZSBkZWZhdWx0IHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBzdWJjb21tYW5kIFtvcHRpb25zXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVTdWJjb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQXJndW1lbnRUZXJtKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25UZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVDb21tYW5kVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcGFkIHdpZHRoIGZyb20gdGhlIG1heGltdW0gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIHBhZFdpZHRoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgaGVscGVyLmxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBtYW51YWxseSB3cmFwcGVkIGFuZCBpbmRlbnRlZCBzdHJpbmdzIGJ5IGNoZWNraW5nIGZvciBsaW5lIGJyZWFrIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwcmVmb3JtYXR0ZWQoc3RyKSB7XG4gICAgcmV0dXJuIC9cXG5bXlxcU1xcclxcbl0vLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIFwiaXRlbVwiLCB3aGljaCBjb25zaXN0cyBvZiBhIHRlcm0gYW5kIGRlc2NyaXB0aW9uLiBQYWQgdGhlIHRlcm0gYW5kIHdyYXAgdGhlIGRlc2NyaXB0aW9uLCBpbmRlbnRpbmcgdGhlIGZvbGxvd2luZyBsaW5lcy5cbiAgICpcbiAgICogU28gXCJUVFRcIiwgNSwgXCJEREQgRERERCBERCBERERcIiBtaWdodCBiZSBmb3JtYXR0ZWQgZm9yIHRoaXMuaGVscFdpZHRoPTE3IGxpa2Ugc286XG4gICAqICAgVFRUICBEREQgRERERFxuICAgKiAgICAgICAgREQgREREXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0ZXJtV2lkdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcikge1xuICAgIGNvbnN0IGl0ZW1JbmRlbnQgPSAyO1xuICAgIGNvbnN0IGl0ZW1JbmRlbnRTdHIgPSAnICcucmVwZWF0KGl0ZW1JbmRlbnQpO1xuICAgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBpdGVtSW5kZW50U3RyICsgdGVybTtcblxuICAgIC8vIFBhZCB0aGUgdGVybSBvdXQgdG8gYSBjb25zaXN0ZW50IHdpZHRoLCBzbyBkZXNjcmlwdGlvbnMgYXJlIGFsaWduZWQuXG4gICAgY29uc3QgcGFkZGVkVGVybSA9IHRlcm0ucGFkRW5kKFxuICAgICAgdGVybVdpZHRoICsgdGVybS5sZW5ndGggLSBoZWxwZXIuZGlzcGxheVdpZHRoKHRlcm0pLFxuICAgICk7XG5cbiAgICAvLyBGb3JtYXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgIGNvbnN0IHNwYWNlcldpZHRoID0gMjsgLy8gYmV0d2VlbiB0ZXJtIGFuZCBkZXNjcmlwdGlvblxuICAgIGNvbnN0IGhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IDgwOyAvLyBpbiBjYXNlIHByZXBhcmVDb250ZXh0KCkgd2FzIG5vdCBjYWxsZWRcbiAgICBjb25zdCByZW1haW5pbmdXaWR0aCA9IGhlbHBXaWR0aCAtIHRlcm1XaWR0aCAtIHNwYWNlcldpZHRoIC0gaXRlbUluZGVudDtcbiAgICBsZXQgZm9ybWF0dGVkRGVzY3JpcHRpb247XG4gICAgaWYgKFxuICAgICAgcmVtYWluaW5nV2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwIHx8XG4gICAgICBoZWxwZXIucHJlZm9ybWF0dGVkKGRlc2NyaXB0aW9uKVxuICAgICkge1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd3JhcHBlZERlc2NyaXB0aW9uID0gaGVscGVyLmJveFdyYXAoZGVzY3JpcHRpb24sIHJlbWFpbmluZ1dpZHRoKTtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uID0gd3JhcHBlZERlc2NyaXB0aW9uLnJlcGxhY2UoXG4gICAgICAgIC9cXG4vZyxcbiAgICAgICAgJ1xcbicgKyAnICcucmVwZWF0KHRlcm1XaWR0aCArIHNwYWNlcldpZHRoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IGFuZCBvdmVyYWxsIGluZGVudC5cbiAgICByZXR1cm4gKFxuICAgICAgaXRlbUluZGVudFN0ciArXG4gICAgICBwYWRkZWRUZXJtICtcbiAgICAgICcgJy5yZXBlYXQoc3BhY2VyV2lkdGgpICtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBgXFxuJHtpdGVtSW5kZW50U3RyfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIGEgc3RyaW5nIGF0IHdoaXRlc3BhY2UsIHByZXNlcnZpbmcgZXhpc3RpbmcgbGluZSBicmVha3MuXG4gICAqIFdyYXBwaW5nIGlzIHNraXBwZWQgaWYgdGhlIHdpZHRoIGlzIGxlc3MgdGhhbiBgbWluV2lkdGhUb1dyYXBgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYm94V3JhcChzdHIsIHdpZHRoKSB7XG4gICAgaWYgKHdpZHRoIDwgdGhpcy5taW5XaWR0aFRvV3JhcCkgcmV0dXJuIHN0cjtcblxuICAgIGNvbnN0IHJhd0xpbmVzID0gc3RyLnNwbGl0KC9cXHJcXG58XFxuLyk7XG4gICAgLy8gc3BsaXQgdXAgdGV4dCBieSB3aGl0ZXNwYWNlXG4gICAgY29uc3QgY2h1bmtQYXR0ZXJuID0gL1tcXHNdKlteXFxzXSsvZztcbiAgICBjb25zdCB3cmFwcGVkTGluZXMgPSBbXTtcbiAgICByYXdMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBsaW5lLm1hdGNoKGNodW5rUGF0dGVybik7XG4gICAgICBpZiAoY2h1bmtzID09PSBudWxsKSB7XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3VtQ2h1bmtzID0gW2NodW5rcy5zaGlmdCgpXTtcbiAgICAgIGxldCBzdW1XaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKHN1bUNodW5rc1swXSk7XG4gICAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoY2h1bmspO1xuICAgICAgICAvLyBBY2N1bXVsYXRlIGNodW5rcyB3aGlsZSB0aGV5IGZpdCBpbnRvIHdpZHRoLlxuICAgICAgICBpZiAoc3VtV2lkdGggKyB2aXNpYmxlV2lkdGggPD0gd2lkdGgpIHtcbiAgICAgICAgICBzdW1DaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgc3VtV2lkdGggKz0gdmlzaWJsZVdpZHRoO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuXG4gICAgICAgIGNvbnN0IG5leHRDaHVuayA9IGNodW5rLnRyaW1TdGFydCgpOyAvLyB0cmltIHNwYWNlIGF0IGxpbmUgYnJlYWtcbiAgICAgICAgc3VtQ2h1bmtzID0gW25leHRDaHVua107XG4gICAgICAgIHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgobmV4dENodW5rKTtcbiAgICAgIH0pO1xuICAgICAgd3JhcHBlZExpbmVzLnB1c2goc3VtQ2h1bmtzLmpvaW4oJycpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3cmFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcCBzdHlsZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUgc3RyaW5nLiBJbiBwYXJ0aWN1bGFyLCBTR1IgKFNlbGVjdCBHcmFwaGljIFJlbmRpdGlvbikgY29kZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwYWNrYWdlXG4gKi9cblxuZnVuY3Rpb24gc3RyaXBDb2xvcihzdHIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgY29uc3Qgc2dyUGF0dGVybiA9IC9cXHgxYlxcW1xcZCooO1xcZCopKm0vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHNnclBhdHRlcm4sICcnKTtcbn1cblxuZXhwb3J0cy5IZWxwID0gSGVscDtcbmV4cG9ydHMuc3RyaXBDb2xvciA9IHN0cmlwQ29sb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBPcHRpb24ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgT3B0aW9uYCB3aXRoIHRoZSBnaXZlbiBgZmxhZ3NgIGFuZCBgZGVzY3JpcHRpb25gLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcblxuICAgIHRoaXMucmVxdWlyZWQgPSBmbGFncy5pbmNsdWRlcygnPCcpOyAvLyBBIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICB0aGlzLm9wdGlvbmFsID0gZmxhZ3MuaW5jbHVkZXMoJ1snKTsgLy8gQSB2YWx1ZSBpcyBvcHRpb25hbCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIC8vIHZhcmlhZGljIHRlc3QgaWdub3JlcyA8dmFsdWUsLi4uPiBldCBhbCB3aGljaCBtaWdodCBiZSB1c2VkIHRvIGRlc2NyaWJlIGN1c3RvbSBzcGxpdHRpbmcgb2Ygc2luZ2xlIGFyZ3VtZW50XG4gICAgdGhpcy52YXJpYWRpYyA9IC9cXHdcXC5cXC5cXC5bPlxcXV0kLy50ZXN0KGZsYWdzKTsgLy8gVGhlIG9wdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSB2YWx1ZXMuXG4gICAgdGhpcy5tYW5kYXRvcnkgPSBmYWxzZTsgLy8gVGhlIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0IG11c3QgYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS5cbiAgICBjb25zdCBvcHRpb25GbGFncyA9IHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpO1xuICAgIHRoaXMuc2hvcnQgPSBvcHRpb25GbGFncy5zaG9ydEZsYWc7IC8vIE1heSBiZSBhIHNob3J0IGZsYWcsIHVuZGVmaW5lZCwgb3IgZXZlbiBhIGxvbmcgZmxhZyAoaWYgb3B0aW9uIGhhcyB0d28gbG9uZyBmbGFncykuXG4gICAgdGhpcy5sb25nID0gb3B0aW9uRmxhZ3MubG9uZ0ZsYWc7XG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sb25nKSB7XG4gICAgICB0aGlzLm5lZ2F0ZSA9IHRoaXMubG9uZy5zdGFydHNXaXRoKCctLW5vLScpO1xuICAgIH1cbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJlc2V0QXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZW52VmFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25mbGljdHNXaXRoID0gW107XG4gICAgdGhpcy5pbXBsaWVkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIG9wdGlvbiBhZGRlZCB0byBjb21tYW5kXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGRlZmF1bHQodmFsdWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUHJlc2V0IHRvIHVzZSB3aGVuIG9wdGlvbiB1c2VkIHdpdGhvdXQgb3B0aW9uLWFyZ3VtZW50LCBlc3BlY2lhbGx5IG9wdGlvbmFsIGJ1dCBhbHNvIGJvb2xlYW4gYW5kIG5lZ2F0ZWQuXG4gICAqIFRoZSBjdXN0b20gcHJvY2Vzc2luZyAocGFyc2VBcmcpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1jb2xvcicpLmRlZmF1bHQoJ0dSRVlTQ0FMRScpLnByZXNldCgnUkdCJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tZG9uYXRlIFthbW91bnRdJykucHJlc2V0KCcyMCcpLmFyZ1BhcnNlcihwYXJzZUZsb2F0KTtcbiAgICpcbiAgICogQHBhcmFtIHsqfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBwcmVzZXQoYXJnKSB7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSBhcmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9wdGlvbiBuYW1lKHMpIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGlzIG9wdGlvbi5cbiAgICogQW4gZXJyb3Igd2lsbCBiZSBkaXNwbGF5ZWQgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgZm91bmQgZHVyaW5nIHBhcnNpbmcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBPcHRpb24oJy0tcmdiJykuY29uZmxpY3RzKCdjbXlrJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tanMnKS5jb25mbGljdHMoWyd0cycsICdqc3gnXSk7XG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbmFtZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjb25mbGljdHMobmFtZXMpIHtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSB0aGlzLmNvbmZsaWN0c1dpdGguY29uY2F0KG5hbWVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGltcGxpZWQgb3B0aW9uIHZhbHVlcyBmb3Igd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgYW5kIHRoZSBpbXBsaWVkIG9wdGlvbnMgYXJlIG5vdC5cbiAgICpcbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgbm90IGNhbGxlZCBvbiB0aGUgaW1wbGllZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9nJywgJ3dyaXRlIGxvZ2dpbmcgaW5mb3JtYXRpb24gdG8gZmlsZScpKVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cmFjZScsICdsb2cgZXh0cmEgZGV0YWlscycpLmltcGxpZXMoeyBsb2c6ICd0cmFjZS50eHQnIH0pKTtcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGltcGxpZWRPcHRpb25WYWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaW1wbGllcyhpbXBsaWVkT3B0aW9uVmFsdWVzKSB7XG4gICAgbGV0IG5ld0ltcGxpZWQgPSBpbXBsaWVkT3B0aW9uVmFsdWVzO1xuICAgIGlmICh0eXBlb2YgaW1wbGllZE9wdGlvblZhbHVlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHN0cmluZyBpcyBub3QgZG9jdW1lbnRlZCwgYnV0IGVhc3kgbWlzdGFrZSBhbmQgd2UgY2FuIGRvIHdoYXQgdXNlciBwcm9iYWJseSBpbnRlbmRlZC5cbiAgICAgIG5ld0ltcGxpZWQgPSB7IFtpbXBsaWVkT3B0aW9uVmFsdWVzXTogdHJ1ZSB9O1xuICAgIH1cbiAgICB0aGlzLmltcGxpZWQgPSBPYmplY3QuYXNzaWduKHRoaXMuaW1wbGllZCB8fCB7fSwgbmV3SW1wbGllZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNoZWNrIGZvciBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBpZiB3aGVuIHByb2Nlc3NlZCB0aGUgY3VycmVudCBvcHRpb24gdmFsdWUgaXNcbiAgICogdW5kZWZpbmVkLCBvciB0aGUgc291cmNlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGlzICdkZWZhdWx0JyBvciAnY29uZmlnJyBvciAnZW52Jy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBlbnYobmFtZSkge1xuICAgIHRoaXMuZW52VmFyID0gbmFtZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBvcHRpb24gYXJndW1lbnRzIGludG8gb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGFyZ1BhcnNlcihmbikge1xuICAgIHRoaXMucGFyc2VBcmcgPSBmbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgbWFuZGF0b3J5IGFuZCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYW5kYXRvcnk9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBtYWtlT3B0aW9uTWFuZGF0b3J5KG1hbmRhdG9yeSA9IHRydWUpIHtcbiAgICB0aGlzLm1hbmRhdG9yeSA9ICEhbWFuZGF0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgb3B0aW9uIGluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGU9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBoaWRlSGVscChoaWRlID0gdHJ1ZSkge1xuICAgIHRoaXMuaGlkZGVuID0gISFoaWRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IG9wdGlvbiB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvbmcucmVwbGFjZSgvXi0tLywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gb3B0aW9uIG5hbWUsIGluIGEgY2FtZWxjYXNlIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkXG4gICAqIGFzIGFuIG9iamVjdCBhdHRyaWJ1dGUga2V5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKHRoaXMubmVnYXRlKSB7XG4gICAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpLnJlcGxhY2UoL15uby0vLCAnJykpO1xuICAgIH1cbiAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaGVscEdyb3VwKGhlYWRpbmcpIHtcbiAgICB0aGlzLmhlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGBhcmdgIG1hdGNoZXMgdGhlIHNob3J0IG9yIGxvbmcgZmxhZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBpcyhhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5zaG9ydCA9PT0gYXJnIHx8IHRoaXMubG9uZyA9PT0gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGEgYm9vbGVhbiBvcHRpb24uXG4gICAqXG4gICAqIE9wdGlvbnMgYXJlIG9uZSBvZiBib29sZWFuLCBuZWdhdGVkLCByZXF1aXJlZCBhcmd1bWVudCwgb3Igb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzQm9vbGVhbigpIHtcbiAgICByZXR1cm4gIXRoaXMucmVxdWlyZWQgJiYgIXRoaXMub3B0aW9uYWwgJiYgIXRoaXMubmVnYXRlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0byBtYWtlIGl0IGVhc2llciB0byB3b3JrIHdpdGggZHVhbCBvcHRpb25zLCB3aXRob3V0IGNoYW5naW5nIHRoZSBleGlzdGluZ1xuICogaW1wbGVtZW50YXRpb24uIFdlIHN1cHBvcnQgc2VwYXJhdGUgZHVhbCBvcHRpb25zIGZvciBzZXBhcmF0ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgb3B0aW9ucyxcbiAqIGxpa2UgYC0tYnVpbGRgIGFuZCBgLS1uby1idWlsZGAsIHdoaWNoIHNoYXJlIGEgc2luZ2xlIG9wdGlvbiB2YWx1ZS4gVGhpcyB3b3JrcyBuaWNlbHkgZm9yIHNvbWVcbiAqIHVzZSBjYXNlcywgYnV0IGlzIHRyaWNreSBmb3Igb3RoZXJzIHdoZXJlIHdlIHdhbnQgc2VwYXJhdGUgYmVoYXZpb3VycyBkZXNwaXRlXG4gKiB0aGUgc2luZ2xlIHNoYXJlZCBvcHRpb24gdmFsdWUuXG4gKi9cbmNsYXNzIER1YWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9uW119IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBvc2l0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmR1YWxPcHRpb25zID0gbmV3IFNldCgpO1xuICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5zZXQob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSwgb3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzLnBvc2l0aXZlT3B0aW9ucy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLmR1YWxPcHRpb25zLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpZCB0aGUgdmFsdWUgY29tZSBmcm9tIHRoZSBvcHRpb24sIGFuZCBub3QgZnJvbSBwb3NzaWJsZSBtYXRjaGluZyBkdWFsIG9wdGlvbj9cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdmFsdWVGcm9tT3B0aW9uKHZhbHVlLCBvcHRpb24pIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIGlmICghdGhpcy5kdWFsT3B0aW9ucy5oYXMob3B0aW9uS2V5KSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBVc2UgdGhlIHZhbHVlIHRvIGRlZHVjZSBpZiAocHJvYmFibHkpIGNhbWUgZnJvbSB0aGUgb3B0aW9uLlxuICAgIGNvbnN0IHByZXNldCA9IHRoaXMubmVnYXRpdmVPcHRpb25zLmdldChvcHRpb25LZXkpLnByZXNldEFyZztcbiAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gcHJlc2V0ICE9PSB1bmRlZmluZWQgPyBwcmVzZXQgOiBmYWxzZTtcbiAgICByZXR1cm4gb3B0aW9uLm5lZ2F0ZSA9PT0gKG5lZ2F0aXZlVmFsdWUgPT09IHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIGZyb20ga2ViYWItY2FzZSB0byBjYW1lbENhc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJy0nKS5yZWR1Y2UoKHN0ciwgd29yZCkgPT4ge1xuICAgIHJldHVybiBzdHIgKyB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgc2hvcnQgYW5kIGxvbmcgZmxhZyBvdXQgb2Ygc29tZXRoaW5nIGxpa2UgJy1tLC0tbWl4ZWQgPHZhbHVlPidcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpIHtcbiAgbGV0IHNob3J0RmxhZztcbiAgbGV0IGxvbmdGbGFnO1xuICAvLyBzaG9ydCBmbGFnLCBzaW5nbGUgZGFzaCBhbmQgc2luZ2xlIGNoYXJhY3RlclxuICBjb25zdCBzaG9ydEZsYWdFeHAgPSAvXi1bXi1dJC87XG4gIC8vIGxvbmcgZmxhZywgZG91YmxlIGRhc2ggYW5kIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcbiAgY29uc3QgbG9uZ0ZsYWdFeHAgPSAvXi0tW14tXS87XG5cbiAgY29uc3QgZmxhZ1BhcnRzID0gZmxhZ3Muc3BsaXQoL1sgfCxdKy8pLmNvbmNhdCgnZ3VhcmQnKTtcbiAgLy8gTm9ybWFsIGlzIHNob3J0IGFuZC9vciBsb25nLlxuICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIGlmIChsb25nRmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIExvbmcgdGhlbiBzaG9ydC4gUmFyZWx5IHVzZWQgYnV0IGZpbmUuXG4gIGlmICghc2hvcnRGbGFnICYmIHNob3J0RmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpXG4gICAgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIEFsbG93IHR3byBsb25nIGZsYWdzLCBsaWtlICctLXdzLCAtLXdvcmtzcGFjZSdcbiAgLy8gVGhpcyBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBoYXZlIGEgc2hvcnRpc2ggb3B0aW9uIGZsYWcuXG4gIGlmICghc2hvcnRGbGFnICYmIGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkge1xuICAgIHNob3J0RmxhZyA9IGxvbmdGbGFnO1xuICAgIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5wcm9jZXNzZWQgZmxhZy4gRmFpbCBub2lzaWx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZS5cbiAgaWYgKGZsYWdQYXJ0c1swXS5zdGFydHNXaXRoKCctJykpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZEZsYWcgPSBmbGFnUGFydHNbMF07XG4gICAgY29uc3QgYmFzZUVycm9yID0gYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvICcke3Vuc3VwcG9ydGVkRmxhZ30nIGluIG9wdGlvbiBmbGFncyAnJHtmbGFnc30nYDtcbiAgICBpZiAoL14tW14tXVteLV0vLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7YmFzZUVycm9yfVxuLSBhIHNob3J0IGZsYWcgaXMgYSBzaW5nbGUgZGFzaCBhbmQgYSBzaW5nbGUgY2hhcmFjdGVyXG4gIC0gZWl0aGVyIHVzZSBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBhIHNob3J0IGZsYWcpXG4gIC0gb3IgdXNlIGEgZG91YmxlIGRhc2ggZm9yIGEgbG9uZyBvcHRpb24gKGFuZCBjYW4gaGF2ZSB0d28sIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJylgLFxuICAgICAgKTtcbiAgICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IHNob3J0IGZsYWdzYCk7XG4gICAgaWYgKGxvbmdGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IGxvbmcgZmxhZ3NgKTtcblxuICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHVucmVjb2duaXNlZCBmbGFnIGZvcm1hdGApO1xuICB9XG4gIGlmIChzaG9ydEZsYWcgPT09IHVuZGVmaW5lZCAmJiBsb25nRmxhZyA9PT0gdW5kZWZpbmVkKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBvcHRpb24gY3JlYXRpb24gZmFpbGVkIGR1ZSB0byBubyBmbGFncyBmb3VuZCBpbiAnJHtmbGFnc30nLmAsXG4gICAgKTtcblxuICByZXR1cm4geyBzaG9ydEZsYWcsIGxvbmdGbGFnIH07XG59XG5cbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5EdWFsT3B0aW9ucyA9IER1YWxPcHRpb25zO1xuIiwgImNvbnN0IG1heERpc3RhbmNlID0gMztcblxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGEsIGIpIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGFtZXJhdVx1MjAxM0xldmVuc2h0ZWluX2Rpc3RhbmNlXG4gIC8vIENhbGN1bGF0aW5nIG9wdGltYWwgc3RyaW5nIGFsaWdubWVudCBkaXN0YW5jZSwgbm8gc3Vic3RyaW5nIGlzIGVkaXRlZCBtb3JlIHRoYW4gb25jZS5cbiAgLy8gKFNpbXBsZSBpbXBsZW1lbnRhdGlvbi4pXG5cbiAgLy8gUXVpY2sgZWFybHkgZXhpdCwgcmV0dXJuIHdvcnN0IGNhc2UuXG4gIGlmIChNYXRoLmFicyhhLmxlbmd0aCAtIGIubGVuZ3RoKSA+IG1heERpc3RhbmNlKVxuICAgIHJldHVybiBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG4gIC8vIGRpc3RhbmNlIGJldHdlZW4gcHJlZml4IHN1YnN0cmluZ3Mgb2YgYSBhbmQgYlxuICBjb25zdCBkID0gW107XG5cbiAgLy8gcHVyZSBkZWxldGlvbnMgdHVybiBhIGludG8gZW1wdHkgc3RyaW5nXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICBkW2ldID0gW2ldO1xuICB9XG4gIC8vIHB1cmUgaW5zZXJ0aW9ucyB0dXJuIGVtcHR5IHN0cmluZyBpbnRvIGJcbiAgZm9yIChsZXQgaiA9IDA7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGRbMF1bal0gPSBqO1xuICB9XG5cbiAgLy8gZmlsbCBtYXRyaXhcbiAgZm9yIChsZXQgaiA9IDE7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb3N0ID0gMTtcbiAgICAgIGlmIChhW2kgLSAxXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgICAgY29zdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3N0ID0gMTtcbiAgICAgIH1cbiAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgZFtpIC0gMV1bal0gKyAxLCAvLyBkZWxldGlvblxuICAgICAgICBkW2ldW2ogLSAxXSArIDEsIC8vIGluc2VydGlvblxuICAgICAgICBkW2kgLSAxXVtqIC0gMV0gKyBjb3N0LCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBkW2ldW2pdID0gTWF0aC5taW4oZFtpXVtqXSwgZFtpIC0gMl1baiAtIDJdICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRbYS5sZW5ndGhdW2IubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBGaW5kIGNsb3NlIG1hdGNoZXMsIHJlc3RyaWN0ZWQgdG8gc2FtZSBudW1iZXIgb2YgZWRpdHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gc3VnZ2VzdFNpbWlsYXIod29yZCwgY2FuZGlkYXRlcykge1xuICBpZiAoIWNhbmRpZGF0ZXMgfHwgY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgLy8gcmVtb3ZlIHBvc3NpYmxlIGR1cGxpY2F0ZXNcbiAgY2FuZGlkYXRlcyA9IEFycmF5LmZyb20obmV3IFNldChjYW5kaWRhdGVzKSk7XG5cbiAgY29uc3Qgc2VhcmNoaW5nT3B0aW9ucyA9IHdvcmQuc3RhcnRzV2l0aCgnLS0nKTtcbiAgaWYgKHNlYXJjaGluZ09wdGlvbnMpIHtcbiAgICB3b3JkID0gd29yZC5zbGljZSgyKTtcbiAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnNsaWNlKDIpKTtcbiAgfVxuXG4gIGxldCBzaW1pbGFyID0gW107XG4gIGxldCBiZXN0RGlzdGFuY2UgPSBtYXhEaXN0YW5jZTtcbiAgY29uc3QgbWluU2ltaWxhcml0eSA9IDAuNDtcbiAgY2FuZGlkYXRlcy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoY2FuZGlkYXRlLmxlbmd0aCA8PSAxKSByZXR1cm47IC8vIG5vIG9uZSBjaGFyYWN0ZXIgZ3Vlc3Nlc1xuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBlZGl0RGlzdGFuY2Uod29yZCwgY2FuZGlkYXRlKTtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCh3b3JkLmxlbmd0aCwgY2FuZGlkYXRlLmxlbmd0aCk7XG4gICAgY29uc3Qgc2ltaWxhcml0eSA9IChsZW5ndGggLSBkaXN0YW5jZSkgLyBsZW5ndGg7XG4gICAgaWYgKHNpbWlsYXJpdHkgPiBtaW5TaW1pbGFyaXR5KSB7XG4gICAgICBpZiAoZGlzdGFuY2UgPCBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgLy8gYmV0dGVyIGVkaXQgZGlzdGFuY2UsIHRocm93IGF3YXkgcHJldmlvdXMgd29yc2UgbWF0Y2hlc1xuICAgICAgICBiZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgc2ltaWxhciA9IFtjYW5kaWRhdGVdO1xuICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA9PT0gYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIHNpbWlsYXIucHVzaChjYW5kaWRhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgc2ltaWxhci5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHNpbWlsYXIgPSBzaW1pbGFyLm1hcCgoY2FuZGlkYXRlKSA9PiBgLS0ke2NhbmRpZGF0ZX1gKTtcbiAgfVxuXG4gIGlmIChzaW1pbGFyLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gb25lIG9mICR7c2ltaWxhci5qb2luKCcsICcpfT8pYDtcbiAgfVxuICBpZiAoc2ltaWxhci5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gJHtzaW1pbGFyWzBdfT8pYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydHMuc3VnZ2VzdFNpbWlsYXIgPSBzdWdnZXN0U2ltaWxhcjtcbiIsICJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ25vZGU6cGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdub2RlOmZzJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpwcm9jZXNzJyk7XG5cbmNvbnN0IHsgQXJndW1lbnQsIGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAsIHN0cmlwQ29sb3IgfSA9IHJlcXVpcmUoJy4vaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24sIER1YWxPcHRpb25zIH0gPSByZXF1aXJlKCcuL29wdGlvbi5qcycpO1xuY29uc3QgeyBzdWdnZXN0U2ltaWxhciB9ID0gcmVxdWlyZSgnLi9zdWdnZXN0U2ltaWxhcicpO1xuXG5jbGFzcyBDb21tYW5kIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYENvbW1hbmRgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7Q29tbWFuZFtdfSAqL1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICAvKiogQHR5cGUge09wdGlvbltdfSAqL1xuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7QXJndW1lbnRbXX0gKi9cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgPSBbXTtcbiAgICB0aGlzLl9hcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzOyAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmFyZ3MgPSBbXTsgLy8gY2xpIGFyZ3Mgd2l0aCBvcHRpb25zIHJlbW92ZWRcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTsgLy8gbGlrZSAuYXJncyBidXQgYWZ0ZXIgY3VzdG9tIHByb2Nlc3NpbmcgYW5kIGNvbGxlY3RpbmcgdmFyaWFkaWNcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl9uYW1lID0gbmFtZSB8fCAnJztcbiAgICB0aGlzLl9vcHRpb25WYWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7fTsgLy8gZGVmYXVsdCwgZW52LCBjbGkgZXRjXG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IG51bGw7XG4gICAgdGhpcy5fZXhlY3V0YWJsZUhhbmRsZXIgPSBmYWxzZTtcbiAgICB0aGlzLl9leGVjdXRhYmxlRmlsZSA9IG51bGw7IC8vIGN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlXG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IG51bGw7IC8vIGN1c3RvbSBzZWFyY2ggZGlyZWN0b3J5IGZvciBzdWJjb21tYW5kc1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IG51bGw7XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9hbGlhc2VzID0gW107XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMuX3N1bW1hcnkgPSAnJztcbiAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7IC8vIGxlZ2FjeVxuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fbGlmZUN5Y2xlSG9va3MgPSB7fTsgLy8gYSBoYXNoIG9mIGFycmF5c1xuICAgIC8qKiBAdHlwZSB7KGJvb2xlYW4gfCBzdHJpbmcpfSAqL1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9IHRydWU7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IG51bGw7IC8vIHVzZWQgaW4gc2F2ZS9yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZVxuXG4gICAgLy8gc2VlIGNvbmZpZ3VyZU91dHB1dCgpIGZvciBkb2NzXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIHdyaXRlT3V0OiAoc3RyKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZShzdHIpLFxuICAgICAgd3JpdGVFcnI6IChzdHIpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKHN0ciksXG4gICAgICBvdXRwdXRFcnJvcjogKHN0ciwgd3JpdGUpID0+IHdyaXRlKHN0ciksXG4gICAgICBnZXRPdXRIZWxwV2lkdGg6ICgpID0+XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmlzVFRZID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IHVuZGVmaW5lZCxcbiAgICAgIGdldEVyckhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIuaXNUVFkgPyBwcm9jZXNzLnN0ZGVyci5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0T3V0SGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZG91dC5pc1RUWSAmJiBwcm9jZXNzLnN0ZG91dC5oYXNDb2xvcnM/LigpKSxcbiAgICAgIGdldEVyckhhc0NvbG9yczogKCkgPT5cbiAgICAgICAgdXNlQ29sb3IoKSA/PyAocHJvY2Vzcy5zdGRlcnIuaXNUVFkgJiYgcHJvY2Vzcy5zdGRlcnIuaGFzQ29sb3JzPy4oKSksXG4gICAgICBzdHJpcENvbG9yOiAoc3RyKSA9PiBzdHJpcENvbG9yKHN0ciksXG4gICAgfTtcblxuICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7KE9wdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpfSAqL1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIExhenkgY3JlYXRlZCBvbiBkZW1hbmQuIE1heSBiZSBudWxsIGlmIGhlbHAgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIHVuZGVjaWRlZCB3aGV0aGVyIHRydWUgb3IgZmFsc2UgeWV0LCBub3QgaW5oZXJpdGVkXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyBsYXp5IGluaXRpYWxpc2VkLCBpbmhlcml0ZWRcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSB1bmRlZmluZWQ7IC8vIHNvZnQgaW5pdGlhbGlzZWQgd2hlbiBhZGRlZCB0byBwYXJlbnRcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gdW5kZWZpbmVkO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHNldHRpbmdzIHRoYXQgYXJlIHVzZWZ1bCB0byBoYXZlIGluIGNvbW1vbiBhY3Jvc3Mgcm9vdCBjb21tYW5kIGFuZCBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSB3aGVuIGFkZGluZyBhIGNvbW1hbmQgdXNpbmcgYC5jb21tYW5kKClgIHNvIHN1YmNvbW1hbmRzIGluaGVyaXQgcGFyZW50IHNldHRpbmdzLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBzb3VyY2VDb21tYW5kXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29weUluaGVyaXRlZFNldHRpbmdzKHNvdXJjZUNvbW1hbmQpIHtcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5fb3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gc291cmNlQ29tbWFuZC5faGVscE9wdGlvbjtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IHNvdXJjZUNvbW1hbmQuX2hlbHBDb21tYW5kO1xuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5faGVscENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gc291cmNlQ29tbWFuZC5fZXhpdENhbGxiYWNrO1xuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9IHNvdXJjZUNvbW1hbmQuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcztcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPVxuICAgICAgc291cmNlQ29tbWFuZC5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gc291cmNlQ29tbWFuZC5fYWxsb3dFeGNlc3NBcmd1bWVudHM7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBzb3VyY2VDb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucztcbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93SGVscEFmdGVyRXJyb3I7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gc291cmNlQ29tbWFuZC5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgZm9yIChsZXQgY29tbWFuZCA9IHRoaXM7IGNvbW1hbmQ7IGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudCkge1xuICAgICAgcmVzdWx0LnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGEgY29tbWFuZC5cbiAgICpcbiAgICogVGhlcmUgYXJlIHR3byBzdHlsZXMgb2YgY29tbWFuZDogcGF5IGF0dGVudGlvbiB0byB3aGVyZSB0byBwdXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIGFjdGlvbiBoYW5kbGVyIChkZXNjcmlwdGlvbiBpcyBzdXBwbGllZCBzZXBhcmF0ZWx5IHRvIGAuY29tbWFuZGApXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnY2xvbmUgPHNvdXJjZT4gW2Rlc3RpbmF0aW9uXScpXG4gICAqICAgLmRlc2NyaXB0aW9uKCdjbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5JylcbiAgICogICAuYWN0aW9uKChzb3VyY2UsIGRlc3RpbmF0aW9uKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZygnY2xvbmUgY29tbWFuZCBjYWxsZWQnKTtcbiAgICogICB9KTtcbiAgICpcbiAgICogLy8gQ29tbWFuZCBpbXBsZW1lbnRlZCB1c2luZyBzZXBhcmF0ZSBleGVjdXRhYmxlIGZpbGUgKGRlc2NyaXB0aW9uIGlzIHNlY29uZCBwYXJhbWV0ZXIgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdzdGFydCA8c2VydmljZT4nLCAnc3RhcnQgbmFtZWQgc2VydmljZScpXG4gICAqICAgLmNvbW1hbmQoJ3N0b3AgW3NlcnZpY2VdJywgJ3N0b3AgbmFtZWQgc2VydmljZSwgb3IgYWxsIGlmIG5vIG5hbWUgc3VwcGxpZWQnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVBbmRBcmdzIC0gY29tbWFuZCBuYW1lIGFuZCBhcmd1bWVudHMsIGFyZ3MgYXJlIGA8cmVxdWlyZWQ+YCBvciBgW29wdGlvbmFsXWAgYW5kIGxhc3QgbWF5IGFsc28gYmUgYHZhcmlhZGljLi4uYFxuICAgKiBAcGFyYW0geyhvYmplY3QgfCBzdHJpbmcpfSBbYWN0aW9uT3B0c09yRXhlY0Rlc2NdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgYWN0aW9uKSwgb3IgZGVzY3JpcHRpb24gKGZvciBleGVjdXRhYmxlKVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2V4ZWNPcHRzXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IHJldHVybnMgbmV3IGNvbW1hbmQgZm9yIGFjdGlvbiBoYW5kbGVyLCBvciBgdGhpc2AgZm9yIGV4ZWN1dGFibGUgY29tbWFuZFxuICAgKi9cblxuICBjb21tYW5kKG5hbWVBbmRBcmdzLCBhY3Rpb25PcHRzT3JFeGVjRGVzYywgZXhlY09wdHMpIHtcbiAgICBsZXQgZGVzYyA9IGFjdGlvbk9wdHNPckV4ZWNEZXNjO1xuICAgIGxldCBvcHRzID0gZXhlY09wdHM7XG4gICAgaWYgKHR5cGVvZiBkZXNjID09PSAnb2JqZWN0JyAmJiBkZXNjICE9PSBudWxsKSB7XG4gICAgICBvcHRzID0gZGVzYztcbiAgICAgIGRlc2MgPSBudWxsO1xuICAgIH1cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBbLCBuYW1lLCBhcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG5cbiAgICBjb25zdCBjbWQgPSB0aGlzLmNyZWF0ZUNvbW1hbmQobmFtZSk7XG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIGNtZC5kZXNjcmlwdGlvbihkZXNjKTtcbiAgICAgIGNtZC5fZXhlY3V0YWJsZUhhbmRsZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBjbWQuX2hpZGRlbiA9ICEhKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKTsgLy8gbm9IZWxwIGlzIGRlcHJlY2F0ZWQgb2xkIG5hbWUgZm9yIGhpZGRlblxuICAgIGNtZC5fZXhlY3V0YWJsZUZpbGUgPSBvcHRzLmV4ZWN1dGFibGVGaWxlIHx8IG51bGw7IC8vIEN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlIGZpbGUsIHNldCBtaXNzaW5nIHRvIG51bGwgdG8gbWF0Y2ggY29uc3RydWN0b3JcbiAgICBpZiAoYXJncykgY21kLmFyZ3VtZW50cyhhcmdzKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuY29weUluaGVyaXRlZFNldHRpbmdzKHRoaXMpO1xuXG4gICAgaWYgKGRlc2MpIHJldHVybiB0aGlzO1xuICAgIHJldHVybiBjbWQ7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGNvbW1hbmQuIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlQ29tbWFuZCB0byBjdXN0b21pc2Ugc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gbmV3IGNvbW1hbmRcbiAgICovXG5cbiAgY3JlYXRlQ29tbWFuZChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBDb21tYW5kKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCxcbiAgICogb3IgYnkgb3ZlcnJpZGluZyBIZWxwIHByb3BlcnRpZXMgdXNpbmcgY29uZmlndXJlSGVscCgpLlxuICAgKlxuICAgKiBAcmV0dXJuIHtIZWxwfVxuICAgKi9cblxuICBjcmVhdGVIZWxwKCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBIZWxwKCksIHRoaXMuY29uZmlndXJlSGVscCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGN1c3RvbWlzZSB0aGUgaGVscCBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCksXG4gICAqIG9yIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCgpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVIZWxwKGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5faGVscENvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGFuZCBzdGRlcnIuIFlvdSBjYW4gY3VzdG9taXNlIHRoaXMgZm9yIHNwZWNpYWxcbiAgICogYXBwbGljYXRpb25zLiBZb3UgY2FuIGFsc28gY3VzdG9taXNlIHRoZSBkaXNwbGF5IG9mIGVycm9ycyBieSBvdmVycmlkaW5nIG91dHB1dEVycm9yLlxuICAgKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFyZSBhbGwgZnVuY3Rpb25zOlxuICAgKlxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiwgZGVmYXVsdHMgdG8gc3Rkb3V0IGFuZCBzdGRlcnJcbiAgICogICAgIHdyaXRlT3V0KHN0cilcbiAgICogICAgIHdyaXRlRXJyKHN0cilcbiAgICogICAgIC8vIGNoYW5nZSBob3cgb3V0cHV0IGJlaW5nIHdyaXR0ZW4gZm9yIGVycm9ycywgZGVmYXVsdHMgdG8gd3JpdGVFcnJcbiAgICogICAgIG91dHB1dEVycm9yKHN0ciwgd3JpdGUpIC8vIHVzZWQgZm9yIGRpc3BsYXlpbmcgZXJyb3JzIGFuZCBub3QgdXNlZCBmb3IgZGlzcGxheWluZyBoZWxwXG4gICAqICAgICAvLyBzcGVjaWZ5IHdpZHRoIGZvciB3cmFwcGluZyBoZWxwXG4gICAqICAgICBnZXRPdXRIZWxwV2lkdGgoKVxuICAgKiAgICAgZ2V0RXJySGVscFdpZHRoKClcbiAgICogICAgIC8vIGNvbG9yIHN1cHBvcnQsIGN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBIZWxwXG4gICAqICAgICBnZXRPdXRIYXNDb2xvcnMoKVxuICAgKiAgICAgZ2V0RXJySGFzQ29sb3JzKClcbiAgICogICAgIHN0cmlwQ29sb3IoKSAvLyB1c2VkIHRvIHJlbW92ZSBBTlNJIGVzY2FwZSBjb2RlcyBpZiBvdXRwdXQgZG9lcyBub3QgaGF2ZSBjb2xvcnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtjb25maWd1cmF0aW9uXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHsoQ29tbWFuZCB8IG9iamVjdCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgY29uZmlndXJlT3V0cHV0KGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi50aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLFxuICAgICAgLi4uY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGhlbHAgb3IgYSBjdXN0b20gbWVzc2FnZSBhZnRlciBhbiBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW2Rpc3BsYXlIZWxwXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dIZWxwQWZ0ZXJFcnJvcihkaXNwbGF5SGVscCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlIZWxwICE9PSAnc3RyaW5nJykgZGlzcGxheUhlbHAgPSAhIWRpc3BsYXlIZWxwO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGRpc3BsYXlIZWxwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgc3VnZ2VzdGlvbiBvZiBzaW1pbGFyIGNvbW1hbmRzIGZvciB1bmtub3duIGNvbW1hbmRzLCBvciBvcHRpb25zIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3BsYXlTdWdnZXN0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcihkaXNwbGF5U3VnZ2VzdGlvbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSAhIWRpc3BsYXlTdWdnZXN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHByZXBhcmVkIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kIHdoaWNoIGluaGVyaXRzIHNldHRpbmdzIGZyb20gaXRzIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWQgLSBuZXcgc3ViY29tbWFuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRDb21tYW5kKGNtZCwgb3B0cykge1xuICAgIGlmICghY21kLl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgcGFzc2VkIHRvIC5hZGRDb21tYW5kKCkgbXVzdCBoYXZlIGEgbmFtZVxuLSBzcGVjaWZ5IHRoZSBuYW1lIGluIENvbW1hbmQgY29uc3RydWN0b3Igb3IgdXNpbmcgLm5hbWUoKWApO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbikgY21kLl9oaWRkZW4gPSB0cnVlOyAvLyBtb2RpZnlpbmcgcGFzc2VkIGNvbW1hbmQgZHVlIHRvIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uXG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBhcmd1bWVudC5cbiAgICpcbiAgICogU2VlIC5hcmd1bWVudCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBhcmd1bWVudCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBhcmd1bWVudC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVBcmd1bWVudCB0byByZXR1cm4gYSBjdXN0b20gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fSBuZXcgYXJndW1lbnRcbiAgICovXG5cbiAgY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnPGlucHV0LWZpbGU+Jyk7XG4gICAqIHByb2dyYW0uYXJndW1lbnQoJ1tvdXRwdXQtZmlsZV0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gYXJndW1lbnQgcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gdGhpcy5jcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgaWYgKHR5cGVvZiBwYXJzZUFyZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihwYXJzZUFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQocGFyc2VBcmcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEFyZ3VtZW50KGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgbXVsdGlwbGUgYXQgb25jZSAod2l0aG91dCBkZXNjcmlwdGlvbnMpLlxuICAgKlxuICAgKiBTZWUgYWxzbyAuYXJndW1lbnQoKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudHMoJzxjbWQ+IFtlbnZdJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYXJndW1lbnRzKG5hbWVzKSB7XG4gICAgbmFtZXNcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgvICsvKVxuICAgICAgLmZvckVhY2goKGRldGFpbCkgPT4ge1xuICAgICAgICB0aGlzLmFyZ3VtZW50KGRldGFpbCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgYSBwcmVwYXJlZCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRBcmd1bWVudChhcmd1bWVudCkge1xuICAgIGNvbnN0IHByZXZpb3VzQXJndW1lbnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuc2xpY2UoLTEpWzBdO1xuICAgIGlmIChwcmV2aW91c0FyZ3VtZW50Py52YXJpYWRpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgb25seSB0aGUgbGFzdCBhcmd1bWVudCBjYW4gYmUgdmFyaWFkaWMgJyR7cHJldmlvdXNBcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhcmd1bWVudC5yZXF1aXJlZCAmJlxuICAgICAgYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFyZ3VtZW50LnBhcnNlQXJnID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGEgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXF1aXJlZCBhcmd1bWVudCBpcyBuZXZlciB1c2VkOiAnJHthcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMucHVzaChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9taXNlIG9yIG92ZXJyaWRlIGRlZmF1bHQgaGVscCBjb21tYW5kLiBCeSBkZWZhdWx0IGEgaGVscCBjb21tYW5kIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgaWYgeW91ciBjb21tYW5kIGhhcyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCgnaGVscCBbY21kXScpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJywgJ3Nob3cgaGVscCcpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKGZhbHNlKTsgLy8gc3VwcHJlc3MgZGVmYXVsdCBoZWxwIGNvbW1hbmRcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCh0cnVlKTsgLy8gYWRkIGhlbHAgY29tbWFuZCBldmVuIGlmIG5vIHN1YmNvbW1hbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IGVuYWJsZU9yTmFtZUFuZEFyZ3MgLSBlbmFibGUgd2l0aCBjdXN0b20gbmFtZSBhbmQvb3IgYXJndW1lbnRzLCBvciBib29sZWFuIHRvIG92ZXJyaWRlIHdoZXRoZXIgYWRkZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl0gLSBjdXN0b20gZGVzY3JpcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBDb21tYW5kKGVuYWJsZU9yTmFtZUFuZEFyZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBlbmFibGVPck5hbWVBbmRBcmdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSBlbmFibGVPck5hbWVBbmRBcmdzO1xuICAgICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgJiYgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCkge1xuICAgICAgICAvLyBtYWtlIHRoZSBjb21tYW5kIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKHRoaXMuX2dldEhlbHBDb21tYW5kKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUFuZEFyZ3MgPSBlbmFibGVPck5hbWVBbmRBcmdzID8/ICdoZWxwIFtjb21tYW5kXSc7XG4gICAgY29uc3QgWywgaGVscE5hbWUsIGhlbHBBcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG4gICAgY29uc3QgaGVscERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCc7XG5cbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChoZWxwTmFtZSk7XG4gICAgaGVscENvbW1hbmQuaGVscE9wdGlvbihmYWxzZSk7XG4gICAgaWYgKGhlbHBBcmdzKSBoZWxwQ29tbWFuZC5hcmd1bWVudHMoaGVscEFyZ3MpO1xuICAgIGlmIChoZWxwRGVzY3JpcHRpb24pIGhlbHBDb21tYW5kLmRlc2NyaXB0aW9uKGhlbHBEZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByZXBhcmVkIGN1c3RvbSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7KENvbW1hbmR8c3RyaW5nfGJvb2xlYW4pfSBoZWxwQ29tbWFuZCAtIGN1c3RvbSBoZWxwIGNvbW1hbmQsIG9yIGRlcHJlY2F0ZWQgZW5hYmxlT3JOYW1lQW5kQXJncyBhcyBmb3IgYC5oZWxwQ29tbWFuZCgpYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlcHJlY2F0ZWREZXNjcmlwdGlvbl0gLSBkZXByZWNhdGVkIGN1c3RvbSBkZXNjcmlwdGlvbiB1c2VkIHdpdGggY3VzdG9tIG5hbWUgb25seVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pIHtcbiAgICAvLyBJZiBub3QgcGFzc2VkIGFuIG9iamVjdCwgY2FsbCB0aHJvdWdoIHRvIGhlbHBDb21tYW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBhcyBhZGRIZWxwQ29tbWFuZCB3YXMgb3JpZ2luYWxseSB1c2VkIGxpa2UgaGVscENvbW1hbmQgaXMgbm93LlxuICAgIGlmICh0eXBlb2YgaGVscENvbW1hbmQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGhlbHBDb21tYW5kKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEByZXR1cm4geyhDb21tYW5kfG51bGwpfVxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBDb21tYW5kKCkge1xuICAgIGNvbnN0IGhhc0ltcGxpY2l0SGVscENvbW1hbmQgPVxuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA/P1xuICAgICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAgICF0aGlzLl9maW5kQ29tbWFuZCgnaGVscCcpKTtcblxuICAgIGlmIChoYXNJbXBsaWNpdEhlbHBDb21tYW5kKSB7XG4gICAgICBpZiAodGhpcy5faGVscENvbW1hbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhlbHBDb21tYW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gdXNlIGRlZmF1bHQgbmFtZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9oZWxwQ29tbWFuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGhvb2sgZm9yIGxpZmUgY3ljbGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaG9vayhldmVudCwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydwcmVTdWJjb21tYW5kJywgJ3ByZUFjdGlvbicsICdwb3N0QWN0aW9uJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBldmVudCBwYXNzZWQgdG8gaG9vayA6ICcke2V2ZW50fScuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgY2FsbGluZyBwcm9jZXNzLmV4aXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl0gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYSBDb21tYW5kZXJFcnJvciwgZGVmYXVsdHMgdG8gdGhyb3dpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGV4aXRPdmVycmlkZShmbikge1xuICAgIGlmIChmbikge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gZm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGNhbGxiYWNrIGZyb20gc3Bhd24gZXZlbnRzLCBub3QgdXNlZnVsIHRvIHRocm93LlxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHByb2Nlc3MuZXhpdCwgYW5kIF9leGl0Q2FsbGJhY2sgaWYgZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIGV4aXQgY29kZSBmb3IgdXNpbmcgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqIEByZXR1cm4gbmV2ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5fZXhpdENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sobmV3IENvbW1hbmRlckVycm9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSk7XG4gICAgICAvLyBFeHBlY3RpbmcgdGhpcyBsaW5lIGlzIG5vdCByZWFjaGVkLlxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGBmbmAgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3NlcnZlJylcbiAgICogICAuZGVzY3JpcHRpb24oJ3N0YXJ0IHNlcnZpY2UnKVxuICAgKiAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAqICAgICAgLy8gZG8gd29yayBoZXJlXG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhY3Rpb24oZm4pIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChhcmdzKSA9PiB7XG4gICAgICAvLyBUaGUgLmFjdGlvbiBjYWxsYmFjayB0YWtlcyBhbiBleHRyYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGNvbW1hbmQgb3Igb3B0aW9ucy5cbiAgICAgIGNvbnN0IGV4cGVjdGVkQXJnc0NvdW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSBhcmdzLnNsaWNlKDAsIGV4cGVjdGVkQXJnc0NvdW50KTtcbiAgICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSBcIm9wdGlvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzLm9wdHMoKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbkFyZ3MucHVzaCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFjdGlvbkFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IGxpc3RlbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBvcHRpb24uXG4gICAqXG4gICAqIFNlZSAub3B0aW9uKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIG9wdGlvbiwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBvcHRpb24uIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlT3B0aW9uIHRvIHJldHVybiBhIGN1c3RvbSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259IG5ldyBvcHRpb25cbiAgICovXG5cbiAgY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBwYXJzZUFyZ3MgdG8gY2F0Y2ggJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLlxuICAgKlxuICAgKiBAcGFyYW0geyhPcHRpb24gfCBBcmd1bWVudCl9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBwcmV2aW91c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaW52YWxpZEFyZ3VtZW50TWVzc2FnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2FsbFBhcnNlQXJnKHRhcmdldCwgdmFsdWUsIHByZXZpb3VzLCBpbnZhbGlkQXJndW1lbnRNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0YXJnZXQucGFyc2VBcmcodmFsdWUsIHByZXZpb3VzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtpbnZhbGlkQXJndW1lbnRNZXNzYWdlfSAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBleGl0Q29kZTogZXJyLmV4aXRDb2RlLCBjb2RlOiBlcnIuY29kZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIG9wdGlvbiBmbGFnIGNvbmZsaWN0cy5cbiAgICogUmVnaXN0ZXIgb3B0aW9uIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID1cbiAgICAgIChvcHRpb24uc2hvcnQgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24uc2hvcnQpKSB8fFxuICAgICAgKG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpKTtcbiAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmxhZyA9XG4gICAgICAgIG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpXG4gICAgICAgICAgPyBvcHRpb24ubG9uZ1xuICAgICAgICAgIDogb3B0aW9uLnNob3J0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyR7dGhpcy5fbmFtZSAmJiBgIHRvIGNvbW1hbmQgJyR7dGhpcy5fbmFtZX0nYH0gZHVlIHRvIGNvbmZsaWN0aW5nIGZsYWcgJyR7bWF0Y2hpbmdGbGFnfSdcbi0gIGFscmVhZHkgdXNlZCBieSBvcHRpb24gJyR7bWF0Y2hpbmdPcHRpb24uZmxhZ3N9J2ApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cChvcHRpb24pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGNvbW1hbmQgbmFtZSBhbmQgYWxpYXMgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29tbWFuZHMuXG4gICAqIFJlZ2lzdGVyIGNvbW1hbmQgaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3RlckNvbW1hbmQoY29tbWFuZCkge1xuICAgIGNvbnN0IGtub3duQnkgPSAoY21kKSA9PiB7XG4gICAgICByZXR1cm4gW2NtZC5uYW1lKCldLmNvbmNhdChjbWQuYWxpYXNlcygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxyZWFkeVVzZWQgPSBrbm93bkJ5KGNvbW1hbmQpLmZpbmQoKG5hbWUpID0+XG4gICAgICB0aGlzLl9maW5kQ29tbWFuZChuYW1lKSxcbiAgICApO1xuICAgIGlmIChhbHJlYWR5VXNlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBrbm93bkJ5KHRoaXMuX2ZpbmRDb21tYW5kKGFscmVhZHlVc2VkKSkuam9pbignfCcpO1xuICAgICAgY29uc3QgbmV3Q21kID0ga25vd25CeShjb21tYW5kKS5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGNvbW1hbmQgJyR7bmV3Q21kfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoY29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24ob3B0aW9uKTtcblxuICAgIGNvbnN0IG9uYW1lID0gb3B0aW9uLm5hbWUoKTtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIHN0b3JlIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgLy8gLS1uby1mb28gaXMgc3BlY2lhbCBhbmQgZGVmYXVsdHMgZm9vIHRvIHRydWUsIHVubGVzcyBhIC0tZm9vIG9wdGlvbiBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgIGNvbnN0IHBvc2l0aXZlTG9uZ0ZsYWcgPSBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS1uby0vLCAnLS0nKTtcbiAgICAgIGlmICghdGhpcy5fZmluZE9wdGlvbihwb3NpdGl2ZUxvbmdGbGFnKSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb24uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgb3B0aW9uLmRlZmF1bHRWYWx1ZSwgJ2RlZmF1bHQnKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGVyIGZvciBjbGkgYW5kIGVudiBzdXBwbGllZCB2YWx1ZXNcbiAgICBjb25zdCBoYW5kbGVPcHRpb25WYWx1ZSA9ICh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsIHZhbHVlU291cmNlKSA9PiB7XG4gICAgICAvLyB2YWwgaXMgbnVsbCBmb3Igb3B0aW9uYWwgb3B0aW9uIHVzZWQgd2l0aG91dCBhbiBvcHRpb25hbC1hcmd1bWVudC5cbiAgICAgIC8vIHZhbCBpcyB1bmRlZmluZWQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgb3B0aW9uLlxuICAgICAgaWYgKHZhbCA9PSBudWxsICYmIG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBvcHRpb24ucHJlc2V0QXJnO1xuICAgICAgfVxuXG4gICAgICAvLyBjdXN0b20gcHJvY2Vzc2luZ1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG5hbWUpO1xuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24ucGFyc2VBcmcpIHtcbiAgICAgICAgdmFsID0gdGhpcy5fY2FsbFBhcnNlQXJnKG9wdGlvbiwgdmFsLCBvbGRWYWx1ZSwgaW52YWxpZFZhbHVlTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24udmFyaWFkaWMpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLl9jb2xsZWN0VmFsdWUodmFsLCBvbGRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbGwtaW4gYXBwcm9wcmlhdGUgbWlzc2luZyB2YWx1ZXMuIExvbmcgd2luZGVkIGJ1dCBlYXN5IHRvIGZvbGxvdy5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICAgIHZhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5pc0Jvb2xlYW4oKSB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICB2YWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9ICcnOyAvLyBub3Qgbm9ybWFsLCBwYXJzZUFyZyBtaWdodCBoYXZlIGZhaWxlZCBvciBiZSBhIG1vY2sgZnVuY3Rpb24gZm9yIHRlc3RpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgdmFsLCB2YWx1ZVNvdXJjZSk7XG4gICAgfTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCAnJHt2YWx9JyBpcyBpbnZhbGlkLmA7XG4gICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdjbGknKTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb24uZW52VmFyKSB7XG4gICAgICB0aGlzLm9uKCdvcHRpb25FbnY6JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyB2YWx1ZSAnJHt2YWx9JyBmcm9tIGVudiAnJHtvcHRpb24uZW52VmFyfScgaXMgaW52YWxpZC5gO1xuICAgICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdlbnYnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIHNoYXJlZCBieSAub3B0aW9uKCkgYW5kIC5yZXF1aXJlZE9wdGlvbigpXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29wdGlvbkV4KGNvbmZpZywgZmxhZ3MsIGRlc2NyaXB0aW9uLCBmbiwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ29iamVjdCcgJiYgZmxhZ3MgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RvIGFkZCBhbiBPcHRpb24gb2JqZWN0IHVzZSBhZGRPcHRpb24oKSBpbnN0ZWFkIG9mIG9wdGlvbigpIG9yIHJlcXVpcmVkT3B0aW9uKCknLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICBvcHRpb24ubWFrZU9wdGlvbk1hbmRhdG9yeSghIWNvbmZpZy5tYW5kYXRvcnkpO1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2UgaWYgKGZuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBkZXByZWNhdGVkXG4gICAgICBjb25zdCByZWdleCA9IGZuO1xuICAgICAgZm4gPSAodmFsLCBkZWYpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIG0gPyBtWzBdIDogZGVmO1xuICAgICAgfTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvcHRpb24gd2l0aCBgZmxhZ3NgLCBgZGVzY3JpcHRpb25gLCBhbmQgb3B0aW9uYWwgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiBvciBgZGVmYXVsdFZhbHVlYCBvciBib3RoLlxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS4gQSByZXF1aXJlZFxuICAgKiBvcHRpb24tYXJndW1lbnQgaXMgaW5kaWNhdGVkIGJ5IGA8PmAgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCBieSBgW11gLlxuICAgKlxuICAgKiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLCBhbmQgc2VlIGFsc28gYWRkT3B0aW9uKCkgYW5kIHJlcXVpcmVkT3B0aW9uKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAgIC5vcHRpb24oJy1wLCAtLXBlcHBlcicsICdhZGQgcGVwcGVyJylcbiAgICogICAgIC5vcHRpb24oJy0tcHQsIC0tcGl6emEtdHlwZSA8VFlQRT4nLCAndHlwZSBvZiBwaXp6YScpIC8vIHJlcXVpcmVkIG9wdGlvbi1hcmd1bWVudFxuICAgKiAgICAgLm9wdGlvbignLWMsIC0tY2hlZXNlIFtDSEVFU0VdJywgJ2FkZCBleHRyYSBjaGVlc2UnLCAnbW96emFyZWxsYScpIC8vIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCB3aXRoIGRlZmF1bHRcbiAgICogICAgIC5vcHRpb24oJy10LCAtLXRpcCA8VkFMVUU+JywgJ2FkZCB0aXAgdG8gcHVyY2hhc2UgY29zdCcsIHBhcnNlRmxvYXQpIC8vIGN1c3RvbSBwYXJzZSBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBvcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KHt9LCBmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHJlcXVpcmVkIG9wdGlvbiB3aGljaCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLiBUaGlzIHVzdWFsbHkgbWVhbnNcbiAgICogdGhlIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAoT3RoZXJ3aXNlIHRoZSBzYW1lIGFzIC5vcHRpb24oKS4pXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICByZXF1aXJlZE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoXG4gICAgICB7IG1hbmRhdG9yeTogdHJ1ZSB9LFxuICAgICAgZmxhZ3MsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHBhcnNlQXJnLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWx0ZXIgcGFyc2luZyBvZiBzaG9ydCBmbGFncyB3aXRoIG9wdGlvbmFsIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIGAub3B0aW9uKCctZiwtLWZsYWcgW3ZhbHVlXScpOlxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSh0cnVlKTsgIC8vIGAtZjgwYCBpcyB0cmVhdGVkIGxpa2UgYC0tZmxhZz04MGAsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGZhbHNlKSAvLyBgLWZiYCBpcyB0cmVhdGVkIGxpa2UgYC1mIC1iYFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb21iaW5lXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBhbiBvcHRpb25hbCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGFmdGVyIHRoZSBmbGFnLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShjb21iaW5lID0gdHJ1ZSkge1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9ICEhY29tYmluZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1bmtub3duIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dVbmtub3duXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93VW5rbm93bk9wdGlvbihhbGxvd1Vua25vd24gPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gISFhbGxvd1Vua25vd247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgZXhjZXNzIGNvbW1hbmQtYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFBhc3MgZmFsc2UgdG8gbWFrZSBleGNlc3MgYXJndW1lbnRzIGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0V4Y2Vzc10gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIGV4Y2VzcyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dFeGNlc3NBcmd1bWVudHMoYWxsb3dFeGNlc3MgPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSAhIWFsbG93RXhjZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwb3NpdGlvbmFsIG9wdGlvbnMuIFBvc2l0aW9uYWwgbWVhbnMgZ2xvYmFsIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZWZvcmUgc3ViY29tbWFuZHMgd2hpY2ggbGV0c1xuICAgKiBzdWJjb21tYW5kcyByZXVzZSB0aGUgc2FtZSBvcHRpb24gbmFtZXMsIGFuZCBhbHNvIGVuYWJsZXMgc3ViY29tbWFuZHMgdG8gdHVybiBvbiBwYXNzVGhyb3VnaE9wdGlvbnMuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgZ2xvYmFsIG9wdGlvbnMgbWF5IGFwcGVhciBhbnl3aGVyZSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwb3NpdGlvbmFsXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKHBvc2l0aW9uYWwgPSB0cnVlKSB7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSAhIXBvc2l0aW9uYWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyB0aHJvdWdoIG9wdGlvbnMgdGhhdCBjb21lIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzIHJhdGhlciB0aGFuIHRyZWF0IHRoZW0gYXMgY29tbWFuZC1vcHRpb25zLFxuICAgKiBzbyBhY3R1YWwgY29tbWFuZC1vcHRpb25zIGNvbWUgYmVmb3JlIGNvbW1hbmQtYXJndW1lbnRzLiBUdXJuaW5nIHRoaXMgb24gZm9yIGEgc3ViY29tbWFuZCByZXF1aXJlc1xuICAgKiBwb3NpdGlvbmFsIG9wdGlvbnMgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgb24gdGhlIHByb2dyYW0gKHBhcmVudCBjb21tYW5kcykuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgb3B0aW9ucyBtYXkgYXBwZWFyIGJlZm9yZSBvciBhZnRlciBjb21tYW5kLWFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcGFzc1Rocm91Z2hdIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcGFzc1Rocm91Z2hPcHRpb25zKHBhc3NUaHJvdWdoID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyA9ICEhcGFzc1Rocm91Z2g7XG4gICAgdGhpcy5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucGFyZW50ICYmXG4gICAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgJiZcbiAgICAgICF0aGlzLnBhcmVudC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhc3NUaHJvdWdoT3B0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgJyR7dGhpcy5fbmFtZX0nIHdpdGhvdXQgdHVybmluZyBvbiBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyBmb3IgcGFyZW50IGNvbW1hbmQocylgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBzdG9yZSBvcHRpb24gdmFsdWVzIGFzIHByb3BlcnRpZXMgb24gY29tbWFuZCBvYmplY3QsXG4gICAqIG9yIHN0b3JlIHNlcGFyYXRlbHkgKHNwZWNpZnkgZmFsc2UpLiBJbiBib3RoIGNhc2VzIHRoZSBvcHRpb24gdmFsdWVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAub3B0cygpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZUFzUHJvcGVydGllcz10cnVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKHN0b3JlQXNQcm9wZXJ0aWVzID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBhZGRpbmcgb3B0aW9ucycpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fb3B0aW9uVmFsdWVzKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBzZXR0aW5nIG9wdGlvbiB2YWx1ZXMnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gISFzdG9yZUFzUHJvcGVydGllcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7b2JqZWN0fSB2YWx1ZVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZShrZXkpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZSBhbmQgd2hlcmUgdGhlIHZhbHVlIGNhbWUgZnJvbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIGV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdC9jb25maWcvZW52L2NsaS9pbXBsaWVkXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgc291cmNlKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wdGlvblZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldID0gc291cmNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuIFNlZSBhbHNvIC5vcHRzV2l0aEdsb2JhbHMoKS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2VXaXRoR2xvYmFscyhrZXkpIHtcbiAgICAvLyBnbG9iYWwgb3ZlcndyaXRlcyBsb2NhbCwgbGlrZSBvcHRzV2l0aEdsb2JhbHNcbiAgICBsZXQgc291cmNlO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGlmIChjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNvdXJjZSA9IGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgYXJndW1lbnRzIGZyb20gaW1wbGllZCBvciBleHBsaWNpdCBhcmd1bWVudHMuXG4gICAqIFNpZGUtZWZmZWN0czogc2V0IF9zY3JpcHRQYXRoIGlmIGFyZ3MgaW5jbHVkZWQgc2NyaXB0LiBVc2VkIGZvciBkZWZhdWx0IHByb2dyYW0gbmFtZSwgYW5kIHN1YmNvbW1hbmQgc2VhcmNoZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgaWYgKGFyZ3YgIT09IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheShhcmd2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdCBwYXJhbWV0ZXIgdG8gcGFyc2UgbXVzdCBiZSBhcnJheSBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcGFyc2VPcHRpb25zID0gcGFyc2VPcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gYXV0by1kZXRlY3QgYXJndW1lbnQgY29udmVudGlvbnMgaWYgbm90aGluZyBzdXBwbGllZFxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQgJiYgcGFyc2VPcHRpb25zLmZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudmVyc2lvbnM/LmVsZWN0cm9uKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2VsZWN0cm9uJztcbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIG5vZGUgc3BlY2lmaWMgb3B0aW9ucyBmb3Igc2NlbmFyaW9zIHdoZXJlIHVzZXIgQ0xJIGFyZ3MgZm9sbG93IGV4ZWN1dGFibGUgd2l0aG91dCBzY3JpcHRuYW1lXG4gICAgICBjb25zdCBleGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3YgPz8gW107XG4gICAgICBpZiAoXG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctZScpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLWV2YWwnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLXAnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1wcmludCcpXG4gICAgICApIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZXZhbCc7IC8vIGludGVybmFsIHVzYWdlLCBub3QgZG9jdW1lbnRlZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgdG8gdXNpbmcgcHJvY2Vzcy5hcmd2XG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgICB9XG4gICAgdGhpcy5yYXdBcmdzID0gYXJndi5zbGljZSgpO1xuXG4gICAgLy8gZXh0cmFjdCB0aGUgdXNlciBhcmdzIGFuZCBzY3JpcHRQYXRoXG4gICAgbGV0IHVzZXJBcmdzO1xuICAgIHN3aXRjaCAocGFyc2VPcHRpb25zLmZyb20pIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWxlY3Ryb24nOlxuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGRlZmF1bHRBcHAgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICBpZiAocHJvY2Vzcy5kZWZhdWx0QXBwKSB7XG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZhbCc6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHVuZXhwZWN0ZWQgcGFyc2Ugb3B0aW9uIHsgZnJvbTogJyR7cGFyc2VPcHRpb25zLmZyb219JyB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGRlZmF1bHQgbmFtZSBmb3IgcHJvZ3JhbSBmcm9tIGFyZ3VtZW50cy5cbiAgICBpZiAoIXRoaXMuX25hbWUgJiYgdGhpcy5fc2NyaXB0UGF0aClcbiAgICAgIHRoaXMubmFtZUZyb21GaWxlbmFtZSh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZSB8fCAncHJvZ3JhbSc7XG5cbiAgICByZXR1cm4gdXNlckFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogVXNlIHBhcnNlQXN5bmMgaW5zdGVhZCBvZiBwYXJzZSBpZiBhbnkgb2YgeW91ciBhY3Rpb24gaGFuZGxlcnMgYXJlIGFzeW5jLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ucGFyc2UoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBwcm9ncmFtLnBhcnNlKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl0gLSBvcHRpb25hbCwgZGVmYXVsdHMgdG8gcHJvY2Vzcy5hcmd2XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXSAtIG9wdGlvbmFsbHkgc3BlY2lmeSBzdHlsZSBvZiBvcHRpb25zIHdpdGggZnJvbTogbm9kZS91c2VyL2VsZWN0cm9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyc2VPcHRpb25zLmZyb21dIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBwYXJzZShhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyc2VPcHRpb25zLmZyb20gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG5cbiAgYXN5bmMgcGFyc2VBc3luYyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIGF3YWl0IHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfcHJlcGFyZUZvclBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zYXZlZFN0YXRlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnNhdmVTdGF0ZUJlZm9yZVBhcnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdG9yZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHRoZSBmaXJzdCB0aW1lIHBhcnNlIGlzIGNhbGxlZCB0byBzYXZlIHN0YXRlIGFuZCBhbGxvdyBhIHJlc3RvcmUgYmVmb3JlIHN1YnNlcXVlbnQgY2FsbHMgdG8gcGFyc2UuXG4gICAqIE5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IGF2YWlsYWJsZSBmb3Igc3ViY2xhc3NlcyB0byBzYXZlIHRoZWlyIGN1c3RvbSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgaW4gYSBsYXp5IHdheS4gT25seSBjb21tYW5kcyB1c2VkIGluIHBhcnNpbmcgY2hhaW4gd2lsbCBoYXZlIHN0YXRlIHNhdmVkLlxuICAgKi9cbiAgc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKSB7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IHtcbiAgICAgIC8vIG5hbWUgaXMgc3RhYmxlIGlmIHN1cHBsaWVkIGJ5IGF1dGhvciwgYnV0IG1heSBiZSB1bnNwZWNpZmllZCBmb3Igcm9vdCBjb21tYW5kIGFuZCBkZWR1Y2VkIGR1cmluZyBwYXJzaW5nXG4gICAgICBfbmFtZTogdGhpcy5fbmFtZSxcbiAgICAgIC8vIG9wdGlvbiB2YWx1ZXMgYmVmb3JlIHBhcnNlIGhhdmUgZGVmYXVsdCB2YWx1ZXMgKGluY2x1ZGluZyBmYWxzZSBmb3IgbmVnYXRlZCBvcHRpb25zKVxuICAgICAgLy8gc2hhbGxvdyBjbG9uZXNcbiAgICAgIF9vcHRpb25WYWx1ZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVzIH0sXG4gICAgICBfb3B0aW9uVmFsdWVTb3VyY2VzOiB7IC4uLnRoaXMuX29wdGlvblZhbHVlU291cmNlcyB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBzdGF0ZSBiZWZvcmUgcGFyc2UgZm9yIGNhbGxzIGFmdGVyIHRoZSBmaXJzdC5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgcmVzdG9yZWQuXG4gICAqL1xuICByZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGNhbGwgcGFyc2UgYWdhaW4gd2hlbiBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgaXMgdHJ1ZS5cbi0gZWl0aGVyIG1ha2UgYSBuZXcgQ29tbWFuZCBmb3IgZWFjaCBjYWxsIHRvIHBhcnNlLCBvciBzdG9wIHN0b3Jpbmcgb3B0aW9ucyBhcyBwcm9wZXJ0aWVzYCk7XG5cbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcmVwYXJlVXNlckFyZ3NcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fc2F2ZWRTdGF0ZS5fbmFtZTtcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZVxuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHsgLi4udGhpcy5fc2F2ZWRTdGF0ZS5fb3B0aW9uVmFsdWVzIH07XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZVNvdXJjZXMgfTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wYXJzZUNvbW1hbmRcbiAgICB0aGlzLmFyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcm9jZXNzQXJndW1lbnRzXG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gW107XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgaWYgZXhwZWN0ZWQgZXhlY3V0YWJsZSBpcyBtaXNzaW5nLiBBZGQgbG90cyBvZiBoZWxwIGZvciBhdXRob3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRmlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhlY3V0YWJsZURpclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViY29tbWFuZE5hbWVcbiAgICovXG4gIF9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKGV4ZWN1dGFibGVGaWxlLCBleGVjdXRhYmxlRGlyLCBzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGV4ZWN1dGFibGVGaWxlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhlY3V0YWJsZURpck1lc3NhZ2UgPSBleGVjdXRhYmxlRGlyXG4gICAgICA/IGBzZWFyY2hlZCBmb3IgbG9jYWwgc3ViY29tbWFuZCByZWxhdGl2ZSB0byBkaXJlY3RvcnkgJyR7ZXhlY3V0YWJsZURpcn0nYFxuICAgICAgOiAnbm8gZGlyZWN0b3J5IGZvciBzZWFyY2ggZm9yIGxvY2FsIHN1YmNvbW1hbmQsIHVzZSAuZXhlY3V0YWJsZURpcigpIHRvIHN1cHBseSBhIGN1c3RvbSBkaXJlY3RvcnknO1xuICAgIGNvbnN0IGV4ZWN1dGFibGVNaXNzaW5nID0gYCcke2V4ZWN1dGFibGVGaWxlfScgZG9lcyBub3QgZXhpc3RcbiAtIGlmICcke3N1YmNvbW1hbmROYW1lfScgaXMgbm90IG1lYW50IHRvIGJlIGFuIGV4ZWN1dGFibGUgY29tbWFuZCwgcmVtb3ZlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBmcm9tICcuY29tbWFuZCgpJyBhbmQgdXNlICcuZGVzY3JpcHRpb24oKScgaW5zdGVhZFxuIC0gaWYgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSBuYW1lIGlzIG5vdCBzdWl0YWJsZSwgdXNlIHRoZSBleGVjdXRhYmxlRmlsZSBvcHRpb24gdG8gc3VwcGx5IGEgY3VzdG9tIG5hbWUgb3IgcGF0aFxuIC0gJHtleGVjdXRhYmxlRGlyTWVzc2FnZX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihleGVjdXRhYmxlTWlzc2luZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHN1Yi1jb21tYW5kIGV4ZWN1dGFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGVjdXRlU3ViQ29tbWFuZChzdWJjb21tYW5kLCBhcmdzKSB7XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoKTtcbiAgICBsZXQgbGF1bmNoV2l0aE5vZGUgPSBmYWxzZTsgLy8gVXNlIG5vZGUgZm9yIHNvdXJjZSB0YXJnZXRzIHNvIGRvIG5vdCBuZWVkIHRvIGdldCBwZXJtaXNzaW9ucyBjb3JyZWN0LCBhbmQgb24gV2luZG93cy5cbiAgICBjb25zdCBzb3VyY2VFeHQgPSBbJy5qcycsICcudHMnLCAnLnRzeCcsICcubWpzJywgJy5janMnXTtcblxuICAgIGZ1bmN0aW9uIGZpbmRGaWxlKGJhc2VEaXIsIGJhc2VOYW1lKSB7XG4gICAgICAvLyBMb29rIGZvciBzcGVjaWZpZWQgZmlsZVxuICAgICAgY29uc3QgbG9jYWxCaW4gPSBwYXRoLnJlc29sdmUoYmFzZURpciwgYmFzZU5hbWUpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobG9jYWxCaW4pKSByZXR1cm4gbG9jYWxCaW47XG5cbiAgICAgIC8vIFN0b3AgbG9va2luZyBpZiBjYW5kaWRhdGUgYWxyZWFkeSBoYXMgYW4gZXhwZWN0ZWQgZXh0ZW5zaW9uLlxuICAgICAgaWYgKHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoYmFzZU5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gVHJ5IGFsbCB0aGUgZXh0ZW5zaW9ucy5cbiAgICAgIGNvbnN0IGZvdW5kRXh0ID0gc291cmNlRXh0LmZpbmQoKGV4dCkgPT5cbiAgICAgICAgZnMuZXhpc3RzU3luYyhgJHtsb2NhbEJpbn0ke2V4dH1gKSxcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRFeHQpIHJldHVybiBgJHtsb2NhbEJpbn0ke2ZvdW5kRXh0fWA7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTm90IGNoZWNraW5nIGZvciBoZWxwIGZpcnN0LiBVbmxpa2VseSB0byBoYXZlIG1hbmRhdG9yeSBhbmQgZXhlY3V0YWJsZSwgYW5kIGNhbid0IHJvYnVzdGx5IHRlc3QgZm9yIGhlbHAgZmxhZ3MgaW4gZXh0ZXJuYWwgY29tbWFuZC5cbiAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKTtcblxuICAgIC8vIGV4ZWN1dGFibGVGaWxlIGFuZCBleGVjdXRhYmxlRGlyIG1pZ2h0IGJlIGZ1bGwgcGF0aCwgb3IganVzdCBhIG5hbWVcbiAgICBsZXQgZXhlY3V0YWJsZUZpbGUgPVxuICAgICAgc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgfHwgYCR7dGhpcy5fbmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWA7XG4gICAgbGV0IGV4ZWN1dGFibGVEaXIgPSB0aGlzLl9leGVjdXRhYmxlRGlyIHx8ICcnO1xuICAgIGlmICh0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICBsZXQgcmVzb2x2ZWRTY3JpcHRQYXRoOyAvLyByZXNvbHZlIHBvc3NpYmxlIHN5bWxpbmsgZm9yIGluc3RhbGxlZCBucG0gYmluYXJ5XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSBmcy5yZWFscGF0aFN5bmModGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gdGhpcy5fc2NyaXB0UGF0aDtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguZGlybmFtZShyZXNvbHZlZFNjcmlwdFBhdGgpLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb29rIGZvciBhIGxvY2FsIGZpbGUgaW4gcHJlZmVyZW5jZSB0byBhIGNvbW1hbmQgaW4gUEFUSC5cbiAgICBpZiAoZXhlY3V0YWJsZURpcikge1xuICAgICAgbGV0IGxvY2FsRmlsZSA9IGZpbmRGaWxlKGV4ZWN1dGFibGVEaXIsIGV4ZWN1dGFibGVGaWxlKTtcblxuICAgICAgLy8gTGVnYWN5IHNlYXJjaCB1c2luZyBwcmVmaXggb2Ygc2NyaXB0IG5hbWUgaW5zdGVhZCBvZiBjb21tYW5kIG5hbWVcbiAgICAgIGlmICghbG9jYWxGaWxlICYmICFzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSAmJiB0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeU5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGgsXG4gICAgICAgICAgcGF0aC5leHRuYW1lKHRoaXMuX3NjcmlwdFBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobGVnYWN5TmFtZSAhPT0gdGhpcy5fbmFtZSkge1xuICAgICAgICAgIGxvY2FsRmlsZSA9IGZpbmRGaWxlKFxuICAgICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICAgIGAke2xlZ2FjeU5hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVGaWxlID0gbG9jYWxGaWxlIHx8IGV4ZWN1dGFibGVGaWxlO1xuICAgIH1cblxuICAgIGxhdW5jaFdpdGhOb2RlID0gc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShleGVjdXRhYmxlRmlsZSkpO1xuXG4gICAgbGV0IHByb2M7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgIGlmIChsYXVuY2hXaXRoTm9kZSkge1xuICAgICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcblxuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuYXJndlswXSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihleGVjdXRhYmxlRmlsZSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICBleGVjdXRhYmxlRmlsZSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICk7XG4gICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jLmtpbGxlZCkge1xuICAgICAgLy8gdGVzdGluZyBtYWlubHkgdG8gYXZvaWQgbGVhayB3YXJuaW5ncyBkdXJpbmcgdW5pdCB0ZXN0cyB3aXRoIG1vY2tlZCBzcGF3blxuICAgICAgY29uc3Qgc2lnbmFscyA9IFsnU0lHVVNSMScsICdTSUdVU1IyJywgJ1NJR1RFUk0nLCAnU0lHSU5UJywgJ1NJR0hVUCddO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICBpZiAocHJvYy5raWxsZWQgPT09IGZhbHNlICYmIHByb2MuZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgYmVjYXVzZSBzaWduYWxzIG5vdCB0eXBlZCB0byBrbm93biBzdHJpbmdzXG4gICAgICAgICAgICBwcm9jLmtpbGwoc2lnbmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCB0ZXJtaW5hdGUgcHJvY2VzcyB3aGVuIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVzLlxuICAgIGNvbnN0IGV4aXRDYWxsYmFjayA9IHRoaXMuX2V4aXRDYWxsYmFjaztcbiAgICBwcm9jLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICBjb2RlID0gY29kZSA/PyAxOyAvLyBjb2RlIGlzIG51bGwgaWYgc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsXG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGl0Q2FsbGJhY2soXG4gICAgICAgICAgbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgICAnKGNsb3NlKScsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUFDQ0VTJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2V4ZWN1dGFibGVGaWxlfScgbm90IGV4ZWN1dGFibGVgKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAxLFxuICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgJyhlcnJvciknLFxuICAgICAgICApO1xuICAgICAgICB3cmFwcGVkRXJyb3IubmVzdGVkRXJyb3IgPSBlcnI7XG4gICAgICAgIGV4aXRDYWxsYmFjayh3cmFwcGVkRXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcHJvY2Vzc1xuICAgIHRoaXMucnVubmluZ0NvbW1hbmQgPSBwcm9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaFN1YmNvbW1hbmQoY29tbWFuZE5hbWUsIG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKGNvbW1hbmROYW1lKTtcbiAgICBpZiAoIXN1YkNvbW1hbmQpIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuXG4gICAgc3ViQ29tbWFuZC5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKFxuICAgICAgcHJvbWlzZUNoYWluLFxuICAgICAgc3ViQ29tbWFuZCxcbiAgICAgICdwcmVTdWJjb21tYW5kJyxcbiAgICApO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT4ge1xuICAgICAgaWYgKHN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGVTdWJDb21tYW5kKHN1YkNvbW1hbmQsIG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3ViQ29tbWFuZC5fcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBoZWxwIGRpcmVjdGx5IGlmIHBvc3NpYmxlLCBvciBkaXNwYXRjaCBpZiBuZWNlc3NhcnkuXG4gICAqIGUuZy4gaGVscCBmb29cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoSGVscENvbW1hbmQoc3ViY29tbWFuZE5hbWUpIHtcbiAgICBpZiAoIXN1YmNvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLmhlbHAoKTtcbiAgICB9XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKHN1YmNvbW1hbmROYW1lKTtcbiAgICBpZiAoc3ViQ29tbWFuZCAmJiAhc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgIHN1YkNvbW1hbmQuaGVscCgpO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIHBhcnNpbmcgdGhlIGhlbHAgZmxhZyB0byBpbnZva2UgdGhlIGhlbHAuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChcbiAgICAgIHN1YmNvbW1hbmROYW1lLFxuICAgICAgW10sXG4gICAgICBbdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nID8/IHRoaXMuX2dldEhlbHBPcHRpb24oKT8uc2hvcnQgPz8gJy0taGVscCddLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhpcy5hcmdzIGFnYWluc3QgZXhwZWN0ZWQgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpIHtcbiAgICAvLyB0b28gZmV3XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZywgaSkgPT4ge1xuICAgICAgaWYgKGFyZy5yZXF1aXJlZCAmJiB0aGlzLmFyZ3NbaV0gPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1pc3NpbmdBcmd1bWVudChhcmcubmFtZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyB0b28gbWFueVxuICAgIGlmIChcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHNbdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCAtIDFdLnZhcmlhZGljXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmFyZ3MubGVuZ3RoID4gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fZXhjZXNzQXJndW1lbnRzKHRoaXMuYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhpcy5hcmdzIHVzaW5nIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyBhbmQgc2F2ZSBhcyB0aGlzLnByb2Nlc3NlZEFyZ3MhXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcm9jZXNzQXJndW1lbnRzKCkge1xuICAgIGNvbnN0IG15UGFyc2VBcmcgPSAoYXJndW1lbnQsIHZhbHVlLCBwcmV2aW91cykgPT4ge1xuICAgICAgLy8gRXh0cmEgcHJvY2Vzc2luZyBmb3IgbmljZSBlcnJvciBtZXNzYWdlIG9uIHBhcnNpbmcgZmFpbHVyZS5cbiAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIGFyZ3VtZW50LnBhcnNlQXJnKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IGNvbW1hbmQtYXJndW1lbnQgdmFsdWUgJyR7dmFsdWV9JyBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAnJHthcmd1bWVudC5uYW1lKCl9Jy5gO1xuICAgICAgICBwYXJzZWRWYWx1ZSA9IHRoaXMuX2NhbGxQYXJzZUFyZyhcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgICBpbnZhbGlkVmFsdWVNZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlO1xuICAgIH07XG5cbiAgICB0aGlzLl9jaGVja051bWJlck9mQXJndW1lbnRzKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRBcmdzID0gW107XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGRlY2xhcmVkQXJnLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGRlY2xhcmVkQXJnLnZhcmlhZGljKSB7XG4gICAgICAgIC8vIENvbGxlY3QgdG9nZXRoZXIgcmVtYWluaW5nIGFyZ3VtZW50cyBmb3IgcGFzc2luZyB0b2dldGhlciBhcyBhbiBhcnJheS5cbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5hcmdzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVkdWNlKChwcm9jZXNzZWQsIHYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHYsIHByb2Nlc3NlZCk7XG4gICAgICAgICAgICB9LCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3NbaW5kZXhdO1xuICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICB2YWx1ZSA9IG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHZhbHVlLCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWRBcmdzW2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IHByb2Nlc3NlZEFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogT25jZSB3ZSBoYXZlIGEgcHJvbWlzZSB3ZSBjaGFpbiwgYnV0IGNhbGwgc3luY2hyb25vdXNseSB1bnRpbCB0aGVuLlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsKHByb21pc2UsIGZuKSB7XG4gICAgLy8gdGhlbmFibGVcbiAgICBpZiAocHJvbWlzZT8udGhlbiAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgYSBwcm9taXNlLCBjaGFpbiBjYWxsYmFja1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoKSA9PiBmbigpKTtcbiAgICB9XG4gICAgLy8gY2FsbGJhY2sgbWlnaHQgcmV0dXJuIGEgcHJvbWlzZVxuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZSwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBjb25zdCBob29rcyA9IFtdO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbHRlcigoY21kKSA9PiBjbWQuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2goKGhvb2tlZENvbW1hbmQpID0+IHtcbiAgICAgICAgaG9va2VkQ29tbWFuZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgaG9va3MucHVzaCh7IGhvb2tlZENvbW1hbmQsIGNhbGxiYWNrIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIGlmIChldmVudCA9PT0gJ3Bvc3RBY3Rpb24nKSB7XG4gICAgICBob29rcy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgaG9va3MuZm9yRWFjaCgoaG9va0RldGFpbCkgPT4ge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fY2hhaW5PckNhbGwocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBob29rRGV0YWlsLmNhbGxiYWNrKGhvb2tEZXRhaWwuaG9va2VkQ29tbWFuZCwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHN1YkNvbW1hbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKHByb21pc2UsIHN1YkNvbW1hbmQsIGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IHByb21pc2U7XG4gICAgaWYgKHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaG9vayh0aGlzLCBzdWJDb21tYW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFyZ3VtZW50cyBpbiBjb250ZXh0IG9mIHRoaXMgY29tbWFuZC5cbiAgICogUmV0dXJucyBhY3Rpb24gcmVzdWx0LCBpbiBjYXNlIGl0IGlzIGEgcHJvbWlzZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VPcHRpb25zKHVua25vd24pO1xuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0VudigpOyAvLyBhZnRlciBjbGksIHNvIHBhcnNlQXJnIG5vdCBjYWxsZWQgb24gYm90aCBjbGkgYW5kIGVudlxuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0ltcGxpZWQoKTtcbiAgICBvcGVyYW5kcyA9IG9wZXJhbmRzLmNvbmNhdChwYXJzZWQub3BlcmFuZHMpO1xuICAgIHVua25vd24gPSBwYXJzZWQudW5rbm93bjtcbiAgICB0aGlzLmFyZ3MgPSBvcGVyYW5kcy5jb25jYXQodW5rbm93bik7XG5cbiAgICBpZiAob3BlcmFuZHMgJiYgdGhpcy5fZmluZENvbW1hbmQob3BlcmFuZHNbMF0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKG9wZXJhbmRzWzBdLCBvcGVyYW5kcy5zbGljZSgxKSwgdW5rbm93bik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgIG9wZXJhbmRzWzBdID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoSGVscENvbW1hbmQob3BlcmFuZHNbMV0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQodW5rbm93bik7IC8vIFJ1biB0aGUgaGVscCBmb3IgZGVmYXVsdCBjb21tYW5kIGZyb20gcGFyZW50IHJhdGhlciB0aGFuIHBhc3NpbmcgdG8gZGVmYXVsdCBjb21tYW5kXG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICAgIG9wZXJhbmRzLFxuICAgICAgICB1bmtub3duLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgIHRoaXMuYXJncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAhdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lXG4gICAgKSB7XG4gICAgICAvLyBwcm9iYWJseSBtaXNzaW5nIHN1YmNvbW1hbmQgYW5kIG5vIGhhbmRsZXIsIHVzZXIgbmVlZHMgaGVscCAoYW5kIGV4aXQpXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQocGFyc2VkLnVua25vd24pO1xuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gV2UgZG8gbm90IGFsd2F5cyBjYWxsIHRoaXMgY2hlY2sgdG8gYXZvaWQgbWFza2luZyBhIFwiYmV0dGVyXCIgZXJyb3IsIGxpa2UgdW5rbm93biBjb21tYW5kLlxuICAgIGNvbnN0IGNoZWNrRm9yVW5rbm93bk9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAocGFyc2VkLnVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVua25vd25PcHRpb24ocGFyc2VkLnVua25vd25bMF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjb21tYW5kRXZlbnQgPSBgY29tbWFuZDoke3RoaXMubmFtZSgpfWA7XG4gICAgaWYgKHRoaXMuX2FjdGlvbkhhbmRsZXIpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcblxuICAgICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZUNoYWluLCAncHJlQWN0aW9uJyk7XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+XG4gICAgICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIodGhpcy5wcm9jZXNzZWRBcmdzKSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwb3N0QWN0aW9uJyk7XG4gICAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXJlbnQ/Lmxpc3RlbmVyQ291bnQoY29tbWFuZEV2ZW50KSkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgfSBlbHNlIGlmIChvcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZCgnKicpKSB7XG4gICAgICAgIC8vIGxlZ2FjeSBkZWZhdWx0IGNvbW1hbmRcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZCgnKicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ2NvbW1hbmQ6KicpKSB7XG4gICAgICAgIC8vIHNraXAgb3B0aW9uIGNoZWNrLCBlbWl0IGV2ZW50IGZvciBwb3NzaWJsZSBtaXNzcGVsbGluZyBzdWdnZXN0aW9uXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDoqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVua25vd25Db21tYW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAvLyBUaGlzIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzIGFuZCBub3RoaW5nIGhvb2tlZCB1cCBhdCB0aGlzIGxldmVsLCBzbyBkaXNwbGF5IGhlbHAgKGFuZCBleGl0KS5cbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICAvLyBmYWxsIHRocm91Z2ggZm9yIGNhbGxlciB0byBoYW5kbGUgYWZ0ZXIgY2FsbGluZyAucGFyc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG1hdGNoaW5nIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBfZmluZENvbW1hbmQobmFtZSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5maW5kKFxuICAgICAgKGNtZCkgPT4gY21kLl9uYW1lID09PSBuYW1lIHx8IGNtZC5fYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb24gbWF0Y2hpbmcgYGFyZ2AgaWYgYW55LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2ZpbmRPcHRpb24oYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5pcyhhcmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBtYW5kYXRvcnkgb3B0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWx1ZS5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5vcHRpb25zLmZvckVhY2goKGFuT3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhbk9wdGlvbi5tYW5kYXRvcnkgJiZcbiAgICAgICAgICBjbWQuZ2V0T3B0aW9uVmFsdWUoYW5PcHRpb24uYXR0cmlidXRlTmFtZSgpKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNtZC5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUoYW5PcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlciBpbiB0aGlzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkgIT09ICdkZWZhdWx0JztcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmNvbmZsaWN0c1dpdGgubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgb3B0aW9uc1dpdGhDb25mbGljdGluZy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbmZsaWN0aW5nQW5kRGVmaW5lZCA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maW5kKChkZWZpbmVkKSA9PlxuICAgICAgICBvcHRpb24uY29uZmxpY3RzV2l0aC5pbmNsdWRlcyhkZWZpbmVkLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nQW5kRGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nQW5kRGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5fY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIG9wdGlvbnMgZnJvbSBgYXJndmAgcmVtb3Zpbmcga25vd24gb3B0aW9ucyxcbiAgICogYW5kIHJldHVybiBhcmd2IHNwbGl0IGludG8gb3BlcmFuZHMgYW5kIHVua25vd24gYXJndW1lbnRzLlxuICAgKlxuICAgKiBTaWRlIGVmZmVjdHM6IG1vZGlmaWVzIGNvbW1hbmQgYnkgc3RvcmluZyBvcHRpb25zLiBEb2VzIG5vdCByZXNldCBzdGF0ZSBpZiBjYWxsZWQgYWdhaW4uXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgYXJndiA9PiBvcGVyYW5kcywgdW5rbm93blxuICAgKiAgICAgLS1rbm93biBra2sgb3AgPT4gW29wXSwgW11cbiAgICogICAgIG9wIC0ta25vd24ga2trID0+IFtvcF0sIFtdXG4gICAqICAgICBzdWIgLS11bmtub3duIHV1dSBvcCA9PiBbc3ViXSwgWy0tdW5rbm93biB1dXUgb3BdXG4gICAqICAgICBzdWIgLS0gLS11bmtub3duIHV1dSBvcCA9PiBbc3ViIC0tdW5rbm93biB1dXUgb3BdLCBbXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gICAqIEByZXR1cm4ge3tvcGVyYW5kczogc3RyaW5nW10sIHVua25vd246IHN0cmluZ1tdfX1cbiAgICovXG5cbiAgcGFyc2VPcHRpb25zKGFyZ3MpIHtcbiAgICBjb25zdCBvcGVyYW5kcyA9IFtdOyAvLyBvcGVyYW5kcywgbm90IG9wdGlvbnMgb3IgdmFsdWVzXG4gICAgY29uc3QgdW5rbm93biA9IFtdOyAvLyBmaXJzdCB1bmtub3duIG9wdGlvbiBhbmQgcmVtYWluaW5nIHVua25vd24gYXJnc1xuICAgIGxldCBkZXN0ID0gb3BlcmFuZHM7XG5cbiAgICBmdW5jdGlvbiBtYXliZU9wdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBhcmcubGVuZ3RoID4gMSAmJiBhcmdbMF0gPT09ICctJztcbiAgICB9XG5cbiAgICBjb25zdCBuZWdhdGl2ZU51bWJlckFyZyA9IChhcmcpID0+IHtcbiAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBub3QgYSBuZWdhdGl2ZSBudW1iZXJcbiAgICAgIGlmICghL14tXFxkKlxcLj9cXGQrKGVbKy1dP1xcZCspPyQvLnRlc3QoYXJnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gbmVnYXRpdmUgbnVtYmVyIGlzIG9rIHVubGVzcyBkaWdpdCB1c2VkIGFzIGFuIG9wdGlvbiBpbiBjb21tYW5kIGhpZXJhcmNoeVxuICAgICAgcmV0dXJuICF0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuc29tZSgoY21kKSA9PlxuICAgICAgICBjbWQub3B0aW9uc1xuICAgICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnNob3J0KVxuICAgICAgICAgIC5zb21lKChzaG9ydCkgPT4gL14tXFxkJC8udGVzdChzaG9ydCkpLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcGFyc2Ugb3B0aW9uc1xuICAgIGxldCBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG4gICAgbGV0IGFjdGl2ZUdyb3VwID0gbnVsbDsgLy8gd29ya2luZyB0aHJvdWdoIGdyb3VwIG9mIHNob3J0IG9wdGlvbnMsIGxpa2UgLWFiY1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoIHx8IGFjdGl2ZUdyb3VwKSB7XG4gICAgICBjb25zdCBhcmcgPSBhY3RpdmVHcm91cCA/PyBhcmdzW2krK107XG4gICAgICBhY3RpdmVHcm91cCA9IG51bGw7XG5cbiAgICAgIC8vIGxpdGVyYWxcbiAgICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgICAgaWYgKGRlc3QgPT09IHVua25vd24pIGRlc3QucHVzaChhcmcpO1xuICAgICAgICBkZXN0LnB1c2goLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uICYmXG4gICAgICAgICghbWF5YmVPcHRpb24oYXJnKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7YWN0aXZlVmFyaWFkaWNPcHRpb24ubmFtZSgpfWAsIGFyZyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBudWxsO1xuXG4gICAgICBpZiAobWF5YmVPcHRpb24oYXJnKSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZyk7XG4gICAgICAgIC8vIHJlY29nbmlzZWQgb3B0aW9uLCBjYWxsIGxpc3RlbmVyIHRvIGFzc2lnbiB2YWx1ZSB3aXRoIHBvc3NpYmxlIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLm9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIC8vIGhpc3RvcmljYWwgYmVoYXZpb3VyIGlzIG9wdGlvbmFsIHZhbHVlIGlzIGZvbGxvd2luZyBhcmcgdW5sZXNzIGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpIDwgYXJncy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKCFtYXliZU9wdGlvbihhcmdzW2ldKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmdzW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gZmxhZ1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG9wdGlvbi52YXJpYWRpYyA/IG9wdGlvbiA6IG51bGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3IgY29tYm8gb3B0aW9ucyBmb2xsb3dpbmcgc2luZ2xlIGRhc2gsIGVhdCBmaXJzdCBvbmUgaWYga25vd24uXG4gICAgICBpZiAoYXJnLmxlbmd0aCA+IDIgJiYgYXJnWzBdID09PSAnLScgJiYgYXJnWzFdICE9PSAnLScpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihgLSR7YXJnWzFdfWApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAob3B0aW9uLm9wdGlvbmFsICYmIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiB3aXRoIHZhbHVlIGZvbGxvd2luZyBpbiBzYW1lIGFyZ3VtZW50XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBvcHRpb25cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcHJvY2Vzc2VkIG9wdGlvbiBhbmQga2VlcCBwcm9jZXNzaW5nIGdyb3VwXG4gICAgICAgICAgICBhY3RpdmVHcm91cCA9IGAtJHthcmcuc2xpY2UoMil9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3Iga25vd24gbG9uZyBmbGFnIHdpdGggdmFsdWUsIGxpa2UgLS1mb289YmFyXG4gICAgICBpZiAoL14tLVtePV0rPS8udGVzdChhcmcpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJnLmluZGV4T2YoJz0nKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihhcmcuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgICAgaWYgKG9wdGlvbiAmJiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhIHJlY29nbmlzZWQgb3B0aW9uIGJ5IHRoaXMgY29tbWFuZC5cbiAgICAgIC8vIE1pZ2h0IGJlIGEgY29tbWFuZC1hcmd1bWVudCwgb3Igc3ViY29tbWFuZCBvcHRpb24sIG9yIHVua25vd24gb3B0aW9uLCBvciBoZWxwIGNvbW1hbmQgb3Igb3B0aW9uLlxuXG4gICAgICAvLyBBbiB1bmtub3duIG9wdGlvbiBtZWFucyBmdXJ0aGVyIGFyZ3VtZW50cyBhbHNvIGNsYXNzaWZpZWQgYXMgdW5rbm93biBzbyBjYW4gYmUgcmVwcm9jZXNzZWQgYnkgc3ViY29tbWFuZHMuXG4gICAgICAvLyBBIG5lZ2F0aXZlIG51bWJlciBpbiBhIGxlYWYgY29tbWFuZCBpcyBub3QgYW4gdW5rbm93biBvcHRpb24uXG4gICAgICBpZiAoXG4gICAgICAgIGRlc3QgPT09IG9wZXJhbmRzICYmXG4gICAgICAgIG1heWJlT3B0aW9uKGFyZykgJiZcbiAgICAgICAgISh0aGlzLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCAmJiBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIGRlc3QgPSB1bmtub3duO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwb3NpdGlvbmFsT3B0aW9ucywgc3RvcCBwcm9jZXNzaW5nIG91ciBvcHRpb25zIGF0IHN1YmNvbW1hbmQuXG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyB8fCB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMpICYmXG4gICAgICAgIG9wZXJhbmRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB1bmtub3duLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZChhcmcpKSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChhcmcpO1xuICAgICAgICAgIHVua25vd24ucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpICYmXG4gICAgICAgICAgYXJnID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNpbmcgcGFzc1Rocm91Z2hPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3B0aW9ucyBhdCBmaXJzdCBjb21tYW5kLWFyZ3VtZW50LlxuICAgICAgaWYgKHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykge1xuICAgICAgICBkZXN0LnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBhcmdcbiAgICAgIGRlc3QucHVzaChhcmcpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG9wZXJhbmRzLCB1bmtub3duIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGxvY2FsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW91ciBzbyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aGVuIHN0aWxsIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgY29uc3QgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm9wdGlvbnNbaV0uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAga2V5ID09PSB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA/IHRoaXMuX3ZlcnNpb24gOiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIG1lcmdlZCBsb2NhbCBhbmQgZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzV2l0aEdsb2JhbHMoKSB7XG4gICAgLy8gZ2xvYmFscyBvdmVyd3JpdGUgbG9jYWxzXG4gICAgcmV0dXJuIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5yZWR1Y2UoXG4gICAgICAoY29tYmluZWRPcHRpb25zLCBjbWQpID0+IE9iamVjdC5hc3NpZ24oY29tYmluZWRPcHRpb25zLCBjbWQub3B0cygpKSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBlcnJvciBtZXNzYWdlIGFuZCBleGl0IChvciBjYWxsIGV4aXRPdmVycmlkZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXJyb3JPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Vycm9yT3B0aW9ucy5jb2RlXSAtIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZXJyb3JPcHRpb25zLmV4aXRDb2RlXSAtIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICovXG4gIGVycm9yKG1lc3NhZ2UsIGVycm9yT3B0aW9ucykge1xuICAgIC8vIG91dHB1dCBoYW5kbGluZ1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ub3V0cHV0RXJyb3IoXG4gICAgICBgJHttZXNzYWdlfVxcbmAsXG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyLFxuICAgICk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKGAke3RoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcn1cXG5gKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcikge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycignXFxuJyk7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBleGl0IGhhbmRsaW5nXG4gICAgY29uc3QgY29uZmlnID0gZXJyb3JPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGV4aXRDb2RlID0gY29uZmlnLmV4aXRDb2RlIHx8IDE7XG4gICAgY29uc3QgY29kZSA9IGNvbmZpZy5jb2RlIHx8ICdjb21tYW5kZXIuZXJyb3InO1xuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBvcHRpb24gcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlmIG9wdGlvbiBkb2VzXG4gICAqIG5vdCBoYXZlIGEgdmFsdWUgZnJvbSBjbGkgb3IgY2xpZW50IGNvZGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zRW52KCkge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24uZW52VmFyICYmIG9wdGlvbi5lbnZWYXIgaW4gcHJvY2Vzcy5lbnYpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgLy8gUHJpb3JpdHkgY2hlY2suIERvIG5vdCBvdmVyd3JpdGUgY2xpIG9yIG9wdGlvbnMgZnJvbSB1bmtub3duIHNvdXJjZSAoY2xpZW50LWNvZGUpLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBbJ2RlZmF1bHQnLCAnY29uZmlnJywgJ2VudiddLmluY2x1ZGVzKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiBjYW4gdGFrZSBhIHZhbHVlXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvcHRpb25hbCBhbHdheXMgdGFrZXMgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gLCBwcm9jZXNzLmVudltvcHRpb24uZW52VmFyXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW5cbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9ubHkgY2FyZSB0aGF0IGVudlZhciBkZWZpbmVkIGFuZCBub3QgdGhlIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IGltcGxpZWQgb3B0aW9uIHZhbHVlcywgaWYgb3B0aW9uIGlzIHVuZGVmaW5lZCBvciBkZWZhdWx0IHZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0ltcGxpZWQoKSB7XG4gICAgY29uc3QgZHVhbEhlbHBlciA9IG5ldyBEdWFsT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IGhhc0N1c3RvbU9wdGlvblZhbHVlID0gKG9wdGlvbktleSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIVsnZGVmYXVsdCcsICdpbXBsaWVkJ10uaW5jbHVkZXModGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMub3B0aW9uc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24uaW1wbGllZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgaGFzQ3VzdG9tT3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgJiZcbiAgICAgICAgICBkdWFsSGVscGVyLnZhbHVlRnJvbU9wdGlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uLmltcGxpZWQpXG4gICAgICAgICAgLmZpbHRlcigoaW1wbGllZEtleSkgPT4gIWhhc0N1c3RvbU9wdGlvblZhbHVlKGltcGxpZWRLZXkpKVxuICAgICAgICAgIC5mb3JFYWNoKChpbXBsaWVkS2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICAgICAgaW1wbGllZEtleSxcbiAgICAgICAgICAgICAgb3B0aW9uLmltcGxpZWRbaW1wbGllZEtleV0sXG4gICAgICAgICAgICAgICdpbXBsaWVkJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcmd1bWVudCBgbmFtZWAgaXMgbWlzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ0FyZ3VtZW50KG5hbWUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICcke25hbWV9J2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgYXJndW1lbnQgbWlzc2luZ2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIub3B0aW9uTWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIGFuZCBpcyBhIG1hbmRhdG9yeSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHJlcXVpcmVkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBub3Qgc3BlY2lmaWVkYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBjb25mbGljdGluZ09wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdPcHRpb24pIHtcbiAgICAvLyBUaGUgY2FsbGluZyBjb2RlIGRvZXMgbm90IGtub3cgd2hldGhlciBhIG5lZ2F0ZWQgb3B0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGhlXG4gICAgLy8gdmFsdWUsIHNvIGRvIHNvbWUgd29yayB0byB0YWtlIGFuIGVkdWNhdGVkIGd1ZXNzLlxuICAgIGNvbnN0IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpO1xuICAgICAgY29uc3QgbmVnYXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgY29uc3QgcG9zaXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gIXRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgbmVnYXRpdmVPcHRpb24gJiZcbiAgICAgICAgKChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25WYWx1ZSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9PT0gbmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmVnYXRpdmVPcHRpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gcG9zaXRpdmVPcHRpb24gfHwgb3B0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBiZXN0T3B0aW9uID0gZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUob3B0aW9uKTtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IGJlc3RPcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgICAgcmV0dXJuIGBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtiZXN0T3B0aW9uLmVudlZhcn0nYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgb3B0aW9uICcke2Jlc3RPcHRpb24uZmxhZ3N9J2A7XG4gICAgfTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKG9wdGlvbil9IGNhbm5vdCBiZSB1c2VkIHdpdGggJHtnZXRFcnJvck1lc3NhZ2UoY29uZmxpY3RpbmdPcHRpb24pfWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuY29uZmxpY3RpbmdPcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gb3B0aW9uIGBmbGFnYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bk9wdGlvbihmbGFnKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbikgcmV0dXJuO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAoZmxhZy5zdGFydHNXaXRoKCctLScpICYmIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgLy8gTG9vcGluZyB0byBwaWNrIHVwIHRoZSBnbG9iYWwgb3B0aW9ucyB0b29cbiAgICAgIGxldCBjYW5kaWRhdGVGbGFncyA9IFtdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1vcmVGbGFncyA9IGNvbW1hbmRcbiAgICAgICAgICAuY3JlYXRlSGVscCgpXG4gICAgICAgICAgLnZpc2libGVPcHRpb25zKGNvbW1hbmQpXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubG9uZylcbiAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5sb25nKTtcbiAgICAgICAgY2FuZGlkYXRlRmxhZ3MgPSBjYW5kaWRhdGVGbGFncy5jb25jYXQobW9yZUZsYWdzKTtcbiAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50O1xuICAgICAgfSB3aGlsZSAoY29tbWFuZCAmJiAhY29tbWFuZC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMpO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKGZsYWcsIGNhbmRpZGF0ZUZsYWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIG9wdGlvbiAnJHtmbGFnfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNlc3MgYXJndW1lbnRzLCBtb3JlIHRoYW4gZXhwZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJlY2VpdmVkQXJnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhjZXNzQXJndW1lbnRzKHJlY2VpdmVkQXJncykge1xuICAgIGlmICh0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgIGNvbnN0IHMgPSBleHBlY3RlZCA9PT0gMSA/ICcnIDogJ3MnO1xuICAgIGNvbnN0IGZvclN1YmNvbW1hbmQgPSB0aGlzLnBhcmVudCA/IGAgZm9yICcke3RoaXMubmFtZSgpfSdgIDogJyc7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdG9vIG1hbnkgYXJndW1lbnRzJHtmb3JTdWJjb21tYW5kfS4gRXhwZWN0ZWQgJHtleHBlY3RlZH0gYXJndW1lbnQke3N9IGJ1dCBnb3QgJHtyZWNlaXZlZEFyZ3MubGVuZ3RofS5gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmV4Y2Vzc0FyZ3VtZW50cycgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duQ29tbWFuZCgpIHtcbiAgICBjb25zdCB1bmtub3duTmFtZSA9IHRoaXMuYXJnc1swXTtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgY29uc3QgY2FuZGlkYXRlTmFtZXMgPSBbXTtcbiAgICAgIHRoaXMuY3JlYXRlSGVscCgpXG4gICAgICAgIC52aXNpYmxlQ29tbWFuZHModGhpcylcbiAgICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQubmFtZSgpKTtcbiAgICAgICAgICAvLyBqdXN0IHZpc2libGUgYWxpYXNcbiAgICAgICAgICBpZiAoY29tbWFuZC5hbGlhcygpKSBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQuYWxpYXMoKSk7XG4gICAgICAgIH0pO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKHVua25vd25OYW1lLCBjYW5kaWRhdGVOYW1lcyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBjb21tYW5kICcke3Vua25vd25OYW1lfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duQ29tbWFuZCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgcHJvZ3JhbSB2ZXJzaW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdXRvLXJlZ2lzdGVycyB0aGUgXCItViwgLS12ZXJzaW9uXCIgb3B0aW9uIHdoaWNoIHdpbGwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLlxuICAgKlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBmbGFncyBhbmQgZGVzY3JpcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHRoaXMgfCBzdHJpbmcgfCB1bmRlZmluZWQpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHZlcnNpb24gc3RyaW5nIGlmIG5vIGFyZ3VtZW50c1xuICAgKi9cblxuICB2ZXJzaW9uKHN0ciwgZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgICB0aGlzLl92ZXJzaW9uID0gc3RyO1xuICAgIGZsYWdzID0gZmxhZ3MgfHwgJy1WLCAtLXZlcnNpb24nO1xuICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJ291dHB1dCB0aGUgdmVyc2lvbiBudW1iZXInO1xuICAgIGNvbnN0IHZlcnNpb25PcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID0gdmVyc2lvbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24odmVyc2lvbk9wdGlvbik7XG5cbiAgICB0aGlzLm9uKCdvcHRpb246JyArIHZlcnNpb25PcHRpb24ubmFtZSgpLCAoKSA9PiB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KGAke3N0cn1cXG5gKTtcbiAgICAgIHRoaXMuX2V4aXQoMCwgJ2NvbW1hbmRlci52ZXJzaW9uJywgc3RyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzRGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBkZXNjcmlwdGlvbihzdHIsIGFyZ3NEZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCAmJiBhcmdzRGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHN0cjtcbiAgICBpZiAoYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSBhcmdzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3VtbWFyeS4gVXNlZCB3aGVuIGxpc3RlZCBhcyBzdWJjb21tYW5kIG9mIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBzdW1tYXJ5KHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3N1bW1hcnk7XG4gICAgdGhpcy5fc3VtbWFyeSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gYWxpYXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBZb3UgbWF5IGNhbGwgbW9yZSB0aGFuIG9uY2UgdG8gYWRkIG11bHRpcGxlIGFsaWFzZXMuIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhcyhhbGlhcykge1xuICAgIGlmIChhbGlhcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlc1swXTsgLy8ganVzdCByZXR1cm4gZmlyc3QsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdLl9leGVjdXRhYmxlSGFuZGxlclxuICAgICkge1xuICAgICAgLy8gYXNzdW1lIGFkZGluZyBhbGlhcyBmb3IgbGFzdCBhZGRlZCBleGVjdXRhYmxlIHN1YmNvbW1hbmQsIHJhdGhlciB0aGFuIHRoaXNcbiAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgaWYgKGFsaWFzID09PSBjb21tYW5kLl9uYW1lKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbWFuZCBhbGlhcyBjYW4ndCBiZSB0aGUgc2FtZSBhcyBpdHMgbmFtZVwiKTtcbiAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmQgPSB0aGlzLnBhcmVudD8uX2ZpbmRDb21tYW5kKGFsaWFzKTtcbiAgICBpZiAobWF0Y2hpbmdDb21tYW5kKSB7XG4gICAgICAvLyBjLmYuIF9yZWdpc3RlckNvbW1hbmRcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ21kID0gW21hdGNoaW5nQ29tbWFuZC5uYW1lKCldXG4gICAgICAgIC5jb25jYXQobWF0Y2hpbmdDb21tYW5kLmFsaWFzZXMoKSlcbiAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgYWxpYXMgJyR7YWxpYXN9JyB0byBjb21tYW5kICcke3RoaXMubmFtZSgpfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbW1hbmQuX2FsaWFzZXMucHVzaChhbGlhcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFsaWFzZXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FsaWFzZXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmdbXXxDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgLy8gR2V0dGVyIGZvciB0aGUgYXJyYXkgb2YgYWxpYXNlcyBpcyB0aGUgbWFpbiByZWFzb24gZm9yIGhhdmluZyBhbGlhc2VzKCkgaW4gYWRkaXRpb24gdG8gYWxpYXMoKS5cbiAgICBpZiAoYWxpYXNlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlcztcblxuICAgIGFsaWFzZXMuZm9yRWFjaCgoYWxpYXMpID0+IHRoaXMuYWxpYXMoYWxpYXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgLyBnZXQgdGhlIGNvbW1hbmQgdXNhZ2UgYHN0cmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICB1c2FnZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl91c2FnZSkgcmV0dXJuIHRoaXMuX3VzYWdlO1xuXG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLm1hcCgoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gW11cbiAgICAgICAgLmNvbmNhdChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoIHx8IHRoaXMuX2hlbHBPcHRpb24gIT09IG51bGwgPyAnW29wdGlvbnNdJyA6IFtdLFxuICAgICAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoID8gJ1tjb21tYW5kXScgOiBbXSxcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID8gYXJncyA6IFtdLFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXNhZ2UgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIG5hbWUoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB0aGlzLl9uYW1lID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZyBmb3IgdGhpcyBzdWJjb21tYW5kIGluIHBhcmVudCBjb21tYW5kJ3MgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cblxuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID8/ICcnO1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGRlZmF1bHQgaGVscCBncm91cCBoZWFkaW5nIGZvciBzdWJjb21tYW5kcyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBzdWJjb21tYW5kIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uY29tbWFuZHNHcm91cCgnRGV2ZWxvcG1lbnQgQ29tbWFuZHM6KTtcbiAgICogcHJvZ3JhbS5jb21tYW5kKCd3YXRjaCcpLi4uXG4gICAqIHByb2dyYW0uY29tbWFuZCgnbGludCcpLi4uXG4gICAqIC4uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgY29tbWFuZHNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPz8gJyc7XG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIG9wdGlvbnMgYWRkZWQgdG8gdGhpcyBjb21tYW5kLlxuICAgKiAoVGhpcyBkb2VzIG5vdCBvdmVycmlkZSBhIGdyb3VwIHNldCBkaXJlY3RseSBvbiB0aGUgb3B0aW9uIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAub3B0aW9uc0dyb3VwKCdEZXZlbG9wbWVudCBPcHRpb25zOicpXG4gICAqICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnb3V0cHV0IGV4dHJhIGRlYnVnZ2luZycpXG4gICAqICAgLm9wdGlvbignLXAsIC0tcHJvZmlsZScsICdvdXRwdXQgcHJvZmlsaW5nIGluZm9ybWF0aW9uJylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJucyB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG4gIG9wdGlvbnNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0T3B0aW9uR3JvdXAob3B0aW9uKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCAmJiAhb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcpXG4gICAgICBvcHRpb24uaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0Q29tbWFuZEdyb3VwKGNtZCkge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwICYmICFjbWQuaGVscEdyb3VwKCkpXG4gICAgICBjbWQuaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmcm9tIHNjcmlwdCBmaWxlbmFtZSwgc3VjaCBhcyBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAqIG9yIHJlcXVpcmUubWFpbi5maWxlbmFtZSwgb3IgX19maWxlbmFtZS5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSBhbmQgcHVibGljIGFsdGhvdWdoIG5vdCBkb2N1bWVudGVkIGluIFJFQURNRS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ubmFtZUZyb21GaWxlbmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybiB7Q29tbWFuZH1cbiAgICovXG5cbiAgbmFtZUZyb21GaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHRoaXMuX25hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lLCBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGRpcmVjdG9yeSBmb3Igc2VhcmNoaW5nIGZvciBleGVjdXRhYmxlIHN1YmNvbW1hbmRzIG9mIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKF9fZGlybmFtZSk7XG4gICAqIC8vIG9yXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcignc3ViY29tbWFuZHMnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfG51bGx8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGV4ZWN1dGFibGVEaXIocGF0aCkge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9leGVjdXRhYmxlRGlyO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVEaXIgPSBwYXRoO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBwcm9ncmFtIGhlbHAgZG9jdW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cmFwIGZvciBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBoZWxwSW5mb3JtYXRpb24oY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb25zdCBoZWxwZXIgPSB0aGlzLmNyZWF0ZUhlbHAoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucyk7XG4gICAgaGVscGVyLnByZXBhcmVDb250ZXh0KHtcbiAgICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgICAgaGVscFdpZHRoOiBjb250ZXh0LmhlbHBXaWR0aCxcbiAgICAgIG91dHB1dEhhc0NvbG9yczogY29udGV4dC5oYXNDb2xvcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdGV4dCA9IGhlbHBlci5mb3JtYXRIZWxwKHRoaXMsIGhlbHBlcik7XG4gICAgaWYgKGNvbnRleHQuaGFzQ29sb3JzKSByZXR1cm4gdGV4dDtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIEhlbHBDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGhlbHBXaWR0aFxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGhhc0NvbG9yc1xuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB3cml0ZSAtIGluY2x1ZGVzIHN0cmlwQ29sb3IgaWYgbmVlZGVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtIZWxwQ29udGV4dH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGVycm9yID0gISFjb250ZXh0T3B0aW9ucy5lcnJvcjtcbiAgICBsZXQgYmFzZVdyaXRlO1xuICAgIGxldCBoYXNDb2xvcnM7XG4gICAgbGV0IGhlbHBXaWR0aDtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhlbHBXaWR0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlV3JpdGUgPSAoc3RyKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KHN0cik7XG4gICAgICBoYXNDb2xvcnMgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhhc0NvbG9ycygpO1xuICAgICAgaGVscFdpZHRoID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRPdXRIZWxwV2lkdGgoKTtcbiAgICB9XG4gICAgY29uc3Qgd3JpdGUgPSAoc3RyKSA9PiB7XG4gICAgICBpZiAoIWhhc0NvbG9ycykgc3RyID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHN0cik7XG4gICAgICByZXR1cm4gYmFzZVdyaXRlKHN0cik7XG4gICAgfTtcbiAgICByZXR1cm4geyBlcnJvciwgd3JpdGUsIGhhc0NvbG9ycywgaGVscFdpZHRoIH07XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH0gfCBGdW5jdGlvbn0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKi9cblxuICBvdXRwdXRIZWxwKGNvbnRleHRPcHRpb25zKSB7XG4gICAgbGV0IGRlcHJlY2F0ZWRDYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIGNvbnRleHRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZXByZWNhdGVkQ2FsbGJhY2sgPSBjb250ZXh0T3B0aW9ucztcbiAgICAgIGNvbnRleHRPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dENvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICAvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqL1xuICAgIGNvbnN0IGV2ZW50Q29udGV4dCA9IHtcbiAgICAgIGVycm9yOiBvdXRwdXRDb250ZXh0LmVycm9yLFxuICAgICAgd3JpdGU6IG91dHB1dENvbnRleHQud3JpdGUsXG4gICAgICBjb21tYW5kOiB0aGlzLFxuICAgIH07XG5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiBjb21tYW5kLmVtaXQoJ2JlZm9yZUFsbEhlbHAnLCBldmVudENvbnRleHQpKTtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZUhlbHAnLCBldmVudENvbnRleHQpO1xuXG4gICAgbGV0IGhlbHBJbmZvcm1hdGlvbiA9IHRoaXMuaGVscEluZm9ybWF0aW9uKHsgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IgfSk7XG4gICAgaWYgKGRlcHJlY2F0ZWRDYWxsYmFjaykge1xuICAgICAgaGVscEluZm9ybWF0aW9uID0gZGVwcmVjYXRlZENhbGxiYWNrKGhlbHBJbmZvcm1hdGlvbik7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBoZWxwSW5mb3JtYXRpb24gIT09ICdzdHJpbmcnICYmXG4gICAgICAgICFCdWZmZXIuaXNCdWZmZXIoaGVscEluZm9ybWF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3V0cHV0SGVscCBjYWxsYmFjayBtdXN0IHJldHVybiBhIHN0cmluZyBvciBhIEJ1ZmZlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRDb250ZXh0LndyaXRlKGhlbHBJbmZvcm1hdGlvbik7XG5cbiAgICBpZiAodGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nKSB7XG4gICAgICB0aGlzLmVtaXQodGhpcy5fZ2V0SGVscE9wdGlvbigpLmxvbmcpOyAvLyBkZXByZWNhdGVkXG4gICAgfVxuICAgIHRoaXMuZW1pdCgnYWZ0ZXJIZWxwJywgZXZlbnRDb250ZXh0KTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY29tbWFuZCkgPT5cbiAgICAgIGNvbW1hbmQuZW1pdCgnYWZ0ZXJBbGxIZWxwJywgZXZlbnRDb250ZXh0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gcGFzcyBpbiBmbGFncyBhbmQgYSBkZXNjcmlwdGlvbiB0byBjdXN0b21pc2UgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBQYXNzIGluIGZhbHNlIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oJy0/LCAtLWhlbHAnICdzaG93IGhlbHAnKTsgLy8gY3VzdG9taXNlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbihmYWxzZSk7IC8vIGRpc2FibGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgYm9vbGVhbil9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBoZWxwT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIC8vIFN1cHBvcnQgZW5hYmxpbmcvZGlzYWJsaW5nIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKGZsYWdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSBudWxsKSB0aGlzLl9oZWxwT3B0aW9uID0gdW5kZWZpbmVkOyAvLyByZWVuYWJsZVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKSB7XG4gICAgICAgICAgLy8gbWFrZSB0aGUgb3B0aW9uIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9oZWxwT3B0aW9uID0gbnVsbDsgLy8gZGlzYWJsZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9taXNlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbi5cbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oXG4gICAgICBmbGFncyA/PyAnLWgsIC0taGVscCcsXG4gICAgICBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJyxcbiAgICApO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGZsYWdzIHx8IGRlc2NyaXB0aW9uKSB0aGlzLl9pbml0T3B0aW9uR3JvdXAodGhpcy5faGVscE9wdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIG9wdGlvbi5cbiAgICogUmV0dXJucyBudWxsIGlmIGhhcyBiZWVuIGRpc2FibGVkIHdpdGggLmhlbHBPcHRpb24oZmFsc2UpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7KE9wdGlvbiB8IG51bGwpfSB0aGUgaGVscCBvcHRpb25cbiAgICogQHBhY2thZ2VcbiAgICovXG4gIF9nZXRIZWxwT3B0aW9uKCkge1xuICAgIC8vIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uIG9uIGRlbWFuZC5cbiAgICBpZiAodGhpcy5faGVscE9wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhlbHBPcHRpb24odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGVscE9wdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwbHkgeW91ciBvd24gb3B0aW9uIHRvIHVzZSBmb3IgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIGhlbHBPcHRpb24oKSB0byBjdXN0b21pc2UgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRIZWxwT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBvcHRpb247XG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIGhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLm91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpO1xuICAgIGxldCBleGl0Q29kZSA9IE51bWJlcihwcm9jZXNzLmV4aXRDb2RlID8/IDApOyAvLyBwcm9jZXNzLmV4aXRDb2RlIGRvZXMgYWxsb3cgYSBzdHJpbmcgb3IgYW4gaW50ZWdlciwgYnV0IHdlIHByZWZlciBqdXN0IGEgbnVtYmVyXG4gICAgaWYgKFxuICAgICAgZXhpdENvZGUgPT09IDAgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zICYmXG4gICAgICB0eXBlb2YgY29udGV4dE9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zLmVycm9yXG4gICAgKSB7XG4gICAgICBleGl0Q29kZSA9IDE7XG4gICAgfVxuICAgIC8vIG1lc3NhZ2U6IGRvIG5vdCBoYXZlIGFsbCBkaXNwbGF5ZWQgdGV4dCBhdmFpbGFibGUgc28gb25seSBwYXNzaW5nIHBsYWNlaG9sZGVyLlxuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsICdjb21tYW5kZXIuaGVscCcsICcob3V0cHV0SGVscCknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAvLyBEbyBhIGxpdHRsZSB0eXBpbmcgdG8gY29vcmRpbmF0ZSBlbWl0IGFuZCBsaXN0ZW5lciBmb3IgdGhlIGhlbHAgdGV4dCBldmVudHMuXG4gICAqIEB0eXBlZGVmIEhlbHBUZXh0RXZlbnRDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBZGQgYWRkaXRpb25hbCB0ZXh0IHRvIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBQb3NpdGlvbiBpcyAnYmVmb3JlJyBvciAnYWZ0ZXInIHRvIGFmZmVjdCBqdXN0IHRoaXMgY29tbWFuZCxcbiAgICogYW5kICdiZWZvcmVBbGwnIG9yICdhZnRlckFsbCcgdG8gYWZmZWN0IHRoaXMgY29tbWFuZCBhbmQgYWxsIGl0cyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uIC0gYmVmb3JlIG9yIGFmdGVyIGJ1aWx0LWluIGhlbHBcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgRnVuY3Rpb24pfSB0ZXh0IC0gc3RyaW5nIHRvIGFkZCwgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZEhlbHBUZXh0KHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgY29uc3QgYWxsb3dlZFZhbHVlcyA9IFsnYmVmb3JlQWxsJywgJ2JlZm9yZScsICdhZnRlcicsICdhZnRlckFsbCddO1xuICAgIGlmICghYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyhwb3NpdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3IgcG9zaXRpb24gdG8gYWRkSGVscFRleHQuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IGhlbHBFdmVudCA9IGAke3Bvc2l0aW9ufUhlbHBgO1xuICAgIHRoaXMub24oaGVscEV2ZW50LCAoLyoqIEB0eXBlIHtIZWxwVGV4dEV2ZW50Q29udGV4dH0gKi8gY29udGV4dCkgPT4ge1xuICAgICAgbGV0IGhlbHBTdHI7XG4gICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQoeyBlcnJvcjogY29udGV4dC5lcnJvciwgY29tbWFuZDogY29udGV4dC5jb21tYW5kIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQ7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgZmFsc3kgdmFsdWUgd2hlbiBub3RoaW5nIHRvIG91dHB1dC5cbiAgICAgIGlmIChoZWxwU3RyKSB7XG4gICAgICAgIGNvbnRleHQud3JpdGUoYCR7aGVscFN0cn1cXG5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBoZWxwIGZsYWdzIHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIC0gYXJyYXkgb2Ygb3B0aW9ucyB0byBzZWFyY2ggZm9yIGhlbHAgZmxhZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX291dHB1dEhlbHBJZlJlcXVlc3RlZChhcmdzKSB7XG4gICAgY29uc3QgaGVscE9wdGlvbiA9IHRoaXMuX2dldEhlbHBPcHRpb24oKTtcbiAgICBjb25zdCBoZWxwUmVxdWVzdGVkID0gaGVscE9wdGlvbiAmJiBhcmdzLmZpbmQoKGFyZykgPT4gaGVscE9wdGlvbi5pcyhhcmcpKTtcbiAgICBpZiAoaGVscFJlcXVlc3RlZCkge1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKCk7XG4gICAgICAvLyAoRG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuKVxuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLmhlbHBEaXNwbGF5ZWQnLCAnKG91dHB1dEhlbHApJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2NhbiBhcmd1bWVudHMgYW5kIGluY3JlbWVudCBwb3J0IG51bWJlciBmb3IgaW5zcGVjdCBjYWxscyAodG8gYXZvaWQgY29uZmxpY3RzIHdoZW4gc3Bhd25pbmcgbmV3IGNvbW1hbmQpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBhcnJheSBvZiBhcmd1bWVudHMgZnJvbSBub2RlLmV4ZWNBcmd2XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KGFyZ3MpIHtcbiAgLy8gVGVzdGluZyBmb3IgdGhlc2Ugb3B0aW9uczpcbiAgLy8gIC0taW5zcGVjdFs9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtYnJrWz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1wb3J0PVtob3N0Ol1wb3J0XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aCgnLS1pbnNwZWN0JykpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGxldCBkZWJ1Z09wdGlvbjtcbiAgICBsZXQgZGVidWdIb3N0ID0gJzEyNy4wLjAuMSc7XG4gICAgbGV0IGRlYnVnUG9ydCA9ICc5MjI5JztcbiAgICBsZXQgbWF0Y2g7XG4gICAgaWYgKChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJyayk/KSQvKSkgIT09IG51bGwpIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBpZiAoL15cXGQrJC8udGVzdChtYXRjaFszXSkpIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9MTIzNFxuICAgICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFszXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdFxuICAgICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKyk6KFxcZCspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0OjEyMzRcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzRdO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z09wdGlvbiAmJiBkZWJ1Z1BvcnQgIT09ICcwJykge1xuICAgICAgcmV0dXJuIGAke2RlYnVnT3B0aW9ufT0ke2RlYnVnSG9zdH06JHtwYXJzZUludChkZWJ1Z1BvcnQpICsgMX1gO1xuICAgIH1cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAqIEBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbG9yKCkge1xuICAvLyBUZXN0IGZvciBjb21tb24gY29udmVudGlvbnMuXG4gIC8vIE5COiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3VyIGlzIGluIGNvbWJpbmF0aW9uIHdpdGggaG93IGF1dGhvciBhZGRzIGNvbG9yISBGb3IgZXhhbXBsZTpcbiAgLy8gICAtIHdlIGRvIG5vdCB0ZXN0IE5PREVfRElTQUJMRV9DT0xPUlMsIGJ1dCB1dGlsOnN0eWxldGV4dCBkb2VzXG4gIC8vICAgLSB3ZSBkbyB0ZXN0IE5PX0NPTE9SLCBidXQgQ2hhbGsgZG9lcyBub3RcbiAgLy9cbiAgLy8gUmVmZXJlbmNlczpcbiAgLy8gaHR0cHM6Ly9uby1jb2xvci5vcmdcbiAgLy8gaHR0cHM6Ly9iaXhlbnNlLmNvbS9jbGljb2xvcnMvXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzBhMDAyMTdhNWY2N2VmNGEyMjM4NGNmYzgwZWI2ZGQ5YTkxN2ZkYzEvbGliL2ludGVybmFsL3R0eS5qcyNMMTA5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9zdXBwb3J0cy1jb2xvci9ibG9iL2MyMTQzMTRhMTRiY2IxNzRiMTJiMzAxNGIyYjBhOGRlMzc1MDI5YWUvaW5kZXguanMjTDMzXG4gIC8vIChodHRwczovL2ZvcmNlLWNvbG9yLm9yZyByZWNlbnQgd2ViIHBhZ2UgZnJvbSAyMDIzLCBkb2VzIG5vdCBtYXRjaCBtYWpvciBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9ucylcblxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJzAnIHx8XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZSdcbiAgKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SIHx8IHByb2Nlc3MuZW52LkNMSUNPTE9SX0ZPUkNFICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLnVzZUNvbG9yID0gdXNlQ29sb3I7IC8vIGV4cG9ydGluZyBmb3IgdGVzdHNcbiIsICJjb25zdCB7IEFyZ3VtZW50IH0gPSByZXF1aXJlKCcuL2xpYi9hcmd1bWVudC5qcycpO1xuY29uc3QgeyBDb21tYW5kIH0gPSByZXF1aXJlKCcuL2xpYi9jb21tYW5kLmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9saWIvZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCB9ID0gcmVxdWlyZSgnLi9saWIvaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24gfSA9IHJlcXVpcmUoJy4vbGliL29wdGlvbi5qcycpO1xuXG5leHBvcnRzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5leHBvcnRzLmNyZWF0ZUNvbW1hbmQgPSAobmFtZSkgPT4gbmV3IENvbW1hbmQobmFtZSk7XG5leHBvcnRzLmNyZWF0ZU9wdGlvbiA9IChmbGFncywgZGVzY3JpcHRpb24pID0+IG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbmV4cG9ydHMuY3JlYXRlQXJndW1lbnQgPSAobmFtZSwgZGVzY3JpcHRpb24pID0+IG5ldyBBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG5cbi8qKlxuICogRXhwb3NlIGNsYXNzZXNcbiAqL1xuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG5leHBvcnRzLkludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7IC8vIERlcHJlY2F0ZWRcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrSGVhZGVyc0xpc3Q6IFN5bWJvbCgnaGVhZGVycyBsaXN0JyksXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dDogU3ltYm9sKCdkZWZhdWx0IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dDogU3ltYm9sKCdtYXgga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCB0aHJlc2hvbGQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZTogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZTogU3ltYm9sKCdrZWVwIGFsaXZlJyksXG4gIGtIZWFkZXJzVGltZW91dDogU3ltYm9sKCdoZWFkZXJzIHRpbWVvdXQnKSxcbiAga0JvZHlUaW1lb3V0OiBTeW1ib2woJ2JvZHkgdGltZW91dCcpLFxuICBrU2VydmVyTmFtZTogU3ltYm9sKCdzZXJ2ZXIgbmFtZScpLFxuICBrTG9jYWxBZGRyZXNzOiBTeW1ib2woJ2xvY2FsIGFkZHJlc3MnKSxcbiAga0hvc3Q6IFN5bWJvbCgnaG9zdCcpLFxuICBrTm9SZWY6IFN5bWJvbCgnbm8gcmVmJyksXG4gIGtCb2R5VXNlZDogU3ltYm9sKCd1c2VkJyksXG4gIGtSdW5uaW5nOiBTeW1ib2woJ3J1bm5pbmcnKSxcbiAga0Jsb2NraW5nOiBTeW1ib2woJ2Jsb2NraW5nJyksXG4gIGtQZW5kaW5nOiBTeW1ib2woJ3BlbmRpbmcnKSxcbiAga1NpemU6IFN5bWJvbCgnc2l6ZScpLFxuICBrQnVzeTogU3ltYm9sKCdidXN5JyksXG4gIGtRdWV1ZWQ6IFN5bWJvbCgncXVldWVkJyksXG4gIGtGcmVlOiBTeW1ib2woJ2ZyZWUnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKSxcbiAga0Nsb3NlZDogU3ltYm9sKCdjbG9zZWQnKSxcbiAga05lZWREcmFpbjogU3ltYm9sKCduZWVkIGRyYWluJyksXG4gIGtSZXNldDogU3ltYm9sKCdyZXNldCcpLFxuICBrRGVzdHJveWVkOiBTeW1ib2wuZm9yKCdub2RlanMuc3RyZWFtLmRlc3Ryb3llZCcpLFxuICBrTWF4SGVhZGVyc1NpemU6IFN5bWJvbCgnbWF4IGhlYWRlcnMgc2l6ZScpLFxuICBrUnVubmluZ0lkeDogU3ltYm9sKCdydW5uaW5nIGluZGV4JyksXG4gIGtQZW5kaW5nSWR4OiBTeW1ib2woJ3BlbmRpbmcgaW5kZXgnKSxcbiAga0Vycm9yOiBTeW1ib2woJ2Vycm9yJyksXG4gIGtDbGllbnRzOiBTeW1ib2woJ2NsaWVudHMnKSxcbiAga0NsaWVudDogU3ltYm9sKCdjbGllbnQnKSxcbiAga1BhcnNlcjogU3ltYm9sKCdwYXJzZXInKSxcbiAga09uRGVzdHJveWVkOiBTeW1ib2woJ2Rlc3Ryb3kgY2FsbGJhY2tzJyksXG4gIGtQaXBlbGluaW5nOiBTeW1ib2woJ3BpcGVsaW5pbmcnKSxcbiAga1NvY2tldDogU3ltYm9sKCdzb2NrZXQnKSxcbiAga0hvc3RIZWFkZXI6IFN5bWJvbCgnaG9zdCBoZWFkZXInKSxcbiAga0Nvbm5lY3RvcjogU3ltYm9sKCdjb25uZWN0b3InKSxcbiAga1N0cmljdENvbnRlbnRMZW5ndGg6IFN5bWJvbCgnc3RyaWN0IGNvbnRlbnQgbGVuZ3RoJyksXG4gIGtNYXhSZWRpcmVjdGlvbnM6IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJyksXG4gIGtNYXhSZXF1ZXN0czogU3ltYm9sKCdtYXhSZXF1ZXN0c1BlckNsaWVudCcpLFxuICBrUHJveHk6IFN5bWJvbCgncHJveHkgYWdlbnQgb3B0aW9ucycpLFxuICBrQ291bnRlcjogU3ltYm9sKCdzb2NrZXQgcmVxdWVzdCBjb3VudGVyJyksXG4gIGtJbnRlcmNlcHRvcnM6IFN5bWJvbCgnZGlzcGF0Y2ggaW50ZXJjZXB0b3JzJyksXG4gIGtNYXhSZXNwb25zZVNpemU6IFN5bWJvbCgnbWF4IHJlc3BvbnNlIHNpemUnKSxcbiAga0hUVFAyU2Vzc2lvbjogU3ltYm9sKCdodHRwMlNlc3Npb24nKSxcbiAga0hUVFAyU2Vzc2lvblN0YXRlOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbiBzdGF0ZScpLFxuICBrSFRUUDJCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDIgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDEgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDJDb3B5SGVhZGVyczogU3ltYm9sKCdodHRwMiBjb3B5IGhlYWRlcnMnKSxcbiAga0hUVFBDb25uVmVyc2lvbjogU3ltYm9sKCdodHRwIGNvbm5lY3Rpb24gdmVyc2lvbicpLFxuICBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5OiBTeW1ib2woJ3JldHJ5IGFnZW50IGRlZmF1bHQgcmV0cnknKSxcbiAga0NvbnN0cnVjdDogU3ltYm9sKCdjb25zdHJ1Y3RhYmxlJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+fSAqL1xuY29uc3QgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgPSB7fVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnNcbmNvbnN0IHdlbGxrbm93bkhlYWRlck5hbWVzID0gW1xuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAnQWNjZXB0LVJhbmdlcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kJyxcbiAgJ0FnZScsXG4gICdBbGxvdycsXG4gICdBbHQtU3ZjJyxcbiAgJ0FsdC1Vc2VkJyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDbGVhci1TaXRlLURhdGEnLFxuICAnQ29ubmVjdGlvbicsXG4gICdDb250ZW50LURpc3Bvc2l0aW9uJyxcbiAgJ0NvbnRlbnQtRW5jb2RpbmcnLFxuICAnQ29udGVudC1MYW5ndWFnZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdDb250ZW50LUxvY2F0aW9uJyxcbiAgJ0NvbnRlbnQtUmFuZ2UnLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknLFxuICAnQ29udGVudC1UeXBlJyxcbiAgJ0Nvb2tpZScsXG4gICdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3knLFxuICAnRGF0ZScsXG4gICdEZXZpY2UtTWVtb3J5JyxcbiAgJ0Rvd25saW5rJyxcbiAgJ0VDVCcsXG4gICdFVGFnJyxcbiAgJ0V4cGVjdCcsXG4gICdFeHBlY3QtQ1QnLFxuICAnRXhwaXJlcycsXG4gICdGb3J3YXJkZWQnLFxuICAnRnJvbScsXG4gICdIb3N0JyxcbiAgJ0lmLU1hdGNoJyxcbiAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAnSWYtUmFuZ2UnLFxuICAnSWYtVW5tb2RpZmllZC1TaW5jZScsXG4gICdLZWVwLUFsaXZlJyxcbiAgJ0xhc3QtTW9kaWZpZWQnLFxuICAnTGluaycsXG4gICdMb2NhdGlvbicsXG4gICdNYXgtRm9yd2FyZHMnLFxuICAnT3JpZ2luJyxcbiAgJ1Blcm1pc3Npb25zLVBvbGljeScsXG4gICdQcmFnbWEnLFxuICAnUHJveHktQXV0aGVudGljYXRlJyxcbiAgJ1Byb3h5LUF1dGhvcml6YXRpb24nLFxuICAnUlRUJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmVmZXJyZXItUG9saWN5JyxcbiAgJ1JlZnJlc2gnLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VjLVdlYlNvY2tldC1BY2NlcHQnLFxuICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyxcbiAgJ1NlYy1XZWJTb2NrZXQtS2V5JyxcbiAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnLFxuICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJyxcbiAgJ1NlcnZlcicsXG4gICdTZXJ2ZXItVGltaW5nJyxcbiAgJ1NlcnZpY2UtV29ya2VyLUFsbG93ZWQnLFxuICAnU2VydmljZS1Xb3JrZXItTmF2aWdhdGlvbi1QcmVsb2FkJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU291cmNlTWFwJyxcbiAgJ1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHknLFxuICAnU3VwcG9ydHMtTG9hZGluZy1Nb2RlJyxcbiAgJ1RFJyxcbiAgJ1RpbWluZy1BbGxvdy1PcmlnaW4nLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnLFxuICAnVXNlci1BZ2VudCcsXG4gICdWYXJ5JyxcbiAgJ1ZpYScsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICAnWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCcsXG4gICdYLUZyYW1lLU9wdGlvbnMnLFxuICAnWC1QZXJtaXR0ZWQtQ3Jvc3MtRG9tYWluLVBvbGljaWVzJyxcbiAgJ1gtUG93ZXJlZC1CeScsXG4gICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgJ1gtWFNTLVByb3RlY3Rpb24nXG5dXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgd2VsbGtub3duSGVhZGVyTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgY29uc3Qga2V5ID0gd2VsbGtub3duSGVhZGVyTmFtZXNbaV1cbiAgY29uc3QgbG93ZXJDYXNlZEtleSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV0gPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtsb3dlckNhc2VkS2V5XSA9XG4gICAgbG93ZXJDYXNlZEtleVxufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCwgbnVsbClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrRGVzdHJveWVkLCBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKVxuY29uc3QgeyBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5jb25zdCBbbm9kZU1ham9yLCBub2RlTWlub3JdID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJykubWFwKHYgPT4gTnVtYmVyKHYpKVxuXG5mdW5jdGlvbiBub3AgKCkge31cblxuZnVuY3Rpb24gaXNTdHJlYW0gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nXG59XG5cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlLWZldGNoL2ZldGNoLWJsb2IvYmxvYi84YWI1ODdkMzQwODBkZTk0MTQwYjU0ZjA3MTY4NDUxZTdkMGI2NTVlL2luZGV4LmpzI0wyMjktTDI0MSAoTUlUIExpY2Vuc2UpXG5mdW5jdGlvbiBpc0Jsb2JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChCbG9iICYmIG9iamVjdCBpbnN0YW5jZW9mIEJsb2IpIHx8IChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvXihCbG9ifEZpbGUpJC8udGVzdChvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSlcbiAgKVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgIU51bWJlci5pc0Zpbml0ZShwYXJzZUludCh1cmwucG9ydCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBwb3J0IG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGggIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGg6IHRoZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRobmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aG5hbWU6IHRoZSBwYXRobmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwuaG9zdG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIGhvc3RuYW1lOiB0aGUgaG9zdG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwub3JpZ2luICE9IG51bGwgJiYgdHlwZW9mIHVybC5vcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIG9yaWdpbjogdGhlIG9yaWdpbiBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHVybC5wb3J0ICE9IG51bGxcbiAgICAgID8gdXJsLnBvcnRcbiAgICAgIDogKHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MClcbiAgICBsZXQgb3JpZ2luID0gdXJsLm9yaWdpbiAhPSBudWxsXG4gICAgICA/IHVybC5vcmlnaW5cbiAgICAgIDogYCR7dXJsLnByb3RvY29sfS8vJHt1cmwuaG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgbGV0IHBhdGggPSB1cmwucGF0aCAhPSBudWxsXG4gICAgICA/IHVybC5wYXRoXG4gICAgICA6IGAke3VybC5wYXRobmFtZSB8fCAnJ30ke3VybC5zZWFyY2ggfHwgJyd9YFxuXG4gICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBvcmlnaW4gPSBvcmlnaW4uc3Vic3RyaW5nKDAsIG9yaWdpbi5sZW5ndGggLSAxKVxuICAgIH1cblxuICAgIGlmIChwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICB9XG4gICAgLy8gbmV3IFVSTChwYXRoLCBvcmlnaW4pIGlzIHVuc2FmZSB3aGVuIGBwYXRoYCBjb250YWlucyBhbiBhYnNvbHV0ZSBVUkxcbiAgICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvVVJMOlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJlbGF0aXZlIFVSTCwgc2Vjb25kIHBhcmFtIGlzIHJlcXVpcmVkLCBhbmQgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNlIFVSTC5cbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gYWJzb2x1dGUgVVJMLCBhIGdpdmVuIHNlY29uZCBwYXJhbSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgdXJsID0gbmV3IFVSTChvcmlnaW4gKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZU9yaWdpbiAodXJsKSB7XG4gIHVybCA9IHBhcnNlVVJMKHVybClcblxuICBpZiAodXJsLnBhdGhuYW1lICE9PSAnLycgfHwgdXJsLnNlYXJjaCB8fCB1cmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBnZXRIb3N0bmFtZSAoaG9zdCkge1xuICBpZiAoaG9zdFswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIHJldHVybiBob3N0LnN1YnN0cmluZygxLCBpZHgpXG4gIH1cblxuICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJzonKVxuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGhvc3RcblxuICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMCwgaWR4KVxufVxuXG4vLyBJUCBhZGRyZXNzZXMgYXJlIG5vdCB2YWxpZCBzZXJ2ZXIgbmFtZXMgcGVyIFJGQzYwNjZcbi8vID4gQ3VycmVudGx5LCB0aGUgb25seSBzZXJ2ZXIgbmFtZXMgc3VwcG9ydGVkIGFyZSBETlMgaG9zdG5hbWVzXG5mdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lIChob3N0KSB7XG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGhvc3QsICdzdHJpbmcnKVxuXG4gIGNvbnN0IHNlcnZlcm5hbWUgPSBnZXRIb3N0bmFtZShob3N0KVxuICBpZiAobmV0LmlzSVAoc2VydmVybmFtZSkpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHJldHVybiBzZXJ2ZXJuYW1lXG59XG5cbmZ1bmN0aW9uIGRlZXBDbG9uZSAob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJylcbn1cblxuZnVuY3Rpb24gaXNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiAodHlwZW9mIG9ialtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSlcbn1cblxuZnVuY3Rpb24gYm9keUxlbmd0aCAoYm9keSkge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDBcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgIGNvbnN0IHN0YXRlID0gYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5vYmplY3RNb2RlID09PSBmYWxzZSAmJiBzdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhdGUubGVuZ3RoKVxuICAgICAgPyBzdGF0ZS5sZW5ndGhcbiAgICAgIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplICE9IG51bGwgPyBib2R5LnNpemUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0Rlc3Ryb3llZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhc3RyZWFtIHx8ICEhKHN0cmVhbS5kZXN0cm95ZWQgfHwgc3RyZWFtW2tEZXN0cm95ZWRdKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlQWJvcnRlZCAoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gaXNEZXN0cm95ZWQoc3RyZWFtKSAmJiBzdGF0ZSAmJiAhc3RhdGUuZW5kRW1pdHRlZFxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKChzdHJlYW0sIGVycikgPT4ge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIH0sIHN0cmVhbSwgZXJyKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5kZXN0cm95ZWQgIT09IHRydWUpIHtcbiAgICBzdHJlYW1ba0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cblxuY29uc3QgS0VFUEFMSVZFX1RJTUVPVVRfRVhQUiA9IC90aW1lb3V0PShcXGQrKS9cbmZ1bmN0aW9uIHBhcnNlS2VlcEFsaXZlVGltZW91dCAodmFsKSB7XG4gIGNvbnN0IG0gPSB2YWwudG9TdHJpbmcoKS5tYXRjaChLRUVQQUxJVkVfVElNRU9VVF9FWFBSKVxuICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0sIDEwKSAqIDEwMDAgOiBudWxsXG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgaGVhZGVyIG5hbWUgYW5kIHJldHVybnMgaXRzIGxvd2VyY2FzZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSB2YWx1ZSBIZWFkZXIgbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaGVhZGVyTmFtZVRvU3RyaW5nICh2YWx1ZSkge1xuICByZXR1cm4gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbdmFsdWVdIHx8IHZhbHVlLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzIChoZWFkZXJzLCBvYmogPSB7fSkge1xuICAvLyBGb3IgSDIgc3VwcG9ydFxuICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVycykpIHJldHVybiBoZWFkZXJzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICBsZXQgdmFsID0gb2JqW2tleV1cblxuICAgIGlmICghdmFsKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzW2kgKyAxXSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFsID0gW3ZhbF1cbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICAgIHZhbC5wdXNoKGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JykpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmICgnY29udGVudC1sZW5ndGgnIGluIG9iaiAmJiAnY29udGVudC1kaXNwb3NpdGlvbicgaW4gb2JqKSB7XG4gICAgb2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gPSBCdWZmZXIuZnJvbShvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmF3SGVhZGVycyAoaGVhZGVycykge1xuICBjb25zdCByZXQgPSBbXVxuICBsZXQgaGFzQ29udGVudExlbmd0aCA9IGZhbHNlXG4gIGxldCBjb250ZW50RGlzcG9zaXRpb25JZHggPSAtMVxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdLnRvU3RyaW5nKClcbiAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXS50b1N0cmluZygndXRmOCcpXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgKGtleSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgICAgaGFzQ29udGVudExlbmd0aCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE5ICYmIChrZXkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nKSkge1xuICAgICAgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gcmV0LnB1c2goa2V5LCB2YWwpIC0gMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Rpc3R1cmJlZFxuICAgICAgPyBzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdIC8vIFRPRE8gKGZpeCk6IFdoeSBpcyBib2R5W2tCb2R5VXNlZF0gbmVlZGVkP1xuICAgICAgOiBib2R5W2tCb2R5VXNlZF0gfHxcbiAgICAgICAgYm9keS5yZWFkYWJsZURpZFJlYWQgfHxcbiAgICAgICAgKGJvZHkuX3JlYWRhYmxlU3RhdGUgJiYgYm9keS5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCkgfHxcbiAgICAgICAgaXNSZWFkYWJsZUFib3J0ZWQoYm9keSlcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNFcnJvcmVkXG4gICAgICA/IHN0cmVhbS5pc0Vycm9yZWQoYm9keSlcbiAgICAgIDogL3N0YXRlOiAnZXJyb3JlZCcvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc1JlYWRhYmxlXG4gICAgICA/IHN0cmVhbS5pc1JlYWRhYmxlKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ3JlYWRhYmxlJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gZ2V0U29ja2V0SW5mbyAoc29ja2V0KSB7XG4gIHJldHVybiB7XG4gICAgbG9jYWxBZGRyZXNzOiBzb2NrZXQubG9jYWxBZGRyZXNzLFxuICAgIGxvY2FsUG9ydDogc29ja2V0LmxvY2FsUG9ydCxcbiAgICByZW1vdGVBZGRyZXNzOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICByZW1vdGVQb3J0OiBzb2NrZXQucmVtb3RlUG9ydCxcbiAgICByZW1vdGVGYW1pbHk6IHNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgdGltZW91dDogc29ja2V0LnRpbWVvdXQsXG4gICAgYnl0ZXNXcml0dGVuOiBzb2NrZXQuYnl0ZXNXcml0dGVuLFxuICAgIGJ5dGVzUmVhZDogc29ja2V0LmJ5dGVzUmVhZFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29udmVydEl0ZXJhYmxlVG9CdWZmZXIgKGl0ZXJhYmxlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCBCdWZmZXIuaXNCdWZmZXIoY2h1bmspID8gY2h1bmsgOiBCdWZmZXIuZnJvbShjaHVuaylcbiAgfVxufVxuXG5sZXQgUmVhZGFibGVTdHJlYW1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnJvbSAoaXRlcmFibGUpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBpZiAoUmVhZGFibGVTdHJlYW0uZnJvbSkge1xuICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbS5mcm9tKGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyKGl0ZXJhYmxlKSlcbiAgfVxuXG4gIGxldCBpdGVyYXRvclxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidWYgPSBCdWZmZXIuaXNCdWZmZXIodmFsdWUpID8gdmFsdWUgOiBCdWZmZXIuZnJvbSh2YWx1ZSlcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfVxuICAgIH0sXG4gICAgMFxuICApXG59XG5cbi8vIFRoZSBjaHVuayBzaG91bGQgYmUgYSBGb3JtRGF0YSBpbnN0YW5jZSBhbmQgY29udGFpbnNcbi8vIGFsbCB0aGUgcmVxdWlyZWQgbWV0aG9kcy5cbmZ1bmN0aW9uIGlzRm9ybURhdGFMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QuYXBwZW5kID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5kZWxldGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0QWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5oYXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LnNldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnXG4gIClcbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHNpZ25hbCkge1xuICBpZiAoIXNpZ25hbCkgeyByZXR1cm4gfVxuICBpZiAodHlwZW9mIHNpZ25hbC50aHJvd0lmQWJvcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpXG4gIH0gZWxzZSB7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAvLyBET01FeGNlcHRpb24gbm90IGF2YWlsYWJsZSA8IHYxNy4wLjBcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpXG4gICAgICBlcnIubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gISFTdHJpbmcucHJvdG90eXBlLnRvV2VsbEZvcm1lZFxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuZnVuY3Rpb24gdG9VU1ZTdHJpbmcgKHZhbCkge1xuICBpZiAoaGFzVG9XZWxsRm9ybWVkKSB7XG4gICAgcmV0dXJuIGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpXG4gIH0gZWxzZSBpZiAobm9kZVV0aWwudG9VU1ZTdHJpbmcpIHtcbiAgICByZXR1cm4gbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxuICB9XG5cbiAgcmV0dXJuIGAke3ZhbH1gXG59XG5cbi8vIFBhcnNlZCBhY2NvcmRpbmdseSB0byBSRkMgOTExMFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAjZmllbGQuY29udGVudC1yYW5nZVxuZnVuY3Rpb24gcGFyc2VSYW5nZUhlYWRlciAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlID09IG51bGwgfHwgcmFuZ2UgPT09ICcnKSByZXR1cm4geyBzdGFydDogMCwgZW5kOiBudWxsLCBzaXplOiBudWxsIH1cblxuICBjb25zdCBtID0gcmFuZ2UgPyByYW5nZS5tYXRjaCgvXmJ5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKyk/JC8pIDogbnVsbFxuICByZXR1cm4gbVxuICAgID8ge1xuICAgICAgICBzdGFydDogcGFyc2VJbnQobVsxXSksXG4gICAgICAgIGVuZDogbVsyXSA/IHBhcnNlSW50KG1bMl0pIDogbnVsbCxcbiAgICAgICAgc2l6ZTogbVszXSA/IHBhcnNlSW50KG1bM10pIDogbnVsbFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuXG5jb25zdCBrRW51bWVyYWJsZVByb3BlcnR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxua0VudW1lcmFibGVQcm9wZXJ0eS5lbnVtZXJhYmxlID0gdHJ1ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNSZWFkYWJsZUFib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgcGFyc2VSYXdIZWFkZXJzLFxuICBwYXJzZUhlYWRlcnMsXG4gIHBhcnNlS2VlcEFsaXZlVGltZW91dCxcbiAgZGVzdHJveSxcbiAgYm9keUxlbmd0aCxcbiAgZGVlcENsb25lLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQnVmZmVyLFxuICB2YWxpZGF0ZUhhbmRsZXIsXG4gIGdldFNvY2tldEluZm8sXG4gIGlzRm9ybURhdGFMaWtlLFxuICBidWlsZFVSTCxcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIGFkZEFib3J0TGlzdGVuZXIsXG4gIHBhcnNlUmFuZ2VIZWFkZXIsXG4gIG5vZGVNYWpvcixcbiAgbm9kZU1pbm9yLFxuICBub2RlSGFzQXV0b1NlbGVjdEZhbWlseTogbm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDEzKSxcbiAgc2FmZUhUVFBNZXRob2RzOiBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQ29weXJpZ2h0IEJyaWFuIFdoaXRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21zY2RleC9zdHJlYW1zZWFyY2hcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuICogSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAqIEJhc2VkIGhlYXZpbHkgb24gdGhlIFN0cmVhbWluZyBCb3llci1Nb29yZS1Ib3JzcG9vbCBDKysgaW1wbGVtZW50YXRpb25cbiAqIGJ5IEhvbmdsaSBMYWkgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb29CYXJXaWRnZXQvYm95ZXItbW9vcmUtaG9yc3Bvb2xcbiAqL1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuZnVuY3Rpb24gU0JNSCAobmVlZGxlKSB7XG4gIGlmICh0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJykge1xuICAgIG5lZWRsZSA9IEJ1ZmZlci5mcm9tKG5lZWRsZSlcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKG5lZWRsZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbmVlZGxlIGhhcyB0byBiZSBhIFN0cmluZyBvciBhIEJ1ZmZlci4nKVxuICB9XG5cbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuXG4gIGlmIChuZWVkbGVMZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGJlIGFuIGVtcHR5IFN0cmluZy9CdWZmZXIuJylcbiAgfVxuXG4gIGlmIChuZWVkbGVMZW5ndGggPiAyNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGhhdmUgYSBsZW5ndGggYmlnZ2VyIHRoYW4gMjU2LicpXG4gIH1cblxuICB0aGlzLm1heE1hdGNoZXMgPSBJbmZpbml0eVxuICB0aGlzLm1hdGNoZXMgPSAwXG5cbiAgdGhpcy5fb2NjID0gbmV3IEFycmF5KDI1NilcbiAgICAuZmlsbChuZWVkbGVMZW5ndGgpIC8vIEluaXRpYWxpemUgb2NjdXJyZW5jZSB0YWJsZS5cbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLl9uZWVkbGUgPSBuZWVkbGVcbiAgdGhpcy5fYnVmcG9zID0gMFxuXG4gIHRoaXMuX2xvb2tiZWhpbmQgPSBCdWZmZXIuYWxsb2MobmVlZGxlTGVuZ3RoKVxuXG4gIC8vIFBvcHVsYXRlIG9jY3VycmVuY2UgdGFibGUgd2l0aCBhbmFseXNpcyBvZiB0aGUgbmVlZGxlLFxuICAvLyBpZ25vcmluZyBsYXN0IGxldHRlci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWVkbGVMZW5ndGggLSAxOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICB0aGlzLl9vY2NbbmVlZGxlW2ldXSA9IG5lZWRsZUxlbmd0aCAtIDEgLSBpXG4gIH1cbn1cbmluaGVyaXRzKFNCTUgsIEV2ZW50RW1pdHRlcilcblxuU0JNSC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5tYXRjaGVzID0gMFxuICB0aGlzLl9idWZwb3MgPSAwXG59XG5cblNCTUgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIHBvcykge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCAnYmluYXJ5JylcbiAgfVxuICBjb25zdCBjaGxlbiA9IGNodW5rLmxlbmd0aFxuICB0aGlzLl9idWZwb3MgPSBwb3MgfHwgMFxuICBsZXQgclxuICB3aGlsZSAociAhPT0gY2hsZW4gJiYgdGhpcy5tYXRjaGVzIDwgdGhpcy5tYXhNYXRjaGVzKSB7IHIgPSB0aGlzLl9zYm1oX2ZlZWQoY2h1bmspIH1cbiAgcmV0dXJuIHJcbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfZmVlZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG4gIGNvbnN0IG5lZWRsZSA9IHRoaXMuX25lZWRsZVxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG4gIGNvbnN0IGxhc3ROZWVkbGVDaGFyID0gbmVlZGxlW25lZWRsZUxlbmd0aCAtIDFdXG5cbiAgLy8gUG9zaXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIGBkYXRhYFxuICAvLyAgICAgICAgICAgcG9zID09IDMgcG9pbnRzIHRvIGRhdGFbM11cbiAgLy8gTmVnYXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIHRoZSBsb29rYmVoaW5kIGJ1ZmZlclxuICAvLyAgICAgICAgICAgcG9zID09IC0yIHBvaW50cyB0byBsb29rYmVoaW5kW2xvb2tiZWhpbmRfc2l6ZSAtIDJdXG4gIGxldCBwb3MgPSAtdGhpcy5fbG9va2JlaGluZF9zaXplXG4gIGxldCBjaFxuXG4gIGlmIChwb3MgPCAwKSB7XG4gICAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm90IGVtcHR5LiBQZXJmb3JtIEJveWVyLU1vb3JlLUhvcnNwb29sXG4gICAgLy8gc2VhcmNoIHdpdGggY2hhcmFjdGVyIGxvb2t1cCBjb2RlIHRoYXQgY29uc2lkZXJzIGJvdGggdGhlXG4gICAgLy8gbG9va2JlaGluZCBidWZmZXIgYW5kIHRoZSBjdXJyZW50IHJvdW5kJ3MgaGF5c3RhY2sgZGF0YS5cbiAgICAvL1xuICAgIC8vIExvb3AgdW50aWxcbiAgICAvLyAgIHRoZXJlIGlzIGEgbWF0Y2guXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHdlJ3ZlIG1vdmVkIHBhc3QgdGhlIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgdGhlXG4gICAgLy8gICBsb29rYmVoaW5kIGJ1ZmZlci4gSW4gdGhpcyBjYXNlIHdlIHN3aXRjaCB0byB0aGVcbiAgICAvLyAgIG9wdGltaXplZCBsb29wLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB0aGUgY2hhcmFjdGVyIHRvIGxvb2sgYXQgbGllcyBvdXRzaWRlIHRoZSBoYXlzdGFjay5cbiAgICB3aGlsZSAocG9zIDwgMCAmJiBwb3MgPD0gbGVuIC0gbmVlZGxlTGVuZ3RoKSB7XG4gICAgICBjaCA9IHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgbmVlZGxlTGVuZ3RoIC0gMSlcblxuICAgICAgaWYgKFxuICAgICAgICBjaCA9PT0gbGFzdE5lZWRsZUNoYXIgJiZcbiAgICAgICAgdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBuZWVkbGVMZW5ndGggLSAxKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICAgICAgKyt0aGlzLm1hdGNoZXNcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSlcblxuICAgICAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIHBvcyArPSB0aGlzLl9vY2NbY2hdXG4gICAgfVxuXG4gICAgLy8gTm8gbWF0Y2guXG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgLy8gVGhlcmUncyB0b28gZmV3IGRhdGEgZm9yIEJveWVyLU1vb3JlLUhvcnNwb29sIHRvIHJ1bixcbiAgICAgIC8vIHNvIGxldCdzIHVzZSBhIGRpZmZlcmVudCBhbGdvcml0aG0gdG8gc2tpcCBhcyBtdWNoIGFzXG4gICAgICAvLyB3ZSBjYW4uXG4gICAgICAvLyBGb3J3YXJkIHBvcyB1bnRpbFxuICAgICAgLy8gICB0aGUgdHJhaWxpbmcgcGFydCBvZiBsb29rYmVoaW5kICsgZGF0YVxuICAgICAgLy8gICBsb29rcyBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5lZWRsZVxuICAgICAgLy8gb3IgdW50aWxcbiAgICAgIC8vICAgcG9zID09IDBcbiAgICAgIHdoaWxlIChwb3MgPCAwICYmICF0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIGxlbiAtIHBvcykpIHsgKytwb3MgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gRGlzY2FyZCBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1dCBvZmYgcGFydCBvZiB0aGUgbG9va2JlaGluZCBidWZmZXIgdGhhdCBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmQgdGhlIGVudGlyZSBoYXlzdGFja1xuICAgICAgLy8gaW50byBpdC5cbiAgICAgIGNvbnN0IGJ5dGVzVG9DdXRPZmYgPSB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NcbiAgICAgIGlmIChieXRlc1RvQ3V0T2ZmID4gMCkge1xuICAgICAgICAvLyBUaGUgY3V0IG9mZiBkYXRhIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvb2tiZWhpbmQuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmLFxuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLSBieXRlc1RvQ3V0T2ZmKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC09IGJ5dGVzVG9DdXRPZmZcblxuICAgICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArPSBsZW5cblxuICAgICAgdGhpcy5fYnVmcG9zID0gbGVuXG4gICAgICByZXR1cm4gbGVuXG4gICAgfVxuICB9XG5cbiAgcG9zICs9IChwb3MgPj0gMCkgKiB0aGlzLl9idWZwb3NcblxuICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3cgZW1wdHkuIFdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGVcbiAgLy8gbmVlZGxlIGlzIGluIHRoZSBoYXlzdGFjay5cbiAgaWYgKGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcykgIT09IC0xKSB7XG4gICAgcG9zID0gZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKVxuICAgICsrdGhpcy5tYXRjaGVzXG4gICAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MpIH0gZWxzZSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUpIH1cblxuICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIHBvcyA9IGxlbiAtIG5lZWRsZUxlbmd0aFxuICB9XG5cbiAgLy8gVGhlcmUgd2FzIG5vIG1hdGNoLiBJZiB0aGVyZSdzIHRyYWlsaW5nIGhheXN0YWNrIGRhdGEgdGhhdCB3ZSBjYW5ub3RcbiAgLy8gbWF0Y2ggeWV0IHVzaW5nIHRoZSBCb3llci1Nb29yZS1Ib3JzcG9vbCBhbGdvcml0aG0gKGJlY2F1c2UgdGhlIHRyYWlsaW5nXG4gIC8vIGRhdGEgaXMgbGVzcyB0aGFuIHRoZSBuZWVkbGUgc2l6ZSkgdGhlbiBtYXRjaCB1c2luZyBhIG1vZGlmaWVkXG4gIC8vIGFsZ29yaXRobSB0aGF0IHN0YXJ0cyBtYXRjaGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiB0aGUgZW5kLlxuICAvLyBXaGF0ZXZlciB0cmFpbGluZyBkYXRhIGlzIGxlZnQgYWZ0ZXIgcnVubmluZyB0aGlzIGFsZ29yaXRobSBpcyBhZGRlZCB0b1xuICAvLyB0aGUgbG9va2JlaGluZCBidWZmZXIuXG4gIHdoaWxlIChcbiAgICBwb3MgPCBsZW4gJiZcbiAgICAoXG4gICAgICBkYXRhW3Bvc10gIT09IG5lZWRsZVswXSB8fFxuICAgICAgKFxuICAgICAgICAoQnVmZmVyLmNvbXBhcmUoXG4gICAgICAgICAgZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIGxlbiAtIHBvcyksXG4gICAgICAgICAgbmVlZGxlLnN1YmFycmF5KDAsIGxlbiAtIHBvcylcbiAgICAgICAgKSAhPT0gMClcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgICsrcG9zXG4gIH1cbiAgaWYgKHBvcyA8IGxlbikge1xuICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBwb3MsIHBvcyArIChsZW4gLSBwb3MpKVxuICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IGxlbiAtIHBvc1xuICB9XG5cbiAgLy8gRXZlcnl0aGluZyB1bnRpbCBwb3MgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBuZWVkbGUgZGF0YS5cbiAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zIDwgbGVuID8gcG9zIDogbGVuKSB9XG5cbiAgdGhpcy5fYnVmcG9zID0gbGVuXG4gIHJldHVybiBsZW5cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbG9va3VwX2NoYXIgPSBmdW5jdGlvbiAoZGF0YSwgcG9zKSB7XG4gIHJldHVybiAocG9zIDwgMClcbiAgICA/IHRoaXMuX2xvb2tiZWhpbmRbdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXVxuICAgIDogZGF0YVtwb3NdXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX21lbWNtcCA9IGZ1bmN0aW9uIChkYXRhLCBwb3MsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgaSkgIT09IHRoaXMuX25lZWRsZVtpXSkgeyByZXR1cm4gZmFsc2UgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0JNSFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuUmVhZGFibGVcblxuZnVuY3Rpb24gUGFydFN0cmVhbSAob3B0cykge1xuICBSZWFkYWJsZVN0cmVhbS5jYWxsKHRoaXMsIG9wdHMpXG59XG5pbmhlcml0cyhQYXJ0U3RyZWFtLCBSZWFkYWJsZVN0cmVhbSlcblxuUGFydFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge31cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0U3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IEJfRENSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuXFxyXFxuJylcbmNvbnN0IFJFX0NSTEYgPSAvXFxyXFxuL2dcbmNvbnN0IFJFX0hEUiA9IC9eKFteOl0rKTpbIFxcdF0/KFtcXHgwMC1cXHhGRl0rKT8kLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuZnVuY3Rpb24gSGVhZGVyUGFyc2VyIChjZmcpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcylcblxuICBjZmcgPSBjZmcgfHwge31cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5ucmVhZCA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heEhlYWRlclBhaXJzID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyUGFpcnMnLCAyMDAwKVxuICB0aGlzLm1heEhlYWRlclNpemUgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJTaXplJywgODAgKiAxMDI0KVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuc3MgPSBuZXcgU3RyZWFtU2VhcmNoKEJfRENSTEYpXG4gIHRoaXMuc3Mub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGlmIChkYXRhICYmICFzZWxmLm1heGVkKSB7XG4gICAgICBpZiAoc2VsZi5ucmVhZCArIGVuZCAtIHN0YXJ0ID49IHNlbGYubWF4SGVhZGVyU2l6ZSkge1xuICAgICAgICBlbmQgPSBzZWxmLm1heEhlYWRlclNpemUgLSBzZWxmLm5yZWFkICsgc3RhcnRcbiAgICAgICAgc2VsZi5ucmVhZCA9IHNlbGYubWF4SGVhZGVyU2l6ZVxuICAgICAgICBzZWxmLm1heGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHsgc2VsZi5ucmVhZCArPSAoZW5kIC0gc3RhcnQpIH1cblxuICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5Jywgc3RhcnQsIGVuZClcbiAgICB9XG4gICAgaWYgKGlzTWF0Y2gpIHsgc2VsZi5fZmluaXNoKCkgfVxuICB9KVxufVxuaW5oZXJpdHMoSGVhZGVyUGFyc2VyLCBFdmVudEVtaXR0ZXIpXG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnNzLnB1c2goZGF0YSlcbiAgaWYgKHRoaXMuZmluaXNoZWQpIHsgcmV0dXJuIHIgfVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuc3MucmVzZXQoKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJ1ZmZlcikgeyB0aGlzLl9wYXJzZUhlYWRlcigpIH1cbiAgdGhpcy5zcy5tYXRjaGVzID0gdGhpcy5zcy5tYXhNYXRjaGVzXG4gIGNvbnN0IGhlYWRlciA9IHRoaXMuaGVhZGVyXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmZpbmlzaGVkID0gdHJ1ZVxuICB0aGlzLm5yZWFkID0gdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fcGFyc2VIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGxpbmVzID0gdGhpcy5idWZmZXIuc3BsaXQoUkVfQ1JMRilcbiAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoXG4gIGxldCBtLCBoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPT09IDApIHsgY29udGludWUgfVxuICAgIGlmIChsaW5lc1tpXVswXSA9PT0gJ1xcdCcgfHwgbGluZXNbaV1bMF0gPT09ICcgJykge1xuICAgICAgLy8gZm9sZGVkIGhlYWRlciBjb250ZW50XG4gICAgICAvLyBSRkMyODIyIHNheXMgdG8ganVzdCByZW1vdmUgdGhlIENSTEYgYW5kIG5vdCB0aGUgd2hpdGVzcGFjZSBmb2xsb3dpbmdcbiAgICAgIC8vIGl0LCBzbyB3ZSBmb2xsb3cgdGhlIFJGQyBhbmQgaW5jbHVkZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIC4uLlxuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJbaF1bdGhpcy5oZWFkZXJbaF0ubGVuZ3RoIC0gMV0gKz0gbGluZXNbaV1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwb3NDb2xvbiA9IGxpbmVzW2ldLmluZGV4T2YoJzonKVxuICAgIGlmIChcbiAgICAgIHBvc0NvbG9uID09PSAtMSB8fFxuICAgICAgcG9zQ29sb24gPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBtID0gUkVfSERSLmV4ZWMobGluZXNbaV0pXG4gICAgaCA9IG1bMV0udG9Mb3dlckNhc2UoKVxuICAgIHRoaXMuaGVhZGVyW2hdID0gdGhpcy5oZWFkZXJbaF0gfHwgW11cbiAgICB0aGlzLmhlYWRlcltoXS5wdXNoKChtWzJdIHx8ICcnKSlcbiAgICBpZiAoKyt0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyBicmVhayB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIZWFkZXJQYXJzZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgUGFydFN0cmVhbSA9IHJlcXVpcmUoJy4vUGFydFN0cmVhbScpXG5jb25zdCBIZWFkZXJQYXJzZXIgPSByZXF1aXJlKCcuL0hlYWRlclBhcnNlcicpXG5cbmNvbnN0IERBU0ggPSA0NVxuY29uc3QgQl9PTkVEQVNIID0gQnVmZmVyLmZyb20oJy0nKVxuY29uc3QgQl9DUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcbicpXG5jb25zdCBFTVBUWV9GTiA9IGZ1bmN0aW9uICgpIHt9XG5cbmZ1bmN0aW9uIERpY2VyIChjZmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERpY2VyKSkgeyByZXR1cm4gbmV3IERpY2VyKGNmZykgfVxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIGNmZylcblxuICBpZiAoIWNmZyB8fCAoIWNmZy5oZWFkZXJGaXJzdCAmJiB0eXBlb2YgY2ZnLmJvdW5kYXJ5ICE9PSAnc3RyaW5nJykpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQm91bmRhcnkgcmVxdWlyZWQnKSB9XG5cbiAgaWYgKHR5cGVvZiBjZmcuYm91bmRhcnkgPT09ICdzdHJpbmcnKSB7IHRoaXMuc2V0Qm91bmRhcnkoY2ZnLmJvdW5kYXJ5KSB9IGVsc2UgeyB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkIH1cblxuICB0aGlzLl9oZWFkZXJGaXJzdCA9IGNmZy5oZWFkZXJGaXJzdFxuXG4gIHRoaXMuX2Rhc2hlcyA9IDBcbiAgdGhpcy5fcGFydHMgPSAwXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gIHRoaXMuX2lzUHJlYW1ibGUgPSB0cnVlXG4gIHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2VcbiAgdGhpcy5fZmlyc3RXcml0ZSA9IHRydWVcbiAgdGhpcy5faW5IZWFkZXIgPSB0cnVlXG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gIHRoaXMuX3BhcnRPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcucGFydEh3bSB9XG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcblxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9ocGFyc2VyID0gbmV3IEhlYWRlclBhcnNlcihjZmcpXG4gIHRoaXMuX2hwYXJzZXIub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICBzZWxmLl9pbkhlYWRlciA9IGZhbHNlXG4gICAgc2VsZi5fcGFydC5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG4gIH0pXG59XG5pbmhlcml0cyhEaWNlciwgV3JpdGFibGVTdHJlYW0pXG5cbkRpY2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldiA9PT0gJ2ZpbmlzaCcgJiYgIXRoaXMuX3JlYWxGaW5pc2gpIHtcbiAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgIGlmIChzZWxmLl9wYXJ0ICYmICFzZWxmLl9pZ25vcmVEYXRhKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IChzZWxmLl9pc1ByZWFtYmxlID8gJ1ByZWFtYmxlJyA6ICdQYXJ0JylcbiAgICAgICAgICBzZWxmLl9wYXJ0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKHR5cGUgKyAnIHRlcm1pbmF0ZWQgZWFybHkgZHVlIHRvIHVuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgICAgc2VsZi5fcGFydC5wdXNoKG51bGwpXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0gZWxzZSB7IFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICAvLyBpZ25vcmUgdW5leHBlY3RlZCBkYXRhIChlLmcuIGV4dHJhIHRyYWlsZXIgZGF0YSBhZnRlciBmaW5pc2hlZClcbiAgaWYgKCF0aGlzLl9ocGFyc2VyICYmICF0aGlzLl9icGFyc2VyKSB7IHJldHVybiBjYigpIH1cblxuICBpZiAodGhpcy5faGVhZGVyRmlyc3QgJiYgdGhpcy5faXNQcmVhbWJsZSkge1xuICAgIGlmICghdGhpcy5fcGFydCkge1xuICAgICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydCkgfSBlbHNlIHsgdGhpcy5faWdub3JlKCkgfVxuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEpXG4gICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGRhdGEubGVuZ3RoKSB7IGRhdGEgPSBkYXRhLnNsaWNlKHIpIH0gZWxzZSB7IHJldHVybiBjYigpIH1cbiAgfVxuXG4gIC8vIGFsbG93cyBmb3IgXCJlYXNpZXJcIiB0ZXN0aW5nXG4gIGlmICh0aGlzLl9maXJzdFdyaXRlKSB7XG4gICAgdGhpcy5fYnBhcnNlci5wdXNoKEJfQ1JMRilcbiAgICB0aGlzLl9maXJzdFdyaXRlID0gZmFsc2VcbiAgfVxuXG4gIHRoaXMuX2JwYXJzZXIucHVzaChkYXRhKVxuXG4gIGlmICh0aGlzLl9wYXVzZSkgeyB0aGlzLl9jYiA9IGNiIH0gZWxzZSB7IGNiKCkgfVxufVxuXG5EaWNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZFxuICB0aGlzLl9ocGFyc2VyID0gdW5kZWZpbmVkXG59XG5cbkRpY2VyLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIChib3VuZGFyeSkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9icGFyc2VyID0gbmV3IFN0cmVhbVNlYXJjaCgnXFxyXFxuLS0nICsgYm91bmRhcnkpXG4gIHRoaXMuX2JwYXJzZXIub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHNlbGYuX29uaW5mbyhpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKVxuICB9KVxufVxuXG5EaWNlci5wcm90b3R5cGUuX2lnbm9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3BhcnQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gdHJ1ZVxuICAgIHRoaXMuX3BhcnQub24oJ2Vycm9yJywgRU1QVFlfRk4pXG4gICAgLy8gd2UgbXVzdCBwZXJmb3JtIHNvbWUga2luZCBvZiByZWFkIG9uIHRoZSBzdHJlYW0gZXZlbiB0aG91Z2ggd2UgYXJlXG4gICAgLy8gaWdub3JpbmcgdGhlIGRhdGEsIG90aGVyd2lzZSBub2RlJ3MgUmVhZGFibGUgc3RyZWFtIHdpbGwgbm90IGVtaXQgJ2VuZCdcbiAgICAvLyBhZnRlciBwdXNoaW5nIG51bGwgdG8gdGhlIHN0cmVhbVxuICAgIHRoaXMuX3BhcnQucmVzdW1lKClcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX29uaW5mbyA9IGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gIGxldCBidWY7IGNvbnN0IHNlbGYgPSB0aGlzOyBsZXQgaSA9IDA7IGxldCByOyBsZXQgc2hvdWxkV3JpdGVNb3JlID0gdHJ1ZVxuXG4gIGlmICghdGhpcy5fcGFydCAmJiB0aGlzLl9qdXN0TWF0Y2hlZCAmJiBkYXRhKSB7XG4gICAgd2hpbGUgKHRoaXMuX2Rhc2hlcyA8IDIgJiYgKHN0YXJ0ICsgaSkgPCBlbmQpIHtcbiAgICAgIGlmIChkYXRhW3N0YXJ0ICsgaV0gPT09IERBU0gpIHtcbiAgICAgICAgKytpXG4gICAgICAgICsrdGhpcy5fZGFzaGVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fZGFzaGVzKSB7IGJ1ZiA9IEJfT05FREFTSCB9XG4gICAgICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcyA9PT0gMikge1xuICAgICAgaWYgKChzdGFydCArIGkpIDwgZW5kICYmIHRoaXMubGlzdGVuZXJDb3VudCgndHJhaWxlcicpICE9PSAwKSB7IHRoaXMuZW1pdCgndHJhaWxlcicsIGRhdGEuc2xpY2Uoc3RhcnQgKyBpLCBlbmQpKSB9XG4gICAgICB0aGlzLnJlc2V0KClcbiAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICAgICAgLy8gbm8gbW9yZSBwYXJ0cyB3aWxsIGJlIGFkZGVkXG4gICAgICBpZiAoc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcykgeyByZXR1cm4gfVxuICB9XG4gIGlmICh0aGlzLl9qdXN0TWF0Y2hlZCkgeyB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlIH1cbiAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgIHRoaXMuX3BhcnQuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc1ByZWFtYmxlICE9PSB0cnVlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncGFydCcpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3BhcnQnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pZ25vcmUoKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faW5IZWFkZXIgPSB0cnVlIH1cbiAgfVxuICBpZiAoZGF0YSAmJiBzdGFydCA8IGVuZCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlIHx8ICF0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goYnVmKSB9XG4gICAgICBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghc2hvdWxkV3JpdGVNb3JlKSB7IHRoaXMuX3BhdXNlID0gdHJ1ZSB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyB0aGlzLl9ocGFyc2VyLnB1c2goYnVmKSB9XG4gICAgICByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZW5kKSB7IHRoaXMuX29uaW5mbyhmYWxzZSwgZGF0YSwgc3RhcnQgKyByLCBlbmQpIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzTWF0Y2gpIHtcbiAgICB0aGlzLl9ocGFyc2VyLnJlc2V0KClcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pc1ByZWFtYmxlID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydCAhPT0gZW5kKSB7XG4gICAgICAgICsrdGhpcy5fcGFydHNcbiAgICAgICAgdGhpcy5fcGFydC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICgtLXNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fZmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcGFydC5wdXNoKG51bGwpXG4gICAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICAgIHRoaXMuX2p1c3RNYXRjaGVkID0gdHJ1ZVxuICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3VucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fcGF1c2UpIHsgcmV0dXJuIH1cblxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIGlmICh0aGlzLl9jYikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2JcbiAgICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpY2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3QtcHJvcGVydHktbmV3bGluZSAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuL2RlY29kZVRleHQnKVxuXG5jb25zdCBSRV9FTkNPREVEID0gLyVbYS1mQS1GMC05XVthLWZBLUYwLTldL2dcblxuY29uc3QgRW5jb2RlZExvb2t1cCA9IHtcbiAgJyUwMCc6ICdcXHgwMCcsICclMDEnOiAnXFx4MDEnLCAnJTAyJzogJ1xceDAyJywgJyUwMyc6ICdcXHgwMycsICclMDQnOiAnXFx4MDQnLFxuICAnJTA1JzogJ1xceDA1JywgJyUwNic6ICdcXHgwNicsICclMDcnOiAnXFx4MDcnLCAnJTA4JzogJ1xceDA4JywgJyUwOSc6ICdcXHgwOScsXG4gICclMGEnOiAnXFx4MGEnLCAnJTBBJzogJ1xceDBhJywgJyUwYic6ICdcXHgwYicsICclMEInOiAnXFx4MGInLCAnJTBjJzogJ1xceDBjJyxcbiAgJyUwQyc6ICdcXHgwYycsICclMGQnOiAnXFx4MGQnLCAnJTBEJzogJ1xceDBkJywgJyUwZSc6ICdcXHgwZScsICclMEUnOiAnXFx4MGUnLFxuICAnJTBmJzogJ1xceDBmJywgJyUwRic6ICdcXHgwZicsICclMTAnOiAnXFx4MTAnLCAnJTExJzogJ1xceDExJywgJyUxMic6ICdcXHgxMicsXG4gICclMTMnOiAnXFx4MTMnLCAnJTE0JzogJ1xceDE0JywgJyUxNSc6ICdcXHgxNScsICclMTYnOiAnXFx4MTYnLCAnJTE3JzogJ1xceDE3JyxcbiAgJyUxOCc6ICdcXHgxOCcsICclMTknOiAnXFx4MTknLCAnJTFhJzogJ1xceDFhJywgJyUxQSc6ICdcXHgxYScsICclMWInOiAnXFx4MWInLFxuICAnJTFCJzogJ1xceDFiJywgJyUxYyc6ICdcXHgxYycsICclMUMnOiAnXFx4MWMnLCAnJTFkJzogJ1xceDFkJywgJyUxRCc6ICdcXHgxZCcsXG4gICclMWUnOiAnXFx4MWUnLCAnJTFFJzogJ1xceDFlJywgJyUxZic6ICdcXHgxZicsICclMUYnOiAnXFx4MWYnLCAnJTIwJzogJ1xceDIwJyxcbiAgJyUyMSc6ICdcXHgyMScsICclMjInOiAnXFx4MjInLCAnJTIzJzogJ1xceDIzJywgJyUyNCc6ICdcXHgyNCcsICclMjUnOiAnXFx4MjUnLFxuICAnJTI2JzogJ1xceDI2JywgJyUyNyc6ICdcXHgyNycsICclMjgnOiAnXFx4MjgnLCAnJTI5JzogJ1xceDI5JywgJyUyYSc6ICdcXHgyYScsXG4gICclMkEnOiAnXFx4MmEnLCAnJTJiJzogJ1xceDJiJywgJyUyQic6ICdcXHgyYicsICclMmMnOiAnXFx4MmMnLCAnJTJDJzogJ1xceDJjJyxcbiAgJyUyZCc6ICdcXHgyZCcsICclMkQnOiAnXFx4MmQnLCAnJTJlJzogJ1xceDJlJywgJyUyRSc6ICdcXHgyZScsICclMmYnOiAnXFx4MmYnLFxuICAnJTJGJzogJ1xceDJmJywgJyUzMCc6ICdcXHgzMCcsICclMzEnOiAnXFx4MzEnLCAnJTMyJzogJ1xceDMyJywgJyUzMyc6ICdcXHgzMycsXG4gICclMzQnOiAnXFx4MzQnLCAnJTM1JzogJ1xceDM1JywgJyUzNic6ICdcXHgzNicsICclMzcnOiAnXFx4MzcnLCAnJTM4JzogJ1xceDM4JyxcbiAgJyUzOSc6ICdcXHgzOScsICclM2EnOiAnXFx4M2EnLCAnJTNBJzogJ1xceDNhJywgJyUzYic6ICdcXHgzYicsICclM0InOiAnXFx4M2InLFxuICAnJTNjJzogJ1xceDNjJywgJyUzQyc6ICdcXHgzYycsICclM2QnOiAnXFx4M2QnLCAnJTNEJzogJ1xceDNkJywgJyUzZSc6ICdcXHgzZScsXG4gICclM0UnOiAnXFx4M2UnLCAnJTNmJzogJ1xceDNmJywgJyUzRic6ICdcXHgzZicsICclNDAnOiAnXFx4NDAnLCAnJTQxJzogJ1xceDQxJyxcbiAgJyU0Mic6ICdcXHg0MicsICclNDMnOiAnXFx4NDMnLCAnJTQ0JzogJ1xceDQ0JywgJyU0NSc6ICdcXHg0NScsICclNDYnOiAnXFx4NDYnLFxuICAnJTQ3JzogJ1xceDQ3JywgJyU0OCc6ICdcXHg0OCcsICclNDknOiAnXFx4NDknLCAnJTRhJzogJ1xceDRhJywgJyU0QSc6ICdcXHg0YScsXG4gICclNGInOiAnXFx4NGInLCAnJTRCJzogJ1xceDRiJywgJyU0Yyc6ICdcXHg0YycsICclNEMnOiAnXFx4NGMnLCAnJTRkJzogJ1xceDRkJyxcbiAgJyU0RCc6ICdcXHg0ZCcsICclNGUnOiAnXFx4NGUnLCAnJTRFJzogJ1xceDRlJywgJyU0Zic6ICdcXHg0ZicsICclNEYnOiAnXFx4NGYnLFxuICAnJTUwJzogJ1xceDUwJywgJyU1MSc6ICdcXHg1MScsICclNTInOiAnXFx4NTInLCAnJTUzJzogJ1xceDUzJywgJyU1NCc6ICdcXHg1NCcsXG4gICclNTUnOiAnXFx4NTUnLCAnJTU2JzogJ1xceDU2JywgJyU1Nyc6ICdcXHg1NycsICclNTgnOiAnXFx4NTgnLCAnJTU5JzogJ1xceDU5JyxcbiAgJyU1YSc6ICdcXHg1YScsICclNUEnOiAnXFx4NWEnLCAnJTViJzogJ1xceDViJywgJyU1Qic6ICdcXHg1YicsICclNWMnOiAnXFx4NWMnLFxuICAnJTVDJzogJ1xceDVjJywgJyU1ZCc6ICdcXHg1ZCcsICclNUQnOiAnXFx4NWQnLCAnJTVlJzogJ1xceDVlJywgJyU1RSc6ICdcXHg1ZScsXG4gICclNWYnOiAnXFx4NWYnLCAnJTVGJzogJ1xceDVmJywgJyU2MCc6ICdcXHg2MCcsICclNjEnOiAnXFx4NjEnLCAnJTYyJzogJ1xceDYyJyxcbiAgJyU2Myc6ICdcXHg2MycsICclNjQnOiAnXFx4NjQnLCAnJTY1JzogJ1xceDY1JywgJyU2Nic6ICdcXHg2NicsICclNjcnOiAnXFx4NjcnLFxuICAnJTY4JzogJ1xceDY4JywgJyU2OSc6ICdcXHg2OScsICclNmEnOiAnXFx4NmEnLCAnJTZBJzogJ1xceDZhJywgJyU2Yic6ICdcXHg2YicsXG4gICclNkInOiAnXFx4NmInLCAnJTZjJzogJ1xceDZjJywgJyU2Qyc6ICdcXHg2YycsICclNmQnOiAnXFx4NmQnLCAnJTZEJzogJ1xceDZkJyxcbiAgJyU2ZSc6ICdcXHg2ZScsICclNkUnOiAnXFx4NmUnLCAnJTZmJzogJ1xceDZmJywgJyU2Ric6ICdcXHg2ZicsICclNzAnOiAnXFx4NzAnLFxuICAnJTcxJzogJ1xceDcxJywgJyU3Mic6ICdcXHg3MicsICclNzMnOiAnXFx4NzMnLCAnJTc0JzogJ1xceDc0JywgJyU3NSc6ICdcXHg3NScsXG4gICclNzYnOiAnXFx4NzYnLCAnJTc3JzogJ1xceDc3JywgJyU3OCc6ICdcXHg3OCcsICclNzknOiAnXFx4NzknLCAnJTdhJzogJ1xceDdhJyxcbiAgJyU3QSc6ICdcXHg3YScsICclN2InOiAnXFx4N2InLCAnJTdCJzogJ1xceDdiJywgJyU3Yyc6ICdcXHg3YycsICclN0MnOiAnXFx4N2MnLFxuICAnJTdkJzogJ1xceDdkJywgJyU3RCc6ICdcXHg3ZCcsICclN2UnOiAnXFx4N2UnLCAnJTdFJzogJ1xceDdlJywgJyU3Zic6ICdcXHg3ZicsXG4gICclN0YnOiAnXFx4N2YnLCAnJTgwJzogJ1xceDgwJywgJyU4MSc6ICdcXHg4MScsICclODInOiAnXFx4ODInLCAnJTgzJzogJ1xceDgzJyxcbiAgJyU4NCc6ICdcXHg4NCcsICclODUnOiAnXFx4ODUnLCAnJTg2JzogJ1xceDg2JywgJyU4Nyc6ICdcXHg4NycsICclODgnOiAnXFx4ODgnLFxuICAnJTg5JzogJ1xceDg5JywgJyU4YSc6ICdcXHg4YScsICclOEEnOiAnXFx4OGEnLCAnJThiJzogJ1xceDhiJywgJyU4Qic6ICdcXHg4YicsXG4gICclOGMnOiAnXFx4OGMnLCAnJThDJzogJ1xceDhjJywgJyU4ZCc6ICdcXHg4ZCcsICclOEQnOiAnXFx4OGQnLCAnJThlJzogJ1xceDhlJyxcbiAgJyU4RSc6ICdcXHg4ZScsICclOGYnOiAnXFx4OGYnLCAnJThGJzogJ1xceDhmJywgJyU5MCc6ICdcXHg5MCcsICclOTEnOiAnXFx4OTEnLFxuICAnJTkyJzogJ1xceDkyJywgJyU5Myc6ICdcXHg5MycsICclOTQnOiAnXFx4OTQnLCAnJTk1JzogJ1xceDk1JywgJyU5Nic6ICdcXHg5NicsXG4gICclOTcnOiAnXFx4OTcnLCAnJTk4JzogJ1xceDk4JywgJyU5OSc6ICdcXHg5OScsICclOWEnOiAnXFx4OWEnLCAnJTlBJzogJ1xceDlhJyxcbiAgJyU5Yic6ICdcXHg5YicsICclOUInOiAnXFx4OWInLCAnJTljJzogJ1xceDljJywgJyU5Qyc6ICdcXHg5YycsICclOWQnOiAnXFx4OWQnLFxuICAnJTlEJzogJ1xceDlkJywgJyU5ZSc6ICdcXHg5ZScsICclOUUnOiAnXFx4OWUnLCAnJTlmJzogJ1xceDlmJywgJyU5Ric6ICdcXHg5ZicsXG4gICclYTAnOiAnXFx4YTAnLCAnJUEwJzogJ1xceGEwJywgJyVhMSc6ICdcXHhhMScsICclQTEnOiAnXFx4YTEnLCAnJWEyJzogJ1xceGEyJyxcbiAgJyVBMic6ICdcXHhhMicsICclYTMnOiAnXFx4YTMnLCAnJUEzJzogJ1xceGEzJywgJyVhNCc6ICdcXHhhNCcsICclQTQnOiAnXFx4YTQnLFxuICAnJWE1JzogJ1xceGE1JywgJyVBNSc6ICdcXHhhNScsICclYTYnOiAnXFx4YTYnLCAnJUE2JzogJ1xceGE2JywgJyVhNyc6ICdcXHhhNycsXG4gICclQTcnOiAnXFx4YTcnLCAnJWE4JzogJ1xceGE4JywgJyVBOCc6ICdcXHhhOCcsICclYTknOiAnXFx4YTknLCAnJUE5JzogJ1xceGE5JyxcbiAgJyVhYSc6ICdcXHhhYScsICclQWEnOiAnXFx4YWEnLCAnJWFBJzogJ1xceGFhJywgJyVBQSc6ICdcXHhhYScsICclYWInOiAnXFx4YWInLFxuICAnJUFiJzogJ1xceGFiJywgJyVhQic6ICdcXHhhYicsICclQUInOiAnXFx4YWInLCAnJWFjJzogJ1xceGFjJywgJyVBYyc6ICdcXHhhYycsXG4gICclYUMnOiAnXFx4YWMnLCAnJUFDJzogJ1xceGFjJywgJyVhZCc6ICdcXHhhZCcsICclQWQnOiAnXFx4YWQnLCAnJWFEJzogJ1xceGFkJyxcbiAgJyVBRCc6ICdcXHhhZCcsICclYWUnOiAnXFx4YWUnLCAnJUFlJzogJ1xceGFlJywgJyVhRSc6ICdcXHhhZScsICclQUUnOiAnXFx4YWUnLFxuICAnJWFmJzogJ1xceGFmJywgJyVBZic6ICdcXHhhZicsICclYUYnOiAnXFx4YWYnLCAnJUFGJzogJ1xceGFmJywgJyViMCc6ICdcXHhiMCcsXG4gICclQjAnOiAnXFx4YjAnLCAnJWIxJzogJ1xceGIxJywgJyVCMSc6ICdcXHhiMScsICclYjInOiAnXFx4YjInLCAnJUIyJzogJ1xceGIyJyxcbiAgJyViMyc6ICdcXHhiMycsICclQjMnOiAnXFx4YjMnLCAnJWI0JzogJ1xceGI0JywgJyVCNCc6ICdcXHhiNCcsICclYjUnOiAnXFx4YjUnLFxuICAnJUI1JzogJ1xceGI1JywgJyViNic6ICdcXHhiNicsICclQjYnOiAnXFx4YjYnLCAnJWI3JzogJ1xceGI3JywgJyVCNyc6ICdcXHhiNycsXG4gICclYjgnOiAnXFx4YjgnLCAnJUI4JzogJ1xceGI4JywgJyViOSc6ICdcXHhiOScsICclQjknOiAnXFx4YjknLCAnJWJhJzogJ1xceGJhJyxcbiAgJyVCYSc6ICdcXHhiYScsICclYkEnOiAnXFx4YmEnLCAnJUJBJzogJ1xceGJhJywgJyViYic6ICdcXHhiYicsICclQmInOiAnXFx4YmInLFxuICAnJWJCJzogJ1xceGJiJywgJyVCQic6ICdcXHhiYicsICclYmMnOiAnXFx4YmMnLCAnJUJjJzogJ1xceGJjJywgJyViQyc6ICdcXHhiYycsXG4gICclQkMnOiAnXFx4YmMnLCAnJWJkJzogJ1xceGJkJywgJyVCZCc6ICdcXHhiZCcsICclYkQnOiAnXFx4YmQnLCAnJUJEJzogJ1xceGJkJyxcbiAgJyViZSc6ICdcXHhiZScsICclQmUnOiAnXFx4YmUnLCAnJWJFJzogJ1xceGJlJywgJyVCRSc6ICdcXHhiZScsICclYmYnOiAnXFx4YmYnLFxuICAnJUJmJzogJ1xceGJmJywgJyViRic6ICdcXHhiZicsICclQkYnOiAnXFx4YmYnLCAnJWMwJzogJ1xceGMwJywgJyVDMCc6ICdcXHhjMCcsXG4gICclYzEnOiAnXFx4YzEnLCAnJUMxJzogJ1xceGMxJywgJyVjMic6ICdcXHhjMicsICclQzInOiAnXFx4YzInLCAnJWMzJzogJ1xceGMzJyxcbiAgJyVDMyc6ICdcXHhjMycsICclYzQnOiAnXFx4YzQnLCAnJUM0JzogJ1xceGM0JywgJyVjNSc6ICdcXHhjNScsICclQzUnOiAnXFx4YzUnLFxuICAnJWM2JzogJ1xceGM2JywgJyVDNic6ICdcXHhjNicsICclYzcnOiAnXFx4YzcnLCAnJUM3JzogJ1xceGM3JywgJyVjOCc6ICdcXHhjOCcsXG4gICclQzgnOiAnXFx4YzgnLCAnJWM5JzogJ1xceGM5JywgJyVDOSc6ICdcXHhjOScsICclY2EnOiAnXFx4Y2EnLCAnJUNhJzogJ1xceGNhJyxcbiAgJyVjQSc6ICdcXHhjYScsICclQ0EnOiAnXFx4Y2EnLCAnJWNiJzogJ1xceGNiJywgJyVDYic6ICdcXHhjYicsICclY0InOiAnXFx4Y2InLFxuICAnJUNCJzogJ1xceGNiJywgJyVjYyc6ICdcXHhjYycsICclQ2MnOiAnXFx4Y2MnLCAnJWNDJzogJ1xceGNjJywgJyVDQyc6ICdcXHhjYycsXG4gICclY2QnOiAnXFx4Y2QnLCAnJUNkJzogJ1xceGNkJywgJyVjRCc6ICdcXHhjZCcsICclQ0QnOiAnXFx4Y2QnLCAnJWNlJzogJ1xceGNlJyxcbiAgJyVDZSc6ICdcXHhjZScsICclY0UnOiAnXFx4Y2UnLCAnJUNFJzogJ1xceGNlJywgJyVjZic6ICdcXHhjZicsICclQ2YnOiAnXFx4Y2YnLFxuICAnJWNGJzogJ1xceGNmJywgJyVDRic6ICdcXHhjZicsICclZDAnOiAnXFx4ZDAnLCAnJUQwJzogJ1xceGQwJywgJyVkMSc6ICdcXHhkMScsXG4gICclRDEnOiAnXFx4ZDEnLCAnJWQyJzogJ1xceGQyJywgJyVEMic6ICdcXHhkMicsICclZDMnOiAnXFx4ZDMnLCAnJUQzJzogJ1xceGQzJyxcbiAgJyVkNCc6ICdcXHhkNCcsICclRDQnOiAnXFx4ZDQnLCAnJWQ1JzogJ1xceGQ1JywgJyVENSc6ICdcXHhkNScsICclZDYnOiAnXFx4ZDYnLFxuICAnJUQ2JzogJ1xceGQ2JywgJyVkNyc6ICdcXHhkNycsICclRDcnOiAnXFx4ZDcnLCAnJWQ4JzogJ1xceGQ4JywgJyVEOCc6ICdcXHhkOCcsXG4gICclZDknOiAnXFx4ZDknLCAnJUQ5JzogJ1xceGQ5JywgJyVkYSc6ICdcXHhkYScsICclRGEnOiAnXFx4ZGEnLCAnJWRBJzogJ1xceGRhJyxcbiAgJyVEQSc6ICdcXHhkYScsICclZGInOiAnXFx4ZGInLCAnJURiJzogJ1xceGRiJywgJyVkQic6ICdcXHhkYicsICclREInOiAnXFx4ZGInLFxuICAnJWRjJzogJ1xceGRjJywgJyVEYyc6ICdcXHhkYycsICclZEMnOiAnXFx4ZGMnLCAnJURDJzogJ1xceGRjJywgJyVkZCc6ICdcXHhkZCcsXG4gICclRGQnOiAnXFx4ZGQnLCAnJWREJzogJ1xceGRkJywgJyVERCc6ICdcXHhkZCcsICclZGUnOiAnXFx4ZGUnLCAnJURlJzogJ1xceGRlJyxcbiAgJyVkRSc6ICdcXHhkZScsICclREUnOiAnXFx4ZGUnLCAnJWRmJzogJ1xceGRmJywgJyVEZic6ICdcXHhkZicsICclZEYnOiAnXFx4ZGYnLFxuICAnJURGJzogJ1xceGRmJywgJyVlMCc6ICdcXHhlMCcsICclRTAnOiAnXFx4ZTAnLCAnJWUxJzogJ1xceGUxJywgJyVFMSc6ICdcXHhlMScsXG4gICclZTInOiAnXFx4ZTInLCAnJUUyJzogJ1xceGUyJywgJyVlMyc6ICdcXHhlMycsICclRTMnOiAnXFx4ZTMnLCAnJWU0JzogJ1xceGU0JyxcbiAgJyVFNCc6ICdcXHhlNCcsICclZTUnOiAnXFx4ZTUnLCAnJUU1JzogJ1xceGU1JywgJyVlNic6ICdcXHhlNicsICclRTYnOiAnXFx4ZTYnLFxuICAnJWU3JzogJ1xceGU3JywgJyVFNyc6ICdcXHhlNycsICclZTgnOiAnXFx4ZTgnLCAnJUU4JzogJ1xceGU4JywgJyVlOSc6ICdcXHhlOScsXG4gICclRTknOiAnXFx4ZTknLCAnJWVhJzogJ1xceGVhJywgJyVFYSc6ICdcXHhlYScsICclZUEnOiAnXFx4ZWEnLCAnJUVBJzogJ1xceGVhJyxcbiAgJyVlYic6ICdcXHhlYicsICclRWInOiAnXFx4ZWInLCAnJWVCJzogJ1xceGViJywgJyVFQic6ICdcXHhlYicsICclZWMnOiAnXFx4ZWMnLFxuICAnJUVjJzogJ1xceGVjJywgJyVlQyc6ICdcXHhlYycsICclRUMnOiAnXFx4ZWMnLCAnJWVkJzogJ1xceGVkJywgJyVFZCc6ICdcXHhlZCcsXG4gICclZUQnOiAnXFx4ZWQnLCAnJUVEJzogJ1xceGVkJywgJyVlZSc6ICdcXHhlZScsICclRWUnOiAnXFx4ZWUnLCAnJWVFJzogJ1xceGVlJyxcbiAgJyVFRSc6ICdcXHhlZScsICclZWYnOiAnXFx4ZWYnLCAnJUVmJzogJ1xceGVmJywgJyVlRic6ICdcXHhlZicsICclRUYnOiAnXFx4ZWYnLFxuICAnJWYwJzogJ1xceGYwJywgJyVGMCc6ICdcXHhmMCcsICclZjEnOiAnXFx4ZjEnLCAnJUYxJzogJ1xceGYxJywgJyVmMic6ICdcXHhmMicsXG4gICclRjInOiAnXFx4ZjInLCAnJWYzJzogJ1xceGYzJywgJyVGMyc6ICdcXHhmMycsICclZjQnOiAnXFx4ZjQnLCAnJUY0JzogJ1xceGY0JyxcbiAgJyVmNSc6ICdcXHhmNScsICclRjUnOiAnXFx4ZjUnLCAnJWY2JzogJ1xceGY2JywgJyVGNic6ICdcXHhmNicsICclZjcnOiAnXFx4ZjcnLFxuICAnJUY3JzogJ1xceGY3JywgJyVmOCc6ICdcXHhmOCcsICclRjgnOiAnXFx4ZjgnLCAnJWY5JzogJ1xceGY5JywgJyVGOSc6ICdcXHhmOScsXG4gICclZmEnOiAnXFx4ZmEnLCAnJUZhJzogJ1xceGZhJywgJyVmQSc6ICdcXHhmYScsICclRkEnOiAnXFx4ZmEnLCAnJWZiJzogJ1xceGZiJyxcbiAgJyVGYic6ICdcXHhmYicsICclZkInOiAnXFx4ZmInLCAnJUZCJzogJ1xceGZiJywgJyVmYyc6ICdcXHhmYycsICclRmMnOiAnXFx4ZmMnLFxuICAnJWZDJzogJ1xceGZjJywgJyVGQyc6ICdcXHhmYycsICclZmQnOiAnXFx4ZmQnLCAnJUZkJzogJ1xceGZkJywgJyVmRCc6ICdcXHhmZCcsXG4gICclRkQnOiAnXFx4ZmQnLCAnJWZlJzogJ1xceGZlJywgJyVGZSc6ICdcXHhmZScsICclZkUnOiAnXFx4ZmUnLCAnJUZFJzogJ1xceGZlJyxcbiAgJyVmZic6ICdcXHhmZicsICclRmYnOiAnXFx4ZmYnLCAnJWZGJzogJ1xceGZmJywgJyVGRic6ICdcXHhmZidcbn1cblxuZnVuY3Rpb24gZW5jb2RlZFJlcGxhY2VyIChtYXRjaCkge1xuICByZXR1cm4gRW5jb2RlZExvb2t1cFttYXRjaF1cbn1cblxuY29uc3QgU1RBVEVfS0VZID0gMFxuY29uc3QgU1RBVEVfVkFMVUUgPSAxXG5jb25zdCBTVEFURV9DSEFSU0VUID0gMlxuY29uc3QgU1RBVEVfTEFORyA9IDNcblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMgKHN0cikge1xuICBjb25zdCByZXMgPSBbXVxuICBsZXQgc3RhdGUgPSBTVEFURV9LRVlcbiAgbGV0IGNoYXJzZXQgPSAnJ1xuICBsZXQgaW5xdW90ZSA9IGZhbHNlXG4gIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gIGxldCBwID0gMFxuICBsZXQgdG1wID0gJydcbiAgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldXG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJyAmJiBpbnF1b3RlKSB7XG4gICAgICBpZiAoZXNjYXBpbmcpIHsgZXNjYXBpbmcgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgaWYgKGlucXVvdGUpIHtcbiAgICAgICAgICBpbnF1b3RlID0gZmFsc2VcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICB9IGVsc2UgeyBpbnF1b3RlID0gdHJ1ZSB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgeyBlc2NhcGluZyA9IGZhbHNlIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVzY2FwaW5nICYmIGlucXVvdGUpIHsgdG1wICs9ICdcXFxcJyB9XG4gICAgICBlc2NhcGluZyA9IGZhbHNlXG4gICAgICBpZiAoKHN0YXRlID09PSBTVEFURV9DSEFSU0VUIHx8IHN0YXRlID09PSBTVEFURV9MQU5HKSAmJiBjaGFyID09PSBcIidcIikge1xuICAgICAgICBpZiAoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQpIHtcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0xBTkdcbiAgICAgICAgICBjaGFyc2V0ID0gdG1wLnN1YnN0cmluZygxKVxuICAgICAgICB9IGVsc2UgeyBzdGF0ZSA9IFNUQVRFX1ZBTFVFIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFNUQVRFX0tFWSAmJlxuICAgICAgICAoY2hhciA9PT0gJyonIHx8IGNoYXIgPT09ICc9JykgJiZcbiAgICAgICAgcmVzLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZSA9IGNoYXIgPT09ICcqJ1xuICAgICAgICAgID8gU1RBVEVfQ0hBUlNFVFxuICAgICAgICAgIDogU1RBVEVfVkFMVUVcbiAgICAgICAgcmVzW3BdID0gW3RtcCwgdW5kZWZpbmVkXVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiBjaGFyID09PSAnOycpIHtcbiAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgaWYgKGNoYXJzZXQpIHtcbiAgICAgICAgICBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgICAgICAgICAnYmluYXJ5JyxcbiAgICAgICAgICAgICAgY2hhcnNldClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhcnNldCA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkgeyByZXNbcF0gPSB0bXAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgKytwXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIChjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcpKSB7IGNvbnRpbnVlIH1cbiAgICB9XG4gICAgdG1wICs9IGNoYXJcbiAgfVxuICBpZiAoY2hhcnNldCAmJiB0bXAubGVuZ3RoKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgJ2JpbmFyeScsXG4gICAgICBjaGFyc2V0KVxuICB9IGVsc2UgaWYgKHRtcCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICB9XG5cbiAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRtcCkgeyByZXNbcF0gPSB0bXAgfVxuICB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuXG4gIHJldHVybiByZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVBhcmFtc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2VuYW1lIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHsgcmV0dXJuICcnIH1cbiAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBzd2l0Y2ggKHBhdGguY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAweDJGOiAvLyAnLydcbiAgICAgIGNhc2UgMHg1QzogLy8gJ1xcJ1xuICAgICAgICBwYXRoID0gcGF0aC5zbGljZShpICsgMSlcbiAgICAgICAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSRV9QTFVTID0gL1xcKy9nXG5cbmNvbnN0IEhFWCA9IFtcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMFxuXVxuXG5mdW5jdGlvbiBEZWNvZGVyICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cbkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAvLyBSZXBsYWNlICcrJyB3aXRoICcgJyBiZWZvcmUgZGVjb2RpbmdcbiAgc3RyID0gc3RyLnJlcGxhY2UoUkVfUExVUywgJyAnKVxuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSAwOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgZm9yICg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUhFWFtzdHIuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgICAgcmVzICs9ICclJyArIHRoaXMuYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIC0taSAvLyByZXRyeSBjaGFyYWN0ZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVmZmVyICs9IHN0cltpXVxuICAgICAgICArK3BcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHRoaXMuYnVmZmVyLCAxNikpXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnJScpIHtcbiAgICAgIGlmIChpID4gcCkge1xuICAgICAgICByZXMgKz0gc3RyLnN1YnN0cmluZyhwLCBpKVxuICAgICAgICBwID0gaVxuICAgICAgfVxuICAgICAgdGhpcy5idWZmZXIgPSAnJ1xuICAgICAgKytwXG4gICAgfVxuICB9XG4gIGlmIChwIDwgbGVuICYmIHRoaXMuYnVmZmVyID09PSB1bmRlZmluZWQpIHsgcmVzICs9IHN0ci5zdWJzdHJpbmcocCkgfVxuICByZXR1cm4gcmVzXG59XG5EZWNvZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWNvZGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERlY29kZXIgPSByZXF1aXJlKCcuLi91dGlscy9EZWNvZGVyJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5cblVybEVuY29kZWQuZGV0ZWN0ID0gL15hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pXG5mdW5jdGlvbiBVcmxFbmNvZGVkIChib3ksIGNmZykge1xuICBjb25zdCBsaW1pdHMgPSBjZmcubGltaXRzXG4gIGNvbnN0IHBhcnNlZENvblR5cGUgPSBjZmcucGFyc2VkQ29uVHlwZVxuICB0aGlzLmJveSA9IGJveVxuXG4gIHRoaXMuZmllbGRTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZFNpemUnLCAxICogMTAyNCAqIDEwMjQpXG4gIHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGROYW1lU2l6ZScsIDEwMClcbiAgdGhpcy5maWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuXG4gIGxldCBjaGFyc2V0XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXJzZWRDb25UeXBlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkQ29uVHlwZVtpXSkgJiZcbiAgICAgICAgUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBjaGFyc2V0ID0gcGFyc2VkQ29uVHlwZVtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChjaGFyc2V0ID09PSB1bmRlZmluZWQpIHsgY2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4JyB9XG5cbiAgdGhpcy5kZWNvZGVyID0gbmV3IERlY29kZXIoKVxuICB0aGlzLmNoYXJzZXQgPSBjaGFyc2V0XG4gIHRoaXMuX2ZpZWxkcyA9IDBcbiAgdGhpcy5fc3RhdGUgPSAna2V5J1xuICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gIHRoaXMuX2tleSA9ICcnXG4gIHRoaXMuX3ZhbCA9ICcnXG4gIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGNiKSB7XG4gIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHtcbiAgICBpZiAoIXRoaXMuYm95LmhpdEZpZWxkc0xpbWl0KSB7XG4gICAgICB0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICB9XG4gICAgcmV0dXJuIGNiKClcbiAgfVxuXG4gIGxldCBpZHhlcTsgbGV0IGlkeGFtcDsgbGV0IGk7IGxldCBwID0gMDsgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcblxuICB3aGlsZSAocCA8IGxlbikge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScpIHtcbiAgICAgIGlkeGVxID0gaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDNELyogPSAqLykge1xuICAgICAgICAgIGlkeGVxID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc0tleSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc0tleSB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhlcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIGFzc2lnbm1lbnRcbiAgICAgICAgaWYgKGlkeGVxID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGVxKSkgfVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICd2YWwnXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl92YWwgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhlcSArIDFcbiAgICAgIH0gZWxzZSBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggbm8gYXNzaWdubWVudFxuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBsZXQga2V5OyBjb25zdCBrZXlUcnVuYyA9IHRoaXMuX2tleVRydW5jXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IGtleSA9ICh0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpKSB9IGVsc2UgeyBrZXkgPSB0aGlzLl9rZXkgfVxuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBpZiAoa2V5Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dChrZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBrZXlUcnVuYyxcbiAgICAgICAgICAgIGZhbHNlKVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX2J5dGVzS2V5ID0gdGhpcy5fa2V5Lmxlbmd0aCkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX2tleVRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzVmFsID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNWYWwgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSB9XG4gICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYylcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAna2V5J1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fdmFsID09PSAnJyAmJiB0aGlzLmZpZWxkU2l6ZUxpbWl0ID09PSAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX2J5dGVzVmFsID0gdGhpcy5fdmFsLmxlbmd0aCkgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYigpXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYm95Ll9kb25lKSB7IHJldHVybiB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5JyAmJiB0aGlzLl9rZXkubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgJycsXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIGZhbHNlKVxuICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlID09PSAndmFsJykge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICB0aGlzLl92YWxUcnVuYylcbiAgfVxuICB0aGlzLmJveS5fZG9uZSA9IHRydWVcbiAgdGhpcy5ib3kuZW1pdCgnZmluaXNoJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBVcmxFbmNvZGVkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCwgcmVjZWl2ZU1lc3NhZ2VPblBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdQT1NUJ11cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IFsxMDEsIDIwNCwgMjA1LCAzMDRdXG5cbmNvbnN0IHJlZGlyZWN0U3RhdHVzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuY29uc3QgcmVkaXJlY3RTdGF0dXNTZXQgPSBuZXcgU2V0KHJlZGlyZWN0U3RhdHVzKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYmxvY2stYmFkLXBvcnRcbmNvbnN0IGJhZFBvcnRzID0gW1xuICAnMScsICc3JywgJzknLCAnMTEnLCAnMTMnLCAnMTUnLCAnMTcnLCAnMTknLCAnMjAnLCAnMjEnLCAnMjInLCAnMjMnLCAnMjUnLCAnMzcnLCAnNDInLCAnNDMnLCAnNTMnLCAnNjknLCAnNzcnLCAnNzknLFxuICAnODcnLCAnOTUnLCAnMTAxJywgJzEwMicsICcxMDMnLCAnMTA0JywgJzEwOScsICcxMTAnLCAnMTExJywgJzExMycsICcxMTUnLCAnMTE3JywgJzExOScsICcxMjMnLCAnMTM1JywgJzEzNycsXG4gICcxMzknLCAnMTQzJywgJzE2MScsICcxNzknLCAnMzg5JywgJzQyNycsICc0NjUnLCAnNTEyJywgJzUxMycsICc1MTQnLCAnNTE1JywgJzUyNicsICc1MzAnLCAnNTMxJywgJzUzMicsXG4gICc1NDAnLCAnNTQ4JywgJzU1NCcsICc1NTYnLCAnNTYzJywgJzU4NycsICc2MDEnLCAnNjM2JywgJzk4OScsICc5OTAnLCAnOTkzJywgJzk5NScsICcxNzE5JywgJzE3MjAnLCAnMTcyMycsXG4gICcyMDQ5JywgJzM2NTknLCAnNDA0NScsICc1MDYwJywgJzUwNjEnLCAnNjAwMCcsICc2NTY2JywgJzY2NjUnLCAnNjY2NicsICc2NjY3JywgJzY2NjgnLCAnNjY2OScsICc2Njk3JyxcbiAgJzEwMDgwJ1xuXVxuXG5jb25zdCBiYWRQb3J0c1NldCA9IG5ldyBTZXQoYmFkUG9ydHMpXG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuY29uc3QgcmVmZXJyZXJQb2xpY3kgPSBbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl1cbmNvbnN0IHJlZmVycmVyUG9saWN5U2V0ID0gbmV3IFNldChyZWZlcnJlclBvbGljeSlcblxuY29uc3QgcmVxdWVzdFJlZGlyZWN0ID0gWydmb2xsb3cnLCAnbWFudWFsJywgJ2Vycm9yJ11cblxuY29uc3Qgc2FmZU1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxuY29uc3Qgc2FmZU1ldGhvZHNTZXQgPSBuZXcgU2V0KHNhZmVNZXRob2RzKVxuXG5jb25zdCByZXF1ZXN0TW9kZSA9IFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ11cblxuY29uc3QgcmVxdWVzdENyZWRlbnRpYWxzID0gWydvbWl0JywgJ3NhbWUtb3JpZ2luJywgJ2luY2x1ZGUnXVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSBbXG4gICdkZWZhdWx0JyxcbiAgJ25vLXN0b3JlJyxcbiAgJ3JlbG9hZCcsXG4gICduby1jYWNoZScsXG4gICdmb3JjZS1jYWNoZScsXG4gICdvbmx5LWlmLWNhY2hlZCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuY29uc3QgcmVxdWVzdEJvZHlIZWFkZXIgPSBbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2VudW1kZWYtcmVxdWVzdGR1cGxleFxuY29uc3QgcmVxdWVzdER1cGxleCA9IFtcbiAgJ2hhbGYnXG5dXG5cbi8vIGh0dHA6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZvcmJpZGRlbi1tZXRob2RcbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnVFJBQ0UnLCAnVFJBQ0snXVxuY29uc3QgZm9yYmlkZGVuTWV0aG9kc1NldCA9IG5ldyBTZXQoZm9yYmlkZGVuTWV0aG9kcylcblxuY29uc3Qgc3VicmVzb3VyY2UgPSBbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXVxuY29uc3Qgc3VicmVzb3VyY2VTZXQgPSBuZXcgU2V0KHN1YnJlc291cmNlKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0RPTUV4Y2VwdGlvbiddfSAqL1xuY29uc3QgRE9NRXhjZXB0aW9uID0gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPz8gKCgpID0+IHtcbiAgLy8gRE9NRXhjZXB0aW9uIHdhcyBvbmx5IG1hZGUgYSBnbG9iYWwgaW4gTm9kZSB2MTcuMC4wLFxuICAvLyBidXQgZmV0Y2ggc3VwcG9ydHMgPj0gdjE2LjguXG4gIHRyeSB7XG4gICAgYXRvYignficpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXJyKS5jb25zdHJ1Y3RvclxuICB9XG59KSgpXG5cbmxldCBjaGFubmVsXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snc3RydWN0dXJlZENsb25lJ119ICovXG5jb25zdCBzdHJ1Y3R1cmVkQ2xvbmUgPVxuICBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSA/P1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iMjdhZTI0ZGNjNDI1MWJhZDcyNmQ5ZDg0YmFmNjc4ZDFmNzA3ZmVkL2xpYi9pbnRlcm5hbC9zdHJ1Y3R1cmVkX2Nsb25lLmpzXG4gIC8vIHN0cnVjdHVyZWRDbG9uZSB3YXMgYWRkZWQgaW4gdjE3LjAuMCwgYnV0IGZldGNoIHN1cHBvcnRzIHYxNi44XG4gIGZ1bmN0aW9uIHN0cnVjdHVyZWRDbG9uZSAodmFsdWUsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyBhcmd1bWVudCcpXG4gICAgfVxuXG4gICAgaWYgKCFjaGFubmVsKSB7XG4gICAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgICB9XG4gICAgY2hhbm5lbC5wb3J0MS51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0Mi51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh2YWx1ZSwgb3B0aW9ucz8udHJhbnNmZXIpXG4gICAgcmV0dXJuIHJlY2VpdmVNZXNzYWdlT25Qb3J0KGNoYW5uZWwucG9ydDIpLm1lc3NhZ2VcbiAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRE9NRXhjZXB0aW9uLFxuICBzdHJ1Y3R1cmVkQ2xvbmUsXG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2VcdTIwMTlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBcdTAwQTcgOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5XG4gIC8vIGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyIG9uIGFjdHVhbFJlc3BvbnNlLlxuXG4gIC8vIDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeSBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlclxuICAvLyAxLiBMZXQgcG9saWN5LXRva2VucyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuIGBSZWZlcnJlci1Qb2xpY3lgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IGFjdHVhbFJlc3BvbnNlXG4gIC8vIDIuIExldCBwb2xpY3kgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gaW4gcG9saWN5LXRva2VucywgaWYgdG9rZW4gaXMgYSByZWZlcnJlciBwb2xpY3kgYW5kIHRva2VuIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCBwb2xpY3kgdG8gdG9rZW4uXG4gIC8vIDQuIFJldHVybiBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeUhlYWRlciA9IChoZWFkZXJzTGlzdC5nZXQoJ3JlZmVycmVyLXBvbGljeScpID8/ICcnKS5zcGxpdCgnLCcpXG5cbiAgLy8gTm90ZTogQXMgdGhlIHJlZmVycmVyLXBvbGljeSBjYW4gY29udGFpbiBtdWx0aXBsZSBwb2xpY2llc1xuICAvLyBzZXBhcmF0ZWQgYnkgY29tbWEsIHdlIG5lZWQgdG8gbG9vcCB0aHJvdWdoIGFsbCBvZiB0aGVtXG4gIC8vIGFuZCBwaWNrIHRoZSBmaXJzdCB2YWxpZCBvbmUuXG4gIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVycmVyLVBvbGljeSNzcGVjaWZ5X2FfZmFsbGJhY2tfcG9saWN5XG4gIGxldCBwb2xpY3kgPSAnJ1xuICBpZiAocG9saWN5SGVhZGVyLmxlbmd0aCA+IDApIHtcbiAgICAvLyBUaGUgcmlnaHQtbW9zdCBwb2xpY3kgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAvLyBUaGUgbGVmdC1tb3N0IHBvbGljeSBpcyB0aGUgZmFsbGJhY2suXG4gICAgZm9yIChsZXQgaSA9IHBvbGljeUhlYWRlci5sZW5ndGg7IGkgIT09IDA7IGktLSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBwb2xpY3lIZWFkZXJbaSAtIDFdLnRyaW0oKVxuICAgICAgaWYgKHJlZmVycmVyUG9saWN5VG9rZW5zLmhhcyh0b2tlbikpIHtcbiAgICAgICAgcG9saWN5ID0gdG9rZW5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAyLiBJZiBwb2xpY3kgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byBwb2xpY3kuXG4gIGlmIChwb2xpY3kgIT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5LWNoZWNrXG5mdW5jdGlvbiBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnYWxsb3dlZCdcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtY29ycy1jaGVja1xuZnVuY3Rpb24gY29yc0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXRhby1jaGVja1xuZnVuY3Rpb24gVEFPQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmV0Y2hNZXRhZGF0YSAoaHR0cFJlcXVlc3QpIHtcbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1kZXN0LWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtbW9kZS1oZWFkZXJcblxuICAvLyAgMS4gQXNzZXJ0OiByXHUyMDE5cyB1cmwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwuXG4gIC8vICBUT0RPXG5cbiAgLy8gIDIuIExldCBoZWFkZXIgYmUgYSBTdHJ1Y3R1cmVkIEhlYWRlciB3aG9zZSB2YWx1ZSBpcyBhIHRva2VuLlxuICBsZXQgaGVhZGVyID0gbnVsbFxuXG4gIC8vICAzLiBTZXQgaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byByXHUyMDE5cyBtb2RlLlxuICBoZWFkZXIgPSBodHRwUmVxdWVzdC5tb2RlXG5cbiAgLy8gIDQuIFNldCBhIHN0cnVjdHVyZWQgZmllbGQgdmFsdWUgYFNlYy1GZXRjaC1Nb2RlYC9oZWFkZXIgaW4gclx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnc2VjLWZldGNoLW1vZGUnLCBoZWFkZXIpXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1zaXRlLWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtdXNlci1oZWFkZXJcbiAgLy8gIFRPRE9cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcGVuZC1hLXJlcXVlc3Qtb3JpZ2luLWhlYWRlclxuZnVuY3Rpb24gYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgc2VyaWFsaXplZE9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIGJ5dGUtc2VyaWFsaXppbmcgYSByZXF1ZXN0IG9yaWdpbiB3aXRoIHJlcXVlc3QuXG4gIGxldCBzZXJpYWxpemVkT3JpZ2luID0gcmVxdWVzdC5vcmlnaW5cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIGlmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBuZWl0aGVyIGBHRVRgIG5vciBgSEVBRGAsIHRoZW46XG4gIH0gZWxzZSBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAvLyAxLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5OlxuICAgIHN3aXRjaCAocmVxdWVzdC5yZWZlcnJlclBvbGljeSkge1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXInOlxuICAgICAgICAvLyBTZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgYSB0dXBsZSBvcmlnaW4sIGl0cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgXCJodHRwc1wiLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKHJlcXVlc3Qub3JpZ2luICYmIHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3Qub3JpZ2luKSAmJiAhdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0LCByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICAvLyAyLiBBcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7KCkgPT4gdW5rbm93bltdfSBpdGVyYXRvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7J2tleSd8J3ZhbHVlJ3wna2V5K3ZhbHVlJ30ga2luZFxuICovXG5mdW5jdGlvbiBtYWtlSXRlcmF0b3IgKGl0ZXJhdG9yLCBuYW1lLCBraW5kKSB7XG4gIGNvbnN0IG9iamVjdCA9IHtcbiAgICBpbmRleDogMCxcbiAgICBraW5kLFxuICAgIHRhcmdldDogaXRlcmF0b3JcbiAgfVxuXG4gIGNvbnN0IGkgPSB7XG4gICAgbmV4dCAoKSB7XG4gICAgICAvLyAxLiBMZXQgaW50ZXJmYWNlIGJlIHRoZSBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGV4aXN0cy5cblxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cblxuICAgICAgLy8gMy4gTGV0IG9iamVjdCBiZSA/IFRvT2JqZWN0KHRoaXNWYWx1ZSkuXG5cbiAgICAgIC8vIDQuIElmIG9iamVjdCBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbiBwZXJmb3JtIGEgc2VjdXJpdHlcbiAgICAgIC8vICAgIGNoZWNrLCBwYXNzaW5nOlxuXG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCB7IGluZGV4LCBraW5kLCB0YXJnZXQgfSA9IG9iamVjdFxuICAgICAgY29uc3QgdmFsdWVzID0gdGFyZ2V0KClcblxuICAgICAgLy8gOS4gTGV0IGxlbiBiZSB0aGUgbGVuZ3RoIG9mIHZhbHVlcy5cbiAgICAgIGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGhcblxuICAgICAgLy8gMTAuIElmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBsZW4sIHRoZW4gcmV0dXJuXG4gICAgICAvLyAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpLlxuICAgICAgaWYgKGluZGV4ID49IGxlbikge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH1cbiAgICAgIH1cblxuICAgICAgLy8gMTEuIExldCBwYWlyIGJlIHRoZSBlbnRyeSBpbiB2YWx1ZXMgYXQgaW5kZXggaW5kZXguXG4gICAgICBjb25zdCBwYWlyID0gdmFsdWVzW2luZGV4XVxuXG4gICAgICAvLyAxMi4gU2V0IG9iamVjdFx1MjAxOXMgaW5kZXggdG8gaW5kZXggKyAxLlxuICAgICAgb2JqZWN0LmluZGV4ID0gaW5kZXggKyAxXG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdGhlIGl0ZXJhdG9yIHJlc3VsdCBmb3IgcGFpciBhbmQga2luZC5cbiAgICAgIHJldHVybiBpdGVyYXRvclJlc3VsdChwYWlyLCBraW5kKVxuICAgIH0sXG4gICAgLy8gVGhlIGNsYXNzIHN0cmluZyBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGZvciBhIGdpdmVuIGludGVyZmFjZSBpcyB0aGVcbiAgICAvLyByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyB0aGUgaWRlbnRpZmllciBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgc3RyaW5nIFwiIEl0ZXJhdG9yXCIuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IGAke25hbWV9IEl0ZXJhdG9yYFxuICB9XG5cbiAgLy8gVGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgc2xvdCBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IG11c3QgYmUgJUl0ZXJhdG9yUHJvdG90eXBlJS5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGksIGVzSXRlcmF0b3JQcm90b3R5cGUpXG4gIC8vIGVzSXRlcmF0b3JQcm90b3R5cGUgbmVlZHMgdG8gYmUgdGhlIHByb3RvdHlwZSBvZiBpXG4gIC8vIHdoaWNoIGlzIHRoZSBwcm90b3R5cGUgb2YgYW4gZW1wdHkgb2JqZWN0LiBZZXMsIGl0J3MgY29uZnVzaW5nLlxuICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBpKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2l0ZXJhdG9yLXJlc3VsdFxuZnVuY3Rpb24gaXRlcmF0b3JSZXN1bHQgKHBhaXIsIGtpbmQpIHtcbiAgbGV0IHJlc3VsdFxuXG4gIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXknOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyBrZXkuXG4gICAgICByZXN1bHQgPSBwYWlyWzBdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMgdmFsdWUuXG4gICAgICByZXN1bHQgPSBwYWlyWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICdrZXkrdmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDQuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgIC8vIDYuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMFwiLCBrZXkpLlxuICAgICAgLy8gNy4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIxXCIsIHZhbHVlKS5cbiAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgIHJlc3VsdCA9IHBhaXJcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocmVzdWx0LCBmYWxzZSkuXG4gIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LWZ1bGx5LXJlYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZnVsbHlSZWFkQm9keSAoYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpIHtcbiAgLy8gMS4gSWYgdGFza0Rlc3RpbmF0aW9uIGlzIG51bGwsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0b1xuICAvLyAgICB0aGUgcmVzdWx0IG9mIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuXG4gIC8vIDIuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzIGJlIHRvIHF1ZXVlIGFcbiAgLy8gICAgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMsIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSBwcm9jZXNzQm9keVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGJlIHRvIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlFcnJvcixcbiAgLy8gICAgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IGVycm9yU3RlcHMgPSBwcm9jZXNzQm9keUVycm9yXG5cbiAgLy8gNC4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZm9yIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHMgd2l0aCB0aGF0XG4gIC8vICAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuLlxuICBsZXQgcmVhZGVyXG5cbiAgdHJ5IHtcbiAgICByZWFkZXIgPSBib2R5LnN0cmVhbS5nZXRSZWFkZXIoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNS4gUmVhZCBhbGwgYnl0ZXMgZnJvbSByZWFkZXIsIGdpdmVuIHN1Y2Nlc3NTdGVwcyBhbmQgZXJyb3JTdGVwcy5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKVxuICAgIHN1Y2Nlc3NTdGVwcyhyZXN1bHQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtSZWFkYWJsZVN0cmVhbX0gKi9cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2UgKHN0cmVhbSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmNvbnN0IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIID0gNjU1MzVcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWRlY29kZVxuICogQHBhcmFtIHtudW1iZXJbXXxVaW50OEFycmF5fSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBUbyBpc29tb3JwaGljIGRlY29kZSBhIGJ5dGUgc2VxdWVuY2UgaW5wdXQsIHJldHVybiBhIHN0cmluZyB3aG9zZSBjb2RlIHBvaW50XG4gIC8vICAgIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgbGVuZ3RoIGFuZCB3aG9zZSBjb2RlIHBvaW50cyBoYXZlIHRoZSBzYW1lIHZhbHVlc1xuICAvLyAgICBhcyB0aGUgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBieXRlcywgaW4gdGhlIHNhbWUgb3JkZXIuXG5cbiAgaWYgKGlucHV0Lmxlbmd0aCA8IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uaW5wdXQpXG4gIH1cblxuICByZXR1cm4gaW5wdXQucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1cnJlbnQpLCAnJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjxVaW50OEFycmF5Pn0gY29udHJvbGxlclxuICovXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUNsb3NlIChjb250cm9sbGVyKSB7XG4gIHRyeSB7XG4gICAgY29udHJvbGxlci5jbG9zZSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRPRE86IGFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoaXMgZXJyb3Igb2NjdXJzLlxuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvbnRyb2xsZXIgaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1lbmNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRW5jb2RlIChpbnB1dCkge1xuICAvLyAxLiBBc3NlcnQ6IGlucHV0IGNvbnRhaW5zIG5vIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiBVKzAwRkYuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChpKSA8PSAweEZGKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIGEgYnl0ZSBzZXF1ZW5jZSB3aG9zZSBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXRcdTIwMTlzIGNvZGVcbiAgLy8gICAgcG9pbnQgbGVuZ3RoIGFuZCB3aG9zZSBieXRlcyBoYXZlIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgLy8gICAgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBjb2RlIHBvaW50cywgaW4gdGhlIHNhbWUgb3JkZXJcbiAgcmV0dXJuIGlucHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbWRlZmF1bHRyZWFkZXItcmVhZC1hbGwtYnl0ZXNcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZC1sb29wXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcn0gcmVhZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxCeXRlcyAocmVhZGVyKSB7XG4gIGNvbnN0IGJ5dGVzID0gW11cbiAgbGV0IGJ5dGVMZW5ndGggPSAwXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlOiBjaHVuayB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIDEuIENhbGwgc3VjY2Vzc1N0ZXBzIHdpdGggYnl0ZXMuXG4gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChieXRlcywgYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjaHVuayBpcyBub3QgYSBVaW50OEFycmF5IG9iamVjdCwgY2FsbCBmYWlsdXJlU3RlcHNcbiAgICAvLyAgICB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlY2VpdmVkIG5vbi1VaW50OEFycmF5IGNodW5rJylcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgdGhlIGJ5dGVzIHJlcHJlc2VudGVkIGJ5IGNodW5rIHRvIGJ5dGVzLlxuICAgIGJ5dGVzLnB1c2goY2h1bmspXG4gICAgYnl0ZUxlbmd0aCArPSBjaHVuay5sZW5ndGhcblxuICAgIC8vIDMuIFJlYWQtbG9vcCBnaXZlbiByZWFkZXIsIGJ5dGVzLCBzdWNjZXNzU3RlcHMsIGFuZCBmYWlsdXJlU3RlcHMuXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNpcy1sb2NhbFxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0xvY2FsICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgcHJvdG9jb2wgPT09ICdibG9iOicgfHwgcHJvdG9jb2wgPT09ICdkYXRhOidcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxIYXNIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnaHR0cHM6JylcbiAgfVxuXG4gIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1zY2hlbWVcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNIdHRwSHR0cHNTY2hlbWUgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEZldGNoIHN1cHBvcnRzIG5vZGUgPj0gMTYuOC4wLCBidXQgT2JqZWN0Lmhhc093biB3YXMgYWRkZWQgaW4gdjE2LjkuMC5cbiAqL1xuY29uc3QgaGFzT3duID0gT2JqZWN0Lmhhc093biB8fCAoKGRpY3QsIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpY3QsIGtleSkpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Fib3J0ZWQsXG4gIGlzQ2FuY2VsbGVkLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgdG9VU1ZTdHJpbmcsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICBUQU9DaGVjayxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHJlcXVlc3RCYWRQb3J0LFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgcmVzcG9uc2VVUkwsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIGlzQmxvYkxpa2UsXG4gIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSxcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaGFzT3duLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgYnl0ZXNNYXRjaCxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIGlzb21vcnBoaWNEZWNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybEhhc0h0dHBzU2NoZW1lLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgcmVhZEFsbEJ5dGVzLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmQsXG4gIHBhcnNlTWV0YWRhdGFcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtHdWFyZDogU3ltYm9sKCdndWFyZCcpLFxuICBrUmVhbG06IFN5bWJvbCgncmVhbG0nKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIFx1MjIxMjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyBcdTIyMTIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICtcdTIyMUUsIG9yIFx1MjIxMlx1MjIxRSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIFx1MjIxMjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHggXHUyMjY1IDJeYml0TGVuZ3RoIFx1MjIxMiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IFx1MjIxMiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSBcdTAwRDcgci5cbiAgaWYgKG4gPCAwKSB7XG4gICAgcmV0dXJuIC0xICogclxuICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gci5cbiAgcmV0dXJuIHJcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1zZXF1ZW5jZVxud2ViaWRsLnNlcXVlbmNlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShWKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBtZXRob2QgYmUgPyBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuXG4gICAgLyoqIEB0eXBlIHtHZW5lcmF0b3J9ICovXG4gICAgY29uc3QgbWV0aG9kID0gVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cblxuICAgIC8vIDMuIElmIG1ldGhvZCBpcyB1bmRlZmluZWQsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIG1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2YgbWV0aG9kLm5leHQgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhbiBpdGVyYXRvci4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLXNlcXVlbmNlLWZyb20taXRlcmFibGVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gbWV0aG9kLm5leHQoKVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBzZXEucHVzaChjb252ZXJ0ZXIodmFsdWUpKVxuICAgIH1cblxuICAgIHJldHVybiBzZXFcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXRvLXJlY29yZFxud2ViaWRsLnJlY29yZENvbnZlcnRlciA9IGZ1bmN0aW9uIChrZXlDb252ZXJ0ZXIsIHZhbHVlQ29udmVydGVyKSB7XG4gIHJldHVybiAoTykgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoTykgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlY29yZCcsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShPKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIE9iamVjdC5rZXlzIG9ubHkgcmV0dXJucyBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhPKVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLlxuICAgIGNvbnN0IGtleXMgPSBSZWZsZWN0Lm93bktleXMoTylcblxuICAgIC8vIDQuIEZvciBlYWNoIGtleSBvZiBrZXlzLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkpXG5cbiAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOlxuICAgICAgaWYgKGRlc2M/LmVudW1lcmFibGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbndlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gKFYsIG9wdHMgPSB7fSkgPT4ge1xuICAgIGlmIChvcHRzLnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgaSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBpLm5hbWUsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke1Z9IHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnkpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghaGFzT3duKGRpY3Rpb25hcnksIGtleSkpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBNaXNzaW5nIHJlcXVpcmVkIGtleSBcIiR7a2V5fVwiLmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWx1ZSA9IGRpY3Rpb25hcnlba2V5XVxuICAgICAgY29uc3QgaGFzRGVmYXVsdCA9IGhhc093bihvcHRpb25zLCAnZGVmYXVsdFZhbHVlJylcblxuICAgICAgLy8gT25seSB1c2UgZGVmYXVsdFZhbHVlIGlmIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmRcbiAgICAgIC8vIGEgZGVmYXVsdFZhbHVlIG9wdGlvbnMgd2FzIHByb3ZpZGVkLlxuICAgICAgaWYgKGhhc0RlZmF1bHQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/PyBkZWZhdWx0VmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoVilcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBWIGlzIG51bGwgYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlXG4gIC8vICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0xlZ2FjeU51bGxUb0VtcHR5U3RyaW5nXVxuICAvLyAgICBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW4gcmV0dXJuIHRoZSBET01TdHJpbmcgdmFsdWVcbiAgLy8gICAgdGhhdCByZXByZXNlbnRzIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGlmIChWID09PSBudWxsICYmIG9wdHMubGVnYWN5TnVsbFRvRW1wdHlTdHJpbmcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDIuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIGlmICh0eXBlb2YgViA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlIHN5bWJvbCB0byBzdHJpbmcuJylcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgSURMIERPTVN0cmluZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlXG4gIC8vICAgIHNhbWUgc2VxdWVuY2Ugb2YgY29kZSB1bml0cyBhcyB0aGUgb25lIHRoZVxuICAvLyAgICBFQ01BU2NyaXB0IFN0cmluZyB2YWx1ZSB4IHJlcHJlc2VudHMuXG4gIHJldHVybiBTdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1CeXRlU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgLy8gTm90ZTogRE9NU3RyaW5nIGNvbnZlcnRlciBwZXJmb3JtID8gVG9TdHJpbmcoVilcbiAgY29uc3QgeCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxuXG4gIC8vIDIuIElmIHRoZSB2YWx1ZSBvZiBhbnkgZWxlbWVudCBvZiB4IGlzIGdyZWF0ZXIgdGhhblxuICAvLyAgICAyNTUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB4Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICh4LmNoYXJDb2RlQXQoaW5kZXgpID4gMjU1KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgdG8gYSBCeXRlU3RyaW5nIGJlY2F1c2UgdGhlIGNoYXJhY3RlciBhdCAnICtcbiAgICAgICAgYGluZGV4ICR7aW5kZXh9IGhhcyBhIHZhbHVlIG9mICR7eC5jaGFyQ29kZUF0KGluZGV4KX0gd2hpY2ggaXMgZ3JlYXRlciB0aGFuIDI1NS5gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGFuIElETCBCeXRlU3RyaW5nIHZhbHVlIHdob3NlIGxlbmd0aCBpcyB0aGVcbiAgLy8gICAgbGVuZ3RoIG9mIHgsIGFuZCB3aGVyZSB0aGUgdmFsdWUgb2YgZWFjaCBlbGVtZW50IGlzXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtVVNWU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcgPSB0b1VTVlN0cmluZ1xuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWJvb2xlYW5cbndlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSB0aGUgcmVzdWx0IG9mIGNvbXB1dGluZyBUb0Jvb2xlYW4oVikuXG4gIGNvbnN0IHggPSBCb29sZWFuKFYpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgYm9vbGVhbiB2YWx1ZSB0aGF0IGlzIHRoZSBvbmUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIHRydXRoIHZhbHVlIGFzIHRoZSBFQ01BU2NyaXB0IEJvb2xlYW4gdmFsdWUgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1hbnlcbndlYmlkbC5jb252ZXJ0ZXJzLmFueSA9IGZ1bmN0aW9uIChWKSB7XG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJzaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICdzaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDMyLCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDMyLCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1zaG9ydFxud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAxNiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAxNiwgJ3Vuc2lnbmVkJywgb3B0cylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2lkbC1BcnJheUJ1ZmZlclxud2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFuXG4gIC8vICAgIFtbQXJyYXlCdWZmZXJEYXRhXV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLWFycmF5YnVmZmVyLWluc3RhbmNlc1xuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtc2hhcmVkYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1Z9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogWydBcnJheUJ1ZmZlciddXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbC5cblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBBcnJheUJ1ZmZlciB2YWx1ZSB0aGF0IGlzIGFcbiAgLy8gICAgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5ID0gZnVuY3Rpb24gKFYsIFQsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBMZXQgVCBiZSB0aGUgSURMIHR5cGUgViBpcyBiZWluZyBjb252ZXJ0ZWQgdG8uXG5cbiAgLy8gMi4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW1R5cGVkQXJyYXlOYW1lXV0gaW50ZXJuYWwgc2xvdCB3aXRoIGEgdmFsdWVcbiAgLy8gICAgZXF1YWwgdG8gVFx1MjAxOXMgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzVHlwZWRBcnJheShWKSB8fFxuICAgIFYuY29uc3RydWN0b3IubmFtZSAhPT0gVC5uYW1lXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1QubmFtZX1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbVC5uYW1lXVxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIGFycmF5IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSBJREwgdmFsdWUgb2YgdHlwZSBUIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3ID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbRGF0YVZpZXddXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHwgIXR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdEYXRhVmlldycsXG4gICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhIERhdGFWaWV3LidcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpcyB0cnVlLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgRGF0YVZpZXcgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNCdWZmZXJTb3VyY2VcbndlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgaWYgKHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIoViwgb3B0cylcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcoViwgb3B0cylcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYSBCdWZmZXJTb3VyY2UuYClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXVxuKVxuXG53ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwucmVjb3JkQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWJpZGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNuXHUyMDE5dCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRhXHUyMDE5cyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbmNsYXNzIEZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgY29uc3RydWN0b3IgKGZpbGVCaXRzLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGaWxlIGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgZmlsZUJpdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10oZmlsZUJpdHMpXG4gICAgZmlsZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZU5hbWUpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyhvcHRpb25zKVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG4gICAgLy8gTm90ZTogQmxvYiBoYW5kbGVzIHRoaXMgZm9yIHVzXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIGxldCB0ID0gb3B0aW9ucy50eXBlXG4gICAgbGV0IGRcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICBzdWJzdGVwOiB7XG4gICAgICBpZiAodCkge1xuICAgICAgICB0ID0gcGFyc2VNSU1FVHlwZSh0KVxuXG4gICAgICAgIGlmICh0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICB0ID0gJydcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgICAgICAgYnJlYWsgc3Vic3RlcFxuICAgICAgICB9XG5cbiAgICAgICAgdCA9IHNlcmlhbGl6ZUFNaW1lVHlwZSh0KS50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG5cbiAgICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgICAgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgc3VwZXIocHJvY2Vzc0Jsb2JQYXJ0cyhmaWxlQml0cywgb3B0aW9ucyksIHsgdHlwZTogdCB9KVxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIG5hbWU6IG4sXG4gICAgICBsYXN0TW9kaWZpZWQ6IGQsXG4gICAgICB0eXBlOiB0XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxufVxuXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdE1vZGlmaWVkOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihCbG9iKVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iUGFydCA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHxcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgICApIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgb3B0cylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIG9wdHMpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnRcbilcblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2Rmbi1GaWxlUHJvcGVydHlCYWdcbndlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xhc3RNb2RpZmllZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2VuZGluZ3MnLFxuICAgIGNvbnZlcnRlcjogKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh2YWx1ZSlcbiAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKVxuXG4gICAgICBpZiAodmFsdWUgIT09ICduYXRpdmUnKSB7XG4gICAgICAgIHZhbHVlID0gJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogJ3RyYW5zcGFyZW50J1xuICB9XG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI3Byb2Nlc3MtYmxvYi1wYXJ0c1xuICogQHBhcmFtIHsoTm9kZUpTLlR5cGVkQXJyYXl8QmxvYnxzdHJpbmcpW119IHBhcnRzXG4gKiBAcGFyYW0ge3sgdHlwZTogc3RyaW5nLCBlbmRpbmdzOiBzdHJpbmcgfX0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQmxvYlBhcnRzIChwYXJ0cywgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLlR5cGVkQXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGVsZW1lbnQgaW4gcGFydHM6XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJ0cykge1xuICAgIC8vIDEuIElmIGVsZW1lbnQgaXMgYSBVU1ZTdHJpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOlxuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBzIGJlIGVsZW1lbnQuXG4gICAgICBsZXQgcyA9IGVsZW1lbnRcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuZGluZ3MgbWVtYmVyIG9mIG9wdGlvbnMgaXMgXCJuYXRpdmVcIiwgc2V0IHNcbiAgICAgIC8vICAgIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBsaW5lIGVuZGluZ3MgdG8gbmF0aXZlXG4gICAgICAvLyAgICBvZiBlbGVtZW50LlxuICAgICAgaWYgKG9wdGlvbnMuZW5kaW5ncyA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgcyA9IGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZShzKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBVVEYtOCBlbmNvZGluZyBzIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbmNvZGVyLmVuY29kZShzKSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihlbGVtZW50KSB8fFxuICAgICAgdHlwZXMuaXNUeXBlZEFycmF5KGVsZW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyAyLiBJZiBlbGVtZW50IGlzIGEgQnVmZmVyU291cmNlLCBnZXQgYSBjb3B5IG9mIHRoZVxuICAgICAgLy8gICAgYnl0ZXMgaGVsZCBieSB0aGUgYnVmZmVyIHNvdXJjZSwgYW5kIGFwcGVuZCB0aG9zZVxuICAgICAgLy8gICAgYnl0ZXMgdG8gYnl0ZXMuXG4gICAgICBpZiAoIWVsZW1lbnQuYnVmZmVyKSB7IC8vIEFycmF5QnVmZmVyXG4gICAgICAgIGJ5dGVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoZWxlbWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShlbGVtZW50KSkge1xuICAgICAgLy8gMy4gSWYgZWxlbWVudCBpcyBhIEJsb2IsIGFwcGVuZCB0aGUgYnl0ZXMgaXQgcmVwcmVzZW50c1xuICAgICAgLy8gICAgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGJ5dGVzLlxuICByZXR1cm4gYnl0ZXNcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNjb252ZXJ0LWxpbmUtZW5kaW5ncy10by1uYXRpdmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZSAocykge1xuICAvLyAxLiBMZXQgbmF0aXZlIGxpbmUgZW5kaW5nIGJlIGJlIHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgbGV0IG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxuJ1xuXG4gIC8vIDIuIElmIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtXHUyMDE5cyBjb252ZW50aW9ucyBhcmUgdG9cbiAgLy8gICAgcmVwcmVzZW50IG5ld2xpbmVzIGFzIGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWRcbiAgLy8gICAgc2VxdWVuY2UsIHNldCBuYXRpdmUgbGluZSBlbmRpbmcgdG8gdGhlIGNvZGUgcG9pbnRcbiAgLy8gICAgVSswMDBEIENSIGZvbGxvd2VkIGJ5IHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcclxcbidcbiAgfVxuXG4gIHJldHVybiBzLnJlcGxhY2UoL1xccj9cXG4vZywgbmF0aXZlTGluZUVuZGluZylcbn1cblxuLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBtb3ZlZCB0byAuL3V0aWwuanMsIHNvbWUgdG9vbHMgKHN1Y2ggYXNcbi8vIHJvbGx1cCkgd2lsbCB3YXJuIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE2MjlcbmZ1bmN0aW9uIGlzRmlsZUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIChOYXRpdmVGaWxlICYmIG9iamVjdCBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRmlsZSB8fCAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgbWFrZUl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5cbi8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jZm9ybWRhdGFcbmNsYXNzIEZvcm1EYXRhIHtcbiAgY29uc3RydWN0b3IgKGZvcm0pIHtcbiAgICBpZiAoZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgICBwcmVmaXg6ICdGb3JtRGF0YSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICAgIHR5cGVzOiBbJ3VuZGVmaW5lZCddXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRlXSA9IFtdXG4gIH1cblxuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmFwcGVuZCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBkZWxldGUobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZW1vdmUgYWxsIGVudHJpZXMgd2hvc2UgbmFtZVxuICAgIC8vIGlzIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHRoaXNba1N0YXRlXS5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgfVxuXG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGZyb21cbiAgICAvLyB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1baWR4XS52YWx1ZVxuICB9XG5cbiAgZ2V0QWxsIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0QWxsJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgaGFzKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYW4gZW50cnlcbiAgICAvLyB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSkgIT09IC0xXG4gIH1cblxuICBzZXQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLnNldCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0JyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIFRoZSBzZXQobmFtZSwgdmFsdWUpIGFuZCBzZXQobmFtZSwgYmxvYlZhbHVlLCBmaWxlbmFtZSkgbWV0aG9kIHN0ZXBzXG4gICAgLy8gYXJlOlxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gdG9VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5J1xuICAgIClcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAndmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBGb3JtRGF0YSkgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxufVxuXG5Gb3JtRGF0YS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEZvcm1EYXRhLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZvcm1EYXRhLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRm9ybURhdGEnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjY3JlYXRlLWFuLWVudHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8QmxvYn0gdmFsdWVcbiAqIEBwYXJhbSB7P3N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIG1ha2VFbnRyeSAobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSB7XG4gIC8vIDEuIFNldCBuYW1lIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBuYW1lIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICAvLyBcIlRvIGNvbnZlcnQgYSBzdHJpbmcgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcsIHJlcGxhY2UgYW55IHN1cnJvZ2F0ZXNcbiAgLy8gIHdpdGggVStGRkZELlwiXG4gIC8vIHNlZTogaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxOC54L2RvY3MvYXBpL2J1ZmZlci5odG1sI2J1ZnRvc3RyaW5nZW5jb2Rpbmctc3RhcnQtZW5kXG4gIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKS50b1N0cmluZygndXRmOCcpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgYSBzdHJpbmcsIHRoZW4gc2V0IHZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZ1xuICAvLyAgICB2YWx1ZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IEJ1ZmZlci5mcm9tKHZhbHVlKS50b1N0cmluZygndXRmOCcpXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gSWYgdmFsdWUgaXMgbm90IGEgRmlsZSBvYmplY3QsIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgdmFsdWUgaXMgXCJibG9iXCJcbiAgICBpZiAoIWlzRmlsZUxpa2UodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgQmxvYlxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIGZpbGVuYW1lIGlzIGdpdmVuLCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIGlzIGZpbGVuYW1lLlxuICAgIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiogQHR5cGUge0ZpbGVQcm9wZXJ0eUJhZ30gKi9cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkXG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gKE5hdGl2ZUZpbGUgJiYgdmFsdWUgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVuZGljaUZpbGVcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBhbiBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgYW5kIHdob3NlIHZhbHVlIGlzIHZhbHVlLlxuICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGb3JtRGF0YSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IHJhbmRvbVxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHlpbml0LWV4dHJhY3RcbmZ1bmN0aW9uIGV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbS5cbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoXG4gICAgICAgICAgdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgPyB0ZXh0RW5jb2Rlci5lbmNvZGUoc291cmNlKSA6IHNvdXJjZVxuICAgICAgICApXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlcikpXG4gICAgICB9LFxuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN0XHUyMDE5cyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3RcdTIwMTlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZVx1MjAxOXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCBcdTAwQUIgb3V0MSwgb3V0MiBcdTAwQkIgYmUgdGhlIHJlc3VsdCBvZiB0ZWVpbmcgYm9keVx1MjAxOXMgc3RyZWFtLlxuICBjb25zdCBbb3V0MSwgb3V0Ml0gPSBib2R5LnN0cmVhbS50ZWUoKVxuICBjb25zdCBvdXQyQ2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUob3V0MiwgeyB0cmFuc2ZlcjogW291dDJdIH0pXG4gIC8vIFRoaXMsIGZvciB3aGF0ZXZlciByZWFzb25zLCB1bnJlZnMgb3V0MkNsb25lIHdoaWNoIGFsbG93c1xuICAvLyB0aGUgcHJvY2VzcyB0byBleGl0IGJ5IGl0c2VsZi5cbiAgY29uc3QgWywgZmluYWxDbG9uZV0gPSBvdXQyQ2xvbmUudGVlKClcblxuICAvLyAyLiBTZXQgYm9keVx1MjAxOXMgc3RyZWFtIHRvIG91dDEuXG4gIGJvZHkuc3RyZWFtID0gb3V0MVxuXG4gIC8vIDMuIFJldHVybiBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIG91dDIgYW5kIG90aGVyIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIGJvZHkuXG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBmaW5hbENsb25lLFxuICAgIGxlbmd0aDogYm9keS5sZW5ndGgsXG4gICAgc291cmNlOiBib2R5LnNvdXJjZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29uc3VtZUJvZHkgKGJvZHkpIHtcbiAgaWYgKGJvZHkpIHtcbiAgICBpZiAoaXNVaW50OEFycmF5KGJvZHkpKSB7XG4gICAgICB5aWVsZCBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGJvZHkuc3RyZWFtXG5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKHN0cmVhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICAgICAgfVxuXG4gICAgICAvLyBDb21wYXQuXG4gICAgICBzdHJlYW1ba0JvZHlVc2VkXSA9IHRydWVcblxuICAgICAgeWllbGQgKiBzdHJlYW1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm9keU1peGluTWV0aG9kcyAoaW5zdGFuY2UpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBibG9iICgpIHtcbiAgICAgIC8vIFRoZSBibG9iKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgQmxvYiB3aG9zZVxuICAgICAgLy8gY29udGVudHMgYXJlIGJ5dGVzIGFuZCB3aG9zZSB0eXBlIGF0dHJpYnV0ZSBpcyB0aGlzXHUyMDE5c1xuICAgICAgLy8gTUlNRSB0eXBlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgbGV0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhIEJsb2Igd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzIGFuZCB0eXBlIGF0dHJpYnV0ZVxuICAgICAgICAvLyBpcyBtaW1lVHlwZS5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogbWltZVR5cGUgfSlcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhcnJheUJ1ZmZlciAoKSB7XG4gICAgICAvLyBUaGUgYXJyYXlCdWZmZXIoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0XG4gICAgICAvLyBvZiBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXJcbiAgICAgIC8vIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcykuYnVmZmVyXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgdGV4dCAoKSB7XG4gICAgICAvLyBUaGUgdGV4dCgpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgVVRGLTggZGVjb2RlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHBhcnNlSlNPTkZyb21CeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIGluc3RhbmNlKVxuXG4gICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJylcblxuICAgICAgLy8gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsIHRoZW46XG4gICAgICBpZiAoL211bHRpcGFydFxcL2Zvcm0tZGF0YS8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuaGVhZGVycykgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgIGxldCBidXNib3lcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJ1c2JveSA9IG5ldyBCdXNib3koe1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHByZXNlcnZlUGF0aDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYCR7ZXJyfWAsICdBYm9ydEVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1c2JveS5vbignZmllbGQnLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnVzYm95Lm9uKCdmaWxlJywgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmtzID0gW11cblxuICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcgfHwgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgIGxldCBiYXNlNjRjaHVuayA9ICcnXG5cbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rICs9IGNodW5rLnRvU3RyaW5nKCkucmVwbGFjZSgvW1xcclxcbl0vZ20sICcnKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJhc2U2NGNodW5rLmxlbmd0aCAtIGJhc2U2NGNodW5rLmxlbmd0aCAlIDRcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmsuc2xpY2UoMCwgZW5kKSwgJ2Jhc2U2NCcpKVxuXG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rID0gYmFzZTY0Y2h1bmsuc2xpY2UoZW5kKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLCAnYmFzZTY0JykpXG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYnVzYm95UmVzb2x2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBidXNib3kub24oJ2ZpbmlzaCcsIHJlc29sdmUpXG4gICAgICAgICAgYnVzYm95Lm9uKCdlcnJvcicsIChlcnIpID0+IHJlamVjdChuZXcgVHlwZUVycm9yKGVycikpKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLmJvZHkgIT09IG51bGwpIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSBidXNib3kud3JpdGUoY2h1bmspXG4gICAgICAgIGJ1c2JveS5lbmQoKVxuICAgICAgICBhd2FpdCBidXNib3lSZXNvbHZlXG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRm9ybURhdGFcbiAgICAgIH0gZWxzZSBpZiAoL2FwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsIHRoZW46XG5cbiAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICBsZXQgZW50cmllc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCB0ZXh0ID0gJydcbiAgICAgICAgICAvLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcGFyc2VyIHdpbGwga2VlcCB0aGUgQk9NLlxuICAgICAgICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmxlbmNvZGVkLXBhcnNlclxuICAgICAgICAgIC8vIE5vdGUgdGhhdCBzdHJlYW1pbmcgZGVjb2RlciBpcyBzdGF0ZWZ1bCBhbmQgY2Fubm90IGJlIHJldXNlZFxuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ0RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBpZ25vcmVCT006IHRydWUgfSlcblxuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgVWludDhBcnJheSBjaHVuaycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKClcbiAgICAgICAgICBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0ZXh0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogVW5jbGVhciB3aGVuIG5ldyBVUkxTZWFyY2hQYXJhbXMgY2FuIGZhaWwgb24gYSBzdHJpbmcuXG4gICAgICAgICAgLy8gMi4gSWYgZW50cmllcyBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcigpLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3Qgd2hvc2UgZW50cmllcyBhcmUgZW50cmllcy5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdhaXQgYSB0aWNrIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UsIGEgVHlwZUVycm9yIGNhbiBiZSB0aHJvd24gd2hlbiBhbiBBYm9ydEVycm9yIHNob3VsZC5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogYCR7aW5zdGFuY2UubmFtZX0uZm9ybURhdGFgLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgcGFyc2UgY29udGVudCBhcyBGb3JtRGF0YS4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHNcbn1cblxuZnVuY3Rpb24gbWl4aW5Cb2R5IChwcm90b3R5cGUpIHtcbiAgT2JqZWN0LmFzc2lnbihwcm90b3R5cGUucHJvdG90eXBlLCBib2R5TWl4aW5NZXRob2RzKHByb3RvdHlwZSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBvYmplY3RcbiAqIEBwYXJhbSB7KHZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gaW5zdGFuY2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3BlY0NvbnN1bWVCb2R5IChvYmplY3QsIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZSwgaW5zdGFuY2UpIHtcbiAgd2ViaWRsLmJyYW5kQ2hlY2sob2JqZWN0LCBpbnN0YW5jZSlcblxuICB0aHJvd0lmQWJvcnRlZChvYmplY3Rba1N0YXRlXSlcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgdW51c2FibGUsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZSByZWplY3RlZFxuICAvLyAgICB3aXRoIGEgVHlwZUVycm9yLlxuICBpZiAoYm9keVVudXNhYmxlKG9iamVjdFtrU3RhdGVdLmJvZHkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZScpXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBnaXZlbiBlcnJvciBiZSB0byByZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBjb25zdCBlcnJvclN0ZXBzID0gKGVycm9yKSA9PiBwcm9taXNlLnJlamVjdChlcnJvcilcblxuICAvLyA0LiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBkYXRhIGJlIHRvIHJlc29sdmVcbiAgLy8gICAgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAgLy8gICAgd2l0aCBkYXRhLiBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwc1xuICAvLyAgICB3aXRoIHRoYXQgZXhjZXB0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSAoZGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoY29udmVydEJ5dGVzVG9KU1ZhbHVlKGRhdGEpKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yU3RlcHMoZSlcbiAgICB9XG4gIH1cblxuICAvLyA1LiBJZiBvYmplY3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gc3VjY2Vzc1N0ZXBzIHdpdGggYW5cbiAgLy8gICAgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgaWYgKG9iamVjdFtrU3RhdGVdLmJvZHkgPT0gbnVsbCkge1xuICAgIHN1Y2Nlc3NTdGVwcyhuZXcgVWludDhBcnJheSgpKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChib2R5KSB7XG4gIC8vIEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIEJvZHkgaW50ZXJmYWNlIG1peGluIGlzXG4gIC8vIHNhaWQgdG8gYmUgdW51c2FibGUgaWYgaXRzIGJvZHkgaXMgbm9uLW51bGwgYW5kXG4gIC8vIGl0cyBib2R5XHUyMDE5cyBzdHJlYW0gaXMgZGlzdHVyYmVkIG9yIGxvY2tlZC5cbiAgcmV0dXJuIGJvZHkgIT0gbnVsbCAmJiAoYm9keS5zdHJlYW0ubG9ja2VkIHx8IHV0aWwuaXNEaXN0dXJiZWQoYm9keS5zdHJlYW0pKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi04LWRlY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5mdW5jdGlvbiB1dGY4RGVjb2RlQnl0ZXMgKGJ1ZmZlcikge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMS4gTGV0IGJ1ZmZlciBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgdGhyZWUgYnl0ZXMgZnJvbVxuICAvLyAgICBpb1F1ZXVlLCBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuXG4gIC8vIDIuIElmIGJ1ZmZlciBpcyAweEVGIDB4QkIgMHhCRiwgdGhlbiByZWFkIHRocmVlXG4gIC8vICAgIGJ5dGVzIGZyb20gaW9RdWV1ZS4gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gIGlmIChidWZmZXJbMF0gPT09IDB4RUYgJiYgYnVmZmVyWzFdID09PSAweEJCICYmIGJ1ZmZlclsyXSA9PT0gMHhCRikge1xuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgzKVxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgVVRGLThcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cbiAgY29uc3Qgb3V0cHV0ID0gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcilcblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtanNvbi1ieXRlcy10by1hLWphdmFzY3JpcHQtdmFsdWVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VKU09ORnJvbUJ5dGVzIChieXRlcykge1xuICByZXR1cm4gSlNPTi5wYXJzZSh1dGY4RGVjb2RlQnl0ZXMoYnl0ZXMpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1taW1lLXR5cGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3Jlc3BvbnNlJykuUmVzcG9uc2V8aW1wb3J0KCcuL3JlcXVlc3QnKS5SZXF1ZXN0fSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYm9keU1pbWVUeXBlIChvYmplY3QpIHtcbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gb2JqZWN0W2tTdGF0ZV1cbiAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzTGlzdC5nZXQoJ2NvbnRlbnQtdHlwZScpXG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlTUlNRVR5cGUoY29udGVudFR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0hUVFAyQnVpbGRSZXF1ZXN0LCBrSFRUUDJDb3B5SGVhZGVycywga0hUVFAxQnVpbGRSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8vIHRva2VuUmVnRXhwIGFuZCBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiB2YWwgaXMgYSB2YWxpZCBIVFRQIHRva2VuXG4gKiBwZXIgdGhlIHJ1bGVzIGRlZmluZWQgaW4gUkZDIDcyMzBcbiAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKi9cbmNvbnN0IHRva2VuUmVnRXhwID0gL15bXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0rJC9cblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLy8gVmVyaWZpZXMgdGhhdCBhIGdpdmVuIHBhdGggaXMgdmFsaWQgZG9lcyBub3QgY29udGFpbiBjb250cm9sIGNoYXJzIFxceDAwIHRvIFxceDIwXG5jb25zdCBpbnZhbGlkUGF0aFJlZ2V4ID0gL1teXFx1MDAyMS1cXHUwMGZmXS9cblxuY29uc3Qga0hhbmRsZXIgPSBTeW1ib2woJ2hhbmRsZXInKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5cbmxldCBleHRyYWN0Qm9keVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuY3JlYXRlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmNyZWF0ZScpXG4gIGNoYW5uZWxzLmJvZHlTZW50ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmJvZHlTZW50JylcbiAgY2hhbm5lbHMuaGVhZGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJylcbiAgY2hhbm5lbHMudHJhaWxlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnKVxuICBjaGFubmVscy5lcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDplcnJvcicpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuY3JlYXRlID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5ib2R5U2VudCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuaGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMudHJhaWxlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeSxcbiAgICBpZGVtcG90ZW50LFxuICAgIGJsb2NraW5nLFxuICAgIHVwZ3JhZGUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgcmVzZXQsXG4gICAgdGhyb3dPbkVycm9yLFxuICAgIGV4cGVjdENvbnRpbnVlXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LmV4ZWMocGF0aCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKG1ldGhvZCkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUgJiYgdHlwZW9mIHVwZ3JhZGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3VwZ3JhZGUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXJzVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBib2R5VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKHJlc2V0ICE9IG51bGwgJiYgdHlwZW9mIHJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXNldCcpXG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdENvbnRpbnVlICE9IG51bGwgJiYgdHlwZW9mIGV4cGVjdENvbnRpbnVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBleHBlY3RDb250aW51ZScpXG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzVGltZW91dCA9IGhlYWRlcnNUaW1lb3V0XG5cbiAgICB0aGlzLmJvZHlUaW1lb3V0ID0gYm9keVRpbWVvdXRcblxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yID09PSB0cnVlXG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxuXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcblxuICAgICAgY29uc3QgclN0YXRlID0gdGhpcy5ib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoIXJTdGF0ZSB8fCAhclN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAgIHRoaXMuZW5kSGFuZGxlciA9IGZ1bmN0aW9uIGF1dG9EZXN0cm95ICgpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gYm9keSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5idWZmZXIuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5Lmxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSB8fCB1dGlsLmlzSXRlcmFibGUoYm9keSkgfHwgdXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keSBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBSZWFkYWJsZSBzdHJlYW0sIGFuIGl0ZXJhYmxlLCBvciBhbiBhc3luYyBpdGVyYWJsZScpXG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcblxuICAgIHRoaXMudXBncmFkZSA9IHVwZ3JhZGUgfHwgbnVsbFxuXG4gICAgdGhpcy5wYXRoID0gcXVlcnkgPyB1dGlsLmJ1aWxkVVJMKHBhdGgsIHF1ZXJ5KSA6IHBhdGhcblxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luXG5cbiAgICB0aGlzLmlkZW1wb3RlbnQgPSBpZGVtcG90ZW50ID09IG51bGxcbiAgICAgID8gbWV0aG9kID09PSAnSEVBRCcgfHwgbWV0aG9kID09PSAnR0VUJ1xuICAgICAgOiBpZGVtcG90ZW50XG5cbiAgICB0aGlzLmJsb2NraW5nID0gYmxvY2tpbmcgPT0gbnVsbCA/IGZhbHNlIDogYmxvY2tpbmdcblxuICAgIHRoaXMucmVzZXQgPSByZXNldCA9PSBudWxsID8gbnVsbCA6IHJlc2V0XG5cbiAgICB0aGlzLmhvc3QgPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gJydcblxuICAgIC8vIE9ubHkgZm9yIEgyXG4gICAgdGhpcy5leHBlY3RDb250aW51ZSA9IGV4cGVjdENvbnRpbnVlICE9IG51bGwgPyBleHBlY3RDb250aW51ZSA6IGZhbHNlXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZSh0aGlzLmJvZHkpKSB7XG4gICAgICBpZiAodXRpbC5ub2RlTWFqb3IgPCAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yIDwgOCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdGb3JtLURhdGEgYm9kaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBub2RlIHYxNi44IGFuZCBuZXdlci4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4dHJhY3RCb2R5KSB7XG4gICAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vZmV0Y2gvYm9keS5qcycpLmV4dHJhY3RCb2R5XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgaWYgKHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbiAgICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Y29udGVudFR5cGV9XFxyXFxuYFxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5ID0gYm9keVN0cmVhbS5zdHJlYW1cbiAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkgJiYgdGhpcy5jb250ZW50VHlwZSA9PSBudWxsICYmIGJvZHkudHlwZSkge1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Ym9keS50eXBlfVxcclxcbmBcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSB1dGlsLmdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKGNoYW5uZWxzLmhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkRhdGEoY2h1bmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcblxuICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZVxuICAgIGlmIChjaGFubmVscy50cmFpbGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMudHJhaWxlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHRyYWlsZXJzIH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETyAoZml4KTogVGhpcyBtaWdodCBiZSBhIGJhZCBpZGVhP1xuICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICB9XG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGlmIChjaGFubmVscy5lcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuZXJyb3IucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIGVycm9yIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25GaW5hbGx5ICgpIHtcbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB0aGlzLmVuZEhhbmRsZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogYWRqdXN0IHRvIHN1cHBvcnQgSDJcbiAgYWRkSGVhZGVyIChrZXksIHZhbHVlKSB7XG4gICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIHZhbHVlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMUJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIC8vIFRPRE86IE1pZ3JhdGUgaGVhZGVyIHBhcnNpbmcgaGVyZSwgdG8gbWFrZSBSZXF1ZXN0c1xuICAgIC8vIEhUVFAgYWdub3N0aWNcbiAgICByZXR1cm4gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0cy5oZWFkZXJzXG4gICAgb3B0cyA9IHsgLi4ub3B0cywgaGVhZGVyczogbnVsbCB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzID0ge31cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGtleSwgaGVhZGVyc1trZXldLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0XG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkNvcHlIZWFkZXJzXSAocmF3KSB7XG4gICAgY29uc3QgcmF3SGVhZGVycyA9IHJhdy5zcGxpdCgnXFxyXFxuJylcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJhd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGhlYWRlci5zcGxpdCgnOiAnKVxuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgIGlmIChoZWFkZXJzW2tleV0pIGhlYWRlcnNba2V5XSArPSBgLCR7dmFsdWV9YFxuICAgICAgZWxzZSBoZWFkZXJzW2tleV0gPSB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlclZhbHVlIChrZXksIHZhbCwgc2tpcEFwcGVuZCkge1xuICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgdmFsID0gdmFsICE9IG51bGwgPyBgJHt2YWx9YCA6ICcnXG5cbiAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICByZXR1cm4gc2tpcEFwcGVuZCA/IHZhbCA6IGAke2tleX06ICR7dmFsfVxcclxcbmBcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlciAocmVxdWVzdCwga2V5LCB2YWwsIHNraXBBcHBlbmQgPSBmYWxzZSkge1xuICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKFxuICAgIHJlcXVlc3QuaG9zdCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2hvc3QnXG4gICkge1xuICAgIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgfVxuICAgIC8vIENvbnN1bWVkIGJ5IENsaWVudFxuICAgIHJlcXVlc3QuaG9zdCA9IHZhbFxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDE0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID0gcGFyc2VJbnQodmFsLCAxMClcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXF1ZXN0LmNvbnRlbnRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC1sZW5ndGggaGVhZGVyJylcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDEyICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPSB2YWxcbiAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDE3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc2Zlci1lbmNvZGluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHRyYW5zZmVyLWVuY29kaW5nIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nXG4gICkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwudG9Mb3dlckNhc2UoKSA6IG51bGxcbiAgICBpZiAodmFsdWUgIT09ICdjbG9zZScgJiYgdmFsdWUgIT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb24gaGVhZGVyJylcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXAtYWxpdmUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd1cGdyYWRlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDYgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2V4cGVjdCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKCdleHBlY3QgaGVhZGVyIG5vdCBzdXBwb3J0ZWQnKVxuICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMoa2V5KSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2tpcEFwcGVuZCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNba2V5XSkgcmVxdWVzdC5oZWFkZXJzW2tleV0gKz0gYCwke3Byb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZCl9YFxuICAgICAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3Qge1xuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBrRGVzdHJveWVkID0gU3ltYm9sKCdkZXN0cm95ZWQnKVxuY29uc3Qga0Nsb3NlZCA9IFN5bWJvbCgnY2xvc2VkJylcbmNvbnN0IGtPbkRlc3Ryb3llZCA9IFN5bWJvbCgnb25EZXN0cm95ZWQnKVxuY29uc3Qga09uQ2xvc2VkID0gU3ltYm9sKCdvbkNsb3NlZCcpXG5jb25zdCBrSW50ZXJjZXB0ZWREaXNwYXRjaCA9IFN5bWJvbCgnSW50ZXJjZXB0ZWQgRGlzcGF0Y2gnKVxuXG5jbGFzcyBEaXNwYXRjaGVyQmFzZSBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trRGVzdHJveWVkXVxuICB9XG5cbiAgZ2V0IGNsb3NlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nsb3NlZF1cbiAgfVxuXG4gIGdldCBpbnRlcmNlcHRvcnMgKCkge1xuICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRvcnNdXG4gIH1cblxuICBzZXQgaW50ZXJjZXB0b3JzIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICBpZiAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgICBmb3IgKGxldCBpID0gbmV3SW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXVxuICAgICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnRlcmNlcHRvciBtdXN0IGJlIGFuIGZ1bmN0aW9uJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBuZXdJbnRlcmNlcHRvcnNcbiAgfVxuXG4gIGNsb3NlIChjYWxsYmFjaykge1xuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpLCBudWxsKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25DbG9zZWRdKSB7XG4gICAgICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzW2tDbG9zZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25DbG9zZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkNsb3NlZF1cbiAgICAgIHRoaXNba09uQ2xvc2VkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trQ2xvc2VdKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGVzdHJveSgpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhvbkNsb3NlZClcbiAgICAgIH0pXG4gIH1cblxuICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gZXJyXG4gICAgICBlcnIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnIsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBuZXZlciBlcnJvciAqLyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgaWYgKHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGVyciA9IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IHRydWVcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSB0aGlzW2tPbkRlc3Ryb3llZF0gfHwgW11cbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uRGVzdHJveWVkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25EZXN0cm95ZWRdXG4gICAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Rlc3Ryb3ldKGVycikudGhlbigoKSA9PiB7XG4gICAgICBxdWV1ZU1pY3JvdGFzayhvbkRlc3Ryb3llZClcbiAgICB9KVxuICB9XG5cbiAgW2tJbnRlcmNlcHRlZERpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghdGhpc1trSW50ZXJjZXB0b3JzXSB8fCB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSB0aGlzW2tEaXNwYXRjaF1cbiAgICAgIHJldHVybiB0aGlzW2tEaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9XG5cbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzW2tEaXNwYXRjaF0uYmluZCh0aGlzKVxuICAgIGZvciAobGV0IGkgPSB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBkaXNwYXRjaCA9IHRoaXNba0ludGVyY2VwdG9yc11baV0oZGlzcGF0Y2gpXG4gICAgfVxuICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gZGlzcGF0Y2hcbiAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0gfHwgdGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnRDbG9zZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5vbkVycm9yKGVycilcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlckJhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIENvbm5lY3RUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIXByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCd0bHMnKVxuICAgICAgfVxuICAgICAgc2VydmVybmFtZSA9IHNlcnZlcm5hbWUgfHwgb3B0aW9ucy5zZXJ2ZXJuYW1lIHx8IHV0aWwuZ2V0U2VydmVyTmFtZShob3N0KSB8fCBudWxsXG5cbiAgICAgIGNvbnN0IHNlc3Npb25LZXkgPSBzZXJ2ZXJuYW1lIHx8IGhvc3RuYW1lXG4gICAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KSB8fCBudWxsXG5cbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDE2Mzg0LCAvLyBUTFMgaW4gbm9kZSBjYW4ndCBoYXZlIGJpZ2dlciBIV00gYW55d2F5Li4uXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgIHNlc3Npb24sXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgLy8gVE9ETyhIVFRQLzIpOiBBZGQgc3VwcG9ydCBmb3IgaDJjXG4gICAgICAgIEFMUE5Qcm90b2NvbHM6IGFsbG93SDIgPyBbJ2h0dHAvMS4xJywgJ2gyJ10gOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgIHNvY2tldDogaHR0cFNvY2tldCwgLy8gdXBncmFkZSBzb2NrZXQgY29ubmVjdGlvblxuICAgICAgICBwb3J0OiBwb3J0IHx8IDQ0MyxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG5cbiAgICAgIHNvY2tldFxuICAgICAgICAub24oJ3Nlc3Npb24nLCBmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IENhbiBhIHNlc3Npb24gYmVjb21lIGludmFsaWQgb25jZSBlc3RhYmxpc2hlZD8gRG9uJ3QgdGhpbmsgc28/XG4gICAgICAgICAgc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoIWh0dHBTb2NrZXQsICdodHRwU29ja2V0IGNhbiBvbmx5IGJlIHNlbnQgb24gVExTIHVwZGF0ZScpXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0OiBwb3J0IHx8IDgwLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNhbmNlbFRpbWVvdXQgPSBzZXR1cFRpbWVvdXQoKCkgPT4gb25Db25uZWN0VGltZW91dChzb2NrZXQpLCB0aW1lb3V0KVxuXG4gICAgc29ja2V0XG4gICAgICAuc2V0Tm9EZWxheSh0cnVlKVxuICAgICAgLm9uY2UocHJvdG9jb2wgPT09ICdodHRwczonID8gJ3NlY3VyZUNvbm5lY3QnIDogJ2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKGVycilcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHJldHVybiBzb2NrZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFRpbWVvdXQgKG9uQ29ubmVjdFRpbWVvdXQsIHRpbWVvdXQpIHtcbiAgaWYgKCF0aW1lb3V0KSB7XG4gICAgcmV0dXJuICgpID0+IHt9XG4gIH1cblxuICBsZXQgczEgPSBudWxsXG4gIGxldCBzMiA9IG51bGxcbiAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW90b3Jpc2Ugc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgczIgPSBzZXRJbW1lZGlhdGUoKCkgPT4gb25Db25uZWN0VGltZW91dCgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Db25uZWN0VGltZW91dCgpXG4gICAgICB9XG4gICAgfSlcbiAgfSwgdGltZW91dClcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgIGNsZWFySW1tZWRpYXRlKHMyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ29ubmVjdFRpbWVvdXQgKHNvY2tldCkge1xuICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQ29ubmVjdFRpbWVvdXRFcnJvcigpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29ubmVjdG9yXG4iLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jb25zdCByZWRpcmVjdGFibGVTdGF0dXNDb2RlcyA9IFszMDAsIDMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5jb25zdCBrQm9keSA9IFN5bWJvbCgnYm9keScpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5jbGFzcyBSZWRpcmVjdEhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcikge1xuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgb3B0cy5tZXRob2QsIG9wdHMudXBncmFkZSlcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIG9wdHMgbXVzdCBiZSBhIGNvcHlcbiAgICB0aGlzLm1heFJlZGlyZWN0aW9ucyA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0odGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBQcm92aWRlIHNvbWUgd2F5IGZvciB0aGUgdXNlciB0byBjYWNoZSB0aGUgZmlsZSB0byBlLmcuIC90bXBcbiAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BhdGNoZWQgYWdhaW4/XG4gICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgICBpZiAodXRpbC5ib2R5TGVuZ3RoKHRoaXMub3B0cy5ib2R5KSA9PT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVxuICAgICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5ib2R5LnJlYWRhYmxlRGlkUmVhZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5W2tCb2R5VXNlZF0gPSBmYWxzZVxuICAgICAgICBFRS5wcm90b3R5cGUub24uY2FsbCh0aGlzLm9wdHMuYm9keSwgJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmJvZHkgJiYgdHlwZW9mIHRoaXMub3B0cy5ib2R5LnBpcGVUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZGlzdHVyYmVkLiBUaGlzIGlzIGp1c3RcbiAgICAgIC8vIGEgd29ya2Fyb3VuZC5cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLm9wdHMuYm9keSAmJlxuICAgICAgdHlwZW9mIHRoaXMub3B0cy5ib2R5ICE9PSAnc3RyaW5nJyAmJlxuICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh0aGlzLm9wdHMuYm9keSkgJiZcbiAgICAgIHV0aWwuaXNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBhbGxvdyByZS11c2luZyBpdGVyYWJsZSBpZiAhdGhpcy5vcHRzLmlkZW1wb3RlbnRcbiAgICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoYWJvcnQsIHsgaGlzdG9yeTogdGhpcy5oaXN0b3J5IH0pXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMgfHwgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSlcbiAgICAgID8gbnVsbFxuICAgICAgOiBwYXJzZUxvY2F0aW9uKHN0YXR1c0NvZGUsIGhlYWRlcnMpXG5cbiAgICBpZiAodGhpcy5vcHRzLm9yaWdpbikge1xuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gobmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfVxuXG4gICAgY29uc3QgeyBvcmlnaW4sIHBhdGhuYW1lLCBzZWFyY2ggfSA9IHV0aWwucGFyc2VVUkwobmV3IFVSTCh0aGlzLmxvY2F0aW9uLCB0aGlzLm9wdHMub3JpZ2luICYmIG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKSlcbiAgICBjb25zdCBwYXRoID0gc2VhcmNoID8gYCR7cGF0aG5hbWV9JHtzZWFyY2h9YCA6IHBhdGhuYW1lXG5cbiAgICAvLyBSZW1vdmUgaGVhZGVycyByZWZlcnJpbmcgdG8gdGhlIG9yaWdpbmFsIFVSTC5cbiAgICAvLyBCeSBkZWZhdWx0IGl0IGlzIEhvc3Qgb25seSwgdW5sZXNzIGl0J3MgYSAzMDMgKHNlZSBiZWxvdyksIHdoaWNoIHJlbW92ZXMgYWxzbyBhbGwgQ29udGVudC0qIGhlYWRlcnMuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbiAgICB0aGlzLm9wdHMuaGVhZGVycyA9IGNsZWFuUmVxdWVzdEhlYWRlcnModGhpcy5vcHRzLmhlYWRlcnMsIHN0YXR1c0NvZGUgPT09IDMwMywgdGhpcy5vcHRzLm9yaWdpbiAhPT0gb3JpZ2luKVxuICAgIHRoaXMub3B0cy5wYXRoID0gcGF0aFxuICAgIHRoaXMub3B0cy5vcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLm9wdHMubWF4UmVkaXJlY3Rpb25zID0gMFxuICAgIHRoaXMub3B0cy5xdWVyeSA9IG51bGxcblxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbiAgICAvLyBJbiBjYXNlIG9mIEhUVFAgMzAzLCBhbHdheXMgcmVwbGFjZSBtZXRob2QgdG8gYmUgZWl0aGVyIEhFQUQgb3IgR0VUXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDMwMyAmJiB0aGlzLm9wdHMubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMub3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgYm9kaWVzLlxuXG4gICAgICAgIFJlZGlyZWN0aW9uIGlzIHVzZWQgdG8gc2VydmUgdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBmcm9tIGFub3RoZXIgVVJMLCBzbyBpdCBpcyBhc3N1bWVzIHRoYXRcbiAgICAgICAgbm8gYm9keSBpcyBnZW5lcmF0ZWQgKGFuZCB0aHVzIGNhbiBiZSBpZ25vcmVkKS4gRXZlbiB0aG91Z2ggZ2VuZXJhdGluZyBhIGJvZHkgaXMgbm90IHByb2hpYml0ZWQuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDEsIDMwMiwgMzAzLCAzMDcgYW5kIDMwOCAodGhlIGxhdHRlciBmcm9tIFJGQyA3MjM4KSwgdGhlIHNwZWNzIG1lbnRpb24gdGhhdCB0aGUgYm9keSB1c3VhbGx5XG4gICAgICAgICh3aGljaCBtZWFucyBpdCdzIG9wdGlvbmFsIGFuZCBub3QgbWFuZGF0ZWQpIGNvbnRhaW4ganVzdCBhbiBoeXBlcmxpbmsgdG8gdGhlIHZhbHVlIG9mXG4gICAgICAgIHRoZSBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIsIHNvIHRoZSBib2R5IGNhbiBiZSBpZ25vcmVkIHNhZmVseS5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMCwgd2hpY2ggaXMgXCJNdWx0aXBsZSBDaG9pY2VzXCIsIHRoZSBzcGVjIG1lbnRpb25zIGJvdGggZ2VuZXJhdGluZyBhIExvY2F0aW9uXG4gICAgICAgIHJlc3BvbnNlIGhlYWRlciBBTkQgYSByZXNwb25zZSBib2R5IHdpdGggdGhlIG90aGVyIHBvc3NpYmxlIGxvY2F0aW9uIHRvIGZvbGxvdy5cbiAgICAgICAgU2luY2UgdGhlIHNwZWMgZXhwbGljaXRpbHkgY2hvb3NlcyBub3QgdG8gc3BlY2lmeSBhIGZvcm1hdCBmb3Igc3VjaCBib2R5IGFuZCBsZWF2ZSBpdCB0b1xuICAgICAgICBzZXJ2ZXJzIGFuZCBicm93c2VycyBpbXBsZW1lbnRvcnMsIHdlIGlnbm9yZSB0aGUgYm9keSBhcyB0aGVyZSBpcyBubyBzcGVjaWZpZWQgd2F5IHRvIGV2ZW50dWFsbHkgcGFyc2UgaXQuXG4gICAgICAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgdHJhaWxlcnMgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIGluIGNhc2Ugb2YgcmVkaXJlY3Rpb25zXG4gICAgICAgIGFuZCBuZWl0aGVyIGFyZSB1c2VmdWwgaWYgcHJlc2VudC5cblxuICAgICAgICBTZWUgY29tbWVudCBvbiBvbkRhdGEgbWV0aG9kIGFib3ZlIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9ucy5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDc0xnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMWtBSUFCQkdHcENBRGNEQUNBQVFnQTNBd0FnQUVFNGFrSUFOd01BSUFCQk1HcENBRGNEQUNBQVFTaHFRZ0EzQXdBZ0FFRWdha0lBTndNQUlBQkJFR3BDQURjREFDQUFRUWhxUWdBM0F3QWdBRUhkQVRZQ0hFRUFDM3NCQVg4Q1FDQUFLQUlNSWdNTkFBSkFJQUFvQWdSRkRRQWdBQ0FCTmdJRUN3SkFJQUFnQVNBQ0VNU0FnSUFBSWdNTkFDQUFLQUlNRHdzZ0FDQUROZ0ljUVFBaEF5QUFLQUlFSWdGRkRRQWdBQ0FCSUFJZ0FDZ0NDQkdCZ0lDQUFBQWlBVVVOQUNBQUlBSTJBaFFnQUNBQk5nSU1JQUVoQXdzZ0F3dms4d0VERG44RGZnUi9JNENBZ0lBQVFSQnJJZ01rZ0lDQWdBQWdBU0VFSUFFaEJTQUJJUVlnQVNFSElBRWhDQ0FCSVFrZ0FTRUtJQUVoQ3lBQklRd2dBU0VOSUFFaERpQUJJUThDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUNnQ0hDSVFRWDlxRHQwQjJnRUIyUUVDQXdRRkJnY0lDUW9MREEwTzJBRVBFTmNCRVJMV0FSTVVGUllYR0JrYUcrQUIzd0VjSFI3VkFSOGdJU0lqSkNYVUFTWW5LQ2txS3l6VEFkSUJMUzdSQWRBQkx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHMndGSFNFbEt6d0hPQVV2TkFVek1BVTFPVDFCUlVsTlVWVlpYV0ZsYVcxeGRYbDlnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2Y0QUJnUUdDQVlNQmhBR0ZBWVlCaHdHSUFZa0JpZ0dMQVl3QmpRR09BWThCa0FHUkFaSUJrd0dVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0hMQWNvQnVBSEpBYmtCeUFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQVFEY0FRdEJBQ0VRRE1ZQkMwRU9JUkFNeFFFTFFRMGhFQXpFQVF0QkR5RVFETU1CQzBFUUlSQU13Z0VMUVJNaEVBekJBUXRCRkNFUURNQUJDMEVWSVJBTXZ3RUxRUlloRUF5K0FRdEJGeUVRREwwQkMwRVlJUkFNdkFFTFFSa2hFQXk3QVF0QkdpRVFETG9CQzBFYklSQU11UUVMUVJ3aEVBeTRBUXRCQ0NFUURMY0JDMEVkSVJBTXRnRUxRU0FoRUF5MUFRdEJIeUVRRExRQkMwRUhJUkFNc3dFTFFTRWhFQXl5QVF0QklpRVFETEVCQzBFZUlSQU1zQUVMUVNNaEVBeXZBUXRCRWlFUURLNEJDMEVSSVJBTXJRRUxRU1FoRUF5c0FRdEJKU0VRREtzQkMwRW1JUkFNcWdFTFFTY2hFQXlwQVF0Qnd3RWhFQXlvQVF0QktTRVFES2NCQzBFcklSQU1wZ0VMUVN3aEVBeWxBUXRCTFNFUURLUUJDMEV1SVJBTW93RUxRUzhoRUF5aUFRdEJ4QUVoRUF5aEFRdEJNQ0VRREtBQkMwRTBJUkFNbndFTFFRd2hFQXllQVF0Qk1TRVFESjBCQzBFeUlSQU1uQUVMUVRNaEVBeWJBUXRCT1NFUURKb0JDMEUxSVJBTW1RRUxRY1VCSVJBTW1BRUxRUXNoRUF5WEFRdEJPaUVRREpZQkMwRTJJUkFNbFFFTFFRb2hFQXlVQVF0Qk55RVFESk1CQzBFNElSQU1rZ0VMUVR3aEVBeVJBUXRCT3lFUURKQUJDMEU5SVJBTWp3RUxRUWtoRUF5T0FRdEJLQ0VRREkwQkMwRStJUkFNakFFTFFUOGhFQXlMQVF0QndBQWhFQXlLQVF0QndRQWhFQXlKQVF0QndnQWhFQXlJQVF0Qnd3QWhFQXlIQVF0QnhBQWhFQXlHQVF0QnhRQWhFQXlGQVF0QnhnQWhFQXlFQVF0QktpRVFESU1CQzBISEFDRVFESUlCQzBISUFDRVFESUVCQzBISkFDRVFESUFCQzBIS0FDRVFESDhMUWNzQUlSQU1mZ3RCelFBaEVBeDlDMEhNQUNFUURId0xRYzRBSVJBTWV3dEJ6d0FoRUF4NkMwSFFBQ0VRREhrTFFkRUFJUkFNZUF0QjBnQWhFQXgzQzBIVEFDRVFESFlMUWRRQUlSQU1kUXRCMWdBaEVBeDBDMEhWQUNFUURITUxRUVloRUF4eUMwSFhBQ0VRREhFTFFRVWhFQXh3QzBIWUFDRVFERzhMUVFRaEVBeHVDMEhaQUNFUURHMExRZG9BSVJBTWJBdEIyd0FoRUF4ckMwSGNBQ0VRREdvTFFRTWhFQXhwQzBIZEFDRVFER2dMUWQ0QUlSQU1ad3RCM3dBaEVBeG1DMEhoQUNFUURHVUxRZUFBSVJBTVpBdEI0Z0FoRUF4akMwSGpBQ0VRREdJTFFRSWhFQXhoQzBIa0FDRVFER0FMUWVVQUlSQU1Yd3RCNWdBaEVBeGVDMEhuQUNFUURGMExRZWdBSVJBTVhBdEI2UUFoRUF4YkMwSHFBQ0VRREZvTFFlc0FJUkFNV1F0QjdBQWhFQXhZQzBIdEFDRVFERmNMUWU0QUlSQU1WZ3RCN3dBaEVBeFZDMEh3QUNFUURGUUxRZkVBSVJBTVV3dEI4Z0FoRUF4U0MwSHpBQ0VRREZFTFFmUUFJUkFNVUF0QjlRQWhFQXhQQzBIMkFDRVFERTRMUWZjQUlSQU1UUXRCK0FBaEVBeE1DMEg1QUNFUURFc0xRZm9BSVJBTVNndEIrd0FoRUF4SkMwSDhBQ0VRREVnTFFmMEFJUkFNUnd0Qi9nQWhFQXhHQzBIL0FDRVFERVVMUVlBQklSQU1SQXRCZ1FFaEVBeERDMEdDQVNFUURFSUxRWU1CSVJBTVFRdEJoQUVoRUF4QUMwR0ZBU0VRREQ4TFFZWUJJUkFNUGd0Qmh3RWhFQXc5QzBHSUFTRVFERHdMUVlrQklSQU1Pd3RCaWdFaEVBdzZDMEdMQVNFUUREa0xRWXdCSVJBTU9BdEJqUUVoRUF3M0MwR09BU0VRRERZTFFZOEJJUkFNTlF0QmtBRWhFQXcwQzBHUkFTRVFERE1MUVpJQklSQU1NZ3RCa3dFaEVBd3hDMEdVQVNFUUREQUxRWlVCSVJBTUx3dEJsZ0VoRUF3dUMwR1hBU0VRREMwTFFaZ0JJUkFNTEF0Qm1RRWhFQXdyQzBHYUFTRVFEQ29MUVpzQklSQU1LUXRCbkFFaEVBd29DMEdkQVNFUURDY0xRWjRCSVJBTUpndEJud0VoRUF3bEMwR2dBU0VRRENRTFFhRUJJUkFNSXd0Qm9nRWhFQXdpQzBHakFTRVFEQ0VMUWFRQklSQU1JQXRCcFFFaEVBd2ZDMEdtQVNFUURCNExRYWNCSVJBTUhRdEJxQUVoRUF3Y0MwR3BBU0VRREJzTFFhb0JJUkFNR2d0QnF3RWhFQXdaQzBHc0FTRVFEQmdMUWEwQklSQU1Gd3RCcmdFaEVBd1dDMEVCSVJBTUZRdEJyd0VoRUF3VUMwR3dBU0VRREJNTFFiRUJJUkFNRWd0QnN3RWhFQXdSQzBHeUFTRVFEQkFMUWJRQklSQU1Ed3RCdFFFaEVBd09DMEcyQVNFUURBMExRYmNCSVJBTURBdEJ1QUVoRUF3TEMwRzVBU0VRREFvTFFib0JJUkFNQ1F0QnV3RWhFQXdJQzBIR0FTRVFEQWNMUWJ3QklSQU1CZ3RCdlFFaEVBd0ZDMEcrQVNFUURBUUxRYjhCSVJBTUF3dEJ3QUVoRUF3Q0MwSENBU0VRREFFTFFjRUJJUkFMQTBBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFEc2NCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZUh5QWhJeVVvUDBCQlJFVkdSMGhKU2t0TVRVOVFVVkpUM2dOWFdWdGNYV0JpWldabmFHbHFhMnh0YjNCeGNuTjBkWFozZUhsNmUzeDlmb0FCZ2dHRkFZWUJod0dKQVlzQmpBR05BWTRCandHUUFaRUJsQUdWQVpZQmx3R1lBWmtCbWdHYkFad0JuUUdlQVo4Qm9BR2hBYUlCb3dHa0FhVUJwZ0duQWFnQnFRR3FBYXNCckFHdEFhNEJyd0d3QWJFQnNnR3pBYlFCdFFHMkFiY0J1QUc1QWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCeHdISUFja0J5Z0hMQWN3QnpRSE9BYzhCMEFIUkFkSUIwd0hVQWRVQjFnSFhBZGdCMlFIYUFkc0IzQUhkQWQ0QjRBSGhBZUlCNHdIa0FlVUI1Z0huQWVnQjZRSHFBZXNCN0FIdEFlNEI3d0h3QWZFQjhnSHpBWmtDcEFLd0F2NEMvZ0lMSUFFaUJDQUNSdzN6QVVIZEFTRVFEUDhEQ3lBQkloQWdBa2NOM1FGQnd3RWhFQXorQXdzZ0FTSUJJQUpIRFpBQlFmY0FJUkFNL1FNTElBRWlBU0FDUncyR0FVSHZBQ0VRRFB3REN5QUJJZ0VnQWtjTmYwSHFBQ0VRRFBzREN5QUJJZ0VnQWtjTmUwSG9BQ0VRRFBvREN5QUJJZ0VnQWtjTmVFSG1BQ0VRRFBrREN5QUJJZ0VnQWtjTkdrRVlJUkFNK0FNTElBRWlBU0FDUncwVVFSSWhFQXozQXdzZ0FTSUJJQUpIRFZsQnhRQWhFQXoyQXdzZ0FTSUJJQUpIRFVwQlB5RVFEUFVEQ3lBQklnRWdBa2NOU0VFOElSQU05QU1MSUFFaUFTQUNSdzFCUVRFaEVBenpBd3NnQUMwQUxrRUJSZzNyQXd5SEFnc2dBQ0FCSWdFZ0FoREFnSUNBQUVFQlJ3M21BU0FBUWdBM0F5QU01d0VMSUFBZ0FTSUJJQUlRdElDQWdBQWlFQTNuQVNBQklRRU05UUlMQWtBZ0FTSUJJQUpIRFFCQkJpRVFEUEFEQ3lBQUlBRkJBV29pQVNBQ0VMdUFnSUFBSWhBTjZBRWdBU0VCRERFTElBQkNBRGNESUVFU0lSQU0xUU1MSUFFaUVDQUNSdzByUVIwaEVBenRBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUZCRUNFUUROUURDMEVISVJBTTdBTUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjVRRkJDQ0VRRE9zREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFVUlSQU0wZ01MUVFraEVBenFBd3NnQVNFQklBQXBBeUJRRGVRQklBRWhBUXp5QWdzQ1FDQUJJZ0VnQWtjTkFFRUxJUkFNNlFNTElBQWdBVUVCYWlJQklBSVF0b0NBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM21BU0FCSVFFTURRc2dBQ0FCSWdFZ0FoQzZnSUNBQUNJUURlY0JJQUVoQVF6d0Fnc0NRQ0FCSWdFZ0FrY05BRUVQSVJBTTVRTUxJQUV0QUFBaUVFRTdSZzBJSUJCQkRVY042QUVnQVVFQmFpRUJETzhDQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONkFFZ0FTRUJEUElDQ3dOQUFrQWdBUzBBQUVId3RZQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrY042d0VnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQVVFQmFpSUJFTG1BZ0lBQUloQU42Z0VnQVNFQkRQUUNDeUFCUVFGcUlnRWdBa2NOQUF0QkVpRVFET0lEQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONlFFZ0FTRUJEQW9MSUFFaUFTQUNSdzBHUVJzaEVBemdBd3NDUUNBQklnRWdBa2NOQUVFV0lSQU00QU1MSUFCQmlvQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFBZ0FTQUNFTGlBZ0lBQUloQU42Z0VnQVNFQlFTQWhFQXpHQXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFSHd0NENBQUdvdEFBQWlFRUVDUmcwQUFrQWdFRUYvYWc0RTVRSHNBUURyQWV3QkN5QUJRUUZxSVFGQkNDRVFETWdEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJGU0VRRE44REMwRVZJUkFNM2dNTEEwQUNRQ0FCTFFBQVFmQzVnSUFBYWkwQUFDSVFRUUpHRFFBZ0VFRi9hZzRFM2dIc0FlQUI2d0hzQVFzZ0FVRUJhaUlCSUFKSERRQUxRUmdoRUF6ZEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVl1QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQkJ5RVFETVFEQzBFWklSQU0zQU1MSUFGQkFXb2hBUXdDQ3dKQUlBRWlGQ0FDUncwQVFSb2hFQXpiQXdzZ0ZDRUJBa0FnRkMwQUFFRnphZzRVM1FMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dJQTdnSUxRUUFoRUNBQVFRQTJBaHdnQUVHdmk0Q0FBRFlDRUNBQVFRSTJBZ3dnQUNBVVFRRnFOZ0lVRE5vREN3SkFJQUV0QUFBaUVFRTdSZzBBSUJCQkRVY042QUVnQVVFQmFpRUJET1VDQ3lBQlFRRnFJUUVMUVNJaEVBeS9Bd3NDUUNBQkloQWdBa2NOQUVFY0lSQU0yQU1MUWdBaEVTQVFJUUVnRUMwQUFFRlFhZzQzNXdIbUFRRUNBd1FGQmdjSUFBQUFBQUFBQUFrS0N3d05EZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEeEFSRWhNVUFBdEJIaUVRREwwREMwSUNJUkVNNVFFTFFnTWhFUXprQVF0Q0JDRVJET01CQzBJRklSRU00Z0VMUWdZaEVRemhBUXRDQnlFUkRPQUJDMElJSVJFTTN3RUxRZ2toRVF6ZUFRdENDaUVSRE4wQkMwSUxJUkVNM0FFTFFnd2hFUXpiQVF0Q0RTRVJETm9CQzBJT0lSRU0yUUVMUWc4aEVRellBUXRDQ2lFUkROY0JDMElMSVJFTTFnRUxRZ3doRVF6VkFRdENEU0VSRE5RQkMwSU9JUkVNMHdFTFFnOGhFUXpTQVF0Q0FDRVJBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUUxRQUFRVkJxRGpmbEFlUUJBQUVDQXdRRkJnZm1BZVlCNWdIbUFlWUI1Z0htQVFnSkNnc01EZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnRU9EeEFSRWhQbUFRdENBaUVSRE9RQkMwSURJUkVNNHdFTFFnUWhFUXppQVF0Q0JTRVJET0VCQzBJR0lSRU00QUVMUWdjaEVRemZBUXRDQ0NFUkRONEJDMElKSVJFTTNRRUxRZ29oRVF6Y0FRdENDeUVSRE5zQkMwSU1JUkVNMmdFTFFnMGhFUXpaQVF0Q0RpRVJETmdCQzBJUElSRU0xd0VMUWdvaEVReldBUXRDQ3lFUkROVUJDMElNSVJFTTFBRUxRZzBoRVF6VEFRdENEaUVSRE5JQkMwSVBJUkVNMFFFTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVOMGdGQkh5RVFETUFEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVrSVJBTXB3TUxRU0FoRUF5L0F3c2dBQ0FCSWhBZ0FoQytnSUNBQUVGL2FnNEZ0Z0VBeFFJQjBRSFNBUXRCRVNFUURLUURDeUFBUVFFNkFDOGdFQ0VCRExzREN5QUJJZ0VnQWtjTjBnRkJKQ0VRRExzREN5QUJJZzBnQWtjTkhrSEdBQ0VRRExvREN5QUFJQUVpQVNBQ0VMS0FnSUFBSWhBTjFBRWdBU0VCRExVQkN5QUJJaEFnQWtjTkprSFFBQ0VRRExnREN3SkFJQUVpQVNBQ1J3MEFRU2doRUF5NEF3c2dBRUVBTmdJRUlBQkJqSUNBZ0FBMkFnZ2dBQ0FCSUFFUXNZQ0FnQUFpRUEzVEFTQUJJUUVNMkFFTEFrQWdBU0lRSUFKSERRQkJLU0VRRExjREN5QVFMUUFBSWdGQklFWU5GQ0FCUVFsSERkTUJJQkJCQVdvaEFRd1ZDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdYQzBFcUlSQU10UU1MQWtBZ0FTSVFJQUpIRFFCQkt5RVFETFVEQ3dKQUlCQXRBQUFpQVVFSlJnMEFJQUZCSUVjTjFRRUxJQUF0QUN4QkNFWU4wd0VnRUNFQkRKRURDd0pBSUFFaUFTQUNSdzBBUVN3aEVBeTBBd3NnQVMwQUFFRUtSdzNWQVNBQlFRRnFJUUVNeVFJTElBRWlEaUFDUnczVkFVRXZJUkFNc2dNTEEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUlCQkJkbW9PQkFEY0Fkd0JBTm9CQ3lBQklRRU00QUVMSUFGQkFXb2lBU0FDUncwQUMwRXhJUkFNc1FNTFFUSWhFQ0FCSWhRZ0FrWU5zQU1nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFRGFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZkM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJBMGNOQUVFR0lRRU1sZ01MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExFREN5QUFRUUEyQWdBZ0ZDRUJETmtCQzBFeklSQWdBU0lVSUFKR0RhOERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQ0dvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSDB1NENBQUdvdEFBQkhEUUVDUUNBQlFRaEhEUUJCQlNFQkRKVURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl3QXdzZ0FFRUFOZ0lBSUJRaEFRellBUXRCTkNFUUlBRWlGQ0FDUmcydUF5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUVZxSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MEJBa0FnQVVFRlJ3MEFRUWNoQVF5VUF3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1yd01MSUFCQkFEWUNBQ0FVSVFFTTF3RUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0w2QWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVFKR0RRb2dBU0VCRE4wQkN5QUJRUUZxSWdFZ0FrY05BQXRCTUNFUURLNERDMEV3SVJBTXJRTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCZG1vT0JOa0IyZ0hhQWRrQjJnRUxJQUZCQVdvaUFTQUNSdzBBQzBFNElSQU1yUU1MUVRnaEVBeXNBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCQ1VjTkF3c2dBVUVCYWlJQklBSkhEUUFMUVR3aEVBeXJBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUNBUVFYWnFEZ1RhQVFFQjJnRUFDeUFRUVN4R0Rkc0JDeUFCSVFFTUJBc2dBVUVCYWlJQklBSkhEUUFMUVQ4aEVBeXFBd3NnQVNFQkROc0JDMEhBQUNFUUlBRWlGQ0FDUmcyb0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUVpxSVJjQ1FBTkFJQlF0QUFCQklISWdBVUdBd0lDQUFHb3RBQUJIRFFFZ0FVRUdSZzJPQXlBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5cEF3c2dBRUVBTmdJQUlCUWhBUXRCTmlFUURJNERDd0pBSUFFaUR5QUNSdzBBUWNFQUlSQU1wd01MSUFCQmpJQ0FnQUEyQWdnZ0FDQVBOZ0lFSUE4aEFTQUFMUUFzUVg5cURnVE5BZFVCMXdIWkFZY0RDeUFCUVFGcUlRRU16QUVMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdjaUFRSUJCQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SWhCQkNVWU5BQ0FRUVNCR0RRQUNRQUpBQWtBQ1FDQVFRWjEvYWc0VEFBTURBd01EQXdNQkF3TURBd01EQXdNREFnTUxJQUZCQVdvaEFVRXhJUkFNa1FNTElBRkJBV29oQVVFeUlSQU1rQU1MSUFGQkFXb2hBVUV6SVJBTWp3TUxJQUVoQVF6UUFRc2dBVUVCYWlJQklBSkhEUUFMUVRVaEVBeWxBd3RCTlNFUURLUURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUVlDOGdJQUFhaTBBQUVFQlJnMEFJQUVoQVF6VEFRc2dBVUVCYWlJQklBSkhEUUFMUVQwaEVBeWtBd3RCUFNFUURLTURDeUFBSUFFaUFTQUNFTENBZ0lBQUloQU4xZ0VnQVNFQkRBRUxJQkJCQVdvaEFRdEJQQ0VRREljREN3SkFJQUVpQVNBQ1J3MEFRY0lBSVJBTW9BTUxBa0FEUUFKQUlBRXRBQUJCZDJvT0dBQUMvZ0wrQW9RRC9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Q0FQNENDeUFCUVFGcUlnRWdBa2NOQUF0QndnQWhFQXlnQXdzZ0FVRUJhaUVCSUFBdEFDMUJBWEZGRGIwQklBRWhBUXRCTENFUURJVURDeUFCSWdFZ0FrY04wd0ZCeEFBaEVBeWRBd3NEUUFKQUlBRXRBQUJCa01DQWdBQnFMUUFBUVFGR0RRQWdBU0VCRExjQ0N5QUJRUUZxSWdFZ0FrY05BQXRCeFFBaEVBeWNBd3NnRFMwQUFDSVFRU0JHRGJNQklCQkJPa2NOZ1FNZ0FDZ0NCQ0VCSUFCQkFEWUNCQ0FBSUFFZ0RSQ3ZnSUNBQUNJQkRkQUJJQTFCQVdvaEFReXpBZ3RCeHdBaEVDQUJJZzBnQWtZTm1nTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVGYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHUXdvQ0FBR290QUFCSERZQURJQUZCQlVZTjlBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tZ01MUWNnQUlSQWdBU0lOSUFKR0Raa0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQ1dvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQmxzS0FnQUJxTFFBQVJ3My9BZ0pBSUFGQkNVY05BRUVDSVFFTTlRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmtEQ3dKQUlBRWlEU0FDUncwQVFja0FJUkFNbVFNTEFrQUNRQ0FOTFFBQUlnRkJJSElnQVNBQlFiOS9ha0gvQVhGQkdra2JRZjhCY1VHU2Yyb09Cd0NBQTRBRGdBT0FBNEFEQVlBREN5QU5RUUZxSVFGQlBpRVFESUFEQ3lBTlFRRnFJUUZCUHlFUURQOENDMEhLQUNFUUlBRWlEU0FDUmcyWEF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUUZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFEQ2dJQUFhaTBBQUVjTi9RSWdBVUVCUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVhBd3RCeXdBaEVDQUJJZzBnQWtZTmxnTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVPYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHaXdvQ0FBR290QUFCSERmd0NJQUZCRGtZTjhBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sZ01MUWN3QUlSQWdBU0lOSUFKR0RaVURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCRDJvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQndNS0FnQUJxTFFBQVJ3MzdBZ0pBSUFGQkQwY05BRUVESVFFTThRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlVEQzBITkFDRVFJQUVpRFNBQ1JnMlVBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFkRENnSUFBYWkwQUFFY04rZ0lDUUNBQlFRVkhEUUJCQkNFQkRQQUNDeUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlVQXdzQ1FDQUJJZzBnQWtjTkFFSE9BQ0VRREpRREN3SkFBa0FDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWjEvYWc0VEFQMEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QWdIOUF2MEMvUUlDQS8wQ0N5QU5RUUZxSVFGQndRQWhFQXo5QWdzZ0RVRUJhaUVCUWNJQUlSQU0vQUlMSUExQkFXb2hBVUhEQUNFUURQc0NDeUFOUVFGcUlRRkJ4QUFoRUF6NkFnc0NRQ0FCSWdFZ0FrWU5BQ0FBUVkyQWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQnhRQWhFQXo2QWd0Qnp3QWhFQXlTQXdzZ0VDRUJBa0FDUUNBUUxRQUFRWFpxRGdRQnFBS29BZ0NvQWdzZ0VFRUJhaUVCQzBFbklSQU0rQUlMQWtBZ0FTSUJJQUpIRFFCQjBRQWhFQXlSQXdzQ1FDQUJMUUFBUVNCR0RRQWdBU0VCREkwQkN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnh3RWdBU0VCREl3QkN5QUJJaGNnQWtjTnlBRkIwZ0FoRUF5UEF3dEIwd0FoRUNBQkloUWdBa1lOamdNZ0FpQVVheUFBS0FJQUlnRnFJUllnRkNBQmEwRUJhaUVYQTBBZ0ZDMEFBQ0FCUWRiQ2dJQUFhaTBBQUVjTnpBRWdBVUVCUmczSEFTQUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeU9Bd3NDUUNBQklnRWdBa2NOQUVIVkFDRVFESTREQ3lBQkxRQUFRUXBIRGN3QklBRkJBV29oQVF6SEFRc0NRQ0FCSWdFZ0FrY05BRUhXQUNFUURJMERDd0pBQWtBZ0FTMEFBRUYyYWc0RUFNMEJ6UUVCelFFTElBRkJBV29oQVF6SEFRc2dBVUVCYWlFQlFjb0FJUkFNOHdJTElBQWdBU0lCSUFJUXJvQ0FnQUFpRUEzTEFTQUJJUUZCelFBaEVBenlBZ3NnQUMwQUtVRWlSZzJGQXd5bUFnc0NRQ0FCSWdFZ0FrY05BRUhiQUNFUURJb0RDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVGUWFnNEsxQUhUQVFBQkFnTUVCUVlJMVFFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNekFFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd6TEFRc0NRQ0FCSWdFZ0FrY05BRUhkQUNFUURJa0RDeUFCTFFBQVFTNUhEY3dCSUFGQkFXb2hBUXltQWdzZ0FTSUJJQUpIRGN3QlFkOEFJUkFNaHdNTEFrQWdBU0lCSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWRBQUlSQU03Z0lMUWVBQUlSQU1oZ01MUWVFQUlSQWdBU0lCSUFKR0RZVURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSGl3b0NBQUdvdEFBQkhEYzBCSUJSQkEwWU56QUVnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaFFNTFFlSUFJUkFnQVNJQklBSkdEWVFESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkFtb2hGd05BSUFFdEFBQWdGRUhtd29DQUFHb3RBQUJIRGN3QklCUkJBa1lOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhBTUxRZU1BSVJBZ0FTSUJJQUpHRFlNRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIcHdvQ0FBR290QUFCSERjc0JJQlJCQTBZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1nd01MQWtBZ0FTSUJJQUpIRFFCQjVRQWhFQXlEQXdzZ0FDQUJRUUZxSWdFZ0FoQ29nSUNBQUNJUURjMEJJQUVoQVVIV0FDRVFET2tDQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUFrQUNRQ0FRUWJoL2FnNExBQUhQQWM4Qnp3SFBBYzhCendIUEFjOEJBczhCQ3lBQlFRRnFJUUZCMGdBaEVBenRBZ3NnQVVFQmFpRUJRZE1BSVJBTTdBSUxJQUZCQVdvaEFVSFVBQ0VRRE9zQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNUFBaEVBeUNBd3RCNUFBaEVBeUJBd3NEUUFKQUlBRXRBQUJCOE1LQWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVg1cURnUFBBZEFCMFFIU0FRc2dBVUVCYWlJQklBSkhEUUFMUWVZQUlSQU1nQU1MQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlY0FJUkFNL3dJTEEwQUNRQ0FCTFFBQVFmREVnSUFBYWkwQUFDSVFRUUZHRFFBQ1FDQVFRWDVxRGdUU0FkTUIxQUVBMVFFTElBRWhBVUhYQUNFUURPY0NDeUFCUVFGcUlnRWdBa2NOQUF0QjZBQWhFQXorQWdzQ1FDQUJJZ0VnQWtjTkFFSHBBQ0VRRFA0Q0N3SkFJQUV0QUFBaUVFRjJhZzRhdWdIVkFkVUJ2QUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhLQWRVQjFRRUEwd0VMSUFGQkFXb2hBUXRCQmlFUURPTUNDd05BQWtBZ0FTMEFBRUh3eG9DQUFHb3RBQUJCQVVZTkFDQUJJUUVNbmdJTElBRkJBV29pQVNBQ1J3MEFDMEhxQUNFUURQc0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdEQzBIckFDRVFEUG9DQ3dKQUlBRWlBU0FDUncwQVFld0FJUkFNK2dJTElBRkJBV29oQVF3QkN3SkFJQUVpQVNBQ1J3MEFRZTBBSVJBTStRSUxJQUZCQVdvaEFRdEJCQ0VRRE40Q0N3SkFJQUVpRkNBQ1J3MEFRZTRBSVJBTTl3SUxJQlFoQVFKQUFrQUNRQ0FVTFFBQVFmRElnSUFBYWkwQUFFRi9hZzRIMUFIVkFkWUJBSndDQVFMWEFRc2dGRUVCYWlFQkRBb0xJQlJCQVdvaEFRek5BUXRCQUNFUUlBQkJBRFlDSENBQVFadVNnSUFBTmdJUUlBQkJCellDRENBQUlCUkJBV28yQWhRTTlnSUxBa0FEUUFKQUlBRXRBQUJCOE1pQWdBQnFMUUFBSWhCQkJFWU5BQUpBQWtBZ0VFRi9hZzRIMGdIVEFkUUIyUUVBQkFIWkFRc2dBU0VCUWRvQUlSQU00QUlMSUFGQkFXb2hBVUhjQUNFUUROOENDeUFCUVFGcUlnRWdBa2NOQUF0Qjd3QWhFQXoyQWdzZ0FVRUJhaUVCRE1zQkN3SkFJQUVpRkNBQ1J3MEFRZkFBSVJBTTlRSUxJQlF0QUFCQkwwY04xQUVnRkVFQmFpRUJEQVlMQWtBZ0FTSVVJQUpIRFFCQjhRQWhFQXowQWdzQ1FDQVVMUUFBSWdGQkwwY05BQ0FVUVFGcUlRRkIzUUFoRUF6YkFnc2dBVUYyYWlJRVFSWkxEZE1CUVFFZ0JIUkJpWUNBQW5GRkRkTUJETW9DQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVIZUFDRVFETm9DQzBIeUFDRVFEUElDQ3dKQUlBRWlGQ0FDUncwQVFmUUFJUkFNOGdJTElCUWhBUUpBSUJRdEFBQkI4TXlBZ0FCcUxRQUFRWDlxRGdQSkFwUUNBTlFCQzBIaEFDRVFETmdDQ3dKQUlBRWlGQ0FDUmcwQUEwQUNRQ0FVTFFBQVFmREtnSUFBYWkwQUFDSUJRUU5HRFFBQ1FDQUJRWDlxRGdMTEFnRFZBUXNnRkNFQlFkOEFJUkFNMmdJTElCUkJBV29pRkNBQ1J3MEFDMEh6QUNFUURQRUNDMEh6QUNFUURQQUNDd0pBSUFFaUFTQUNSZzBBSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSGdBQ0VRRE5jQ0MwSDFBQ0VRRE84Q0N3SkFJQUVpQVNBQ1J3MEFRZllBSVJBTTd3SUxJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVF0QkF5RVFETlFDQ3dOQUlBRXRBQUJCSUVjTnd3SWdBVUVCYWlJQklBSkhEUUFMUWZjQUlSQU03QUlMQWtBZ0FTSUJJQUpIRFFCQitBQWhFQXpzQWdzZ0FTMEFBRUVnUnczT0FTQUJRUUZxSVFFTTd3RUxJQUFnQVNJQklBSVFySUNBZ0FBaUVBM09BU0FCSVFFTWpnSUxBa0FnQVNJRUlBSkhEUUJCK2dBaEVBenFBZ3NnQkMwQUFFSE1BRWNOMFFFZ0JFRUJhaUVCUVJNaEVBelBBUXNDUUNBQklnUWdBa2NOQUVIN0FDRVFET2tDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFEUUNBRUxRQUFJQUZCOE02QWdBQnFMUUFBUnczUUFTQUJRUVZHRGM0QklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmc0FJUkFNNkFJTEFrQWdBU0lFSUFKSERRQkIvQUFoRUF6b0Fnc0NRQUpBSUFRdEFBQkJ2WDlxRGd3QTBRSFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRRUIwUUVMSUFSQkFXb2hBVUhtQUNFUURNOENDeUFFUVFGcUlRRkI1d0FoRUF6T0Fnc0NRQ0FCSWdRZ0FrY05BRUg5QUNFUURPY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGM4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIOUFDRVFET2NDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkFoRUF6TUFRc0NRQ0FCSWdRZ0FrY05BRUgrQUNFUURPWUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUgyem9DQUFHb3RBQUJIRGM0QklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIK0FDRVFET1lDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlloRUF6TEFRc0NRQ0FCSWdRZ0FrY05BRUgvQUNFUURPVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUg4em9DQUFHb3RBQUJIRGMwQklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIL0FDRVFET1VDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVVoRUF6S0FRc0NRQ0FCSWdRZ0FrY05BRUdBQVNFUURPUUNDeUFFTFFBQVFka0FSdzNMQVNBRVFRRnFJUUZCQ0NFUURNa0JDd0pBSUFFaUJDQUNSdzBBUVlFQklSQU00d0lMQWtBQ1FDQUVMUUFBUWJKL2FnNERBTXdCQWN3QkN5QUVRUUZxSVFGQjZ3QWhFQXpLQWdzZ0JFRUJhaUVCUWV3QUlSQU15UUlMQWtBZ0FTSUVJQUpIRFFCQmdnRWhFQXppQWdzQ1FBSkFJQVF0QUFCQnVIOXFEZ2dBeXdITEFjc0J5d0hMQWNzQkFjc0JDeUFFUVFGcUlRRkI2Z0FoRUF6SkFnc2dCRUVCYWlFQlFlMEFJUkFNeUFJTEFrQWdBU0lFSUFKSERRQkJnd0VoRUF6aEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJBZ0JDQUJhMEVDYWlFVUFrQURRQ0FFTFFBQUlBRkJnTStBZ0FCcUxRQUFSdzNKQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCQTJBZ0JCZ3dFaEVBemhBZ3RCQUNFUUlBQkJBRFlDQUNBVVFRRnFJUUVNeGdFTEFrQWdBU0lFSUFKSERRQkJoQUVoRUF6Z0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJnOCtBZ0FCcUxRQUFSdzNJQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaEFFaEVBemdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWpJUkFNeFFFTEFrQWdBU0lFSUFKSERRQkJoUUVoRUF6ZkFnc0NRQUpBSUFRdEFBQkJ0SDlxRGdnQXlBSElBY2dCeUFISUFjZ0JBY2dCQ3lBRVFRRnFJUUZCN3dBaEVBekdBZ3NnQkVFQmFpRUJRZkFBSVJBTXhRSUxBa0FnQVNJRUlBSkhEUUJCaGdFaEVBemVBZ3NnQkMwQUFFSEZBRWNOeFFFZ0JFRUJhaUVCRElNQ0N3SkFJQUVpQkNBQ1J3MEFRWWNCSVJBTTNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRWWpQZ0lBQWFpMEFBRWNOeFFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVljQklSQU0zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJMU0VRRE1JQkN3SkFJQUVpQkNBQ1J3MEFRWWdCSVJBTTNBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOeEFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlnQklSQU0zQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLU0VRRE1FQkN3SkFJQUVpQVNBQ1J3MEFRWWtCSVJBTTJ3SUxRUUVoRUNBQkxRQUFRZDhBUnczQUFTQUJRUUZxSVFFTWdRSUxBa0FnQVNJRUlBSkhEUUJCaWdFaEVBemFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBMEFnQkMwQUFDQUJRWXpQZ0lBQWFpMEFBRWNOd1FFZ0FVRUJSZzJ2QWlBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHS0FTRVFETmtDQ3dKQUlBRWlCQ0FDUncwQVFZc0JJUkFNMlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFZN1BnSUFBYWkwQUFFY053UUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXNCSVJBTTJRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkFpRVFETDRCQ3dKQUlBRWlCQ0FDUncwQVFZd0JJUkFNMkFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY053QUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXdCSVJBTTJBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkh5RVFETDBCQ3dKQUlBRWlCQ0FDUncwQVFZMEJJUkFNMXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY052d0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWTBCSVJBTTF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkNTRVFETHdCQ3dKQUlBRWlCQ0FDUncwQVFZNEJJUkFNMWdJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQUw4QnZ3Ry9BYjhCdndFQnZ3RUxJQVJCQVdvaEFVSDRBQ0VRREwwQ0N5QUVRUUZxSVFGQitRQWhFQXk4QWdzQ1FDQUJJZ1FnQWtjTkFFR1BBU0VRRE5VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR1J6NENBQUdvdEFBQkhEYjBCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdQQVNFUUROVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSZ2hFQXk2QVFzQ1FDQUJJZ1FnQWtjTkFFR1FBU0VRRE5RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVR1h6NENBQUdvdEFBQkhEYndCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdRQVNFUUROUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSY2hFQXk1QVFzQ1FDQUJJZ1FnQWtjTkFFR1JBU0VRRE5NQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVR2F6NENBQUdvdEFBQkhEYnNCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdSQVNFUUROTUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSVWhFQXk0QVFzQ1FDQUJJZ1FnQWtjTkFFR1NBU0VRRE5JQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR2h6NENBQUdvdEFBQkhEYm9CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdTQVNFUUROSUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSNGhFQXkzQVFzQ1FDQUJJZ1FnQWtjTkFFR1RBU0VRRE5FQ0N5QUVMUUFBUWN3QVJ3MjRBU0FFUVFGcUlRRkJDaUVRRExZQkN3SkFJQVFnQWtjTkFFR1VBU0VRRE5BQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRHdDNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QVFHNUFRc2dCRUVCYWlFQlFmNEFJUkFNdHdJTElBUkJBV29oQVVIL0FDRVFETFlDQ3dKQUlBUWdBa2NOQUVHVkFTRVFETThDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Bd0M0QVFHNEFRc2dCRUVCYWlFQlFmMEFJUkFNdGdJTElBUkJBV29oQkVHQUFTRVFETFVDQ3dKQUlBUWdBa2NOQUVHV0FTRVFETTRDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHbno0Q0FBR290QUFCSERiWUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1dBU0VRRE00Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFzaEVBeXpBUXNDUUNBRUlBSkhEUUJCbHdFaEVBek5BZ3NDUUFKQUFrQUNRQ0FFTFFBQVFWTnFEaU1BdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QVFHNEFiZ0J1QUc0QWJnQkFyZ0J1QUc0QVFPNEFRc2dCRUVCYWlFQlFmc0FJUkFNdGdJTElBUkJBV29oQVVIOEFDRVFETFVDQ3lBRVFRRnFJUVJCZ1FFaEVBeTBBZ3NnQkVFQmFpRUVRWUlCSVJBTXN3SUxBa0FnQkNBQ1J3MEFRWmdCSVJBTXpBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRYW5QZ0lBQWFpMEFBRWNOdEFFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpnQklSQU16QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHU0VRRExFQkN3SkFJQVFnQWtjTkFFR1pBU0VRRE1zQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR3V6NENBQUdvdEFBQkhEYk1CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdaQVNFUURNc0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRWWhFQXl3QVFzQ1FDQUVJQUpIRFFCQm1nRWhFQXpLQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRNK0FnQUJxTFFBQVJ3MnlBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtZ0VoRUF6S0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFY0lSQU1yd0VMQWtBZ0JDQUNSdzBBUVpzQklSQU15UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJiUGdJQUFhaTBBQUVjTnNRRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFac0JJUkFNeVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSnlFUURLNEJDd0pBSUFRZ0FrY05BRUdjQVNFUURNZ0NDd0pBQWtBZ0JDMEFBRUdzZjJvT0FnQUJzUUVMSUFSQkFXb2hCRUdHQVNFUURLOENDeUFFUVFGcUlRUkJod0VoRUF5dUFnc0NRQ0FFSUFKSERRQkJuUUVoRUF6SEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1TStBZ0FCcUxRQUFSdzJ2QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCblFFaEVBekhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW1JUkFNckFFTEFrQWdCQ0FDUncwQVFaNEJJUkFNeGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiclBnSUFBYWkwQUFFY05yZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjRCSVJBTXhnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkF5RVFES3NCQ3dKQUlBUWdBa2NOQUVHZkFTRVFETVVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhMEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2ZBU0VRRE1VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVF3aEVBeXFBUXNDUUNBRUlBSkhEUUJCb0FFaEVBekVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCdk0rQWdBQnFMUUFBUncyc0FTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm9BRWhFQXpFQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVOSVJBTXFRRUxBa0FnQkNBQ1J3MEFRYUVCSVJBTXd3SUxBa0FDUUNBRUxRQUFRYnAvYWc0TEFLd0JyQUdzQWF3QnJBR3NBYXdCckFHc0FRR3NBUXNnQkVFQmFpRUVRWXNCSVJBTXFnSUxJQVJCQVdvaEJFR01BU0VRREtrQ0N3SkFJQVFnQWtjTkFFR2lBU0VRRE1JQ0N5QUVMUUFBUWRBQVJ3MnBBU0FFUVFGcUlRUU02UUVMQWtBZ0JDQUNSdzBBUWFNQklSQU13UUlMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBYW9CcWdHcUFhb0JxZ0VBcWdFTElBUkJBV29oQkVHT0FTRVFES2dDQ3lBRVFRRnFJUUZCSWlFUURLWUJDd0pBSUFRZ0FrY05BRUdrQVNFUURNQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUhBejRDQUFHb3RBQUJIRGFnQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHa0FTRVFETUFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjBoRUF5bEFRc0NRQ0FFSUFKSERRQkJwUUVoRUF5L0Fnc0NRQUpBSUFRdEFBQkJybjlxRGdNQXFBRUJxQUVMSUFSQkFXb2hCRUdRQVNFUURLWUNDeUFFUVFGcUlRRkJCQ0VRREtRQkN3SkFJQVFnQWtjTkFFR21BU0VRREw0Q0N3SkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUNxQWFvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQVFHcUFhb0JBcW9CcWdFRHFnR3FBUVNxQVFzZ0JFRUJhaUVFUVlnQklSQU1xQUlMSUFSQkFXb2hCRUdKQVNFUURLY0NDeUFFUVFGcUlRUkJpZ0VoRUF5bUFnc2dCRUVCYWlFRVFZOEJJUkFNcFFJTElBUkJBV29oQkVHUkFTRVFES1FDQ3dKQUlBUWdBa2NOQUVHbkFTRVFETDBDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhVUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR25BU0VRREwwQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJFaEVBeWlBUXNDUUNBRUlBSkhEUUJCcUFFaEVBeThBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCd3MrQWdBQnFMUUFBUncya0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFBRWhFQXk4QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVzSVJBTW9RRUxBa0FnQkNBQ1J3MEFRYWtCSVJBTXV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRY1hQZ0lBQWFpMEFBRWNOb3dFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFrQklSQU11d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLeUVRREtBQkN3SkFJQVFnQWtjTkFFR3FBU0VRRExvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEt6NENBQUdvdEFBQkhEYUlCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdxQVNFUURMb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSUWhFQXlmQVFzQ1FDQUVJQUpIRFFCQnF3RWhFQXk1QWdzQ1FBSkFBa0FDUUNBRUxRQUFRYjUvYWc0UEFBRUNwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQVFPa0FRc2dCRUVCYWlFRVFaTUJJUkFNb2dJTElBUkJBV29oQkVHVUFTRVFES0VDQ3lBRVFRRnFJUVJCbFFFaEVBeWdBZ3NnQkVFQmFpRUVRWllCSVJBTW53SUxBa0FnQkNBQ1J3MEFRYXdCSVJBTXVBSUxJQVF0QUFCQnhRQkhEWjhCSUFSQkFXb2hCQXpnQVFzQ1FDQUVJQUpIRFFCQnJRRWhFQXkzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQnpjK0FnQUJxTFFBQVJ3MmZBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyUUVoRUF5M0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFT0lSQU1uQUVMQWtBZ0JDQUNSdzBBUWE0QklSQU10Z0lMSUFRdEFBQkIwQUJIRFowQklBUkJBV29oQVVFbElSQU1td0VMQWtBZ0JDQUNSdzBBUWE4QklSQU10UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTm5RRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhOEJJUkFNdFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCS2lFUURKb0JDd0pBSUFRZ0FrY05BRUd3QVNFUURMUUNDd0pBQWtBZ0JDMEFBRUdyZjJvT0N3Q2RBWjBCblFHZEFaMEJuUUdkQVowQm5RRUJuUUVMSUFSQkFXb2hCRUdhQVNFUURKc0NDeUFFUVFGcUlRUkJtd0VoRUF5YUFnc0NRQ0FFSUFKSERRQkJzUUVoRUF5ekFnc0NRQUpBSUFRdEFBQkJ2MzlxRGhRQW5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3QkFad0JDeUFFUVFGcUlRUkJtUUVoRUF5YUFnc2dCRUVCYWlFRVFad0JJUkFNbVFJTEFrQWdCQ0FDUncwQVFiSUJJUkFNc2dJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFkblBnSUFBYWkwQUFFY05tZ0VnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYklCSVJBTXNnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQklTRVFESmNCQ3dKQUlBUWdBa2NOQUVHekFTRVFETEVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVIZHo0Q0FBR290QUFCSERaa0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3pBU0VRRExFQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJvaEVBeVdBUXNDUUNBRUlBSkhEUUJCdEFFaEVBeXdBZ3NDUUFKQUFrQWdCQzBBQUVHN2Yyb09FUUNhQVpvQm1nR2FBWm9CbWdHYUFab0JtZ0VCbWdHYUFab0JtZ0dhQVFLYUFRc2dCRUVCYWlFRVFaMEJJUkFNbUFJTElBUkJBV29oQkVHZUFTRVFESmNDQ3lBRVFRRnFJUVJCbndFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCdFFFaEVBeXZBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRmFpRVFBa0FEUUNBRUxRQUFJQUZCNU0rQWdBQnFMUUFBUncyWEFTQUJRUVZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRRRWhFQXl2QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVvSVJBTWxBRUxBa0FnQkNBQ1J3MEFRYllCSVJBTXJnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZXJQZ0lBQWFpMEFBRWNObGdFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJZQklSQU1yZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCeUVRREpNQkN3SkFJQVFnQWtjTkFFRzNBU0VRREswQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRGdDV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0VCbGdFTElBUkJBV29oQkVHaEFTRVFESlFDQ3lBRVFRRnFJUVJCb2dFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCdUFFaEVBeXNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCN2MrQWdBQnFMUUFBUncyVUFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVBRWhFQXlzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVTSVJBTWtRRUxBa0FnQkNBQ1J3MEFRYmtCSVJBTXF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOa3dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJrQklSQU1xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJQ0VRREpBQkN3SkFJQVFnQWtjTkFFRzZBU0VRREtvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSHl6NENBQUdvdEFBQkhEWklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc2QVNFUURLb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFROGhFQXlQQVFzQ1FDQUVJQUpIRFFCQnV3RWhFQXlwQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBa2dHU0FaSUJrZ0dTQVFHU0FRc2dCRUVCYWlFRVFhVUJJUkFNa0FJTElBUkJBV29oQkVHbUFTRVFESThDQ3dKQUlBUWdBa2NOQUVHOEFTRVFES2dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRZHFJUkFDUUFOQUlBUXRBQUFnQVVIMHo0Q0FBR290QUFCSERaQUJJQUZCQjBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzhBU0VRREtnQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJzaEVBeU5BUXNDUUNBRUlBSkhEUUJCdlFFaEVBeW5BZ3NDUUFKQUFrQWdCQzBBQUVHK2Yyb09FZ0NSQVpFQmtRR1JBWkVCa1FHUkFaRUJrUUVCa1FHUkFaRUJrUUdSQVpFQkFwRUJDeUFFUVFGcUlRUkJwQUVoRUF5UEFnc2dCRUVCYWlFRVFhY0JJUkFNamdJTElBUkJBV29oQkVHb0FTRVFESTBDQ3dKQUlBUWdBa2NOQUVHK0FTRVFES1lDQ3lBRUxRQUFRYzRBUncyTkFTQUVRUUZxSVFRTXp3RUxBa0FnQkNBQ1J3MEFRYjhCSVJBTXBRSUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQUJBZ09jQVFRRkJwd0JuQUdjQVFjSUNRb0xuQUVNRFE0UG5BRUxJQVJCQVdvaEFVSG9BQ0VRREpvQ0N5QUVRUUZxSVFGQjZRQWhFQXlaQWdzZ0JFRUJhaUVCUWU0QUlSQU1tQUlMSUFSQkFXb2hBVUh5QUNFUURKY0NDeUFFUVFGcUlRRkI4d0FoRUF5V0Fnc2dCRUVCYWlFQlFmWUFJUkFNbFFJTElBUkJBV29oQVVIM0FDRVFESlFDQ3lBRVFRRnFJUUZCK2dBaEVBeVRBZ3NnQkVFQmFpRUVRWU1CSVJBTWtnSUxJQVJCQVdvaEJFR0VBU0VRREpFQ0N5QUVRUUZxSVFSQmhRRWhFQXlRQWdzZ0JFRUJhaUVFUVpJQklSQU1qd0lMSUFSQkFXb2hCRUdZQVNFUURJNENDeUFFUVFGcUlRUkJvQUVoRUF5TkFnc2dCRUVCYWlFRVFhTUJJUkFNakFJTElBUkJBV29oQkVHcUFTRVFESXNDQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHckFTRVFESXNDQzBIQUFTRVFES01DQ3lBQUlBVWdBaENxZ0lDQUFDSUJEWXNCSUFVaEFReGNDd0pBSUFZZ0FrWU5BQ0FHUVFGcUlRVU1qUUVMUWNJQklSQU1vUUlMQTBBQ1FDQVFMUUFBUVhacURnU01BUUFBandFQUN5QVFRUUZxSWhBZ0FrY05BQXRCd3dFaEVBeWdBZ3NDUUNBSElBSkdEUUFnQUVHUmdJQ0FBRFlDQ0NBQUlBYzJBZ1FnQnlFQlFRRWhFQXlIQWd0QnhBRWhFQXlmQWdzQ1FDQUhJQUpIRFFCQnhRRWhFQXlmQWdzQ1FBSkFJQWN0QUFCQmRtb09CQUhPQWM0QkFNNEJDeUFIUVFGcUlRWU1qUUVMSUFkQkFXb2hCUXlKQVFzQ1FDQUhJQUpIRFFCQnhnRWhFQXllQWdzQ1FBSkFJQWN0QUFCQmRtb09Gd0dQQVk4QkFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFRQ1BBUXNnQjBFQmFpRUhDMEd3QVNFUURJUUNDd0pBSUFnZ0FrY05BRUhJQVNFUURKMENDeUFJTFFBQVFTQkhEWTBCSUFCQkFEc0JNaUFJUVFGcUlRRkJzd0VoRUF5REFnc2dBU0VYQWtBRFFDQVhJZ2NnQWtZTkFTQUhMUUFBUVZCcVFmOEJjU0lRUVFwUERjd0JBa0FnQUM4Qk1pSVVRWmt6U3cwQUlBQWdGRUVLYkNJVU93RXlJQkJCLy84RGN5QVVRZjcvQTNGSkRRQWdCMEVCYWlFWElBQWdGQ0FRYWlJUU93RXlJQkJCLy84RGNVSG9CMGtOQVFzTFFRQWhFQ0FBUVFBMkFod2dBRUhCaVlDQUFEWUNFQ0FBUVEwMkFnd2dBQ0FIUVFGcU5nSVVESndDQzBISEFTRVFESnNDQ3lBQUlBZ2dBaEN1Z0lDQUFDSVFSUTNLQVNBUVFSVkhEWXdCSUFCQnlBRTJBaHdnQUNBSU5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5YUFnc0NRQ0FKSUFKSERRQkJ6QUVoRUF5YUFndEJBQ0VVUVFFaEYwRUJJUlpCQUNFUUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBa3RBQUJCVUdvT0NwWUJsUUVBQVFJREJBVUdDSmNCQzBFQ0lSQU1CZ3RCQXlFUURBVUxRUVFoRUF3RUMwRUZJUkFNQXd0QkJpRVFEQUlMUVFjaEVBd0JDMEVJSVJBTFFRQWhGMEVBSVJaQkFDRVVESTRCQzBFSklSQkJBU0VVUVFBaEYwRUFJUllNalFFTEFrQWdDaUFDUncwQVFjNEJJUkFNbVFJTElBb3RBQUJCTGtjTmpnRWdDa0VCYWlFSkRNb0JDeUFMSUFKSERZNEJRZEFCSVJBTWx3SUxBa0FnQ3lBQ1JnMEFJQUJCam9DQWdBQTJBZ2dnQUNBTE5nSUVRYmNCSVJBTS9nRUxRZEVCSVJBTWxnSUxBa0FnQkNBQ1J3MEFRZElCSVJBTWxnSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQkdvaEN3TkFJQVF0QUFBZ0VFSDh6NENBQUdvdEFBQkhEWTRCSUJCQkJFWU42UUVnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMGdFaEVBeVZBZ3NnQUNBTUlBSVFySUNBZ0FBaUFRMk5BU0FNSVFFTXVBRUxBa0FnQkNBQ1J3MEFRZFFCSVJBTWxBSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQVdvaERBTkFJQVF0QUFBZ0VFR0IwSUNBQUdvdEFBQkhEWThCSUJCQkFVWU5qZ0VnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMUFFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCMWdFaEVBeVRBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQ2FpRUxBMEFnQkMwQUFDQVFRWVBRZ0lBQWFpMEFBRWNOamdFZ0VFRUNSZzJRQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIV0FTRVFESklDQ3dKQUlBUWdBa2NOQUVIWEFTRVFESklDQ3dKQUFrQWdCQzBBQUVHN2Yyb09FQUNQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQVk4QkN5QUVRUUZxSVFSQnV3RWhFQXo1QVFzZ0JFRUJhaUVFUWJ3QklSQU0rQUVMQWtBZ0JDQUNSdzBBUWRnQklSQU1rUUlMSUFRdEFBQkJ5QUJIRFl3QklBUkJBV29oQkF6RUFRc0NRQ0FFSUFKR0RRQWdBRUdRZ0lDQUFEWUNDQ0FBSUFRMkFnUkJ2Z0VoRUF6M0FRdEIyUUVoRUF5UEFnc0NRQ0FFSUFKSERRQkIyZ0VoRUF5UEFnc2dCQzBBQUVISUFFWU53d0VnQUVFQk9nQW9ETGtCQ3lBQVFRSTZBQzhnQUNBRUlBSVFwb0NBZ0FBaUVBMk5BVUhDQVNFUURQUUJDeUFBTFFBb1FYOXFEZ0szQWJrQnVBRUxBMEFDUUNBRUxRQUFRWFpxRGdRQWpnR09BUUNPQVFzZ0JFRUJhaUlFSUFKSERRQUxRZDBCSVJBTWl3SUxJQUJCQURvQUx5QUFMUUF0UVFSeFJRMkVBZ3NnQUVFQU9nQXZJQUJCQVRvQU5DQUJJUUVNakFFTElCQkJGVVlOMmdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWlBSUxBa0FnQUNBUUlBSVF0SUNBZ0FBaUJBMEFJQkFoQVF5QkFnc0NRQ0FFUVJWSERRQWdBRUVETmdJY0lBQWdFRFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1pQUlMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUduam9DQUFEWUNFQ0FBUVJJMkFneEJBQ0VRREljQ0N5QVFRUlZHRGRZQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIYWpZQ0FBRFlDRUNBQVFSUTJBZ3hCQUNFUURJWUNDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOalFFZ0FFRUhOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRElVQ0N5QUFJQUF2QVRCQmdBRnlPd0V3SUFFaEFRdEJLaUVRRE9vQkN5QVFRUlZHRGRFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHRGpJQ0FBRFlDRUNBQVFSTTJBZ3hCQUNFUURJSUNDeUFRUVJWR0RjOEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFESUVDQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU5BUXNnQUVFTU5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRElBQ0N5QVFRUlZHRGN3QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TUFRc2dBRUVOTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUDRCQ3lBUVFSVkdEY2tCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFAwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlMQVFzZ0FFRU9OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SldBZ0FBMkFoQWdBRUVDTmdJTVFRQWhFQXo3QVFzZ0VFRVZSZzNGQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG95QWdBQTJBaEFnQUVFak5nSU1RUUFoRUF6NkFRc2dBRUVRTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURQa0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6eEFRc2dBRUVSTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUGdCQ3lBUVFSVkdEY0VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBjQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlJQVFzZ0FFRVROZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQWUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6dEFRc2dBRUVVTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFVCQ3lBUVFSVkdEYjBCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFBRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlHQVFzZ0FFRVdOZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQTUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXQ0Q0FnQUFpQkEwQUlBRkJBV29oQVF6cEFRc2dBRUVYTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUElCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6eEFRdENBU0VSQ3lBUVFRRnFJUUVDUUNBQUtRTWdJaEpDLy8vLy8vLy8vLzhQVmcwQUlBQWdFa0lFaGlBUmhEY0RJQ0FCSVFFTWhBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3RpWUNBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzhCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6dUFRc2dBQ2dDQkNFWElBQkJBRFlDQkNBUUlCR25haUlXSVFFZ0FDQVhJQkFnRmlBVUd5SVFFTFdBZ0lBQUloUkZEWE1nQUVFRk5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFETzBCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcXB5QWdBQTJBaEFnQUVFUE5nSU1RUUFoRUF6c0FRc2dBQ0FRSUFJUXRJQ0FnQUFpQVEwQklCQWhBUXRCRGlFUURORUJDd0pBSUFGQkZVY05BQ0FBUVFJMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpxQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTTZRRUxJQUZCQVdvaEVBSkFJQUF2QVRBaUFVR0FBWEZGRFFBQ1FDQUFJQkFnQWhDN2dJQ0FBQ0lCRFFBZ0VDRUJESEFMSUFGQkZVY051Z0VnQUVFRk5nSWNJQUFnRURZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTEFrQWdBVUdnQkhGQm9BUkhEUUFnQUMwQUxVRUNjUTBBSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdXazRDQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRE9rQkN5QUFJQkFnQWhDOWdJQ0FBQm9nRUNFQkFrQUNRQUpBQWtBQ1FDQUFJQkFnQWhDemdJQ0FBQTRXQWdFQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUF3UUxJQUJCQVRvQUxnc2dBQ0FBTHdFd1FjQUFjanNCTUNBUUlRRUxRU1loRUF6UkFRc2dBRUVqTmdJY0lBQWdFRFlDRkNBQVFhV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhWaTRDQUFEWUNFQ0FBUVJFMkFneEJBQ0VRRE9nQkN5QUFMUUF0UVFGeFJRMEJRY01CSVJBTXpnRUxBa0FnRFNBQ1JnMEFBMEFDUUNBTkxRQUFRU0JHRFFBZ0RTRUJETVFCQ3lBTlFRRnFJZzBnQWtjTkFBdEJKU0VRRE9jQkMwRWxJUkFNNWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBMFFyNENBZ0FBaUJFVU5yUUVnQUVFbU5nSWNJQUFnQkRZQ0RDQUFJQTFCQVdvMkFoUkJBQ0VRRE9VQkN5QVFRUlZHRGFzQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWpZQ0FBRFlDRUNBQVFSMDJBZ3hCQUNFUURPUUJDeUFBUVNjMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU00d0VMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBQWtBQ1FDQUFMUUFzUVg1cURnY0dCUVVEQVFJQUJRc2dBQ0FBTHdFd1FRaHlPd0V3REFNTFFRSWhGQXdCQzBFRUlSUUxJQUJCQVRvQUxDQUFJQUF2QVRBZ0ZISTdBVEFMSUJBaEFRdEJLeUVRRE1vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnE1S0FnQUEyQWhBZ0FFRUxOZ0lNUVFBaEVBemlBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNNFFFTElBQkJBRG9BTENBUUlRRU12UUVMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVwSVJBTXhRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSHdsSUNBQURZQ0VDQUFRUU0yQWd4QkFDRVFETjBCQ3dKQUlBNHRBQUJCRFVjTkFDQUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE1QkFXb2hBUXgxQ3lBQVFTdzJBaHdnQUNBQk5nSU1JQUFnRGtFQmFqWUNGRUVBSVJBTTNRRUxJQUF0QUMxQkFYRkZEUUZCeEFFaEVBekRBUXNDUUNBT0lBSkhEUUJCTFNFUUROd0JDd0pBQWtBRFFBSkFJQTR0QUFCQmRtb09CQUlBQUFNQUN5QU9RUUZxSWc0Z0FrY05BQXRCTFNFUUROMEJDeUFBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNGhBUXgwQ3lBQVFTdzJBaHdnQUNBT05nSVVJQUFnQVRZQ0RFRUFJUkFNM0FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESE1MSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6YkFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEaEN4Z0lDQUFDSUVEYUFCSUE0aEFRek9BUXNnRUVFc1J3MEJJQUZCQVdvaEVFRUJJUUVDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnUUFDeUFRSVFFTUJBdEJBaUVCREFFTFFRUWhBUXNnQUVFQk9nQXNJQUFnQUM4Qk1DQUJjanNCTUNBUUlRRU1BUXNnQUNBQUx3RXdRUWh5T3dFd0lCQWhBUXRCT1NFUURMOEJDeUFBUVFBNkFDd2dBU0VCQzBFMElSQU12UUVMSUFBZ0FDOEJNRUVnY2pzQk1DQUJJUUVNQWdzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFTEdBZ0lBQUlnUU5BQ0FCSVFFTXh3RUxJQUJCTnpZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBelVBUXNnQUVFSU9nQXNJQUVoQVF0Qk1DRVFETGtCQ3dKQUlBQXRBQ2hCQVVZTkFDQUJJUUVNQkFzZ0FDMEFMVUVJY1VVTmt3RWdBU0VCREFNTElBQXRBREJCSUhFTmxBRkJ4UUVoRUF5M0FRc0NRQ0FQSUFKR0RRQUNRQU5BQWtBZ0R5MEFBRUZRYWlJQlFmOEJjVUVLU1EwQUlBOGhBVUUxSVJBTXVnRUxJQUFwQXlBaUVVS1pzK2JNbWJQbXpCbFdEUUVnQUNBUlFncCtJaEUzQXlBZ0VTQUJyVUwvQVlNaUVrSi9oVllOQVNBQUlCRWdFbnczQXlBZ0QwRUJhaUlQSUFKSERRQUxRVGtoRUF6UkFRc2dBQ2dDQkNFQ0lBQkJBRFlDQkNBQUlBSWdEMEVCYWlJRUVMR0FnSUFBSWdJTmxRRWdCQ0VCRE1NQkMwRTVJUkFNendFTEFrQWdBQzhCTUNJQlFRaHhSUTBBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUWh4UlEyUUFRc2dBQ0FCUWZmN0EzRkJnQVJ5T3dFd0lBOGhBUXRCTnlFUURMUUJDeUFBSUFBdkFUQkJFSEk3QVRBTXF3RUxJQkJCRlVZTml3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ09nSUFBTmdJUUlBQkJIRFlDREVFQUlSQU15d0VMSUFCQnd3QTJBaHdnQUNBQk5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTXlnRUxBa0FnQVMwQUFFRTZSdzBBSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ3ZnSUNBQUNJUURRQWdBVUVCYWlFQkRHTUxJQUJCd3dBMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNeWdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHeGtZQ0FBRFlDRUNBQVFRbzJBZ3hCQUNFUURNa0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJvSm1BZ0FBMkFoQWdBRUVlTmdJTVFRQWhFQXpJQVFzZ0FFRUFOZ0lBQ3lBQVFZQVNPd0VxSUFBZ0YwRUJhaUlCSUFJUXFJQ0FnQUFpRUEwQklBRWhBUXRCeHdBaEVBeXNBUXNnRUVFVlJ3MkRBU0FBUWRFQU5nSWNJQUFnQVRZQ0ZDQUFRZU9YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNeEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGNExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU13d0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhCcUlDQUFEWUNFQ0FBUVFjMkFnd2dBRUVBTmdJQVFRQWhFQXpDQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekJBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHQWtZQ0FBRFlDRUNBQVFRazJBZ3dNd0FFTElCQkJGVVlOZlNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5L0FRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0FVRUJhaUVCQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLMkFnSUFBSWhBTkFDQUJJUUVNWEFzZ0FFSFlBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5K0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1yUUVMSUFCQjJRQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdlFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLc0JDeUFBUWRvQU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5cEFRc2dBRUhjQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTdBUXNDUUNBQkxRQUFRVkJxSWhCQi93RnhRUXBQRFFBZ0FDQVFPZ0FxSUFGQkFXb2hBVUhQQUNFUURLSUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXluQVFzZ0FFSGVBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5NkFRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSTA4TkFDQUJJUUVNV1FzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRPSmdJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXVRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd010d0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcFFTRkhEUUFnQVNFQkRGWUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2Jpb0NBQURZQ0VDQUFRUWcyQWd4QkFDRVFETFlCQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtTSVFRVjFxUVF0UERRQWdBU0VCREZVTEFrQWdFRUVHU3cwQVFRRWdFSFJCeWdCeFJRMEFJQUVoQVF4VkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZmVKZ0lBQU5nSVFJQUJCQ0RZQ0RBeTFBUXNnRUVFVlJnMXhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFRzVqWUNBQURZQ0VDQUFRUm8yQWd4QkFDRVFETFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4VUN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMTUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExJQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEVCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4UkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMQUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3FBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXl2QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dEFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1UUXNnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlzQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWR5SWdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTXF3RUxJQkJCUDBjTkFTQUJRUUZxSVFFTFFRVWhFQXlRQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlrb0NBQURZQ0VDQUFRUWMyQWd3TXFBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcHdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVZTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjBnQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNcEFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMHdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vd0VMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREVNTElBQkI1UUEyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW9nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0VCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdzQrQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5Z0FRdEJBQ0VRSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFnd01ud0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREo0QkN5QUFRUUEyQWh3Z0FDQVVOZ0lVSUFCQi9wR0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWRBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWTZiZ0lBQU5nSVFJQUJCQmpZQ0RFRUFJUkFNbkFFTElCQkJGVVlOVnlBQVFRQTJBaHdnQUNBQk5nSVVJQUJCekk2QWdBQTJBaEFnQUVFZ05nSU1RUUFoRUF5YkFRc2dBRUVBTmdJQUlCQkJBV29oQVVFa0lSQUxJQUFnRURvQUtTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJFS3VBZ0lBQUloQU5WQ0FCSVFFTVBnc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZkdiZ0lBQU5nSVFJQUJCQmpZQ0RBeVhBUXNnQVVFVlJnMVFJQUJCQURZQ0hDQUFJQVUyQWhRZ0FFSHdqSUNBQURZQ0VDQUFRUnMyQWd4QkFDRVFESllCQ3lBQUtBSUVJUVVnQUVFQU5nSUVJQUFnQlNBUUVLbUFnSUFBSWdVTkFTQVFRUUZxSVFVTFFhMEJJUkFNZXdzZ0FFSEJBVFlDSENBQUlBVTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVRBUXNnQUNnQ0JDRUdJQUJCQURZQ0JDQUFJQVlnRUJDcGdJQ0FBQ0lHRFFFZ0VFRUJhaUVHQzBHdUFTRVFESGdMSUFCQndnRTJBaHdnQUNBR05nSU1JQUFnRUVFQmFqWUNGRUVBSVJBTWtBRUxJQUJCQURZQ0hDQUFJQWMyQWhRZ0FFR1hpNENBQURZQ0VDQUFRUTAyQWd4QkFDRVFESThCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCNDVDQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF5T0FRc2dBRUVBTmdJY0lBQWdDRFlDRkNBQVFaU05nSUFBTmdJUUlBQkJJVFlDREVFQUlSQU1qUUVMUVFFaEZrRUFJUmRCQUNFVVFRRWhFQXNnQUNBUU9nQXJJQWxCQVdvaENBSkFBa0FnQUMwQUxVRVFjUTBBQWtBQ1FBSkFJQUF0QUNvT0F3RUFBZ1FMSUJaRkRRTU1BZ3NnRkEwQkRBSUxJQmRGRFFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBZ1FyWUNBZ0FBaUVFVU5QU0FBUWNrQk5nSWNJQUFnQ0RZQ0ZDQUFJQkEyQWd4QkFDRVFESXdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSUVLMkFnSUFBSWdSRkRYWWdBRUhLQVRZQ0hDQUFJQWcyQWhRZ0FDQUVOZ0lNUVFBaEVBeUxBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ1JDdGdJQ0FBQ0lFUlExMElBQkJ5d0UyQWh3Z0FDQUpOZ0lVSUFBZ0JEWUNERUVBSVJBTWlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQW9RcllDQWdBQWlCRVVOY2lBQVFjMEJOZ0ljSUFBZ0NqWUNGQ0FBSUFRMkFneEJBQ0VRRElrQkN3SkFJQXN0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dDMEVCYWlFS1FiWUJJUkFNY0FzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0N4Q3RnSUNBQUNJRVJRMXdJQUJCendFMkFod2dBQ0FMTmdJVUlBQWdCRFlDREVFQUlSQU1pQUVMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd2dBRUVBTmdJQVFRQWhFQXlIQVFzZ0FVRVZSZzAvSUFCQkFEWUNIQ0FBSUF3MkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRRElZQkN5QUFRWUVFT3dFb0lBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBeEJBV29pREJDcmdJQ0FBQ0lRUlEwNElBQkIwd0UyQWh3Z0FDQU1OZ0lVSUFBZ0VEWUNERUVBSVJBTWhRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhZbTRDQUFEWUNFQ0FBUVFnMkFnd01nd0VMSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF0QkFXb2lDeENyZ0lDQUFDSVFEUUZCeGdFaEVBeHBDeUFBUVFJNkFDZ01WUXNnQUVIVkFUWUNIQ0FBSUFzMkFoUWdBQ0FRTmdJTVFRQWhFQXlBQVFzZ0VFRVZSZzAzSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdraklDQUFEWUNFQ0FBUVJBMkFneEJBQ0VRREg4TElBQXRBRFJCQVVjTk5DQUFJQVFnQWhDOGdJQ0FBQ0lRUlEwMElCQkJGVWNOTlNBQVFkd0JOZ0ljSUFBZ0JEWUNGQ0FBUWRXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWZndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNZlF0QkFDRVFER01MUVFJaEVBeGlDMEVOSVJBTVlRdEJEeUVRREdBTFFTVWhFQXhmQzBFVElSQU1YZ3RCRlNFUURGMExRUlloRUF4Y0MwRVhJUkFNV3d0QkdDRVFERm9MUVJraEVBeFpDMEVhSVJBTVdBdEJHeUVRREZjTFFSd2hFQXhXQzBFZElSQU1WUXRCSHlFUURGUUxRU0VoRUF4VEMwRWpJUkFNVWd0QnhnQWhFQXhSQzBFdUlSQU1VQXRCTHlFUURFOExRVHNoRUF4T0MwRTlJUkFNVFF0QnlBQWhFQXhNQzBISkFDRVFERXNMUWNzQUlSQU1TZ3RCekFBaEVBeEpDMEhPQUNFUURFZ0xRZEVBSVJBTVJ3dEIxUUFoRUF4R0MwSFlBQ0VRREVVTFFka0FJUkFNUkF0QjJ3QWhFQXhEQzBIa0FDRVFERUlMUWVVQUlSQU1RUXRCOFFBaEVBeEFDMEgwQUNFUUREOExRWTBCSVJBTVBndEJsd0VoRUF3OUMwR3BBU0VRRER3TFFhd0JJUkFNT3d0QndBRWhFQXc2QzBHNUFTRVFERGtMUWE4QklSQU1PQXRCc1FFaEVBdzNDMEd5QVNFUUREWUxRYlFCSVJBTU5RdEJ0UUVoRUF3MEMwRzZBU0VRRERNTFFiMEJJUkFNTWd0QnZ3RWhFQXd4QzBIQkFTRVFEREFMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhwaTRDQUFEWUNFQ0FBUVI4MkFneEJBQ0VRREVnTElBQkIyd0UyQWh3Z0FDQUVOZ0lVSUFCQitwYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEhDeUFBUWZnQU5nSWNJQUFnRERZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUmdzZ0FFSFJBRFlDSENBQUlBVTJBaFFnQUVHd2w0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFVUxJQUJCK1FBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1SQXNnQUVINEFEWUNIQ0FBSUFFMkFoUWdBRUhLbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVNTElBQkI1QUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeENDeUFBUWRjQU5nSWNJQUFnQVRZQ0ZDQUFRY21YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTVFBc2dBRUhDQURZQ0hDQUFJQUUyQWhRZ0FFSGptSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERDhMSUFCQkFEWUNCQ0FBSUE4Z0R4Q3hnSUNBQUNJRVJRMEJJQUJCT2pZQ0hDQUFJQVEyQWd3Z0FDQVBRUUZxTmdJVVFRQWhFQXcrQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJFVU5BQ0FBUVRzMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNUGdzZ0FVRUJhaUVCREMwTElBOUJBV29oQVF3dEN5QUFRUUEyQWh3Z0FDQVBOZ0lVSUFCQjVKS0FnQUEyQWhBZ0FFRUVOZ0lNUVFBaEVBdzdDeUFBUVRZMkFod2dBQ0FFTmdJVUlBQWdBallDREVFQUlSQU1PZ3NnQUVFdU5nSWNJQUFnRGpZQ0ZDQUFJQVEyQWd4QkFDRVFERGtMSUFCQjBBQTJBaHdnQUNBQk5nSVVJQUJCa1ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3NEN5QU5RUUZxSVFFTUxBc2dBRUVWTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OZ3NnQUVFYk5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTlFzZ0FFRVBOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Bc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Nd3NnQUVFYU5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTWdzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Rc2dBRUVLTmdJY0lBQWdBVFlDRkNBQVFlU1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NQXNnQUVFZU5nSWNJQUFnQVRZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTHdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTUxnc2dBRUVFTmdJY0lBQWdBVFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1MUXNnQUVFQU5nSUFJQXRCQVdvaEN3dEJ1QUVoRUF3U0N5QUFRUUEyQWdBZ0VFRUJhaUVCUWZVQUlSQU1FUXNnQVNFQkFrQWdBQzBBS1VFRlJ3MEFRZU1BSVJBTUVRdEI0Z0FoRUF3UUMwRUFJUkFnQUVFQU5nSWNJQUJCNUpHQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXdvQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRY0FBSVJBTURndEJBU0VCQ3lBQUlBRTZBQ3dnQUVFQU5nSUFJQmRCQVdvaEFRdEJLQ0VRREFzTElBRWhBUXRCT0NFUURBa0xBa0FnQVNJUElBSkdEUUFEUUFKQUlBOHRBQUJCZ0w2QWdBQnFMUUFBSWdGQkFVWU5BQ0FCUVFKSERRTWdEMEVCYWlFQkRBUUxJQTlCQVdvaUR5QUNSdzBBQzBFK0lSQU1JZ3RCUGlFUURDRUxJQUJCQURvQUxDQVBJUUVNQVF0QkN5RVFEQVlMUVRvaEVBd0ZDeUFCUVFGcUlRRkJMU0VRREFRTElBQWdBVG9BTENBQVFRQTJBZ0FnRmtFQmFpRUJRUXdoRUF3REN5QUFRUUEyQWdBZ0YwRUJhaUVCUVFvaEVBd0NDeUFBUVFBMkFnQUxJQUJCQURvQUxDQU5JUUZCQ1NFUURBQUxDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0N6WUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdYQzBFQUlSQWdBRUVBTmdJY0lBQWdDallDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3V0MwRUFJUkFnQUVFQU5nSWNJQUFnQ1RZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1ZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdVQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3VEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1NDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdSQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3UUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd1BDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdPQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjQ1NnSUFBTmdJUUlBQkJDellDREF3TkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWldKZ0lBQU5nSVFJQUJCQ3pZQ0RBd01DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNEQXdMQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmdVBnSUFBTmdJUUlBQkJDallDREF3S0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkdaZ0lBQU5nSVFJQUJCQWpZQ0RBd0pDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNTVWdJQUFOZ0lRSUFCQkFqWUNEQXdJQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmS1ZnSUFBTmdJUUlBQkJBallDREF3SEN5QUFRUUkyQWh3Z0FDQUJOZ0lVSUFCQm5KcUFnQUEyQWhBZ0FFRVdOZ0lNUVFBaEVBd0dDMEVCSVJBTUJRdEIxQUFoRUNBQklnUWdBa1lOQkNBRFFRaHFJQUFnQkNBQ1FkakNnSUFBUVFvUXhZQ0FnQUFnQXlnQ0RDRUVJQU1vQWdnT0F3RUVBZ0FMRU1xQWdJQUFBQXNnQUVFQU5nSWNJQUJCdFpxQWdBQTJBaEFnQUVFWE5nSU1JQUFnQkVFQmFqWUNGRUVBSVJBTUFnc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFjcWFnSUFBTmdJUUlBQkJDVFlDREVFQUlSQU1BUXNDUUNBQklnUWdBa2NOQUVFaUlSQU1BUXNnQUVHSmdJQ0FBRFlDQ0NBQUlBUTJBZ1JCSVNFUUN5QURRUkJxSklDQWdJQUFJQkFMcndFQkFuOGdBU2dDQUNFR0FrQUNRQ0FDSUFOR0RRQWdCQ0FHYWlFRUlBWWdBMm9nQW1zaEJ5QUNJQVpCZjNNZ0JXb2lCbW9oQlFOQUFrQWdBaTBBQUNBRUxRQUFSZzBBUVFJaEJBd0RDd0pBSUFZTkFFRUFJUVFnQlNFQ0RBTUxJQVpCZjJvaEJpQUVRUUZxSVFRZ0FrRUJhaUlDSUFOSERRQUxJQWNoQmlBRElRSUxJQUJCQVRZQ0FDQUJJQVkyQWdBZ0FDQUNOZ0lFRHdzZ0FVRUFOZ0lBSUFBZ0JEWUNBQ0FBSUFJMkFnUUxDZ0FnQUJESGdJQ0FBQXZ5TmdFTGZ5T0FnSUNBQUVFUWF5SUJKSUNBZ0lBQUFrQkJBQ2dDb05DQWdBQU5BRUVBRU11QWdJQUFRWURVaElBQWF5SUNRZGtBU1EwQVFRQWhBd0pBUVFBb0F1RFRnSUFBSWdRTkFFRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFSWFrRndjVUhZcXRXcUJYTWlCRFlDNE5PQWdBQkJBRUVBTmdMMDA0Q0FBRUVBUVFBMkFzVFRnSUFBQzBFQUlBSTJBc3pUZ0lBQVFRQkJnTlNFZ0FBMkFzalRnSUFBUVFCQmdOU0VnQUEyQXBqUWdJQUFRUUFnQkRZQ3JOQ0FnQUJCQUVGL05nS28wSUNBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMUVlEVWhJQUFRWGhCZ05TRWdBQnJRUTl4UVFCQmdOU0VnQUJCQ0dwQkQzRWJJZ05xSWdSQkJHb2dBa0ZJYWlJRklBTnJJZ05CQVhJMkFnQkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBUVlEVWhJQUFJQVZxUVRnMkFnUUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZMRFFBQ1FFRUFLQUtJMElDQUFDSUdRUkFnQUVFVGFrRndjU0FBUVF0Skd5SUNRUU4ySWdSMklnTkJBM0ZGRFFBQ1FBSkFJQU5CQVhFZ0JISkJBWE1pQlVFRGRDSUVRYkRRZ0lBQWFpSURJQVJCdU5DQWdBQnFLQUlBSWdRb0FnZ2lBa2NOQUVFQUlBWkJmaUFGZDNFMkFvalFnSUFBREFFTElBTWdBallDQ0NBQ0lBTTJBZ3dMSUFSQkNHb2hBeUFFSUFWQkEzUWlCVUVEY2pZQ0JDQUVJQVZxSWdRZ0JDZ0NCRUVCY2pZQ0JBd01DeUFDUVFBb0FwRFFnSUFBSWdkTkRRRUNRQ0FEUlEwQUFrQUNRQ0FESUFSMFFRSWdCSFFpQTBFQUlBTnJjbkVpQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxSWdSQkEzUWlBMEd3MElDQUFHb2lCU0FEUWJqUWdJQUFhaWdDQUNJREtBSUlJZ0JIRFFCQkFDQUdRWDRnQkhkeElnWTJBb2pRZ0lBQURBRUxJQVVnQURZQ0NDQUFJQVUyQWd3TElBTWdBa0VEY2pZQ0JDQURJQVJCQTNRaUJHb2dCQ0FDYXlJRk5nSUFJQU1nQW1vaUFDQUZRUUZ5TmdJRUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUVFDUUFKQUlBWkJBU0FIUVFOMmRDSUljUTBBUVFBZ0JpQUljallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUVOZ0lNSUFJZ0JEWUNDQ0FFSUFJMkFnd2dCQ0FJTmdJSUN5QURRUWhxSVFOQkFDQUFOZ0tjMElDQUFFRUFJQVUyQXBEUWdJQUFEQXdMUVFBb0FvelFnSUFBSWdsRkRRRWdDVUVBSUFscmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFRUUowUWJqU2dJQUFhaWdDQUNJQUtBSUVRWGh4SUFKcklRUWdBQ0VGQWtBRFFBSkFJQVVvQWhBaUF3MEFJQVZCRkdvb0FnQWlBMFVOQWdzZ0F5Z0NCRUY0Y1NBQ2F5SUZJQVFnQlNBRVNTSUZHeUVFSUFNZ0FDQUZHeUVBSUFNaEJRd0FDd3NnQUNnQ0dDRUtBa0FnQUNnQ0RDSUlJQUJHRFFBZ0FDZ0NDQ0lEUVFBb0FwalFnSUFBU1JvZ0NDQUROZ0lJSUFNZ0NEWUNEQXdMQ3dKQUlBQkJGR29pQlNnQ0FDSUREUUFnQUNnQ0VDSURSUTBESUFCQkVHb2hCUXNEUUNBRklRc2dBeUlJUVJScUlnVW9BZ0FpQXcwQUlBaEJFR29oQlNBSUtBSVFJZ01OQUFzZ0MwRUFOZ0lBREFvTFFYOGhBaUFBUWI5L1N3MEFJQUJCRTJvaUEwRndjU0VDUVFBb0FvelFnSUFBSWdkRkRRQkJBQ0VMQWtBZ0FrR0FBa2tOQUVFZklRc2dBa0gvLy84SFN3MEFJQU5CQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJDQUVRWURnSDJwQkVIWkJCSEVpQkhRaUJTQUZRWUNBRDJwQkVIWkJBbkVpQlhSQkQzWWdBeUFFY2lBRmNtc2lBMEVCZENBQ0lBTkJGV3AyUVFGeGNrRWNhaUVMQzBFQUlBSnJJUVFDUUFKQUFrQUNRQ0FMUVFKMFFialNnSUFBYWlnQ0FDSUZEUUJCQUNFRFFRQWhDQXdCQzBFQUlRTWdBa0VBUVJrZ0MwRUJkbXNnQzBFZlJodDBJUUJCQUNFSUEwQUNRQ0FGS0FJRVFYaHhJQUpySWdZZ0JFOE5BQ0FHSVFRZ0JTRUlJQVlOQUVFQUlRUWdCU0VJSUFVaEF3d0RDeUFESUFWQkZHb29BZ0FpQmlBR0lBVWdBRUVkZGtFRWNXcEJFR29vQWdBaUJVWWJJQU1nQmhzaEF5QUFRUUYwSVFBZ0JRMEFDd3NDUUNBRElBaHlEUUJCQUNFSVFRSWdDM1FpQTBFQUlBTnJjaUFIY1NJRFJRMERJQU5CQUNBRGEzRkJmMm9pQXlBRFFReDJRUkJ4SWdOMklnVkJCWFpCQ0hFaUFDQURjaUFGSUFCMklnTkJBblpCQkhFaUJYSWdBeUFGZGlJRFFRRjJRUUp4SWdWeUlBTWdCWFlpQTBFQmRrRUJjU0lGY2lBRElBVjJha0VDZEVHNDBvQ0FBR29vQWdBaEF3c2dBMFVOQVFzRFFDQURLQUlFUVhoeElBSnJJZ1lnQkVraEFBSkFJQU1vQWhBaUJRMEFJQU5CRkdvb0FnQWhCUXNnQmlBRUlBQWJJUVFnQXlBSUlBQWJJUWdnQlNFRElBVU5BQXNMSUFoRkRRQWdCRUVBS0FLUTBJQ0FBQ0FDYTA4TkFDQUlLQUlZSVFzQ1FDQUlLQUlNSWdBZ0NFWU5BQ0FJS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFBSUFNMkFnZ2dBeUFBTmdJTURBa0xBa0FnQ0VFVWFpSUZLQUlBSWdNTkFDQUlLQUlRSWdORkRRTWdDRUVRYWlFRkN3TkFJQVVoQmlBRElnQkJGR29pQlNnQ0FDSUREUUFnQUVFUWFpRUZJQUFvQWhBaUF3MEFDeUFHUVFBMkFnQU1DQXNDUUVFQUtBS1EwSUNBQUNJRElBSkpEUUJCQUNnQ25OQ0FnQUFoQkFKQUFrQWdBeUFDYXlJRlFSQkpEUUFnQkNBQ2FpSUFJQVZCQVhJMkFnUkJBQ0FGTmdLUTBJQ0FBRUVBSUFBMkFwelFnSUFBSUFRZ0Eyb2dCVFlDQUNBRUlBSkJBM0kyQWdRTUFRc2dCQ0FEUVFOeU5nSUVJQVFnQTJvaUF5QURLQUlFUVFGeU5nSUVRUUJCQURZQ25OQ0FnQUJCQUVFQU5nS1EwSUNBQUFzZ0JFRUlhaUVEREFvTEFrQkJBQ2dDbE5DQWdBQWlBQ0FDVFEwQVFRQW9BcURRZ0lBQUlnTWdBbW9pQkNBQUlBSnJJZ1ZCQVhJMkFnUkJBQ0FGTmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFNZ0FrRURjallDQkNBRFFRaHFJUU1NQ2dzQ1FBSkFRUUFvQXVEVGdJQUFSUTBBUVFBb0F1alRnSUFBSVFRTUFRdEJBRUovTndMczA0Q0FBRUVBUW9DQWhJQ0FnTUFBTndMazA0Q0FBRUVBSUFGQkRHcEJjSEZCMktyVnFnVnpOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUJCZ0lBRUlRUUxRUUFoQXdKQUlBUWdBa0hIQUdvaUIyb2lCa0VBSUFScklndHhJZ2dnQWtzTkFFRUFRVEEyQXZqVGdJQUFEQW9MQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BQUpBUVFBb0FyalRnSUFBSWdRZ0NHb2lCU0FFVFEwQUlBVWdBMDBOQVF0QkFDRURRUUJCTURZQytOT0FnQUFNQ2d0QkFDMEF4Tk9BZ0FCQkJIRU5CQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUFKQUlBTW9BZ0FpQlNBRVN3MEFJQVVnQXlnQ0JHb2dCRXNOQXdzZ0F5Z0NDQ0lERFFBTEMwRUFFTXVBZ0lBQUlnQkJmMFlOQlNBSUlRWUNRRUVBS0FMazA0Q0FBQ0lEUVg5cUlnUWdBSEZGRFFBZ0NDQUFheUFFSUFCcVFRQWdBMnR4YWlFR0N5QUdJQUpORFFVZ0JrSCsvLy8vQjBzTkJRSkFRUUFvQXNEVGdJQUFJZ05GRFFCQkFDZ0N1Tk9BZ0FBaUJDQUdhaUlGSUFSTkRRWWdCU0FEU3cwR0N5QUdFTXVBZ0lBQUlnTWdBRWNOQVF3SEN5QUdJQUJySUF0eElnWkIvdi8vL3dkTERRUWdCaERMZ0lDQUFDSUFJQU1vQWdBZ0F5Z0NCR3BHRFFNZ0FDRURDd0pBSUFOQmYwWU5BQ0FDUWNnQWFpQUdUUTBBQWtBZ0J5QUdhMEVBS0FMbzA0Q0FBQ0lFYWtFQUlBUnJjU0lFUWY3Ly8vOEhUUTBBSUFNaEFBd0hDd0pBSUFRUXk0Q0FnQUJCZjBZTkFDQUVJQVpxSVFZZ0F5RUFEQWNMUVFBZ0Jtc1F5NENBZ0FBYURBUUxJQU1oQUNBRFFYOUhEUVVNQXd0QkFDRUlEQWNMUVFBaEFBd0ZDeUFBUVg5SERRSUxRUUJCQUNnQ3hOT0FnQUJCQkhJMkFzVFRnSUFBQ3lBSVFmNy8vLzhIU3cwQklBZ1F5NENBZ0FBaEFFRUFFTXVBZ0lBQUlRTWdBRUYvUmcwQklBTkJmMFlOQVNBQUlBTlBEUUVnQXlBQWF5SUdJQUpCT0dwTkRRRUxRUUJCQUNnQ3VOT0FnQUFnQm1vaUF6WUN1Tk9BZ0FBQ1FDQURRUUFvQXJ6VGdJQUFUUTBBUVFBZ0F6WUN2Tk9BZ0FBTEFrQUNRQUpBQWtCQkFDZ0NvTkNBZ0FBaUJFVU5BRUhJMDRDQUFDRURBMEFnQUNBREtBSUFJZ1VnQXlnQ0JDSUlha1lOQWlBREtBSUlJZ01OQUF3REN3c0NRQUpBUVFBb0FwalFnSUFBSWdORkRRQWdBQ0FEVHcwQkMwRUFJQUEyQXBqUWdJQUFDMEVBSVFOQkFDQUdOZ0xNMDRDQUFFRUFJQUEyQXNqVGdJQUFRUUJCZnpZQ3FOQ0FnQUJCQUVFQUtBTGcwNENBQURZQ3JOQ0FnQUJCQUVFQU5nTFUwNENBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ1FnQmtGSWFpSUZJQU5ySWdOQkFYSTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBQWdCV3BCT0RZQ0JBd0NDeUFETFFBTVFRaHhEUUFnQkNBRlNRMEFJQVFnQUU4TkFDQUVRWGdnQkd0QkQzRkJBQ0FFUVFocVFROXhHeUlGYWlJQVFRQW9BcFRRZ0lBQUlBWnFJZ3NnQldzaUJVRUJjallDQkNBRElBZ2dCbW8yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUZOZ0tVMElDQUFFRUFJQUEyQXFEUWdJQUFJQVFnQzJwQk9EWUNCQXdCQ3dKQUlBQkJBQ2dDbU5DQWdBQWlDRThOQUVFQUlBQTJBcGpRZ0lBQUlBQWhDQXNnQUNBR2FpRUZRY2pUZ0lBQUlRTUNRQUpBQWtBQ1FBSkFBa0FDUUFOQUlBTW9BZ0FnQlVZTkFTQURLQUlJSWdNTkFBd0NDd3NnQXkwQURFRUljVVVOQVF0QnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUlGSUFSTERRTUxJQU1vQWdnaEF3d0FDd3NnQXlBQU5nSUFJQU1nQXlnQ0JDQUdhallDQkNBQVFYZ2dBR3RCRDNGQkFDQUFRUWhxUVE5eEcyb2lDeUFDUVFOeU5nSUVJQVZCZUNBRmEwRVBjVUVBSUFWQkNHcEJEM0ViYWlJR0lBc2dBbW9pQW1zaEF3SkFJQVlnQkVjTkFFRUFJQUkyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQTJvaUF6WUNsTkNBZ0FBZ0FpQURRUUZ5TmdJRURBTUxBa0FnQmtFQUtBS2MwSUNBQUVjTkFFRUFJQUkyQXB6UWdJQUFRUUJCQUNnQ2tOQ0FnQUFnQTJvaUF6WUNrTkNBZ0FBZ0FpQURRUUZ5TmdJRUlBSWdBMm9nQXpZQ0FBd0RDd0pBSUFZb0FnUWlCRUVEY1VFQlJ3MEFJQVJCZUhFaEJ3SkFBa0FnQkVIL0FVc05BQ0FHS0FJSUlnVWdCRUVEZGlJSVFRTjBRYkRRZ0lBQWFpSUFSaG9DUUNBR0tBSU1JZ1FnQlVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQ0hkeE5nS0kwSUNBQUF3Q0N5QUVJQUJHR2lBRUlBVTJBZ2dnQlNBRU5nSU1EQUVMSUFZb0FoZ2hDUUpBQWtBZ0JpZ0NEQ0lBSUFaR0RRQWdCaWdDQ0NJRUlBaEpHaUFBSUFRMkFnZ2dCQ0FBTmdJTURBRUxBa0FnQmtFVWFpSUVLQUlBSWdVTkFDQUdRUkJxSWdRb0FnQWlCUTBBUVFBaEFBd0JDd05BSUFRaENDQUZJZ0JCRkdvaUJDZ0NBQ0lGRFFBZ0FFRVFhaUVFSUFBb0FoQWlCUTBBQ3lBSVFRQTJBZ0FMSUFsRkRRQUNRQUpBSUFZZ0JpZ0NIQ0lGUVFKMFFialNnSUFBYWlJRUtBSUFSdzBBSUFRZ0FEWUNBQ0FBRFFGQkFFRUFLQUtNMElDQUFFRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUdSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUpOZ0lZQWtBZ0JpZ0NFQ0lFUlEwQUlBQWdCRFlDRUNBRUlBQTJBaGdMSUFZb0FoUWlCRVVOQUNBQVFSUnFJQVEyQWdBZ0JDQUFOZ0lZQ3lBSElBTnFJUU1nQmlBSGFpSUdLQUlFSVFRTElBWWdCRUYrY1RZQ0JDQUNJQU5xSUFNMkFnQWdBaUFEUVFGeU5nSUVBa0FnQTBIL0FVc05BQ0FEUVhoeFFiRFFnSUFBYWlFRUFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0EwRURkblFpQTNFTkFFRUFJQVVnQTNJMkFvalFnSUFBSUFRaEF3d0JDeUFFS0FJSUlRTUxJQU1nQWpZQ0RDQUVJQUkyQWdnZ0FpQUVOZ0lNSUFJZ0F6WUNDQXdEQzBFZklRUUNRQ0FEUWYvLy93ZExEUUFnQTBFSWRpSUVJQVJCZ1A0L2FrRVFka0VJY1NJRWRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUFJQUJCZ0lBUGFrRVFka0VDY1NJQWRFRVBkaUFFSUFWeUlBQnlheUlFUVFGMElBTWdCRUVWYW5aQkFYRnlRUnhxSVFRTElBSWdCRFlDSENBQ1FnQTNBaEFnQkVFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ0JCQVNBRWRDSUljUTBBSUFVZ0FqWUNBRUVBSUFBZ0NISTJBb3pRZ0lBQUlBSWdCVFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQU1MSUFOQkFFRVpJQVJCQVhacklBUkJIMFliZENFRUlBVW9BZ0FoQUFOQUlBQWlCU2dDQkVGNGNTQURSZzBDSUFSQkhYWWhBQ0FFUVFGMElRUWdCU0FBUVFSeGFrRVFhaUlJS0FJQUlnQU5BQXNnQ0NBQ05nSUFJQUlnQlRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFJTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdzZ0JrRklhaUlJSUFOcklnTkJBWEkyQWdRZ0FDQUlha0U0TmdJRUlBUWdCVUUzSUFWclFROXhRUUFnQlVGSmFrRVBjUnRxUVVGcUlnZ2dDQ0FFUVJCcVNSc2lDRUVqTmdJRVFRQkJBQ2dDOE5PQWdBQTJBcVRRZ0lBQVFRQWdBellDbE5DQWdBQkJBQ0FMTmdLZzBJQ0FBQ0FJUVJCcVFRQXBBdERUZ0lBQU53SUFJQWhCQUNrQ3lOT0FnQUEzQWdoQkFDQUlRUWhxTmdMUTA0Q0FBRUVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRUFOZ0xVMDRDQUFDQUlRU1JxSVFNRFFDQURRUWMyQWdBZ0EwRUVhaUlESUFWSkRRQUxJQWdnQkVZTkF5QUlJQWdvQWdSQmZuRTJBZ1FnQ0NBSUlBUnJJZ0EyQWdBZ0JDQUFRUUZ5TmdJRUFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQUVFRGRuUWlBSEVOQUVFQUlBVWdBSEkyQW9qUWdJQUFJQU1oQlF3QkN5QURLQUlJSVFVTElBVWdCRFlDRENBRElBUTJBZ2dnQkNBRE5nSU1JQVFnQlRZQ0NBd0VDMEVmSVFNQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJSUlBaEJnSUFQYWtFUWRrRUNjU0lJZEVFUGRpQURJQVZ5SUFoeWF5SURRUUYwSUFBZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFRZ0F6WUNIQ0FFUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnaEJBU0FEZENJR2NRMEFJQVVnQkRZQ0FFRUFJQWdnQm5JMkFvelFnSUFBSUFRZ0JUWUNHQ0FFSUFRMkFnZ2dCQ0FFTmdJTURBUUxJQUJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhDQU5BSUFnaUJTZ0NCRUY0Y1NBQVJnMERJQU5CSFhZaENDQURRUUYwSVFNZ0JTQUlRUVJ4YWtFUWFpSUdLQUlBSWdnTkFBc2dCaUFFTmdJQUlBUWdCVFlDR0NBRUlBUTJBZ3dnQkNBRU5nSUlEQU1MSUFVb0FnZ2lBeUFDTmdJTUlBVWdBallDQ0NBQ1FRQTJBaGdnQWlBRk5nSU1JQUlnQXpZQ0NBc2dDMEVJYWlFRERBVUxJQVVvQWdnaUF5QUVOZ0lNSUFVZ0JEWUNDQ0FFUVFBMkFoZ2dCQ0FGTmdJTUlBUWdBellDQ0F0QkFDZ0NsTkNBZ0FBaUF5QUNUUTBBUVFBb0FxRFFnSUFBSWdRZ0Ftb2lCU0FESUFKcklnTkJBWEkyQWdSQkFDQUROZ0tVMElDQUFFRUFJQVUyQXFEUWdJQUFJQVFnQWtFRGNqWUNCQ0FFUVFocUlRTU1Bd3RCQUNFRFFRQkJNRFlDK05PQWdBQU1BZ3NDUUNBTFJRMEFBa0FDUUNBSUlBZ29BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBQTJBZ0FnQUEwQlFRQWdCMEYrSUFWM2NTSUhOZ0tNMElDQUFBd0NDeUFMUVJCQkZDQUxLQUlRSUFoR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFzMkFoZ0NRQ0FJS0FJUUlnTkZEUUFnQUNBRE5nSVFJQU1nQURZQ0dBc2dDRUVVYWlnQ0FDSURSUTBBSUFCQkZHb2dBellDQUNBRElBQTJBaGdMQWtBQ1FDQUVRUTlMRFFBZ0NDQUVJQUpxSWdOQkEzSTJBZ1FnQ0NBRGFpSURJQU1vQWdSQkFYSTJBZ1FNQVFzZ0NDQUNhaUlBSUFSQkFYSTJBZ1FnQ0NBQ1FRTnlOZ0lFSUFBZ0JHb2dCRFlDQUFKQUlBUkIvd0ZMRFFBZ0JFRjRjVUd3MElDQUFHb2hBd0pBQWtCQkFDZ0NpTkNBZ0FBaUJVRUJJQVJCQTNaMElnUnhEUUJCQUNBRklBUnlOZ0tJMElDQUFDQURJUVFNQVFzZ0F5Z0NDQ0VFQ3lBRUlBQTJBZ3dnQXlBQU5nSUlJQUFnQXpZQ0RDQUFJQVEyQWdnTUFRdEJIeUVEQWtBZ0JFSC8vLzhIU3cwQUlBUkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQlNBRlFZRGdIMnBCRUhaQkJIRWlCWFFpQWlBQ1FZQ0FEMnBCRUhaQkFuRWlBblJCRDNZZ0F5QUZjaUFDY21zaUEwRUJkQ0FFSUFOQkZXcDJRUUZ4Y2tFY2FpRURDeUFBSUFNMkFod2dBRUlBTndJUUlBTkJBblJCdU5LQWdBQnFJUVVDUUNBSFFRRWdBM1FpQW5FTkFDQUZJQUEyQWdCQkFDQUhJQUp5TmdLTTBJQ0FBQ0FBSUFVMkFoZ2dBQ0FBTmdJSUlBQWdBRFlDREF3QkN5QUVRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBeUFGS0FJQUlRSUNRQU5BSUFJaUJTZ0NCRUY0Y1NBRVJnMEJJQU5CSFhZaEFpQURRUUYwSVFNZ0JTQUNRUVJ4YWtFUWFpSUdLQUlBSWdJTkFBc2dCaUFBTmdJQUlBQWdCVFlDR0NBQUlBQTJBZ3dnQUNBQU5nSUlEQUVMSUFVb0FnZ2lBeUFBTmdJTUlBVWdBRFlDQ0NBQVFRQTJBaGdnQUNBRk5nSU1JQUFnQXpZQ0NBc2dDRUVJYWlFRERBRUxBa0FnQ2tVTkFBSkFBa0FnQUNBQUtBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdNb0FnQkhEUUFnQXlBSU5nSUFJQWdOQVVFQUlBbEJmaUFGZDNFMkFvelFnSUFBREFJTElBcEJFRUVVSUFvb0FoQWdBRVliYWlBSU5nSUFJQWhGRFFFTElBZ2dDallDR0FKQUlBQW9BaEFpQTBVTkFDQUlJQU0yQWhBZ0F5QUlOZ0lZQ3lBQVFSUnFLQUlBSWdORkRRQWdDRUVVYWlBRE5nSUFJQU1nQ0RZQ0dBc0NRQUpBSUFSQkQwc05BQ0FBSUFRZ0Ftb2lBMEVEY2pZQ0JDQUFJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFBSUFKcUlnVWdCRUVCY2pZQ0JDQUFJQUpCQTNJMkFnUWdCU0FFYWlBRU5nSUFBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFNQ1FBSkFRUUVnQjBFRGRuUWlDQ0FHY1EwQVFRQWdDQ0FHY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FETmdJTUlBSWdBellDQ0NBRElBSTJBZ3dnQXlBSU5nSUlDMEVBSUFVMkFwelFnSUFBUVFBZ0JEWUNrTkNBZ0FBTElBQkJDR29oQXdzZ0FVRVFhaVNBZ0lDQUFDQURDd29BSUFBUXlZQ0FnQUFMNGcwQkIzOENRQ0FBUlEwQUlBQkJlR29pQVNBQVFYeHFLQUlBSWdKQmVIRWlBR29oQXdKQUlBSkJBWEVOQUNBQ1FRTnhSUTBCSUFFZ0FTZ0NBQ0lDYXlJQlFRQW9BcGpRZ0lBQUlnUkpEUUVnQWlBQWFpRUFBa0FnQVVFQUtBS2MwSUNBQUVZTkFBSkFJQUpCL3dGTERRQWdBU2dDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQVNnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQXdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0NDeUFCS0FJWUlRY0NRQUpBSUFFb0Fnd2lCaUFCUmcwQUlBRW9BZ2dpQWlBRVNSb2dCaUFDTmdJSUlBSWdCallDREF3QkN3SkFJQUZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUlDS0FJQUlnUU5BRUVBSVFZTUFRc0RRQ0FDSVFVZ0JDSUdRUlJxSWdJb0FnQWlCQTBBSUFaQkVHb2hBaUFHS0FJUUlnUU5BQXNnQlVFQU5nSUFDeUFIUlEwQkFrQUNRQ0FCSUFFb0Fod2lCRUVDZEVHNDBvQ0FBR29pQWlnQ0FFY05BQ0FDSUFZMkFnQWdCZzBCUVFCQkFDZ0NqTkNBZ0FCQmZpQUVkM0UyQW96UWdJQUFEQU1MSUFkQkVFRVVJQWNvQWhBZ0FVWWJhaUFHTmdJQUlBWkZEUUlMSUFZZ0J6WUNHQUpBSUFFb0FoQWlBa1VOQUNBR0lBSTJBaEFnQWlBR05nSVlDeUFCS0FJVUlnSkZEUUVnQmtFVWFpQUNOZ0lBSUFJZ0JqWUNHQXdCQ3lBREtBSUVJZ0pCQTNGQkEwY05BQ0FESUFKQmZuRTJBZ1JCQUNBQU5nS1EwSUNBQUNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUR3c2dBU0FEVHcwQUlBTW9BZ1FpQWtFQmNVVU5BQUpBQWtBZ0FrRUNjUTBBQWtBZ0EwRUFLQUtnMElDQUFFY05BRUVBSUFFMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0FHb2lBRFlDbE5DQWdBQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFOQkFFRUFOZ0tRMElDQUFFRUFRUUEyQXB6UWdJQUFEd3NDUUNBRFFRQW9BcHpRZ0lBQVJ3MEFRUUFnQVRZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBQWFpSUFOZ0tRMElDQUFDQUJJQUJCQVhJMkFnUWdBU0FBYWlBQU5nSUFEd3NnQWtGNGNTQUFhaUVBQWtBQ1FDQUNRZjhCU3cwQUlBTW9BZ2dpQkNBQ1FRTjJJZ1ZCQTNSQnNOQ0FnQUJxSWdaR0dnSkFJQU1vQWd3aUFpQUVSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUZkM0UyQW9qUWdJQUFEQUlMSUFJZ0JrWWFJQUlnQkRZQ0NDQUVJQUkyQWd3TUFRc2dBeWdDR0NFSEFrQUNRQ0FES0FJTUlnWWdBMFlOQUNBREtBSUlJZ0pCQUNnQ21OQ0FnQUJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0EwRVVhaUlDS0FJQUlnUU5BQ0FEUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUFDUUFKQUlBTWdBeWdDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUFnc2dCMEVRUVJRZ0J5Z0NFQ0FEUmh0cUlBWTJBZ0FnQmtVTkFRc2dCaUFITmdJWUFrQWdBeWdDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBTW9BaFFpQWtVTkFDQUdRUlJxSUFJMkFnQWdBaUFHTmdJWUN5QUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFGQkFDQUFOZ0tRMElDQUFBOExJQU1nQWtGK2NUWUNCQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFQ3dKQUlBQkIvd0ZMRFFBZ0FFRjRjVUd3MElDQUFHb2hBZ0pBQWtCQkFDZ0NpTkNBZ0FBaUJFRUJJQUJCQTNaMElnQnhEUUJCQUNBRUlBQnlOZ0tJMElDQUFDQUNJUUFNQVFzZ0FpZ0NDQ0VBQ3lBQUlBRTJBZ3dnQWlBQk5nSUlJQUVnQWpZQ0RDQUJJQUEyQWdnUEMwRWZJUUlDUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlDSUFKQmdQNC9ha0VRZGtFSWNTSUNkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lHSUFaQmdJQVBha0VRZGtFQ2NTSUdkRUVQZGlBQ0lBUnlJQVp5YXlJQ1FRRjBJQUFnQWtFVmFuWkJBWEZ5UVJ4cUlRSUxJQUVnQWpZQ0hDQUJRZ0EzQWhBZ0FrRUNkRUc0MG9DQUFHb2hCQUpBQWtCQkFDZ0NqTkNBZ0FBaUJrRUJJQUowSWdOeERRQWdCQ0FCTmdJQVFRQWdCaUFEY2pZQ2pOQ0FnQUFnQVNBRU5nSVlJQUVnQVRZQ0NDQUJJQUUyQWd3TUFRc2dBRUVBUVJrZ0FrRUJkbXNnQWtFZlJodDBJUUlnQkNnQ0FDRUdBa0FEUUNBR0lnUW9BZ1JCZUhFZ0FFWU5BU0FDUVIxMklRWWdBa0VCZENFQ0lBUWdCa0VFY1dwQkVHb2lBeWdDQUNJR0RRQUxJQU1nQVRZQ0FDQUJJQVEyQWhnZ0FTQUJOZ0lNSUFFZ0FUWUNDQXdCQ3lBRUtBSUlJZ0FnQVRZQ0RDQUVJQUUyQWdnZ0FVRUFOZ0lZSUFFZ0JEWUNEQ0FCSUFBMkFnZ0xRUUJCQUNnQ3FOQ0FnQUJCZjJvaUFVRi9JQUViTmdLbzBJQ0FBQXNMQkFBQUFBdE9BQUpBSUFBTkFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRWDlNRFFBQ1FDQUFRUkIyUUFBaUFFRi9SdzBBUVFCQk1EWUMrTk9BZ0FCQmZ3OExJQUJCRUhRUEN4REtnSUNBQUFBTDhnSUNBMzhCZmdKQUlBSkZEUUFnQUNBQk9nQUFJQUlnQUdvaUEwRi9haUFCT2dBQUlBSkJBMGtOQUNBQUlBRTZBQUlnQUNBQk9nQUJJQU5CZldvZ0FUb0FBQ0FEUVg1cUlBRTZBQUFnQWtFSFNRMEFJQUFnQVRvQUF5QURRWHhxSUFFNkFBQWdBa0VKU1EwQUlBQkJBQ0FBYTBFRGNTSUVhaUlESUFGQi93RnhRWUdDaEFoc0lnRTJBZ0FnQXlBQ0lBUnJRWHh4SWdScUlnSkJmR29nQVRZQ0FDQUVRUWxKRFFBZ0F5QUJOZ0lJSUFNZ0FUWUNCQ0FDUVhocUlBRTJBZ0FnQWtGMGFpQUJOZ0lBSUFSQkdVa05BQ0FESUFFMkFoZ2dBeUFCTmdJVUlBTWdBVFlDRUNBRElBRTJBZ3dnQWtGd2FpQUJOZ0lBSUFKQmJHb2dBVFlDQUNBQ1FXaHFJQUUyQWdBZ0FrRmthaUFCTmdJQUlBUWdBMEVFY1VFWWNpSUZheUlDUVNCSkRRQWdBYTFDZ1lDQWdCQitJUVlnQXlBRmFpRUJBMEFnQVNBR053TVlJQUVnQmpjREVDQUJJQVkzQXdnZ0FTQUdOd01BSUFGQklHb2hBU0FDUVdCcUlnSkJIMHNOQUFzTElBQUxDNDVJQVFCQmdBZ0xoa2dCQUFBQUFnQUFBQU1BQUFBQUFBQUFBQUFBQUFRQUFBQUZBQUFBQUFBQUFBQUFBQUFHQUFBQUJ3QUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z2NYVmxjbmtBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlpYjJSNUFFTnZiblJsYm5RdFRHVnVaM1JvSUc5MlpYSm1iRzkzQUVOb2RXNXJJSE5wZW1VZ2IzWmxjbVpzYjNjQVVtVnpjRzl1YzJVZ2IzWmxjbVpzYjNjQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlFaFVWRkF2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlGSlVVMUF2ZUM1NElISmxjWFZsYzNRQVJYaHdaV04wWldRZ1UwOVZVa05GSUcxbGRHaHZaQ0JtYjNJZ1NVTkZMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z1puSmhaMjFsYm5RZ2MzUmhjblFBUlhod1pXTjBaV1FnWkc5MEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmMzUmhkSFZ6QUVsdWRtRnNhV1FnY21WemNHOXVjMlVnYzNSaGRIVnpBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1BVlhObGNpQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjbVZ6WlhSZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5b1pXRmtaWEpnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJKbFoybHVZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjM1JoZEhWelgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYM1Z5YkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGRHaHZaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmxjblpsY2dCSmJuWmhiR2xrSUdobFlXUmxjaUIyWVd4MVpTQmphR0Z5QUVsdWRtRnNhV1FnYUdWaFpHVnlJR1pwWld4a0lHTm9ZWElBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV2x1YjNJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUcxaGFtOXlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0JEVWt4R0lHRm1kR1Z5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0JJVkZSUUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCb1pXRmtaWElnZEc5clpXNEFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTFjbXdBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUdsdUlIVnliQUJWYm1WNGNHVmpkR1ZrSUhOMFlYSjBJR05vWVhJZ2FXNGdkWEpzQUVSdmRXSnNaU0JBSUdsdUlIVnliQUJGYlhCMGVTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQkRiMjUwWlc1MExVeGxibWQwYUFCRWRYQnNhV05oZEdVZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCd1lYUm9BRU52Ym5SbGJuUXRUR1Z1WjNSb0lHTmhiaWQwSUdKbElIQnlaWE5sYm5RZ2QybDBhQ0JVY21GdWMyWmxjaTFGYm1OdlpHbHVad0JKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJ6YVhwbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2RtRnNkV1VBVFdsemMybHVaeUJsZUhCbFkzUmxaQ0JNUmlCaFpuUmxjaUJvWldGa1pYSWdkbUZzZFdVQVNXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0lHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhGMWIzUmxJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdWa0lIWmhiSFZsQUZCaGRYTmxaQ0JpZVNCdmJsOW9aV0ZrWlhKelgyTnZiWEJzWlhSbEFFbHVkbUZzYVdRZ1JVOUdJSE4wWVhSbEFHOXVYM0psYzJWMElIQmhkWE5sQUc5dVgyTm9kVzVyWDJobFlXUmxjaUJ3WVhWelpRQnZibDl0WlhOellXZGxYMkpsWjJsdUlIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaU0J3WVhWelpRQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTFjbXhmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpTQndZWFZ6WlFCVmJtVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSE4wWVhKMElHeHBibVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklHNWhiV1VBVUdGMWMyVWdiMjRnUTA5T1RrVkRWQzlWY0dkeVlXUmxBRkJoZFhObElHOXVJRkJTU1M5VmNHZHlZV1JsQUVWNGNHVmpkR1ZrSUVoVVZGQXZNaUJEYjI1dVpXTjBhVzl1SUZCeVpXWmhZMlVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl0WlhSb2IyUUFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYldWMGFHOWtBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgyWnBaV3hrQUZCaGRYTmxaQUJKYm5aaGJHbGtJSGR2Y21RZ1pXNWpiM1Z1ZEdWeVpXUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1pXNWpiM1Z1ZEdWeVpXUUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelkyaGxiV0VBVW1WeGRXVnpkQ0JvWVhNZ2FXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0FGTlhTVlJEU0Y5UVVrOVlXUUJWVTBWZlVGSlBXRmtBVFV0QlExUkpWa2xVV1FCVlRsQlNUME5GVTFOQlFreEZYMFZPVkVsVVdRQkRUMUJaQUUxUFZrVkVYMUJGVWsxQlRrVk9WRXhaQUZSUFQxOUZRVkpNV1FCT1QxUkpSbGtBUmtGSlRFVkVYMFJGVUVWT1JFVk9RMWtBUWtGRVgwZEJWRVZYUVZrQVVFeEJXUUJRVlZRQVEwaEZRMHRQVlZRQVIwRlVSVmRCV1Y5VVNVMUZUMVZVQUZKRlVWVkZVMVJmVkVsTlJVOVZWQUJPUlZSWFQxSkxYME5QVGs1RlExUmZWRWxOUlU5VlZBQkRUMDVPUlVOVVNVOU9YMVJKVFVWUFZWUUFURTlIU1U1ZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDFKRlFVUmZWRWxOUlU5VlZBQlFUMU5VQUUxSlUwUkpVa1ZEVkVWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlTUlZGVlJWTlVBRU5NU1VWT1ZGOURURTlUUlVSZlRFOUJSRjlDUVV4QlRrTkZSRjlTUlZGVlJWTlVBRUpCUkY5U1JWRlZSVk5VQUVoVVZGQmZVa1ZSVlVWVFZGOVRSVTVVWDFSUFgwaFVWRkJUWDFCUFVsUUFVa1ZRVDFKVUFFbE5YMEZmVkVWQlVFOVVBRkpGVTBWVVgwTlBUbFJGVGxRQVRrOWZRMDlPVkVWT1ZBQlFRVkpVU1VGTVgwTlBUbFJGVGxRQVNGQkZYMGxPVmtGTVNVUmZRMDlPVTFSQlRsUUFTRkJGWDBOQ1gxSkZVMFZVQUVkRlZBQklVRVZmVTFSU1NVTlVBRU5QVGtaTVNVTlVBRlJGVFZCUFVrRlNXVjlTUlVSSlVrVkRWQUJRUlZKTlFVNUZUbFJmVWtWRVNWSkZRMVFBUTA5T1RrVkRWQUJOVlV4VVNWOVRWRUZVVlZNQVNGQkZYMGxPVmtGTVNVUmZVMVJCVkZWVEFGUlBUMTlOUVU1WlgxSkZVVlZGVTFSVEFFVkJVa3haWDBoSlRsUlRBRlZPUVZaQlNVeEJRa3hGWDBaUFVsOU1SVWRCVEY5U1JVRlRUMDVUQUU5UVZFbFBUbE1BVTFkSlZFTklTVTVIWDFCU1QxUlBRMDlNVXdCV1FWSkpRVTVVWDBGTVUwOWZUa1ZIVDFSSlFWUkZVd0JOVlV4VVNWQk1SVjlEU0U5SlEwVlRBRWxPVkVWU1RrRk1YMU5GVWxaRlVsOUZVbEpQVWdCWFJVSmZVMFZTVmtWU1gxVk9TMDVQVjA1ZlJWSlNUMUlBVWtGSlRFZFZUbDlGVWxKUFVnQkpSRVZPVkVsVVdWOVFVazlXU1VSRlVsOUJWVlJJUlU1VVNVTkJWRWxQVGw5RlVsSlBVZ0JUVTB4ZlEwVlNWRWxHU1VOQlZFVmZSVkpTVDFJQVNVNVdRVXhKUkY5WVgwWlBVbGRCVWtSRlJGOUdUMUlBVTBWVVgxQkJVa0ZOUlZSRlVnQkhSVlJmVUVGU1FVMUZWRVZTQUVoUVJWOVZVMFZTQUZORlJWOVBWRWhGVWdCSVVFVmZRMEpmUTBoVlRrdGZTRVZCUkVWU0FFMUxRMEZNUlU1RVFWSUFVMFZVVlZBQVYwVkNYMU5GVWxaRlVsOUpVMTlFVDFkT0FGUkZRVkpFVDFkT0FFaFFSVjlEVEU5VFJVUmZRMDlPVGtWRFZFbFBUZ0JJUlZWU1NWTlVTVU5mUlZoUVNWSkJWRWxQVGdCRVNWTkRUMDVPUlVOVVJVUmZUMUJGVWtGVVNVOU9BRTVQVGw5QlZWUklUMUpKVkVGVVNWWkZYMGxPUms5U1RVRlVTVTlPQUVoUVJWOUpUbFpCVEVsRVgxWkZVbE5KVDA0QVNGQkZYME5DWDAxRlUxTkJSMFZmUWtWSFNVNEFVMGxVUlY5SlUxOUdVazlhUlU0QVNGQkZYMGxPVmtGTVNVUmZTRVZCUkVWU1gxUlBTMFZPQUVsT1ZrRk1TVVJmVkU5TFJVNEFSazlTUWtsRVJFVk9BRVZPU0VGT1EwVmZXVTlWVWw5RFFVeE5BRWhRUlY5SlRsWkJURWxFWDFWU1RBQkNURTlEUzBWRVgwSlpYMUJCVWtWT1ZFRk1YME5QVGxSU1Qwd0FUVXREVDB3QVFVTk1BRWhRUlY5SlRsUkZVazVCVEFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZYMVZPVDBaR1NVTkpRVXdBU0ZCRlgwOUxBRlZPVEVsT1N3QlZUa3hQUTBzQVVGSkpBRkpGVkZKWlgxZEpWRWdBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9WRVZPVkY5TVJVNUhWRWdBU0ZCRlgxVk9SVmhRUlVOVVJVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVJreFZVMGdBVUZKUFVGQkJWRU5JQUUwdFUwVkJVa05JQUZWU1NWOVVUMDlmVEU5T1J3QlFVazlEUlZOVFNVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlVFVlNVMGxUVkVWT1ZGOVhRVkpPU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVjBGU1RrbE9Sd0JJVUVWZlNVNVdRVXhKUkY5VVVrRk9VMFpGVWw5RlRrTlBSRWxPUndCRmVIQmxZM1JsWkNCRFVreEdBRWhRUlY5SlRsWkJURWxFWDBOSVZVNUxYMU5KV2tVQVRVOVdSUUJEVDA1VVNVNVZSUUJJVUVWZlEwSmZVMVJCVkZWVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlXUlZKVFNVOU9YME5QVFZCTVJWUkZBRWhRUlY5RFFsOVZVa3hmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gwNUJUVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZWRWhQUkY5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMFpKUlV4RVgwTlBUVkJNUlZSRkFFUkZURVZVUlFCSVVFVmZTVTVXUVV4SlJGOUZUMFpmVTFSQlZFVUFTVTVXUVV4SlJGOVRVMHhmUTBWU1ZFbEdTVU5CVkVVQVVFRlZVMFVBVGs5ZlVrVlRVRTlPVTBVQVZVNVRWVkJRVDFKVVJVUmZUVVZFU1VGZlZGbFFSUUJIVDA1RkFFNVBWRjlCUTBORlVGUkJRa3hGQUZORlVsWkpRMFZmVlU1QlZrRkpURUZDVEVVQVVrRk9SMFZmVGs5VVgxTkJWRWxUUmtsQlFreEZBRTlTU1VkSlRsOUpVMTlWVGxKRlFVTklRVUpNUlFCU1JWTlFUMDVUUlY5SlUxOVRWRUZNUlFCUVZWSkhSUUJOUlZKSFJRQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMVJQVDE5TVFWSkhSUUJRUVZsTVQwRkVYMVJQVDE5TVFWSkhSUUJKVGxOVlJrWkpRMGxGVGxSZlUxUlBVa0ZIUlFCSVVFVmZVRUZWVTBWRVgxVlFSMUpCUkVVQVNGQkZYMUJCVlZORlJGOUlNbDlWVUVkU1FVUkZBRk5QVlZKRFJRQkJUazVQVlU1RFJRQlVVa0ZEUlFCSVVFVmZWVTVGV0ZCRlExUkZSRjlUVUVGRFJRQkVSVk5EVWtsQ1JRQlZUbE5WUWxORFVrbENSUUJTUlVOUFVrUUFTRkJGWDBsT1ZrRk1TVVJmVFVWVVNFOUVBRTVQVkY5R1QxVk9SQUJRVWs5UVJrbE9SQUJWVGtKSlRrUUFVa1ZDU1U1RUFGVk9RVlZVU0U5U1NWcEZSQUJOUlZSSVQwUmZUazlVWDBGTVRFOVhSVVFBU0ZSVVVGOVdSVkpUU1U5T1gwNVBWRjlUVlZCUVQxSlVSVVFBUVV4U1JVRkVXVjlTUlZCUFVsUkZSQUJCUTBORlVGUkZSQUJPVDFSZlNVMVFURVZOUlU1VVJVUUFURTlQVUY5RVJWUkZRMVJGUkFCSVVFVmZRMUpmUlZoUVJVTlVSVVFBU0ZCRlgweEdYMFZZVUVWRFZFVkVBRU5TUlVGVVJVUUFTVTFmVlZORlJBQklVRVZmVUVGVlUwVkVBRlJKVFVWUFZWUmZUME5EVlZKRlJBQlFRVmxOUlU1VVgxSkZVVlZKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlTUlZGVlNWSkZSQUJRVWs5WVdWOUJWVlJJUlU1VVNVTkJWRWxQVGw5U1JWRlZTVkpGUkFCT1JWUlhUMUpMWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRXhGVGtkVVNGOVNSVkZWU1ZKRlJBQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlVrVlJWVWxTUlVRQVZWQkhVa0ZFUlY5U1JWRlZTVkpGUkFCUVFVZEZYMFZZVUVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDBaQlNVeEZSQUJGV0ZCRlExUkJWRWxQVGw5R1FVbE1SVVFBVWtWV1FVeEpSRUZVU1U5T1gwWkJTVXhGUkFCVFUweGZTRUZPUkZOSVFVdEZYMFpCU1V4RlJBQk1UME5MUlVRQVZGSkJUbE5HVDFKTlFWUkpUMDVmUVZCUVRFbEZSQUJPVDFSZlRVOUVTVVpKUlVRQVRrOVVYMFZZVkVWT1JFVkVBRUpCVGtSWFNVUlVTRjlNU1UxSlZGOUZXRU5GUlVSRlJBQlRTVlJGWDBsVFgwOVdSVkpNVDBGRVJVUUFTRVZCUkFCRmVIQmxZM1JsWkNCSVZGUlFMd0FBWGhNQUFDWVRBQUF3RUFBQThCY0FBSjBUQUFBVkVnQUFPUmNBQVBBU0FBQUtFQUFBZFJJQUFLMFNBQUNDRXdBQVR4UUFBSDhRQUFDZ0ZRQUFJeFFBQUlrU0FBQ0xGQUFBVFJVQUFOUVJBQURQRkFBQUVCZ0FBTWtXQUFEY0ZnQUF3UkVBQU9BWEFBQzdGQUFBZEJRQUFId1ZBQURsRkFBQUNCY0FBQjhRQUFCbEZRQUFveFFBQUNnVkFBQUNGUUFBbVJVQUFDd1FBQUNMR1FBQVR3OEFBTlFPQUFCcUVBQUF6aEFBQUFJWEFBQ0pEZ0FBYmhNQUFCd1RBQUJtRkFBQVZoY0FBTUVUQUFETkV3QUFiQk1BQUdnWEFBQm1Gd0FBWHhjQUFDSVRBQURPRHdBQWFRNEFBTmdPQUFCakZnQUF5eE1BQUtvT0FBQW9Gd0FBSmhjQUFNVVRBQUJkRmdBQTZCRUFBR2NUQUFCbEV3QUE4aFlBQUhNVEFBQWRGd0FBK1JZQUFQTVJBQURQRGdBQXpoVUFBQXdTQUFDekVRQUFwUkVBQUdFUUFBQXlGd0FBdXhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUJBQUFBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiRzl6WldWbGNDMWhiR2wyWlFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUFBQUVCQUFFQkFBRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmxZM1JwYjI1bGJuUXRiR1Z1WjNSb2IyNXliM2g1TFdOdmJtNWxZM1JwYjI0QUFBQUFBQUFBQUFBQUFBQUFBQUJ5WVc1elptVnlMV1Z1WTI5a2FXNW5jR2R5WVdSbERRb05DZzBLVTAwTkNnMEtWRlJRTDBORkwxUlRVQzhBQUFBQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUlBQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFRRUZBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUFBUUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNRUFBQUVCQVFFQkFRRUJBUUVCQVVFQkFRRUJBUUVCQVFFQkFRQUJBQUdCd1FFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFJQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJPVDFWT1EwVkZRMHRQVlZST1JVTlVSVlJGUTFKSlFrVk1WVk5JUlZSRlFVUlRSVUZTUTBoU1IwVkRWRWxXU1ZSWlRFVk9SRUZTVmtWUFZFbEdXVkJVU1U5T1UwTklVMFZCV1ZOVVFWUkRTRWRGVDFKRVNWSkZRMVJQVWxSU1EwaFFRVkpCVFVWVVJWSlZVa05GUWxORFVrbENSVUZTUkU5WFRrRkRSVWxPUkU1TFEwdFZRbE5EVWtsQ1JVaFVWRkF2UVVSVVVDOD0nXG4iLCAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3JMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzBrQkFYc2dBRUVRYXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNJQi9Rc0RBQ0FBSUFIOUN3TUFJQUJCTUdvZ0FmMExBd0FnQUVFZ2FpQUIvUXNEQUNBQVFkMEJOZ0ljUVFBTGV3RUJmd0pBSUFBb0Fnd2lBdzBBQWtBZ0FDZ0NCRVVOQUNBQUlBRTJBZ1FMQWtBZ0FDQUJJQUlReElDQWdBQWlBdzBBSUFBb0Fnd1BDeUFBSUFNMkFoeEJBQ0VESUFBb0FnUWlBVVVOQUNBQUlBRWdBaUFBS0FJSUVZR0FnSUFBQUNJQlJRMEFJQUFnQWpZQ0ZDQUFJQUUyQWd3Z0FTRURDeUFEQytUekFRTU9md04rQkg4amdJQ0FnQUJCRUdzaUF5U0FnSUNBQUNBQklRUWdBU0VGSUFFaEJpQUJJUWNnQVNFSUlBRWhDU0FCSVFvZ0FTRUxJQUVoRENBQklRMGdBU0VPSUFFaER3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFLQUljSWhCQmYyb08zUUhhQVFIWkFRSURCQVVHQndnSkNnc01EUTdZQVE4UTF3RVJFdFlCRXhRVkZoY1lHUm9iNEFIZkFSd2RIdFVCSHlBaElpTWtKZFFCSmljb0tTb3JMTk1CMGdFdEx0RUIwQUV2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVYmJBVWRJU1VyUEFjNEJTODBCVE13QlRVNVBVRkZTVTFSVlZsZFlXVnBiWEYxZVgyQmhZbU5rWldabmFHbHFhMnh0Ym05d2NYSnpkSFYyZDNoNWVudDhmWDUvZ0FHQkFZSUJnd0dFQVlVQmhnR0hBWWdCaVFHS0FZc0JqQUdOQVk0Qmp3R1FBWkVCa2dHVEFaUUJsUUdXQVpjQm1BR1pBWm9CbXdHY0FaMEJuZ0dmQWFBQm9RR2lBYU1CcEFHbEFhWUJwd0dvQWFrQnFnR3JBYXdCclFHdUFhOEJzQUd4QWJJQnN3RzBBYlVCdGdHM0Fjc0J5Z0c0QWNrQnVRSElBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJBTndCQzBFQUlSQU14Z0VMUVE0aEVBekZBUXRCRFNFUURNUUJDMEVQSVJBTXd3RUxRUkFoRUF6Q0FRdEJFeUVRRE1FQkMwRVVJUkFNd0FFTFFSVWhFQXkvQVF0QkZpRVFETDRCQzBFWElSQU12UUVMUVJnaEVBeThBUXRCR1NFUURMc0JDMEVhSVJBTXVnRUxRUnNoRUF5NUFRdEJIQ0VRRExnQkMwRUlJUkFNdHdFTFFSMGhFQXkyQVF0QklDRVFETFVCQzBFZklSQU10QUVMUVFjaEVBeXpBUXRCSVNFUURMSUJDMEVpSVJBTXNRRUxRUjRoRUF5d0FRdEJJeUVRREs4QkMwRVNJUkFNcmdFTFFSRWhFQXl0QVF0QkpDRVFES3dCQzBFbElSQU1xd0VMUVNZaEVBeXFBUXRCSnlFUURLa0JDMEhEQVNFUURLZ0JDMEVwSVJBTXB3RUxRU3NoRUF5bUFRdEJMQ0VRREtVQkMwRXRJUkFNcEFFTFFTNGhFQXlqQVF0Qkx5RVFES0lCQzBIRUFTRVFES0VCQzBFd0lSQU1vQUVMUVRRaEVBeWZBUXRCRENFUURKNEJDMEV4SVJBTW5RRUxRVEloRUF5Y0FRdEJNeUVRREpzQkMwRTVJUkFNbWdFTFFUVWhFQXlaQVF0QnhRRWhFQXlZQVF0QkN5RVFESmNCQzBFNklSQU1sZ0VMUVRZaEVBeVZBUXRCQ2lFUURKUUJDMEUzSVJBTWt3RUxRVGdoRUF5U0FRdEJQQ0VRREpFQkMwRTdJUkFNa0FFTFFUMGhFQXlQQVF0QkNTRVFESTRCQzBFb0lSQU1qUUVMUVQ0aEVBeU1BUXRCUHlFUURJc0JDMEhBQUNFUURJb0JDMEhCQUNFUURJa0JDMEhDQUNFUURJZ0JDMEhEQUNFUURJY0JDMEhFQUNFUURJWUJDMEhGQUNFUURJVUJDMEhHQUNFUURJUUJDMEVxSVJBTWd3RUxRY2NBSVJBTWdnRUxRY2dBSVJBTWdRRUxRY2tBSVJBTWdBRUxRY29BSVJBTWZ3dEJ5d0FoRUF4K0MwSE5BQ0VRREgwTFFjd0FJUkFNZkF0QnpnQWhFQXg3QzBIUEFDRVFESG9MUWRBQUlSQU1lUXRCMFFBaEVBeDRDMEhTQUNFUURIY0xRZE1BSVJBTWRndEIxQUFoRUF4MUMwSFdBQ0VRREhRTFFkVUFJUkFNY3d0QkJpRVFESElMUWRjQUlSQU1jUXRCQlNFUURIQUxRZGdBSVJBTWJ3dEJCQ0VRREc0TFFka0FJUkFNYlF0QjJnQWhFQXhzQzBIYkFDRVFER3NMUWR3QUlSQU1hZ3RCQXlFUURHa0xRZDBBSVJBTWFBdEIzZ0FoRUF4bkMwSGZBQ0VRREdZTFFlRUFJUkFNWlF0QjRBQWhFQXhrQzBIaUFDRVFER01MUWVNQUlSQU1ZZ3RCQWlFUURHRUxRZVFBSVJBTVlBdEI1UUFoRUF4ZkMwSG1BQ0VRREY0TFFlY0FJUkFNWFF0QjZBQWhFQXhjQzBIcEFDRVFERnNMUWVvQUlSQU1XZ3RCNndBaEVBeFpDMEhzQUNFUURGZ0xRZTBBSVJBTVZ3dEI3Z0FoRUF4V0MwSHZBQ0VRREZVTFFmQUFJUkFNVkF0QjhRQWhFQXhUQzBIeUFDRVFERklMUWZNQUlSQU1VUXRCOUFBaEVBeFFDMEgxQUNFUURFOExRZllBSVJBTVRndEI5d0FoRUF4TkMwSDRBQ0VRREV3TFFma0FJUkFNU3d0QitnQWhFQXhLQzBIN0FDRVFERWtMUWZ3QUlSQU1TQXRCL1FBaEVBeEhDMEgrQUNFUURFWUxRZjhBSVJBTVJRdEJnQUVoRUF4RUMwR0JBU0VRREVNTFFZSUJJUkFNUWd0Qmd3RWhFQXhCQzBHRUFTRVFERUFMUVlVQklSQU1Qd3RCaGdFaEVBdytDMEdIQVNFUUREMExRWWdCSVJBTVBBdEJpUUVoRUF3N0MwR0tBU0VRRERvTFFZc0JJUkFNT1F0QmpBRWhFQXc0QzBHTkFTRVFERGNMUVk0QklSQU1OZ3RCandFaEVBdzFDMEdRQVNFUUREUUxRWkVCSVJBTU13dEJrZ0VoRUF3eUMwR1RBU0VRRERFTFFaUUJJUkFNTUF0QmxRRWhFQXd2QzBHV0FTRVFEQzRMUVpjQklSQU1MUXRCbUFFaEVBd3NDMEdaQVNFUURDc0xRWm9CSVJBTUtndEJtd0VoRUF3cEMwR2NBU0VRRENnTFFaMEJJUkFNSnd0Qm5nRWhFQXdtQzBHZkFTRVFEQ1VMUWFBQklSQU1KQXRCb1FFaEVBd2pDMEdpQVNFUURDSUxRYU1CSVJBTUlRdEJwQUVoRUF3Z0MwR2xBU0VRREI4TFFhWUJJUkFNSGd0QnB3RWhFQXdkQzBHb0FTRVFEQndMUWFrQklSQU1Hd3RCcWdFaEVBd2FDMEdyQVNFUURCa0xRYXdCSVJBTUdBdEJyUUVoRUF3WEMwR3VBU0VRREJZTFFRRWhFQXdWQzBHdkFTRVFEQlFMUWJBQklSQU1Fd3RCc1FFaEVBd1NDMEd6QVNFUURCRUxRYklCSVJBTUVBdEJ0QUVoRUF3UEMwRzFBU0VRREE0TFFiWUJJUkFNRFF0QnR3RWhFQXdNQzBHNEFTRVFEQXNMUWJrQklSQU1DZ3RCdWdFaEVBd0pDMEc3QVNFUURBZ0xRY1lCSVJBTUJ3dEJ2QUVoRUF3R0MwRzlBU0VRREFVTFFiNEJJUkFNQkF0QnZ3RWhFQXdEQzBIQUFTRVFEQUlMUWNJQklSQU1BUXRCd1FFaEVBc0RRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBT3h3RUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjRmSUNFakpTZy9RRUZFUlVaSFNFbEtTMHhOVDFCUlVsUGVBMWRaVzF4ZFlHSmxabWRvYVdwcmJHMXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2dBR0NBWVVCaGdHSEFZa0Jpd0dNQVkwQmpnR1BBWkFCa1FHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdHNEFia0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnSEhBY2dCeVFIS0Fjc0J6QUhOQWM0Qnp3SFFBZEVCMGdIVEFkUUIxUUhXQWRjQjJBSFpBZG9CMndIY0FkMEIzZ0hnQWVFQjRnSGpBZVFCNVFIbUFlY0I2QUhwQWVvQjZ3SHNBZTBCN2dIdkFmQUI4UUh5QWZNQm1RS2tBckFDL2dMK0Fnc2dBU0lFSUFKSERmTUJRZDBCSVJBTS93TUxJQUVpRUNBQ1J3M2RBVUhEQVNFUURQNERDeUFCSWdFZ0FrY05rQUZCOXdBaEVBejlBd3NnQVNJQklBSkhEWVlCUWU4QUlSQU0vQU1MSUFFaUFTQUNSdzEvUWVvQUlSQU0rd01MSUFFaUFTQUNSdzE3UWVnQUlSQU0rZ01MSUFFaUFTQUNSdzE0UWVZQUlSQU0rUU1MSUFFaUFTQUNSdzBhUVJnaEVBejRBd3NnQVNJQklBSkhEUlJCRWlFUURQY0RDeUFCSWdFZ0FrY05XVUhGQUNFUURQWURDeUFCSWdFZ0FrY05Ta0UvSVJBTTlRTUxJQUVpQVNBQ1J3MUlRVHdoRUF6MEF3c2dBU0lCSUFKSERVRkJNU0VRRFBNREN5QUFMUUF1UVFGR0Rlc0RESWNDQ3lBQUlBRWlBU0FDRU1DQWdJQUFRUUZIRGVZQklBQkNBRGNESUF6bkFRc2dBQ0FCSWdFZ0FoQzBnSUNBQUNJUURlY0JJQUVoQVF6MUFnc0NRQ0FCSWdFZ0FrY05BRUVHSVJBTThBTUxJQUFnQVVFQmFpSUJJQUlRdTRDQWdBQWlFQTNvQVNBQklRRU1NUXNnQUVJQU53TWdRUkloRUF6VkF3c2dBU0lRSUFKSERTdEJIU0VRRE8wREN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVRVFJUkFNMUFNTFFRY2hFQXpzQXdzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNsQVVFSUlSQU02d01MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRUlFoRUF6U0F3dEJDU0VRRE9vREN5QUJJUUVnQUNrRElGQU41QUVnQVNFQkRQSUNDd0pBSUFFaUFTQUNSdzBBUVFzaEVBenBBd3NnQUNBQlFRRnFJZ0VnQWhDMmdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVZQklBRWhBUXdOQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONXdFZ0FTRUJEUEFDQ3dKQUlBRWlBU0FDUncwQVFROGhFQXpsQXdzZ0FTMEFBQ0lRUVR0R0RRZ2dFRUVOUnczb0FTQUJRUUZxSVFFTTd3SUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM29BU0FCSVFFTThnSUxBMEFDUUNBQkxRQUFRZkMxZ0lBQWFpMEFBQ0lRUVFGR0RRQWdFRUVDUnczckFTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJRUUZxSWdFUXVZQ0FnQUFpRUEzcUFTQUJJUUVNOUFJTElBRkJBV29pQVNBQ1J3MEFDMEVTSVJBTTRnTUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM3BBU0FCSVFFTUNnc2dBU0lCSUFKSERRWkJHeUVRRE9BREN3SkFJQUVpQVNBQ1J3MEFRUlloRUF6Z0F3c2dBRUdLZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBQ0FCSUFJUXVJQ0FnQUFpRUEzcUFTQUJJUUZCSUNFUURNWURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUWZDM2dJQUFhaTBBQUNJUVFRSkdEUUFDUUNBUVFYOXFEZ1RsQWV3QkFPc0I3QUVMSUFGQkFXb2hBVUVJSVJBTXlBTUxJQUZCQVdvaUFTQUNSdzBBQzBFVklSQU0zd01MUVJVaEVBemVBd3NEUUFKQUlBRXRBQUJCOExtQWdBQnFMUUFBSWhCQkFrWU5BQ0FRUVg5cURnVGVBZXdCNEFIckFld0JDeUFCUVFGcUlnRWdBa2NOQUF0QkdDRVFETjBEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVISVJBTXhBTUxRUmtoRUF6Y0F3c2dBVUVCYWlFQkRBSUxBa0FnQVNJVUlBSkhEUUJCR2lFUUROc0RDeUFVSVFFQ1FDQVVMUUFBUVhOcURoVGRBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBZ0R1QWd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU0yZ01MQWtBZ0FTMEFBQ0lRUVR0R0RRQWdFRUVOUnczb0FTQUJRUUZxSVFFTTVRSUxJQUZCQVdvaEFRdEJJaUVRREw4REN3SkFJQUVpRUNBQ1J3MEFRUndoRUF6WUF3dENBQ0VSSUJBaEFTQVFMUUFBUVZCcURqZm5BZVlCQVFJREJBVUdCd2dBQUFBQUFBQUFDUW9MREEwT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUEVCRVNFeFFBQzBFZUlSQU12UU1MUWdJaEVRemxBUXRDQXlFUkRPUUJDMElFSVJFTTR3RUxRZ1VoRVF6aUFRdENCaUVSRE9FQkMwSUhJUkVNNEFFTFFnZ2hFUXpmQVF0Q0NTRVJETjRCQzBJS0lSRU0zUUVMUWdzaEVRemNBUXRDRENFUkROc0JDMElOSVJFTTJnRUxRZzRoRVF6WkFRdENEeUVSRE5nQkMwSUtJUkVNMXdFTFFnc2hFUXpXQVF0Q0RDRVJETlVCQzBJTklSRU0xQUVMUWc0aEVRelRBUXRDRHlFUkROSUJDMElBSVJFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkF0QUFCQlVHb09OK1VCNUFFQUFRSURCQVVHQitZQjVnSG1BZVlCNWdIbUFlWUJDQWtLQ3d3TjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQVE0UEVCRVNFK1lCQzBJQ0lSRU01QUVMUWdNaEVRempBUXRDQkNFUkRPSUJDMElGSVJFTTRRRUxRZ1loRVF6Z0FRdENCeUVSRE44QkMwSUlJUkVNM2dFTFFna2hFUXpkQVF0Q0NpRVJETndCQzBJTElSRU0yd0VMUWd3aEVRemFBUXRDRFNFUkROa0JDMElPSVJFTTJBRUxRZzhoRVF6WEFRdENDaUVSRE5ZQkMwSUxJUkVNMVFFTFFnd2hFUXpVQVF0Q0RTRVJETk1CQzBJT0lSRU0wZ0VMUWc4aEVRelJBUXNnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM1NBVUVmSVJBTXdBTUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFTUWhFQXluQXd0QklDRVFETDhEQ3lBQUlBRWlFQ0FDRUw2QWdJQUFRWDlxRGdXMkFRREZBZ0hSQWRJQkMwRVJJUkFNcEFNTElBQkJBVG9BTHlBUUlRRU11d01MSUFFaUFTQUNSdzNTQVVFa0lSQU11d01MSUFFaURTQUNSdzBlUWNZQUlSQU11Z01MSUFBZ0FTSUJJQUlRc29DQWdBQWlFQTNVQVNBQklRRU10UUVMSUFFaUVDQUNSdzBtUWRBQUlSQU11QU1MQWtBZ0FTSUJJQUpIRFFCQktDRVFETGdEQ3lBQVFRQTJBZ1FnQUVHTWdJQ0FBRFlDQ0NBQUlBRWdBUkN4Z0lDQUFDSVFEZE1CSUFFaEFRellBUXNDUUNBQkloQWdBa2NOQUVFcElSQU10d01MSUJBdEFBQWlBVUVnUmcwVUlBRkJDVWNOMHdFZ0VFRUJhaUVCREJVTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRCY0xRU29oRUF5MUF3c0NRQ0FCSWhBZ0FrY05BRUVySVJBTXRRTUxBa0FnRUMwQUFDSUJRUWxHRFFBZ0FVRWdSdzNWQVFzZ0FDMEFMRUVJUmczVEFTQVFJUUVNa1FNTEFrQWdBU0lCSUFKSERRQkJMQ0VRRExRREN5QUJMUUFBUVFwSERkVUJJQUZCQVdvaEFRekpBZ3NnQVNJT0lBSkhEZFVCUVM4aEVBeXlBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FnRUVGMmFnNEVBTndCM0FFQTJnRUxJQUVoQVF6Z0FRc2dBVUVCYWlJQklBSkhEUUFMUVRFaEVBeXhBd3RCTWlFUUlBRWlGQ0FDUmcyd0F5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUU5xSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjhMdUFnQUJxTFFBQVJ3MEJBa0FnQVVFRFJ3MEFRUVloQVF5V0F3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1zUU1MSUFCQkFEWUNBQ0FVSVFFTTJRRUxRVE1oRUNBQkloUWdBa1lOcndNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRUlhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZTN2dJQUFhaTBBQUVjTkFRSkFJQUZCQ0VjTkFFRUZJUUVNbFFNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMQURDeUFBUVFBMkFnQWdGQ0VCRE5nQkMwRTBJUkFnQVNJVUlBSkdEYTRESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkJXb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhRd29DQUFHb3RBQUJIRFFFQ1FDQUJRUVZIRFFCQkJ5RUJESlFEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5dkF3c2dBRUVBTmdJQUlCUWhBUXpYQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFR0F2b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa1lOQ2lBQklRRU0zUUVMSUFGQkFXb2lBU0FDUncwQUMwRXdJUkFNcmdNTFFUQWhFQXl0QXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRjJhZzRFMlFIYUFkb0IyUUhhQVFzZ0FVRUJhaUlCSUFKSERRQUxRVGdoRUF5dEF3dEJPQ0VRREt3REN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRUpSdzBEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQQ0VRREtzREN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBQ1FBSkFJQkJCZG1vT0JOb0JBUUhhQVFBTElCQkJMRVlOMndFTElBRWhBUXdFQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQeUVRREtvREN5QUJJUUVNMndFTFFjQUFJUkFnQVNJVUlBSkdEYWdESUFJZ0ZHc2dBQ2dDQUNJQmFpRVdJQlFnQVd0QkJtb2hGd0pBQTBBZ0ZDMEFBRUVnY2lBQlFZREFnSUFBYWkwQUFFY05BU0FCUVFaR0RZNERJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFES2tEQ3lBQVFRQTJBZ0FnRkNFQkMwRTJJUkFNamdNTEFrQWdBU0lQSUFKSERRQkJ3UUFoRUF5bkF3c2dBRUdNZ0lDQUFEWUNDQ0FBSUE4MkFnUWdEeUVCSUFBdEFDeEJmMm9PQk0wQjFRSFhBZGtCaHdNTElBRkJBV29oQVF6TUFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCeUlCQWdFRUcvZjJwQi93RnhRUnBKRzBIL0FYRWlFRUVKUmcwQUlCQkJJRVlOQUFKQUFrQUNRQUpBSUJCQm5YOXFEaE1BQXdNREF3TURBd0VEQXdNREF3TURBd01DQXdzZ0FVRUJhaUVCUVRFaEVBeVJBd3NnQVVFQmFpRUJRVEloRUF5UUF3c2dBVUVCYWlFQlFUTWhFQXlQQXdzZ0FTRUJETkFCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJOU0VRREtVREMwRTFJUkFNcEFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTHlBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETk1CQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQU0VRREtRREMwRTlJUkFNb3dNTElBQWdBU0lCSUFJUXNJQ0FnQUFpRUEzV0FTQUJJUUVNQVFzZ0VFRUJhaUVCQzBFOElSQU1od01MQWtBZ0FTSUJJQUpIRFFCQndnQWhFQXlnQXdzQ1FBTkFBa0FnQVMwQUFFRjNhZzRZQUFMK0F2NENoQVArQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0lBL2dJTElBRkJBV29pQVNBQ1J3MEFDMEhDQUNFUURLQURDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU52UUVnQVNFQkMwRXNJUkFNaFFNTElBRWlBU0FDUnczVEFVSEVBQ0VRREowREN3TkFBa0FnQVMwQUFFR1F3SUNBQUdvdEFBQkJBVVlOQUNBQklRRU10d0lMSUFGQkFXb2lBU0FDUncwQUMwSEZBQ0VRREp3REN5QU5MUUFBSWhCQklFWU5zd0VnRUVFNlJ3MkJBeUFBS0FJRUlRRWdBRUVBTmdJRUlBQWdBU0FORUsrQWdJQUFJZ0VOMEFFZ0RVRUJhaUVCRExNQ0MwSEhBQ0VRSUFFaURTQUNSZzJhQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRWkRDZ0lBQWFpMEFBRWNOZ0FNZ0FVRUZSZzMwQWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5YUF3dEJ5QUFoRUNBQklnMGdBa1lObVFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUphaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdXd29DQUFHb3RBQUJIRGY4Q0FrQWdBVUVKUncwQVFRSWhBUXoxQWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1RTUxBa0FnQVNJTklBSkhEUUJCeVFBaEVBeVpBd3NDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWkovYWc0SEFJQURnQU9BQTRBRGdBTUJnQU1MSUExQkFXb2hBVUUrSVJBTWdBTUxJQTFCQVdvaEFVRS9JUkFNL3dJTFFjb0FJUkFnQVNJTklBSkdEWmNESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkFXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJvTUtBZ0FCcUxRQUFSdzM5QWlBQlFRRkdEZkFDSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpjREMwSExBQ0VRSUFFaURTQUNSZzJXQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRNXFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYUxDZ0lBQWFpMEFBRWNOL0FJZ0FVRU9SZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5V0F3dEJ6QUFoRUNBQklnMGdBa1lObFFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRVBhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhBd29DQUFHb3RBQUJIRGZzQ0FrQWdBVUVQUncwQVFRTWhBUXp4QWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxRTUxRYzBBSVJBZ0FTSU5JQUpHRFpRRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJCV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUnczNkFnSkFJQUZCQlVjTkFFRUVJUUVNOEFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKUURDd0pBSUFFaURTQUNSdzBBUWM0QUlSQU1sQU1MQWtBQ1FBSkFBa0FnRFMwQUFDSUJRU0J5SUFFZ0FVRy9mMnBCL3dGeFFScEpHMEgvQVhGQm5YOXFEaE1BL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MENBZjBDL1FMOUFnSUQvUUlMSUExQkFXb2hBVUhCQUNFUURQMENDeUFOUVFGcUlRRkJ3Z0FoRUF6OEFnc2dEVUVCYWlFQlFjTUFJUkFNK3dJTElBMUJBV29oQVVIRUFDRVFEUG9DQ3dKQUlBRWlBU0FDUmcwQUlBQkJqWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhGQUNFUURQb0NDMEhQQUNFUURKSURDeUFRSVFFQ1FBSkFJQkF0QUFCQmRtb09CQUdvQXFnQ0FLZ0NDeUFRUVFGcUlRRUxRU2NoRUF6NEFnc0NRQ0FCSWdFZ0FrY05BRUhSQUNFUURKRURDd0pBSUFFdEFBQkJJRVlOQUNBQklRRU1qUUVMSUFGQkFXb2hBU0FBTFFBdFFRRnhSUTNIQVNBQklRRU1qQUVMSUFFaUZ5QUNSdzNJQVVIU0FDRVFESThEQzBIVEFDRVFJQUVpRkNBQ1JnMk9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFGcUlSY0RRQ0FVTFFBQUlBRkIxc0tBZ0FCcUxRQUFSdzNNQVNBQlFRRkdEY2NCSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREk0REN3SkFJQUVpQVNBQ1J3MEFRZFVBSVJBTWpnTUxJQUV0QUFCQkNrY056QUVnQVVFQmFpRUJETWNCQ3dKQUlBRWlBU0FDUncwQVFkWUFJUkFNalFNTEFrQUNRQ0FCTFFBQVFYWnFEZ1FBelFITkFRSE5BUXNnQVVFQmFpRUJETWNCQ3lBQlFRRnFJUUZCeWdBaEVBenpBZ3NnQUNBQklnRWdBaEN1Z0lDQUFDSVFEY3NCSUFFaEFVSE5BQ0VRRFBJQ0N5QUFMUUFwUVNKR0RZVURES1lDQ3dKQUlBRWlBU0FDUncwQVFkc0FJUkFNaWdNTFFRQWhGRUVCSVJkQkFTRVdRUUFoRUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRVkJxRGdyVUFkTUJBQUVDQXdRRkJnalZBUXRCQWlFUURBWUxRUU1oRUF3RkMwRUVJUkFNQkF0QkJTRVFEQU1MUVFZaEVBd0NDMEVISVJBTUFRdEJDQ0VRQzBFQUlSZEJBQ0VXUVFBaEZBek1BUXRCQ1NFUVFRRWhGRUVBSVJkQkFDRVdETXNCQ3dKQUlBRWlBU0FDUncwQVFkMEFJUkFNaVFNTElBRXRBQUJCTGtjTnpBRWdBVUVCYWlFQkRLWUNDeUFCSWdFZ0FrY056QUZCM3dBaEVBeUhBd3NDUUNBQklnRWdBa1lOQUNBQVFZNkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkIwQUFoRUF6dUFndEI0QUFoRUF5R0F3dEI0UUFoRUNBQklnRWdBa1lOaFFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVMQ2dJQUFhaTBBQUVjTnpRRWdGRUVEUmczTUFTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUZBd3RCNGdBaEVDQUJJZ0VnQWtZTmhBTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVDYWlFWEEwQWdBUzBBQUNBVVFlYkNnSUFBYWkwQUFFY056QUVnRkVFQ1JnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlFQXd0QjR3QWhFQ0FCSWdFZ0FrWU5nd01nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZW5DZ0lBQWFpMEFBRWNOeXdFZ0ZFRURSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5REF3c0NRQ0FCSWdFZ0FrY05BRUhsQUNFUURJTURDeUFBSUFGQkFXb2lBU0FDRUtpQWdJQUFJaEFOelFFZ0FTRUJRZFlBSVJBTTZRSUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUFKQUlCQkJ1SDlxRGdzQUFjOEJ6d0hQQWM4Qnp3SFBBYzhCendFQ3p3RUxJQUZCQVdvaEFVSFNBQ0VRRE8wQ0N5QUJRUUZxSVFGQjB3QWhFQXpzQWdzZ0FVRUJhaUVCUWRRQUlSQU02d0lMSUFGQkFXb2lBU0FDUncwQUMwSGtBQ0VRRElJREMwSGtBQ0VRRElFREN3TkFBa0FnQVMwQUFFSHd3b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJmbW9PQTg4QjBBSFJBZElCQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1Z0FoRUF5QUF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRU1Bd3RCNXdBaEVBei9BZ3NEUUFKQUlBRXRBQUJCOE1TQWdBQnFMUUFBSWhCQkFVWU5BQUpBSUJCQmZtb09CTklCMHdIVUFRRFZBUXNnQVNFQlFkY0FJUkFNNXdJTElBRkJBV29pQVNBQ1J3MEFDMEhvQUNFUURQNENDd0pBSUFFaUFTQUNSdzBBUWVrQUlSQU0vZ0lMQWtBZ0FTMEFBQ0lRUVhacURocTZBZFVCMVFHOEFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFjb0IxUUhWQVFEVEFRc2dBVUVCYWlFQkMwRUdJUkFNNHdJTEEwQUNRQ0FCTFFBQVFmREdnSUFBYWkwQUFFRUJSZzBBSUFFaEFReWVBZ3NnQVVFQmFpSUJJQUpIRFFBTFFlb0FJUkFNK3dJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZXNBSVJBTStnSUxBa0FnQVNJQklBSkhEUUJCN0FBaEVBejZBZ3NnQVVFQmFpRUJEQUVMQWtBZ0FTSUJJQUpIRFFCQjdRQWhFQXo1QWdzZ0FVRUJhaUVCQzBFRUlSQU0zZ0lMQWtBZ0FTSVVJQUpIRFFCQjdnQWhFQXozQWdzZ0ZDRUJBa0FDUUFKQUlCUXRBQUJCOE1pQWdBQnFMUUFBUVg5cURnZlVBZFVCMWdFQW5BSUJBdGNCQ3lBVVFRRnFJUUVNQ2dzZ0ZFRUJhaUVCRE0wQkMwRUFJUkFnQUVFQU5nSWNJQUJCbTVLQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXoyQWdzQ1FBTkFBa0FnQVMwQUFFSHd5SUNBQUdvdEFBQWlFRUVFUmcwQUFrQUNRQ0FRUVg5cURnZlNBZE1CMUFIWkFRQUVBZGtCQ3lBQklRRkIyZ0FoRUF6Z0Fnc2dBVUVCYWlFQlFkd0FJUkFNM3dJTElBRkJBV29pQVNBQ1J3MEFDMEh2QUNFUURQWUNDeUFCUVFGcUlRRU15d0VMQWtBZ0FTSVVJQUpIRFFCQjhBQWhFQXoxQWdzZ0ZDMEFBRUV2UnczVUFTQVVRUUZxSVFFTUJnc0NRQ0FCSWhRZ0FrY05BRUh4QUNFUURQUUNDd0pBSUJRdEFBQWlBVUV2UncwQUlCUkJBV29oQVVIZEFDRVFETnNDQ3lBQlFYWnFJZ1JCRmtzTjB3RkJBU0FFZEVHSmdJQUNjVVVOMHdFTXlnSUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJRZDRBSVJBTTJnSUxRZklBSVJBTThnSUxBa0FnQVNJVUlBSkhEUUJCOUFBaEVBenlBZ3NnRkNFQkFrQWdGQzBBQUVId3pJQ0FBR290QUFCQmYyb09BOGtDbEFJQTFBRUxRZUVBSVJBTTJBSUxBa0FnQVNJVUlBSkdEUUFEUUFKQUlCUXRBQUJCOE1xQWdBQnFMUUFBSWdGQkEwWU5BQUpBSUFGQmYyb09Bc3NDQU5VQkN5QVVJUUZCM3dBaEVBemFBZ3NnRkVFQmFpSVVJQUpIRFFBTFFmTUFJUkFNOFFJTFFmTUFJUkFNOEFJTEFrQWdBU0lCSUFKR0RRQWdBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWVBQUlSQU0xd0lMUWZVQUlSQU03d0lMQWtBZ0FTSUJJQUpIRFFCQjlnQWhFQXp2QWdzZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJDMEVESVJBTTFBSUxBMEFnQVMwQUFFRWdSdzNEQWlBQlFRRnFJZ0VnQWtjTkFBdEI5d0FoRUF6c0Fnc0NRQ0FCSWdFZ0FrY05BRUg0QUNFUURPd0NDeUFCTFFBQVFTQkhEYzRCSUFGQkFXb2hBUXp2QVFzZ0FDQUJJZ0VnQWhDc2dJQ0FBQ0lRRGM0QklBRWhBUXlPQWdzQ1FDQUJJZ1FnQWtjTkFFSDZBQ0VRRE9vQ0N5QUVMUUFBUWN3QVJ3M1JBU0FFUVFGcUlRRkJFeUVRRE04QkN3SkFJQUVpQkNBQ1J3MEFRZnNBSVJBTTZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBTkFJQVF0QUFBZ0FVSHd6b0NBQUdvdEFBQkhEZEFCSUFGQkJVWU56Z0VnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCK3dBaEVBem9BZ3NDUUNBQklnUWdBa2NOQUVIOEFDRVFET2dDQ3dKQUFrQWdCQzBBQUVHOWYyb09EQURSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUhSQVFIUkFRc2dCRUVCYWlFQlFlWUFJUkFNendJTElBUkJBV29oQVVIbkFDRVFETTRDQ3dKQUlBRWlCQ0FDUncwQVFmMEFJUkFNNXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY056d0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjBBSVJBTTV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVDRVFETXdCQ3dKQUlBRWlCQ0FDUncwQVFmNEFJUkFNNWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFmYk9nSUFBYWkwQUFFY056Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjRBSVJBTTVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZpRVFETXNCQ3dKQUlBRWlCQ0FDUncwQVFmOEFJUkFNNVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFmek9nSUFBYWkwQUFFY056UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjhBSVJBTTVRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJTRVFETW9CQ3dKQUlBRWlCQ0FDUncwQVFZQUJJUkFNNUFJTElBUXRBQUJCMlFCSERjc0JJQVJCQVdvaEFVRUlJUkFNeVFFTEFrQWdBU0lFSUFKSERRQkJnUUVoRUF6akFnc0NRQUpBSUFRdEFBQkJzbjlxRGdNQXpBRUJ6QUVMSUFSQkFXb2hBVUhyQUNFUURNb0NDeUFFUVFGcUlRRkI3QUFoRUF6SkFnc0NRQ0FCSWdRZ0FrY05BRUdDQVNFUURPSUNDd0pBQWtBZ0JDMEFBRUc0ZjJvT0NBRExBY3NCeXdITEFjc0J5d0VCeXdFTElBUkJBV29oQVVIcUFDRVFETWtDQ3lBRVFRRnFJUUZCN1FBaEVBeklBZ3NDUUNBQklnUWdBa2NOQUVHREFTRVFET0VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hFQ0FFSUFGclFRSnFJUlFDUUFOQUlBUXRBQUFnQVVHQXo0Q0FBR290QUFCSERja0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRURZQ0FFR0RBU0VRRE9FQ0MwRUFJUkFnQUVFQU5nSUFJQlJCQVdvaEFRekdBUXNDUUNBQklnUWdBa2NOQUVHRUFTRVFET0FDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRUnFJUkFDUUFOQUlBUXRBQUFnQVVHRHo0Q0FBR290QUFCSERjZ0JJQUZCQkVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0VBU0VRRE9BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNNaEVBekZBUXNDUUNBQklnUWdBa2NOQUVHRkFTRVFETjhDQ3dKQUFrQWdCQzBBQUVHMGYyb09DQURJQWNnQnlBSElBY2dCeUFFQnlBRUxJQVJCQVdvaEFVSHZBQ0VRRE1ZQ0N5QUVRUUZxSVFGQjhBQWhFQXpGQWdzQ1FDQUJJZ1FnQWtjTkFFR0dBU0VRRE40Q0N5QUVMUUFBUWNVQVJ3M0ZBU0FFUVFGcUlRRU1nd0lMQWtBZ0FTSUVJQUpIRFFCQmh3RWhFQXpkQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQmlNK0FnQUJxTFFBQVJ3M0ZBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJod0VoRUF6ZEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFdElSQU13Z0VMQWtBZ0FTSUVJQUpIRFFCQmlBRWhFQXpjQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3M0VBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpQUVoRUF6Y0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcElSQU13UUVMQWtBZ0FTSUJJQUpIRFFCQmlRRWhFQXpiQWd0QkFTRVFJQUV0QUFCQjN3QkhEY0FCSUFGQkFXb2hBUXlCQWdzQ1FDQUJJZ1FnQWtjTkFFR0tBU0VRRE5vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBRFFDQUVMUUFBSUFGQmpNK0FnQUJxTFFBQVJ3M0JBU0FCUVFGR0RhOENJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWW9CSVJBTTJRSUxBa0FnQVNJRUlBSkhEUUJCaXdFaEVBelpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCanMrQWdBQnFMUUFBUnczQkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQml3RWhFQXpaQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVDSVJBTXZnRUxBa0FnQVNJRUlBSkhEUUJCakFFaEVBellBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUnczQUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpBRWhFQXpZQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVmSVJBTXZRRUxBa0FnQVNJRUlBSkhEUUJCalFFaEVBelhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOHMrQWdBQnFMUUFBUncyL0FTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpRRWhFQXpYQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVKSVJBTXZBRUxBa0FnQVNJRUlBSkhEUUJCamdFaEVBeldBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0F2d0cvQWI4QnZ3Ry9BUUcvQVFzZ0JFRUJhaUVCUWZnQUlSQU12UUlMSUFSQkFXb2hBVUg1QUNFUURMd0NDd0pBSUFFaUJDQUNSdzBBUVk4QklSQU0xUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUVpIUGdJQUFhaTBBQUVjTnZRRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZOEJJUkFNMVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR0NFUURMb0JDd0pBSUFFaUJDQUNSdzBBUVpBQklSQU0xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpmUGdJQUFhaTBBQUVjTnZBRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaQUJJUkFNMUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRnlFUURMa0JDd0pBSUFFaUJDQUNSdzBBUVpFQklSQU0wd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpyUGdJQUFhaTBBQUVjTnV3RWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaRUJJUkFNMHdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRlNFUURMZ0JDd0pBSUFFaUJDQUNSdzBBUVpJQklSQU0wZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFIUGdJQUFhaTBBQUVjTnVnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaSUJJUkFNMGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSGlFUURMY0JDd0pBSUFFaUJDQUNSdzBBUVpNQklSQU0wUUlMSUFRdEFBQkJ6QUJIRGJnQklBUkJBV29oQVVFS0lSQU10Z0VMQWtBZ0JDQUNSdzBBUVpRQklSQU0wQUlMQWtBQ1FDQUVMUUFBUWI5L2FnNFBBTGtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0JBYmtCQ3lBRVFRRnFJUUZCL2dBaEVBeTNBZ3NnQkVFQmFpRUJRZjhBSVJBTXRnSUxBa0FnQkNBQ1J3MEFRWlVCSVJBTXp3SUxBa0FDUUNBRUxRQUFRYjkvYWc0REFMZ0JBYmdCQ3lBRVFRRnFJUUZCL1FBaEVBeTJBZ3NnQkVFQmFpRUVRWUFCSVJBTXRRSUxBa0FnQkNBQ1J3MEFRWllCSVJBTXpnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYWZQZ0lBQWFpMEFBRWNOdGdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpZQklSQU16Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDeUVRRExNQkN3SkFJQVFnQWtjTkFFR1hBU0VRRE0wQ0N3SkFBa0FDUUFKQUlBUXRBQUJCVTJvT0l3QzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0JBYmdCdUFHNEFiZ0J1QUVDdUFHNEFiZ0JBN2dCQ3lBRVFRRnFJUUZCK3dBaEVBeTJBZ3NnQkVFQmFpRUJRZndBSVJBTXRRSUxJQVJCQVdvaEJFR0JBU0VRRExRQ0N5QUVRUUZxSVFSQmdnRWhFQXl6QWdzQ1FDQUVJQUpIRFFCQm1BRWhFQXpNQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnFjK0FnQUJxTFFBQVJ3MjBBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtQUVoRUF6TUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFWklSQU1zUUVMQWtBZ0JDQUNSdzBBUVprQklSQU15d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWE3UGdJQUFhaTBBQUVjTnN3RWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaa0JJUkFNeXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQmlFUURMQUJDd0pBSUFRZ0FrY05BRUdhQVNFUURNb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUcwejRDQUFHb3RBQUJIRGJJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHYUFTRVFETW9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUndoRUF5dkFRc0NRQ0FFSUFKSERRQkJtd0VoRUF6SkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0cytBZ0FCcUxRQUFSdzJ4QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbXdFaEVBekpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW5JUkFNcmdFTEFrQWdCQ0FDUncwQVFad0JJUkFNeUFJTEFrQUNRQ0FFTFFBQVFheC9hZzRDQUFHeEFRc2dCRUVCYWlFRVFZWUJJUkFNcndJTElBUkJBV29oQkVHSEFTRVFESzRDQ3dKQUlBUWdBa2NOQUVHZEFTRVFETWNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHNHo0Q0FBR290QUFCSERhOEJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2RBU0VRRE1jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNZaEVBeXNBUXNDUUNBRUlBSkhEUUJCbmdFaEVBekdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdXMrQWdBQnFMUUFBUncydUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5nRWhFQXpHQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVESVJBTXF3RUxBa0FnQkNBQ1J3MEFRWjhCSVJBTXhRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOclFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo4QklSQU14UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEQ0VRREtvQkN3SkFJQVFnQWtjTkFFR2dBU0VRRE1RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVRzh6NENBQUdvdEFBQkhEYXdCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdnQVNFUURNUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRMGhFQXlwQVFzQ1FDQUVJQUpIRFFCQm9RRWhFQXpEQWdzQ1FBSkFJQVF0QUFCQnVuOXFEZ3NBckFHc0Fhd0JyQUdzQWF3QnJBR3NBYXdCQWF3QkN5QUVRUUZxSVFSQml3RWhFQXlxQWdzZ0JFRUJhaUVFUVl3QklSQU1xUUlMQWtBZ0JDQUNSdzBBUWFJQklSQU13Z0lMSUFRdEFBQkIwQUJIRGFrQklBUkJBV29oQkF6cEFRc0NRQ0FFSUFKSERRQkJvd0VoRUF6QkFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQnFnR3FBYW9CcWdHcUFRQ3FBUXNnQkVFQmFpRUVRWTRCSVJBTXFBSUxJQVJCQVdvaEFVRWlJUkFNcGdFTEFrQWdCQ0FDUncwQVFhUUJJUkFNd0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFjRFBnSUFBYWkwQUFFY05xQUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYVFCSVJBTXdBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhTRVFES1VCQ3dKQUlBUWdBa2NOQUVHbEFTRVFETDhDQ3dKQUFrQWdCQzBBQUVHdWYyb09Bd0NvQVFHb0FRc2dCRUVCYWlFRVFaQUJJUkFNcGdJTElBUkJBV29oQVVFRUlSQU1wQUVMQWtBZ0JDQUNSdzBBUWFZQklSQU12Z0lMQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFLb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFhb0JBYW9CcWdFQ3FnR3FBUU9xQWFvQkJLb0JDeUFFUVFGcUlRUkJpQUVoRUF5b0Fnc2dCRUVCYWlFRVFZa0JJUkFNcHdJTElBUkJBV29oQkVHS0FTRVFES1lDQ3lBRVFRRnFJUVJCandFaEVBeWxBZ3NnQkVFQmFpRUVRWkVCSVJBTXBBSUxBa0FnQkNBQ1J3MEFRYWNCSVJBTXZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOcFFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFjQklSQU12UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFU0VRREtJQkN3SkFJQVFnQWtjTkFFR29BU0VRREx3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEN6NENBQUdvdEFBQkhEYVFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdvQVNFUURMd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTd2hFQXloQVFzQ1FDQUVJQUpIRFFCQnFRRWhFQXk3QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnhjK0FnQUJxTFFBQVJ3MmpBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxUUVoRUF5N0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcklSQU1vQUVMQWtBZ0JDQUNSdzBBUWFvQklSQU11Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWNyUGdJQUFhaTBBQUVjTm9nRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhb0JJUkFNdWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRkNFUURKOEJDd0pBSUFRZ0FrY05BRUdyQVNFUURMa0NDd0pBQWtBQ1FBSkFJQVF0QUFCQnZuOXFEZzhBQVFLa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJBNlFCQ3lBRVFRRnFJUVJCa3dFaEVBeWlBZ3NnQkVFQmFpRUVRWlFCSVJBTW9RSUxJQVJCQVdvaEJFR1ZBU0VRREtBQ0N5QUVRUUZxSVFSQmxnRWhFQXlmQWdzQ1FDQUVJQUpIRFFCQnJBRWhFQXk0QWdzZ0JDMEFBRUhGQUVjTm53RWdCRUVCYWlFRURPQUJDd0pBSUFRZ0FrY05BRUd0QVNFUURMY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhOejRDQUFHb3RBQUJIRFo4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHdEFTRVFETGNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTRoRUF5Y0FRc0NRQ0FFSUFKSERRQkJyZ0VoRUF5MkFnc2dCQzBBQUVIUUFFY05uUUVnQkVFQmFpRUJRU1VoRUF5YkFRc0NRQ0FFSUFKSERRQkJyd0VoRUF5MUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzJkQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcndFaEVBeTFBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXFJUkFNbWdFTEFrQWdCQ0FDUncwQVFiQUJJUkFNdEFJTEFrQUNRQ0FFTFFBQVFhdC9hZzRMQUowQm5RR2RBWjBCblFHZEFaMEJuUUdkQVFHZEFRc2dCRUVCYWlFRVFab0JJUkFNbXdJTElBUkJBV29oQkVHYkFTRVFESm9DQ3dKQUlBUWdBa2NOQUVHeEFTRVFETE1DQ3dKQUFrQWdCQzBBQUVHL2Yyb09GQUNjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUVCbkFFTElBUkJBV29oQkVHWkFTRVFESm9DQ3lBRVFRRnFJUVJCbkFFaEVBeVpBZ3NDUUNBRUlBSkhEUUJCc2dFaEVBeXlBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCMmMrQWdBQnFMUUFBUncyYUFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnNnRWhFQXl5QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVoSVJBTWx3RUxBa0FnQkNBQ1J3MEFRYk1CSVJBTXNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRZDNQZ0lBQWFpMEFBRWNObVFFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJNQklSQU1zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHaUVRREpZQkN3SkFJQVFnQWtjTkFFRzBBU0VRRExBQ0N3SkFBa0FDUUNBRUxRQUFRYnQvYWc0UkFKb0JtZ0dhQVpvQm1nR2FBWm9CbWdHYUFRR2FBWm9CbWdHYUFab0JBcG9CQ3lBRVFRRnFJUVJCblFFaEVBeVlBZ3NnQkVFQmFpRUVRWjRCSVJBTWx3SUxJQVJCQVdvaEJFR2ZBU0VRREpZQ0N3SkFJQVFnQWtjTkFFRzFBU0VRREs4Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSGt6NENBQUdvdEFBQkhEWmNCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUcxQVNFUURLOENDeUFBUVFBMkFnQWdFRUVCYWlFQlFTZ2hFQXlVQVFzQ1FDQUVJQUpIRFFCQnRnRWhFQXl1QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjZzK0FnQUJxTFFBQVJ3MldBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0Z0VoRUF5dUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSElSQU1rd0VMQWtBZ0JDQUNSdzBBUWJjQklSQU1yUUlMQWtBQ1FDQUVMUUFBUWJ0L2FnNE9BSllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FRR1dBUXNnQkVFQmFpRUVRYUVCSVJBTWxBSUxJQVJCQVdvaEJFR2lBU0VRREpNQ0N3SkFJQVFnQWtjTkFFRzRBU0VRREt3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEWlFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc0QVNFUURLd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSSWhFQXlSQVFzQ1FDQUVJQUpIRFFCQnVRRWhFQXlyQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3MlRBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1UUVoRUF5ckFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZ0lSQU1rQUVMQWtBZ0JDQUNSdzBBUWJvQklSQU1xZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTmtnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFib0JJUkFNcWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRHlFUURJOEJDd0pBSUFRZ0FrY05BRUc3QVNFUURLa0NDd0pBQWtBZ0JDMEFBRUczZjJvT0J3Q1NBWklCa2dHU0FaSUJBWklCQ3lBRVFRRnFJUVJCcFFFaEVBeVFBZ3NnQkVFQmFpRUVRYVlCSVJBTWp3SUxBa0FnQkNBQ1J3MEFRYndCSVJBTXFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQjJvaEVBSkFBMEFnQkMwQUFDQUJRZlRQZ0lBQWFpMEFBRWNOa0FFZ0FVRUhSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJ3QklSQU1xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHeUVRREkwQkN3SkFJQVFnQWtjTkFFRzlBU0VRREtjQ0N3SkFBa0FDUUNBRUxRQUFRYjUvYWc0U0FKRUJrUUdSQVpFQmtRR1JBWkVCa1FHUkFRR1JBWkVCa1FHUkFaRUJrUUVDa1FFTElBUkJBV29oQkVHa0FTRVFESThDQ3lBRVFRRnFJUVJCcHdFaEVBeU9BZ3NnQkVFQmFpRUVRYWdCSVJBTWpRSUxBa0FnQkNBQ1J3MEFRYjRCSVJBTXBnSUxJQVF0QUFCQnpnQkhEWTBCSUFSQkFXb2hCQXpQQVFzQ1FDQUVJQUpIRFFCQnZ3RWhFQXlsQWdzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUFFQ0E1d0JCQVVHbkFHY0Fad0JCd2dKQ2d1Y0FRd05EZytjQVFzZ0JFRUJhaUVCUWVnQUlSQU1tZ0lMSUFSQkFXb2hBVUhwQUNFUURKa0NDeUFFUVFGcUlRRkI3Z0FoRUF5WUFnc2dCRUVCYWlFQlFmSUFJUkFNbHdJTElBUkJBV29oQVVIekFDRVFESllDQ3lBRVFRRnFJUUZCOWdBaEVBeVZBZ3NnQkVFQmFpRUJRZmNBSVJBTWxBSUxJQVJCQVdvaEFVSDZBQ0VRREpNQ0N5QUVRUUZxSVFSQmd3RWhFQXlTQWdzZ0JFRUJhaUVFUVlRQklSQU1rUUlMSUFSQkFXb2hCRUdGQVNFUURKQUNDeUFFUVFGcUlRUkJrZ0VoRUF5UEFnc2dCRUVCYWlFRVFaZ0JJUkFNamdJTElBUkJBV29oQkVHZ0FTRVFESTBDQ3lBRVFRRnFJUVJCb3dFaEVBeU1BZ3NnQkVFQmFpRUVRYW9CSVJBTWl3SUxBa0FnQkNBQ1JnMEFJQUJCa0lDQWdBQTJBZ2dnQUNBRU5nSUVRYXNCSVJBTWl3SUxRY0FCSVJBTW93SUxJQUFnQlNBQ0VLcUFnSUFBSWdFTml3RWdCU0VCREZ3TEFrQWdCaUFDUmcwQUlBWkJBV29oQlF5TkFRdEJ3Z0VoRUF5aEFnc0RRQUpBSUJBdEFBQkJkbW9PQkl3QkFBQ1BBUUFMSUJCQkFXb2lFQ0FDUncwQUMwSERBU0VRREtBQ0N3SkFJQWNnQWtZTkFDQUFRWkdBZ0lBQU5nSUlJQUFnQnpZQ0JDQUhJUUZCQVNFUURJY0NDMEhFQVNFUURKOENDd0pBSUFjZ0FrY05BRUhGQVNFUURKOENDd0pBQWtBZ0J5MEFBRUYyYWc0RUFjNEJ6Z0VBemdFTElBZEJBV29oQmd5TkFRc2dCMEVCYWlFRkRJa0JDd0pBSUFjZ0FrY05BRUhHQVNFUURKNENDd0pBQWtBZ0J5MEFBRUYyYWc0WEFZOEJqd0VCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQUk4QkN5QUhRUUZxSVFjTFFiQUJJUkFNaEFJTEFrQWdDQ0FDUncwQVFjZ0JJUkFNblFJTElBZ3RBQUJCSUVjTmpRRWdBRUVBT3dFeUlBaEJBV29oQVVHekFTRVFESU1DQ3lBQklSY0NRQU5BSUJjaUJ5QUNSZzBCSUFjdEFBQkJVR3BCL3dGeEloQkJDazhOekFFQ1FDQUFMd0V5SWhSQm1UTkxEUUFnQUNBVVFRcHNJaFE3QVRJZ0VFSC8vd056SUJSQi92OERjVWtOQUNBSFFRRnFJUmNnQUNBVUlCQnFJaEE3QVRJZ0VFSC8vd054UWVnSFNRMEJDd3RCQUNFUUlBQkJBRFlDSENBQVFjR0pnSUFBTmdJUUlBQkJEVFlDRENBQUlBZEJBV28yQWhRTW5BSUxRY2NCSVJBTW13SUxJQUFnQ0NBQ0VLNkFnSUFBSWhCRkRjb0JJQkJCRlVjTmpBRWdBRUhJQVRZQ0hDQUFJQWcyQWhRZ0FFSEpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFESm9DQ3dKQUlBa2dBa2NOQUVITUFTRVFESm9DQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ1MwQUFFRlFhZzRLbGdHVkFRQUJBZ01FQlFZSWx3RUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTWpnRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZneU5BUXNDUUNBS0lBSkhEUUJCemdFaEVBeVpBZ3NnQ2kwQUFFRXVSdzJPQVNBS1FRRnFJUWtNeWdFTElBc2dBa2NOamdGQjBBRWhFQXlYQWdzQ1FDQUxJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQXMyQWdSQnR3RWhFQXorQVF0QjBRRWhFQXlXQWdzQ1FDQUVJQUpIRFFCQjBnRWhFQXlXQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUVhaUVMQTBBZ0JDMEFBQ0FRUWZ6UGdJQUFhaTBBQUVjTmpnRWdFRUVFUmczcEFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFNBU0VRREpVQ0N5QUFJQXdnQWhDc2dJQ0FBQ0lCRFkwQklBd2hBUXk0QVFzQ1FDQUVJQUpIRFFCQjFBRWhFQXlVQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUJhaUVNQTBBZ0JDMEFBQ0FRUVlIUWdJQUFhaTBBQUVjTmp3RWdFRUVCUmcyT0FTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFVBU0VRREpNQ0N3SkFJQVFnQWtjTkFFSFdBU0VRREpNQ0N5QUNJQVJySUFBb0FnQWlFR29oRkNBRUlCQnJRUUpxSVFzRFFDQUVMUUFBSUJCQmc5Q0FnQUJxTFFBQVJ3Mk9BU0FRUVFKR0RaQUJJQkJCQVdvaEVDQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZFlCSVJBTWtnSUxBa0FnQkNBQ1J3MEFRZGNCSVJBTWtnSUxBa0FDUUNBRUxRQUFRYnQvYWc0UUFJOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3RUJqd0VMSUFSQkFXb2hCRUc3QVNFUURQa0JDeUFFUVFGcUlRUkJ2QUVoRUF6NEFRc0NRQ0FFSUFKSERRQkIyQUVoRUF5UkFnc2dCQzBBQUVISUFFY05qQUVnQkVFQmFpRUVETVFCQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHK0FTRVFEUGNCQzBIWkFTRVFESThDQ3dKQUlBUWdBa2NOQUVIYUFTRVFESThDQ3lBRUxRQUFRY2dBUmczREFTQUFRUUU2QUNnTXVRRUxJQUJCQWpvQUx5QUFJQVFnQWhDbWdJQ0FBQ0lRRFkwQlFjSUJJUkFNOUFFTElBQXRBQ2hCZjJvT0FyY0J1UUc0QVFzRFFBSkFJQVF0QUFCQmRtb09CQUNPQVk0QkFJNEJDeUFFUVFGcUlnUWdBa2NOQUF0QjNRRWhFQXlMQWdzZ0FFRUFPZ0F2SUFBdEFDMUJCSEZGRFlRQ0N5QUFRUUE2QUM4Z0FFRUJPZ0EwSUFFaEFReU1BUXNnRUVFVlJnM2FBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXlJQWdzQ1FDQUFJQkFnQWhDMGdJQ0FBQ0lFRFFBZ0VDRUJESUVDQ3dKQUlBUkJGVWNOQUNBQVFRTTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5SUFnc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1od0lMSUJCQkZVWU4xZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNaGdJTElBQW9BZ1FoRnlBQVFRQTJBZ1FnRUNBUnAyb2lGaUVCSUFBZ0Z5QVFJQllnRkJzaUVCQzFnSUNBQUNJVVJRMk5BU0FBUVFjMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU1oUUlMSUFBZ0FDOEJNRUdBQVhJN0FUQWdBU0VCQzBFcUlSQU02Z0VMSUJCQkZVWU4wUUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWU9NZ0lBQU5nSVFJQUJCRXpZQ0RFRUFJUkFNZ2dJTElCQkJGVVlOendFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTWdRSUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREkwQkN5QUFRUXcyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1nQUlMSUJCQkZVWU56QUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNL3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESXdCQ3lBQVFRMDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9nRUxJQkJCRlVZTnlRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU0vUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJc0JDeUFBUVE0MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIQWxZQ0FBRFlDRUNBQVFRSTJBZ3hCQUNFUURQc0JDeUFRUVJWR0RjVUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUG9CQ3lBQVFSQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNK1FFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJEUEVCQ3lBQVFSRTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTStBRUxJQkJCRlVZTndRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU05d0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJZ0JDeUFBUVJNMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJETzBCQ3lBQVFSUTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlRRUxJQkJCRlVZTnZRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU05QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJWUJDeUFBUVJZMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOHdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkMzZ0lDQUFDSUVEUUFnQVVFQmFpRUJET2tCQ3lBQVFSYzJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTThnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFEUEVCQzBJQklSRUxJQkJCQVdvaEFRSkFJQUFwQXlBaUVrTC8vLy8vLy8vLy93OVdEUUFnQUNBU1FnU0dJQkdFTndNZ0lBRWhBUXlFQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWEySmdJQUFOZ0lRSUFCQkREWUNERUVBSVJBTTd3RUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzRCQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmN5QUFRUVUyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTTdRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3FuSUNBQURZQ0VDQUFRUTgyQWd4QkFDRVFET3dCQ3lBQUlCQWdBaEMwZ0lDQUFDSUJEUUVnRUNFQkMwRU9JUkFNMFFFTEFrQWdBVUVWUncwQUlBQkJBallDSENBQUlCQTJBaFFnQUVHd21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURPb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXpwQVFzZ0FVRUJhaUVRQWtBZ0FDOEJNQ0lCUVlBQmNVVU5BQUpBSUFBZ0VDQUNFTHVBZ0lBQUlnRU5BQ0FRSVFFTWNBc2dBVUVWUncyNkFTQUFRUVUyQWh3Z0FDQVFOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNDUUNBQlFhQUVjVUdnQkVjTkFDQUFMUUF0UVFKeERRQWdBRUVBTmdJY0lBQWdFRFlDRkNBQVFaYVRnSUFBTmdJUUlBQkJCRFlDREVFQUlSQU02UUVMSUFBZ0VDQUNFTDJBZ0lBQUdpQVFJUUVDUUFKQUFrQUNRQUpBSUFBZ0VDQUNFTE9BZ0lBQURoWUNBUUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFEQkFzZ0FFRUJPZ0F1Q3lBQUlBQXZBVEJCd0FCeU93RXdJQkFoQVF0QkppRVFETkVCQ3lBQVFTTTJBaHdnQUNBUU5nSVVJQUJCcFphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkV0xnSUFBTmdJUUlBQkJFVFlDREVFQUlSQU02QUVMSUFBdEFDMUJBWEZGRFFGQnd3RWhFQXpPQVFzQ1FDQU5JQUpHRFFBRFFBSkFJQTB0QUFCQklFWU5BQ0FOSVFFTXhBRUxJQTFCQVdvaURTQUNSdzBBQzBFbElSQU01d0VMUVNVaEVBem1BUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRFJDdmdJQ0FBQ0lFUlEydEFTQUFRU1kyQWh3Z0FDQUVOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU01UUVMSUJCQkZVWU5xd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJOZ0lBQU5nSVFJQUJCSFRZQ0RFRUFJUkFNNUFFTElBQkJKellDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6akFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQUNRQUpBSUFBdEFDeEJmbW9PQndZRkJRTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcklSQU15Z0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdya29DQUFEWUNFQ0FBUVFzMkFneEJBQ0VRRE9JQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNUVFBaEVBemhBUXNnQUVFQU9nQXNJQkFoQVF5OUFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQUFVTElBQWdBQzhCTUVFSWNqc0JNQXdEQzBFQ0lSUU1BUXRCQkNFVUN5QUFRUUU2QUN3Z0FDQUFMd0V3SUJSeU93RXdDeUFRSVFFTFFTa2hFQXpGQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDVWdJQUFOZ0lRSUFCQkF6WUNERUVBSVJBTTNRRUxBa0FnRGkwQUFFRU5SdzBBSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRIVUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpkQVFzZ0FDMEFMVUVCY1VVTkFVSEVBU0VRRE1NQkN3SkFJQTRnQWtjTkFFRXRJUkFNM0FFTEFrQUNRQU5BQWtBZ0RpMEFBRUYyYWc0RUFnQUFBd0FMSUE1QkFXb2lEaUFDUncwQUMwRXRJUkFNM1FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGlFQkRIUUxJQUJCTERZQ0hDQUFJQTQyQWhRZ0FDQUJOZ0lNUVFBaEVBemNBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBT0VMR0FnSUFBSWdFTkFDQU9RUUZxSVFFTWN3c2dBRUVzTmdJY0lBQWdBVFlDRENBQUlBNUJBV28yQWhSQkFDRVFETnNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBT0VMR0FnSUFBSWdRTm9BRWdEaUVCRE00QkN5QVFRU3hIRFFFZ0FVRUJhaUVRUVFFaEFRSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQkFBTElCQWhBUXdFQzBFQ0lRRU1BUXRCQkNFQkN5QUFRUUU2QUN3Z0FDQUFMd0V3SUFGeU93RXdJQkFoQVF3QkN5QUFJQUF2QVRCQkNISTdBVEFnRUNFQkMwRTVJUkFNdndFTElBQkJBRG9BTENBQklRRUxRVFFoRUF5OUFRc2dBQ0FBTHdFd1FTQnlPd0V3SUFFaEFRd0NDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkEwQUlBRWhBUXpIQVFzZ0FFRTNOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRE5RQkN5QUFRUWc2QUN3Z0FTRUJDMEV3SVJBTXVRRUxBa0FnQUMwQUtFRUJSZzBBSUFFaEFRd0VDeUFBTFFBdFFRaHhSUTJUQVNBQklRRU1Bd3NnQUMwQU1FRWdjUTJVQVVIRkFTRVFETGNCQ3dKQUlBOGdBa1lOQUFKQUEwQUNRQ0FQTFFBQVFWQnFJZ0ZCL3dGeFFRcEpEUUFnRHlFQlFUVWhFQXk2QVFzZ0FDa0RJQ0lSUXBtejVzeVpzK2JNR1ZZTkFTQUFJQkZDQ240aUVUY0RJQ0FSSUFHdFF2OEJneUlTUW4rRlZnMEJJQUFnRVNBU2ZEY0RJQ0FQUVFGcUlnOGdBa2NOQUF0Qk9TRVFETkVCQ3lBQUtBSUVJUUlnQUVFQU5nSUVJQUFnQWlBUFFRRnFJZ1FRc1lDQWdBQWlBZzJWQVNBRUlRRU13d0VMUVRraEVBelBBUXNDUUNBQUx3RXdJZ0ZCQ0hGRkRRQWdBQzBBS0VFQlJ3MEFJQUF0QUMxQkNIRkZEWkFCQ3lBQUlBRkI5L3NEY1VHQUJISTdBVEFnRHlFQkMwRTNJUkFNdEFFTElBQWdBQzhCTUVFUWNqc0JNQXlyQVFzZ0VFRVZSZzJMQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOEk2QWdBQTJBaEFnQUVFY05nSU1RUUFoRUF6TEFRc2dBRUhEQURZQ0hDQUFJQUUyQWd3Z0FDQU5RUUZxTmdJVVFRQWhFQXpLQVFzQ1FDQUJMUUFBUVRwSERRQWdBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsrQWdJQUFJaEFOQUNBQlFRRnFJUUVNWXdzZ0FFSERBRFlDSENBQUlCQTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBektBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYkdSZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNeVFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHZ21ZQ0FBRFlDRUNBQVFSNDJBZ3hCQUNFUURNZ0JDeUFBUVFBMkFnQUxJQUJCZ0JJN0FTb2dBQ0FYUVFGcUlnRWdBaENvZ0lDQUFDSVFEUUVnQVNFQkMwSEhBQ0VRREt3QkN5QVFRUlZIRFlNQklBQkIwUUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBekVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWGdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6REFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjR29nSUFBTmdJUUlBQkJCellDRENBQVFRQTJBZ0JCQUNFUURNSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhkQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRE1FQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWUNSZ0lBQU5nSVFJQUJCQ1RZQ0RBekFBUXNnRUVFVlJnMTlJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1VqWUNBQURZQ0VDQUFRU0UyQWd4QkFDRVFETDhCQzBFQklSWkJBQ0VYUVFBaEZFRUJJUkFMSUFBZ0VEb0FLeUFCUVFGcUlRRUNRQUpBSUFBdEFDMUJFSEVOQUFKQUFrQUNRQ0FBTFFBcURnTUJBQUlFQ3lBV1JRMEREQUlMSUJRTkFRd0NDeUFYUlEwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcllDQWdBQWlFQTBBSUFFaEFReGNDeUFBUWRnQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETDRCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5dEFRc2dBRUhaQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTlBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNcXdFTElBQkIyZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZBRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2tCQ3lBQVFkd0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExzQkN3SkFJQUV0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dBVUVCYWlFQlFjOEFJUkFNb2dFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLY0JDeUFBUWQ0QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETG9CQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtVRWpUdzBBSUFFaEFReFpDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIwNG1BZ0FBMkFoQWdBRUVJTmdJTVFRQWhFQXk1QVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDREF5M0FRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSVVjTkFDQUJJUUVNVmdzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp1S2dJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXRnRUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwSWhCQlhXcEJDMDhOQUNBQklRRU1WUXNDUUNBUVFRWkxEUUJCQVNBUWRFSEtBSEZGRFFBZ0FTRUJERlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjk0bUFnQUEyQWhBZ0FFRUlOZ0lNRExVQkN5QVFRUlZHRFhFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTXRBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERlFMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNRRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERkVMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2lvQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREs0QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIzSWlBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlyQVFzZ0VFRS9SdzBCSUFGQkFXb2hBUXRCQlNFUURKQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyU2dJQUFOZ0lRSUFCQkJ6WUNEQXlvQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1SZ3NnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlsQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhTQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWtBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFRBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5akFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Rd3NnQUVIbEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlpQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNPUGdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW9RRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0FCQzBFQUlSQWdBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREF5ZkFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREVFQUlSQU1uZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUgra1lDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREowQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmpwdUFnQUEyQWhBZ0FFRUdOZ0lNUVFBaEVBeWNBUXNnRUVFVlJnMVhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESnNCQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1FoRUFzZ0FDQVFPZ0FwSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFFUXE0Q0FnQUFpRUExVUlBRWhBUXcrQ3lBQVFRQTJBZ0FMUVFBaEVDQUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQjhadUFnQUEyQWhBZ0FFRUdOZ0lNREpjQkN5QUJRUlZHRFZBZ0FFRUFOZ0ljSUFBZ0JUWUNGQ0FBUWZDTWdJQUFOZ0lRSUFCQkd6WUNERUVBSVJBTWxnRUxJQUFvQWdRaEJTQUFRUUEyQWdRZ0FDQUZJQkFRcVlDQWdBQWlCUTBCSUJCQkFXb2hCUXRCclFFaEVBeDdDeUFBUWNFQk5nSWNJQUFnQlRZQ0RDQUFJQkJCQVdvMkFoUkJBQ0VRREpNQkN5QUFLQUlFSVFZZ0FFRUFOZ0lFSUFBZ0JpQVFFS21BZ0lBQUlnWU5BU0FRUVFGcUlRWUxRYTRCSVJBTWVBc2dBRUhDQVRZQ0hDQUFJQVkyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlRQVFzZ0FFRUFOZ0ljSUFBZ0J6WUNGQ0FBUVplTGdJQUFOZ0lRSUFCQkRUWUNERUVBSVJBTWp3RUxJQUJCQURZQ0hDQUFJQWcyQWhRZ0FFSGprSUNBQURZQ0VDQUFRUWsyQWd4QkFDRVFESTRCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5TkFRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0NVRUJhaUVJQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQ0JDdGdJQ0FBQ0lRUlEwOUlBQkJ5UUUyQWh3Z0FDQUlOZ0lVSUFBZ0VEWUNERUVBSVJBTWpBRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQWdRcllDQWdBQWlCRVVOZGlBQVFjb0JOZ0ljSUFBZ0NEWUNGQ0FBSUFRMkFneEJBQ0VRRElzQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUpFSzJBZ0lBQUlnUkZEWFFnQUVITEFUWUNIQ0FBSUFrMkFoUWdBQ0FFTmdJTVFRQWhFQXlLQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NoQ3RnSUNBQUNJRVJRMXlJQUJCelFFMkFod2dBQ0FLTmdJVUlBQWdCRFlDREVFQUlSQU1pUUVMQWtBZ0N5MEFBRUZRYWlJUVFmOEJjVUVLVHcwQUlBQWdFRG9BS2lBTFFRRnFJUXBCdGdFaEVBeHdDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FMRUsyQWdJQUFJZ1JGRFhBZ0FFSFBBVFlDSENBQUlBczJBaFFnQUNBRU5nSU1RUUFoRUF5SUFRc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDRENBQVFRQTJBZ0JCQUNFUURJY0JDeUFCUVJWR0RUOGdBRUVBTmdJY0lBQWdERFlDRkNBQVFjeU9nSUFBTmdJUUlBQkJJRFlDREVFQUlSQU1oZ0VMSUFCQmdRUTdBU2dnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnREVFQmFpSU1FS3VBZ0lBQUloQkZEVGdnQUVIVEFUWUNIQ0FBSUF3MkFoUWdBQ0FRTmdJTVFRQWhFQXlGQVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFkaWJnSUFBTmdJUUlBQkJDRFlDREF5REFRc2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdDMEVCYWlJTEVLdUFnSUFBSWhBTkFVSEdBU0VRREdrTElBQkJBam9BS0F4VkN5QUFRZFVCTmdJY0lBQWdDellDRkNBQUlCQTJBZ3hCQUNFUURJQUJDeUFRUVJWR0RUY2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFhU01nSUFBTmdJUUlBQkJFRFlDREVFQUlSQU1md3NnQUMwQU5FRUJSdzAwSUFBZ0JDQUNFTHlBZ0lBQUloQkZEVFFnRUVFVlJ3MDFJQUJCM0FFMkFod2dBQ0FFTmdJVUlBQkIxWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXgrQzBFQUlSQWdBRUVBTmdJY0lBQkJyNHVBZ0FBMkFoQWdBRUVDTmdJTUlBQWdGRUVCYWpZQ0ZBeDlDMEVBSVJBTVl3dEJBaUVRREdJTFFRMGhFQXhoQzBFUElSQU1ZQXRCSlNFUURGOExRUk1oRUF4ZUMwRVZJUkFNWFF0QkZpRVFERndMUVJjaEVBeGJDMEVZSVJBTVdndEJHU0VRREZrTFFSb2hFQXhZQzBFYklSQU1Wd3RCSENFUURGWUxRUjBoRUF4VkMwRWZJUkFNVkF0QklTRVFERk1MUVNNaEVBeFNDMEhHQUNFUURGRUxRUzRoRUF4UUMwRXZJUkFNVHd0Qk95RVFERTRMUVQwaEVBeE5DMEhJQUNFUURFd0xRY2tBSVJBTVN3dEJ5d0FoRUF4S0MwSE1BQ0VRREVrTFFjNEFJUkFNU0F0QjBRQWhFQXhIQzBIVkFDRVFERVlMUWRnQUlSQU1SUXRCMlFBaEVBeEVDMEhiQUNFUURFTUxRZVFBSVJBTVFndEI1UUFoRUF4QkMwSHhBQ0VRREVBTFFmUUFJUkFNUHd0QmpRRWhFQXcrQzBHWEFTRVFERDBMUWFrQklSQU1QQXRCckFFaEVBdzdDMEhBQVNFUUREb0xRYmtCSVJBTU9RdEJyd0VoRUF3NEMwR3hBU0VRRERjTFFiSUJJUkFNTmd0QnRBRWhFQXcxQzBHMUFTRVFERFFMUWJvQklSQU1Nd3RCdlFFaEVBd3lDMEcvQVNFUURERUxRY0VCSVJBTU1Bc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFlbUxnSUFBTmdJUUlBQkJIellDREVFQUlSQU1TQXNnQUVIYkFUWUNIQ0FBSUFRMkFoUWdBRUg2bG9DQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVjTElBQkIrQUEyQWh3Z0FDQU1OZ0lVSUFCQnlwaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEdDeUFBUWRFQU5nSWNJQUFnQlRZQ0ZDQUFRYkNYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUlFzZ0FFSDVBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF4RUN5QUFRZmdBTmdJY0lBQWdBVFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Rd3NnQUVIa0FEWUNIQ0FBSUFFMkFoUWdBRUhqbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVJTElBQkIxd0EyQWh3Z0FDQUJOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ1WTJBZ0FBMkFoQWdBRUVhTmdJTVFRQWhFQXhBQ3lBQVFjSUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVB3c2dBRUVBTmdJRUlBQWdEeUFQRUxHQWdJQUFJZ1JGRFFFZ0FFRTZOZ0ljSUFBZ0JEWUNEQ0FBSUE5QkFXbzJBaFJCQUNFUURENExJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDeGdJQ0FBQ0lFUlEwQUlBQkJPellDSENBQUlBUTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBdytDeUFCUVFGcUlRRU1MUXNnRDBFQmFpRUJEQzBMSUFCQkFEWUNIQ0FBSUE4MkFoUWdBRUhra29DQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRERzTElBQkJOallDSENBQUlBUTJBaFFnQUNBQ05nSU1RUUFoRUF3NkN5QUFRUzQyQWh3Z0FDQU9OZ0lVSUFBZ0JEWUNERUVBSVJBTU9Rc2dBRUhRQURZQ0hDQUFJQUUyQWhRZ0FFR1JtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERGdMSUExQkFXb2hBUXdzQ3lBQVFSVTJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MkN5QUFRUnMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzFDeUFBUVE4MkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcwQ3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3ekN5QUFRUm8yQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3lDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd4Q3lBQVFRbzJBaHdnQUNBQk5nSVVJQUJCNUphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3d0N5QUFRUjQyQWh3Z0FDQUJOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3ZDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkIybzJBZ0FBMkFoQWdBRUVVTmdJTVFRQWhFQXd1Q3lBQVFRUTJBaHdnQUNBQk5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dEN5QUFRUUEyQWdBZ0MwRUJhaUVMQzBHNEFTRVFEQklMSUFCQkFEWUNBQ0FRUVFGcUlRRkI5UUFoRUF3UkN5QUJJUUVDUUNBQUxRQXBRUVZIRFFCQjR3QWhFQXdSQzBIaUFDRVFEQkFMUVFBaEVDQUFRUUEyQWh3Z0FFSGtrWUNBQURZQ0VDQUFRUWMyQWd3Z0FDQVVRUUZxTmdJVURDZ0xJQUJCQURZQ0FDQVhRUUZxSVFGQndBQWhFQXdPQzBFQklRRUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0YwRUJhaUVCQzBFb0lSQU1Dd3NnQVNFQkMwRTRJUkFNQ1FzQ1FDQUJJZzhnQWtZTkFBTkFBa0FnRHkwQUFFR0F2b0NBQUdvdEFBQWlBVUVCUmcwQUlBRkJBa2NOQXlBUFFRRnFJUUVNQkFzZ0QwRUJhaUlQSUFKSERRQUxRVDRoRUF3aUMwRStJUkFNSVFzZ0FFRUFPZ0FzSUE4aEFRd0JDMEVMSVJBTUJndEJPaUVRREFVTElBRkJBV29oQVVFdElSQU1CQXNnQUNBQk9nQXNJQUJCQURZQ0FDQVdRUUZxSVFGQkRDRVFEQU1MSUFCQkFEWUNBQ0FYUVFGcUlRRkJDaUVRREFJTElBQkJBRFlDQUFzZ0FFRUFPZ0FzSUEwaEFVRUpJUkFNQUFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FMTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCY0xRUUFoRUNBQVFRQTJBaHdnQUNBS05nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQllMUVFBaEVDQUFRUUEyQWh3Z0FDQUpOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJVTFFRQWhFQ0FBUVFBMkFod2dBQ0FJTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCUUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQk1MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJJTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCRUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQkFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE4TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBNExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pLQWdBQTJBaEFnQUVFTE5nSU1EQTBMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxZbUFnQUEyQWhBZ0FFRUxOZ0lNREF3TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTURBc0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCKzQrQWdBQTJBaEFnQUVFS05nSU1EQW9MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhabUFnQUEyQWhBZ0FFRUNOZ0lNREFrTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4SlNBZ0FBMkFoQWdBRUVDTmdJTURBZ0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOHBXQWdBQTJBaEFnQUVFQ05nSU1EQWNMSUFCQkFqWUNIQ0FBSUFFMkFoUWdBRUdjbW9DQUFEWUNFQ0FBUVJZMkFneEJBQ0VRREFZTFFRRWhFQXdGQzBIVUFDRVFJQUVpQkNBQ1JnMEVJQU5CQ0dvZ0FDQUVJQUpCMk1LQWdBQkJDaERGZ0lDQUFDQURLQUlNSVFRZ0F5Z0NDQTREQVFRQ0FBc1F5b0NBZ0FBQUN5QUFRUUEyQWh3Z0FFRzFtb0NBQURZQ0VDQUFRUmMyQWd3Z0FDQUVRUUZxTmdJVVFRQWhFQXdDQ3lBQVFRQTJBaHdnQUNBRU5nSVVJQUJCeXBxQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF3QkN3SkFJQUVpQkNBQ1J3MEFRU0loRUF3QkN5QUFRWW1BZ0lBQU5nSUlJQUFnQkRZQ0JFRWhJUkFMSUFOQkVHb2tnSUNBZ0FBZ0VBdXZBUUVDZnlBQktBSUFJUVlDUUFKQUlBSWdBMFlOQUNBRUlBWnFJUVFnQmlBRGFpQUNheUVISUFJZ0JrRi9jeUFGYWlJR2FpRUZBMEFDUUNBQ0xRQUFJQVF0QUFCR0RRQkJBaUVFREFNTEFrQWdCZzBBUVFBaEJDQUZJUUlNQXdzZ0JrRi9haUVHSUFSQkFXb2hCQ0FDUVFGcUlnSWdBMGNOQUFzZ0J5RUdJQU1oQWdzZ0FFRUJOZ0lBSUFFZ0JqWUNBQ0FBSUFJMkFnUVBDeUFCUVFBMkFnQWdBQ0FFTmdJQUlBQWdBallDQkFzS0FDQUFFTWVBZ0lBQUMvSTJBUXQvSTRDQWdJQUFRUkJySWdFa2dJQ0FnQUFDUUVFQUtBS2cwSUNBQUEwQVFRQVF5NENBZ0FCQmdOU0VnQUJySWdKQjJRQkpEUUJCQUNFREFrQkJBQ2dDNE5PQWdBQWlCQTBBUVFCQ2Z6Y0M3Tk9BZ0FCQkFFS0FnSVNBZ0lEQUFEY0M1Tk9BZ0FCQkFDQUJRUWhxUVhCeFFkaXExYW9GY3lJRU5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQUxRUUFnQWpZQ3pOT0FnQUJCQUVHQTFJU0FBRFlDeU5PQWdBQkJBRUdBMUlTQUFEWUNtTkNBZ0FCQkFDQUVOZ0tzMElDQUFFRUFRWDgyQXFqUWdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBdEJnTlNFZ0FCQmVFR0ExSVNBQUd0QkQzRkJBRUdBMUlTQUFFRUlha0VQY1JzaUEyb2lCRUVFYWlBQ1FVaHFJZ1VnQTJzaUEwRUJjallDQUVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQkJnTlNFZ0FBZ0JXcEJPRFlDQkFzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUVIc0FVc05BQUpBUVFBb0FvalFnSUFBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdKQkEzWWlCSFlpQTBFRGNVVU5BQUpBQWtBZ0EwRUJjU0FFY2tFQmN5SUZRUU4wSWdSQnNOQ0FnQUJxSWdNZ0JFRzQwSUNBQUdvb0FnQWlCQ2dDQ0NJQ1J3MEFRUUFnQmtGK0lBVjNjVFlDaU5DQWdBQU1BUXNnQXlBQ05nSUlJQUlnQXpZQ0RBc2dCRUVJYWlFRElBUWdCVUVEZENJRlFRTnlOZ0lFSUFRZ0JXb2lCQ0FFS0FJRVFRRnlOZ0lFREF3TElBSkJBQ2dDa05DQWdBQWlCMDBOQVFKQUlBTkZEUUFDUUFKQUlBTWdCSFJCQWlBRWRDSURRUUFnQTJ0eWNTSURRUUFnQTJ0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtb2lCRUVEZENJRFFiRFFnSUFBYWlJRklBTkJ1TkNBZ0FCcUtBSUFJZ01vQWdnaUFFY05BRUVBSUFaQmZpQUVkM0VpQmpZQ2lOQ0FnQUFNQVFzZ0JTQUFOZ0lJSUFBZ0JUWUNEQXNnQXlBQ1FRTnlOZ0lFSUFNZ0JFRURkQ0lFYWlBRUlBSnJJZ1UyQWdBZ0F5QUNhaUlBSUFWQkFYSTJBZ1FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQmtFQklBZEJBM1owSWdoeERRQkJBQ0FHSUFoeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFRMkFnd2dBaUFFTmdJSUlBUWdBallDRENBRUlBZzJBZ2dMSUFOQkNHb2hBMEVBSUFBMkFwelFnSUFBUVFBZ0JUWUNrTkNBZ0FBTURBdEJBQ2dDak5DQWdBQWlDVVVOQVNBSlFRQWdDV3R4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1wQkFuUkJ1TktBZ0FCcUtBSUFJZ0FvQWdSQmVIRWdBbXNoQkNBQUlRVUNRQU5BQWtBZ0JTZ0NFQ0lERFFBZ0JVRVVhaWdDQUNJRFJRMENDeUFES0FJRVFYaHhJQUpySWdVZ0JDQUZJQVJKSWdVYklRUWdBeUFBSUFVYklRQWdBeUVGREFBTEN5QUFLQUlZSVFvQ1FDQUFLQUlNSWdnZ0FFWU5BQ0FBS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFJSUFNMkFnZ2dBeUFJTmdJTURBc0xBa0FnQUVFVWFpSUZLQUlBSWdNTkFDQUFLQUlRSWdORkRRTWdBRUVRYWlFRkN3TkFJQVVoQ3lBRElnaEJGR29pQlNnQ0FDSUREUUFnQ0VFUWFpRUZJQWdvQWhBaUF3MEFDeUFMUVFBMkFnQU1DZ3RCZnlFQ0lBQkJ2MzlMRFFBZ0FFRVRhaUlEUVhCeElRSkJBQ2dDak5DQWdBQWlCMFVOQUVFQUlRc0NRQ0FDUVlBQ1NRMEFRUjhoQ3lBQ1FmLy8vd2RMRFFBZ0EwRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lGSUFWQmdJQVBha0VRZGtFQ2NTSUZkRUVQZGlBRElBUnlJQVZ5YXlJRFFRRjBJQUlnQTBFVmFuWkJBWEZ5UVJ4cUlRc0xRUUFnQW1zaEJBSkFBa0FDUUFKQUlBdEJBblJCdU5LQWdBQnFLQUlBSWdVTkFFRUFJUU5CQUNFSURBRUxRUUFoQXlBQ1FRQkJHU0FMUVFGMmF5QUxRUjlHRzNRaEFFRUFJUWdEUUFKQUlBVW9BZ1JCZUhFZ0Ftc2lCaUFFVHcwQUlBWWhCQ0FGSVFnZ0JnMEFRUUFoQkNBRklRZ2dCU0VEREFNTElBTWdCVUVVYWlnQ0FDSUdJQVlnQlNBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lGUmhzZ0F5QUdHeUVESUFCQkFYUWhBQ0FGRFFBTEN3SkFJQU1nQ0hJTkFFRUFJUWhCQWlBTGRDSURRUUFnQTJ0eUlBZHhJZ05GRFFNZ0EwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQlVFRmRrRUljU0lBSUFOeUlBVWdBSFlpQTBFQ2RrRUVjU0lGY2lBRElBVjJJZ05CQVhaQkFuRWlCWElnQXlBRmRpSURRUUYyUVFGeElnVnlJQU1nQlhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0VEQ3lBRFJRMEJDd05BSUFNb0FnUkJlSEVnQW1zaUJpQUVTU0VBQWtBZ0F5Z0NFQ0lGRFFBZ0EwRVVhaWdDQUNFRkN5QUdJQVFnQUJzaEJDQURJQWdnQUJzaENDQUZJUU1nQlEwQUN3c2dDRVVOQUNBRVFRQW9BcERRZ0lBQUlBSnJUdzBBSUFnb0FoZ2hDd0pBSUFnb0Fnd2lBQ0FJUmcwQUlBZ29BZ2dpQTBFQUtBS1kwSUNBQUVrYUlBQWdBellDQ0NBRElBQTJBZ3dNQ1FzQ1FDQUlRUlJxSWdVb0FnQWlBdzBBSUFnb0FoQWlBMFVOQXlBSVFSQnFJUVVMQTBBZ0JTRUdJQU1pQUVFVWFpSUZLQUlBSWdNTkFDQUFRUkJxSVFVZ0FDZ0NFQ0lERFFBTElBWkJBRFlDQUF3SUN3SkFRUUFvQXBEUWdJQUFJZ01nQWtrTkFFRUFLQUtjMElDQUFDRUVBa0FDUUNBRElBSnJJZ1ZCRUVrTkFDQUVJQUpxSWdBZ0JVRUJjallDQkVFQUlBVTJBcERRZ0lBQVFRQWdBRFlDbk5DQWdBQWdCQ0FEYWlBRk5nSUFJQVFnQWtFRGNqWUNCQXdCQ3lBRUlBTkJBM0kyQWdRZ0JDQURhaUlESUFNb0FnUkJBWEkyQWdSQkFFRUFOZ0tjMElDQUFFRUFRUUEyQXBEUWdJQUFDeUFFUVFocUlRTU1DZ3NDUUVFQUtBS1UwSUNBQUNJQUlBSk5EUUJCQUNnQ29OQ0FnQUFpQXlBQ2FpSUVJQUFnQW1zaUJVRUJjallDQkVFQUlBVTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBeUFDUVFOeU5nSUVJQU5CQ0dvaEF3d0tDd0pBQWtCQkFDZ0M0Tk9BZ0FCRkRRQkJBQ2dDNk5PQWdBQWhCQXdCQzBFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVNYWtGd2NVSFlxdFdxQlhNMkF1RFRnSUFBUVFCQkFEWUM5Tk9BZ0FCQkFFRUFOZ0xFMDRDQUFFR0FnQVFoQkF0QkFDRURBa0FnQkNBQ1FjY0FhaUlIYWlJR1FRQWdCR3NpQzNFaUNDQUNTdzBBUVFCQk1EWUMrTk9BZ0FBTUNnc0NRRUVBS0FMQTA0Q0FBQ0lEUlEwQUFrQkJBQ2dDdU5PQWdBQWlCQ0FJYWlJRklBUk5EUUFnQlNBRFRRMEJDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0tDMEVBTFFERTA0Q0FBRUVFY1EwRUFrQUNRQUpBUVFBb0FxRFFnSUFBSWdSRkRRQkJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlBRVN3MERDeUFES0FJSUlnTU5BQXNMUVFBUXk0Q0FnQUFpQUVGL1JnMEZJQWdoQmdKQVFRQW9BdVRUZ0lBQUlnTkJmMm9pQkNBQWNVVU5BQ0FJSUFCcklBUWdBR3BCQUNBRGEzRnFJUVlMSUFZZ0FrME5CU0FHUWY3Ly8vOEhTdzBGQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BRUVBS0FLNDA0Q0FBQ0lFSUFacUlnVWdCRTBOQmlBRklBTkxEUVlMSUFZUXk0Q0FnQUFpQXlBQVJ3MEJEQWNMSUFZZ0FHc2dDM0VpQmtIKy8vLy9CMHNOQkNBR0VNdUFnSUFBSWdBZ0F5Z0NBQ0FES0FJRWFrWU5BeUFBSVFNTEFrQWdBMEYvUmcwQUlBSkJ5QUJxSUFaTkRRQUNRQ0FISUFaclFRQW9BdWpUZ0lBQUlnUnFRUUFnQkd0eElnUkIvdi8vL3dkTkRRQWdBeUVBREFjTEFrQWdCQkRMZ0lDQUFFRi9SZzBBSUFRZ0Jtb2hCaUFESVFBTUJ3dEJBQ0FHYXhETGdJQ0FBQm9NQkFzZ0F5RUFJQU5CZjBjTkJRd0RDMEVBSVFnTUJ3dEJBQ0VBREFVTElBQkJmMGNOQWd0QkFFRUFLQUxFMDRDQUFFRUVjallDeE5PQWdBQUxJQWhCL3YvLy93ZExEUUVnQ0JETGdJQ0FBQ0VBUVFBUXk0Q0FnQUFoQXlBQVFYOUdEUUVnQTBGL1JnMEJJQUFnQTA4TkFTQURJQUJySWdZZ0FrRTRhazBOQVF0QkFFRUFLQUs0MDRDQUFDQUdhaUlETmdLNDA0Q0FBQUpBSUFOQkFDZ0N2Tk9BZ0FCTkRRQkJBQ0FETmdLODA0Q0FBQXNDUUFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFDQUFJQU1vQWdBaUJTQURLQUlFSWdocVJnMENJQU1vQWdnaUF3MEFEQU1MQ3dKQUFrQkJBQ2dDbU5DQWdBQWlBMFVOQUNBQUlBTlBEUUVMUVFBZ0FEWUNtTkNBZ0FBTFFRQWhBMEVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRi9OZ0tvMElDQUFFRUFRUUFvQXVEVGdJQUFOZ0tzMElDQUFFRUFRUUEyQXRUVGdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUJDQUdRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQUNBRmFrRTROZ0lFREFJTElBTXRBQXhCQ0hFTkFDQUVJQVZKRFFBZ0JDQUFUdzBBSUFSQmVDQUVhMEVQY1VFQUlBUkJDR3BCRDNFYklnVnFJZ0JCQUNnQ2xOQ0FnQUFnQm1vaUN5QUZheUlGUVFGeU5nSUVJQU1nQ0NBR2FqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFVMkFwVFFnSUFBUVFBZ0FEWUNvTkNBZ0FBZ0JDQUxha0U0TmdJRURBRUxBa0FnQUVFQUtBS1kwSUNBQUNJSVR3MEFRUUFnQURZQ21OQ0FnQUFnQUNFSUN5QUFJQVpxSVFWQnlOT0FnQUFoQXdKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnQXlnQ0FDQUZSZzBCSUFNb0FnZ2lBdzBBREFJTEN5QURMUUFNUVFoeFJRMEJDMEhJMDRDQUFDRURBMEFDUUNBREtBSUFJZ1VnQkVzTkFDQUZJQU1vQWdScUlnVWdCRXNOQXdzZ0F5Z0NDQ0VEREFBTEN5QURJQUEyQWdBZ0F5QURLQUlFSUFacU5nSUVJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViYWlJTElBSkJBM0kyQWdRZ0JVRjRJQVZyUVE5eFFRQWdCVUVJYWtFUGNSdHFJZ1lnQ3lBQ2FpSUNheUVEQWtBZ0JpQUVSdzBBUVFBZ0FqWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQURhaUlETmdLVTBJQ0FBQ0FDSUFOQkFYSTJBZ1FNQXdzQ1FDQUdRUUFvQXB6UWdJQUFSdzBBUVFBZ0FqWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQURhaUlETmdLUTBJQ0FBQ0FDSUFOQkFYSTJBZ1FnQWlBRGFpQUROZ0lBREFNTEFrQWdCaWdDQkNJRVFRTnhRUUZIRFFBZ0JFRjRjU0VIQWtBQ1FDQUVRZjhCU3cwQUlBWW9BZ2dpQlNBRVFRTjJJZ2hCQTNSQnNOQ0FnQUJxSWdCR0dnSkFJQVlvQWd3aUJDQUZSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUlkM0UyQW9qUWdJQUFEQUlMSUFRZ0FFWWFJQVFnQlRZQ0NDQUZJQVEyQWd3TUFRc2dCaWdDR0NFSkFrQUNRQ0FHS0FJTUlnQWdCa1lOQUNBR0tBSUlJZ1FnQ0VrYUlBQWdCRFlDQ0NBRUlBQTJBZ3dNQVFzQ1FDQUdRUlJxSWdRb0FnQWlCUTBBSUFaQkVHb2lCQ2dDQUNJRkRRQkJBQ0VBREFFTEEwQWdCQ0VJSUFVaUFFRVVhaUlFS0FJQUlnVU5BQ0FBUVJCcUlRUWdBQ2dDRUNJRkRRQUxJQWhCQURZQ0FBc2dDVVVOQUFKQUFrQWdCaUFHS0FJY0lnVkJBblJCdU5LQWdBQnFJZ1FvQWdCSERRQWdCQ0FBTmdJQUlBQU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JYZHhOZ0tNMElDQUFBd0NDeUFKUVJCQkZDQUpLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFrMkFoZ0NRQ0FHS0FJUUlnUkZEUUFnQUNBRU5nSVFJQVFnQURZQ0dBc2dCaWdDRkNJRVJRMEFJQUJCRkdvZ0JEWUNBQ0FFSUFBMkFoZ0xJQWNnQTJvaEF5QUdJQWRxSWdZb0FnUWhCQXNnQmlBRVFYNXhOZ0lFSUFJZ0Eyb2dBellDQUNBQ0lBTkJBWEkyQWdRQ1FDQURRZjhCU3cwQUlBTkJlSEZCc05DQWdBQnFJUVFDUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FEUVFOMmRDSURjUTBBUVFBZ0JTQURjallDaU5DQWdBQWdCQ0VEREFFTElBUW9BZ2doQXdzZ0F5QUNOZ0lNSUFRZ0FqWUNDQ0FDSUFRMkFnd2dBaUFETmdJSURBTUxRUjhoQkFKQUlBTkIvLy8vQjBzTkFDQURRUWgySWdRZ0JFR0EvajlxUVJCMlFRaHhJZ1IwSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdBZ0FFR0FnQTlxUVJCMlFRSnhJZ0IwUVE5MklBUWdCWElnQUhKcklnUkJBWFFnQXlBRVFSVnFka0VCY1hKQkhHb2hCQXNnQWlBRU5nSWNJQUpDQURjQ0VDQUVRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUFFRUJJQVIwSWdoeERRQWdCU0FDTmdJQVFRQWdBQ0FJY2pZQ2pOQ0FnQUFnQWlBRk5nSVlJQUlnQWpZQ0NDQUNJQUkyQWd3TUF3c2dBMEVBUVJrZ0JFRUJkbXNnQkVFZlJodDBJUVFnQlNnQ0FDRUFBMEFnQUNJRktBSUVRWGh4SUFOR0RRSWdCRUVkZGlFQUlBUkJBWFFoQkNBRklBQkJCSEZxUVJCcUlnZ29BZ0FpQUEwQUN5QUlJQUkyQWdBZ0FpQUZOZ0lZSUFJZ0FqWUNEQ0FDSUFJMkFnZ01BZ3NnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lDeUFHUVVocUlnZ2dBMnNpQTBFQmNqWUNCQ0FBSUFocVFUZzJBZ1FnQkNBRlFUY2dCV3RCRDNGQkFDQUZRVWxxUVE5eEcycEJRV29pQ0NBSUlBUkJFR3BKR3lJSVFTTTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBczJBcURRZ0lBQUlBaEJFR3BCQUNrQzBOT0FnQUEzQWdBZ0NFRUFLUUxJMDRDQUFEY0NDRUVBSUFoQkNHbzJBdERUZ0lBQVFRQWdCallDek5PQWdBQkJBQ0FBTmdMSTA0Q0FBRUVBUVFBMkF0VFRnSUFBSUFoQkpHb2hBd05BSUFOQkJ6WUNBQ0FEUVFScUlnTWdCVWtOQUFzZ0NDQUVSZzBESUFnZ0NDZ0NCRUYrY1RZQ0JDQUlJQWdnQkdzaUFEWUNBQ0FFSUFCQkFYSTJBZ1FDUUNBQVFmOEJTdzBBSUFCQmVIRkJzTkNBZ0FCcUlRTUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQUFRUU4yZENJQWNRMEFRUUFnQlNBQWNqWUNpTkNBZ0FBZ0F5RUZEQUVMSUFNb0FnZ2hCUXNnQlNBRU5nSU1JQU1nQkRZQ0NDQUVJQU0yQWd3Z0JDQUZOZ0lJREFRTFFSOGhBd0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ01nQTBHQS9qOXFRUkIyUVFoeElnTjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ2dnQ0VHQWdBOXFRUkIyUVFKeElnaDBRUTkySUFNZ0JYSWdDSEpySWdOQkFYUWdBQ0FEUVJWcWRrRUJjWEpCSEdvaEF3c2dCQ0FETmdJY0lBUkNBRGNDRUNBRFFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQ0VFQklBTjBJZ1p4RFFBZ0JTQUVOZ0lBUVFBZ0NDQUdjallDak5DQWdBQWdCQ0FGTmdJWUlBUWdCRFlDQ0NBRUlBUTJBZ3dNQkFzZ0FFRUFRUmtnQTBFQmRtc2dBMEVmUmh0MElRTWdCU2dDQUNFSUEwQWdDQ0lGS0FJRVFYaHhJQUJHRFFNZ0EwRWRkaUVJSUFOQkFYUWhBeUFGSUFoQkJIRnFRUkJxSWdZb0FnQWlDQTBBQ3lBR0lBUTJBZ0FnQkNBRk5nSVlJQVFnQkRZQ0RDQUVJQVEyQWdnTUF3c2dCU2dDQ0NJRElBSTJBZ3dnQlNBQ05nSUlJQUpCQURZQ0dDQUNJQVUyQWd3Z0FpQUROZ0lJQ3lBTFFRaHFJUU1NQlFzZ0JTZ0NDQ0lESUFRMkFnd2dCU0FFTmdJSUlBUkJBRFlDR0NBRUlBVTJBZ3dnQkNBRE5nSUlDMEVBS0FLVTBJQ0FBQ0lESUFKTkRRQkJBQ2dDb05DQWdBQWlCQ0FDYWlJRklBTWdBbXNpQTBFQmNqWUNCRUVBSUFNMkFwVFFnSUFBUVFBZ0JUWUNvTkNBZ0FBZ0JDQUNRUU55TmdJRUlBUkJDR29oQXd3REMwRUFJUU5CQUVFd05nTDQwNENBQUF3Q0N3SkFJQXRGRFFBQ1FBSkFJQWdnQ0NnQ0hDSUZRUUowUWJqU2dJQUFhaUlES0FJQVJ3MEFJQU1nQURZQ0FDQUFEUUZCQUNBSFFYNGdCWGR4SWdjMkFvelFnSUFBREFJTElBdEJFRUVVSUFzb0FoQWdDRVliYWlBQU5nSUFJQUJGRFFFTElBQWdDellDR0FKQUlBZ29BaEFpQTBVTkFDQUFJQU0yQWhBZ0F5QUFOZ0lZQ3lBSVFSUnFLQUlBSWdORkRRQWdBRUVVYWlBRE5nSUFJQU1nQURZQ0dBc0NRQUpBSUFSQkQwc05BQ0FJSUFRZ0Ftb2lBMEVEY2pZQ0JDQUlJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFJSUFKcUlnQWdCRUVCY2pZQ0JDQUlJQUpCQTNJMkFnUWdBQ0FFYWlBRU5nSUFBa0FnQkVIL0FVc05BQ0FFUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0JFRURkblFpQkhFTkFFRUFJQVVnQkhJMkFvalFnSUFBSUFNaEJBd0JDeUFES0FJSUlRUUxJQVFnQURZQ0RDQURJQUEyQWdnZ0FDQUROZ0lNSUFBZ0JEWUNDQXdCQzBFZklRTUNRQ0FFUWYvLy93ZExEUUFnQkVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUNJQUpCZ0lBUGFrRVFka0VDY1NJQ2RFRVBkaUFESUFWeUlBSnlheUlEUVFGMElBUWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBQWdBellDSENBQVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFJQWRCQVNBRGRDSUNjUTBBSUFVZ0FEWUNBRUVBSUFjZ0FuSTJBb3pRZ0lBQUlBQWdCVFlDR0NBQUlBQTJBZ2dnQUNBQU5nSU1EQUVMSUFSQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQWdKQUEwQWdBaUlGS0FJRVFYaHhJQVJHRFFFZ0EwRWRkaUVDSUFOQkFYUWhBeUFGSUFKQkJIRnFRUkJxSWdZb0FnQWlBZzBBQ3lBR0lBQTJBZ0FnQUNBRk5nSVlJQUFnQURZQ0RDQUFJQUEyQWdnTUFRc2dCU2dDQ0NJRElBQTJBZ3dnQlNBQU5nSUlJQUJCQURZQ0dDQUFJQVUyQWd3Z0FDQUROZ0lJQ3lBSVFRaHFJUU1NQVFzQ1FDQUtSUTBBQWtBQ1FDQUFJQUFvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQWcyQWdBZ0NBMEJRUUFnQ1VGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ2tFUVFSUWdDaWdDRUNBQVJodHFJQWcyQWdBZ0NFVU5BUXNnQ0NBS05nSVlBa0FnQUNnQ0VDSURSUTBBSUFnZ0F6WUNFQ0FESUFnMkFoZ0xJQUJCRkdvb0FnQWlBMFVOQUNBSVFSUnFJQU0yQWdBZ0F5QUlOZ0lZQ3dKQUFrQWdCRUVQU3cwQUlBQWdCQ0FDYWlJRFFRTnlOZ0lFSUFBZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFREFFTElBQWdBbW9pQlNBRVFRRnlOZ0lFSUFBZ0FrRURjallDQkNBRklBUnFJQVEyQWdBQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhBd0pBQWtCQkFTQUhRUU4yZENJSUlBWnhEUUJCQUNBSUlBWnlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBTTJBZ3dnQWlBRE5nSUlJQU1nQWpZQ0RDQURJQWcyQWdnTFFRQWdCVFlDbk5DQWdBQkJBQ0FFTmdLUTBJQ0FBQXNnQUVFSWFpRURDeUFCUVJCcUpJQ0FnSUFBSUFNTENnQWdBQkRKZ0lDQUFBdmlEUUVIZndKQUlBQkZEUUFnQUVGNGFpSUJJQUJCZkdvb0FnQWlBa0Y0Y1NJQWFpRURBa0FnQWtFQmNRMEFJQUpCQTNGRkRRRWdBU0FCS0FJQUlnSnJJZ0ZCQUNnQ21OQ0FnQUFpQkVrTkFTQUNJQUJxSVFBQ1FDQUJRUUFvQXB6UWdJQUFSZzBBQWtBZ0FrSC9BVXNOQUNBQktBSUlJZ1FnQWtFRGRpSUZRUU4wUWJEUWdJQUFhaUlHUmhvQ1FDQUJLQUlNSWdJZ0JFY05BRUVBUVFBb0FvalFnSUFBUVg0Z0JYZHhOZ0tJMElDQUFBd0RDeUFDSUFaR0dpQUNJQVEyQWdnZ0JDQUNOZ0lNREFJTElBRW9BaGdoQndKQUFrQWdBU2dDRENJR0lBRkdEUUFnQVNnQ0NDSUNJQVJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0FVRVVhaUlDS0FJQUlnUU5BQ0FCUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUVDUUFKQUlBRWdBU2dDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUF3c2dCMEVRUVJRZ0J5Z0NFQ0FCUmh0cUlBWTJBZ0FnQmtVTkFnc2dCaUFITmdJWUFrQWdBU2dDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBRW9BaFFpQWtVTkFTQUdRUlJxSUFJMkFnQWdBaUFHTmdJWURBRUxJQU1vQWdRaUFrRURjVUVEUncwQUlBTWdBa0YrY1RZQ0JFRUFJQUEyQXBEUWdJQUFJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FQQ3lBQklBTlBEUUFnQXlnQ0JDSUNRUUZ4UlEwQUFrQUNRQ0FDUVFKeERRQUNRQ0FEUVFBb0FxRFFnSUFBUncwQVFRQWdBVFlDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FBYWlJQU5nS1UwSUNBQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BMEVBUVFBMkFwRFFnSUFBUVFCQkFEWUNuTkNBZ0FBUEN3SkFJQU5CQUNnQ25OQ0FnQUJIRFFCQkFDQUJOZ0tjMElDQUFFRUFRUUFvQXBEUWdJQUFJQUJxSWdBMkFwRFFnSUFBSUFFZ0FFRUJjallDQkNBQklBQnFJQUEyQWdBUEN5QUNRWGh4SUFCcUlRQUNRQUpBSUFKQi93RkxEUUFnQXlnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0F5Z0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUFnc2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdCQ3lBREtBSVlJUWNDUUFKQUlBTW9BZ3dpQmlBRFJnMEFJQU1vQWdnaUFrRUFLQUtZMElDQUFFa2FJQVlnQWpZQ0NDQUNJQVkyQWd3TUFRc0NRQ0FEUVJScUlnSW9BZ0FpQkEwQUlBTkJFR29pQWlnQ0FDSUVEUUJCQUNFR0RBRUxBMEFnQWlFRklBUWlCa0VVYWlJQ0tBSUFJZ1FOQUNBR1FSQnFJUUlnQmlnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQjBVTkFBSkFBa0FnQXlBREtBSWNJZ1JCQW5SQnVOS0FnQUJxSWdJb0FnQkhEUUFnQWlBR05nSUFJQVlOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCSGR4TmdLTTBJQ0FBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBTkdHMm9nQmpZQ0FDQUdSUTBCQ3lBR0lBYzJBaGdDUUNBREtBSVFJZ0pGRFFBZ0JpQUNOZ0lRSUFJZ0JqWUNHQXNnQXlnQ0ZDSUNSUTBBSUFaQkZHb2dBallDQUNBQ0lBWTJBaGdMSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BVUVBSUFBMkFwRFFnSUFBRHdzZ0F5QUNRWDV4TmdJRUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUUxBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFQ0FrQUNRRUVBS0FLSTBJQ0FBQ0lFUVFFZ0FFRURkblFpQUhFTkFFRUFJQVFnQUhJMkFvalFnSUFBSUFJaEFBd0JDeUFDS0FJSUlRQUxJQUFnQVRZQ0RDQUNJQUUyQWdnZ0FTQUNOZ0lNSUFFZ0FEWUNDQThMUVI4aEFnSkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnSWdBa0dBL2o5cVFSQjJRUWh4SWdKMElnUWdCRUdBNEI5cVFSQjJRUVJ4SWdSMElnWWdCa0dBZ0E5cVFSQjJRUUp4SWdaMFFROTJJQUlnQkhJZ0JuSnJJZ0pCQVhRZ0FDQUNRUlZxZGtFQmNYSkJIR29oQWdzZ0FTQUNOZ0ljSUFGQ0FEY0NFQ0FDUVFKMFFialNnSUFBYWlFRUFrQUNRRUVBS0FLTTBJQ0FBQ0lHUVFFZ0FuUWlBM0VOQUNBRUlBRTJBZ0JCQUNBR0lBTnlOZ0tNMElDQUFDQUJJQVEyQWhnZ0FTQUJOZ0lJSUFFZ0FUWUNEQXdCQ3lBQVFRQkJHU0FDUVFGMmF5QUNRUjlHRzNRaEFpQUVLQUlBSVFZQ1FBTkFJQVlpQkNnQ0JFRjRjU0FBUmcwQklBSkJIWFloQmlBQ1FRRjBJUUlnQkNBR1FRUnhha0VRYWlJREtBSUFJZ1lOQUFzZ0F5QUJOZ0lBSUFFZ0JEWUNHQ0FCSUFFMkFnd2dBU0FCTmdJSURBRUxJQVFvQWdnaUFDQUJOZ0lNSUFRZ0FUWUNDQ0FCUVFBMkFoZ2dBU0FFTmdJTUlBRWdBRFlDQ0F0QkFFRUFLQUtvMElDQUFFRi9haUlCUVg4Z0FSczJBcWpRZ0lBQUN3c0VBQUFBQzA0QUFrQWdBQTBBUHdCQkVIUVBDd0pBSUFCQi8vOERjUTBBSUFCQmYwd05BQUpBSUFCQkVIWkFBQ0lBUVg5SERRQkJBRUV3TmdMNDA0Q0FBRUYvRHdzZ0FFRVFkQThMRU1xQWdJQUFBQXZ5QWdJRGZ3RitBa0FnQWtVTkFDQUFJQUU2QUFBZ0FpQUFhaUlEUVg5cUlBRTZBQUFnQWtFRFNRMEFJQUFnQVRvQUFpQUFJQUU2QUFFZ0EwRjlhaUFCT2dBQUlBTkJmbW9nQVRvQUFDQUNRUWRKRFFBZ0FDQUJPZ0FESUFOQmZHb2dBVG9BQUNBQ1FRbEpEUUFnQUVFQUlBQnJRUU54SWdScUlnTWdBVUgvQVhGQmdZS0VDR3dpQVRZQ0FDQURJQUlnQkd0QmZIRWlCR29pQWtGOGFpQUJOZ0lBSUFSQkNVa05BQ0FESUFFMkFnZ2dBeUFCTmdJRUlBSkJlR29nQVRZQ0FDQUNRWFJxSUFFMkFnQWdCRUVaU1EwQUlBTWdBVFlDR0NBRElBRTJBaFFnQXlBQk5nSVFJQU1nQVRZQ0RDQUNRWEJxSUFFMkFnQWdBa0ZzYWlBQk5nSUFJQUpCYUdvZ0FUWUNBQ0FDUVdScUlBRTJBZ0FnQkNBRFFRUnhRUmh5SWdWcklnSkJJRWtOQUNBQnJVS0JnSUNBRUg0aEJpQURJQVZxSVFFRFFDQUJJQVkzQXhnZ0FTQUdOd01RSUFFZ0JqY0RDQ0FCSUFZM0F3QWdBVUVnYWlFQklBSkJZR29pQWtFZlN3MEFDd3NnQUFzTGprZ0JBRUdBQ0F1R1NBRUFBQUFDQUFBQUF3QUFBQUFBQUFBQUFBQUFCQUFBQUFVQUFBQUFBQUFBQUFBQUFBWUFBQUFIQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J4ZFdWeWVRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgySnZaSGtBUTI5dWRHVnVkQzFNWlc1bmRHZ2diM1psY21ac2IzY0FRMmgxYm1zZ2MybDZaU0J2ZG1WeVpteHZkd0JTWlhOd2IyNXpaU0J2ZG1WeVpteHZkd0JKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnU0ZSVVVDOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnVWxSVFVDOTRMbmdnY21WeGRXVnpkQUJGZUhCbFkzUmxaQ0JUVDFWU1EwVWdiV1YwYUc5a0lHWnZjaUJKUTBVdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0JtY21GbmJXVnVkQ0J6ZEdGeWRBQkZlSEJsWTNSbFpDQmtiM1FBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl6ZEdGMGRYTUFTVzUyWVd4cFpDQnlaWE53YjI1elpTQnpkR0YwZFhNQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN3QlZjMlZ5SUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5eVpYTmxkR0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMmhsWVdSbGNtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZbVZuYVc1Z0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRYSnNYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDI1aGJXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJWeWRtVnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlIWmhiSFZsSUdOb1lYSUFTVzUyWVd4cFpDQm9aV0ZrWlhJZ1ptbGxiR1FnWTJoaGNnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzWmxjbk5wYjI0QVNXNTJZV3hwWkNCdGFXNXZjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV0ZxYjNJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lFTlNURVlnWVdaMFpYSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lFaFVWRkFnZG1WeWMybHZiZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjBiMnRsYmdCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNWeWJBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNuTWdhVzRnZFhKc0FGVnVaWGh3WldOMFpXUWdjM1JoY25RZ1kyaGhjaUJwYmlCMWNtd0FSRzkxWW14bElFQWdhVzRnZFhKc0FFVnRjSFI1SUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUVOdmJuUmxiblF0VEdWdVozUm9BRVIxY0d4cFkyRjBaU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWElnYVc0Z2RYSnNJSEJoZEdnQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnWTJGdUozUWdZbVVnY0hKbGMyVnVkQ0IzYVhSb0lGUnlZVzV6Wm1WeUxVVnVZMjlrYVc1bkFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklITnBlbVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZkbUZzZFdVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUIyWVd4MVpRQk5hWE56YVc1bklHVjRjR1ZqZEdWa0lFeEdJR0ZtZEdWeUlHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFnYUdWaFpHVnlJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdVZ2RtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCeGRXOTBaV1FnZG1Gc2RXVUFVR0YxYzJWa0lHSjVJRzl1WDJobFlXUmxjbk5mWTI5dGNHeGxkR1VBU1c1MllXeHBaQ0JGVDBZZ2MzUmhkR1VBYjI1ZmNtVnpaWFFnY0dGMWMyVUFiMjVmWTJoMWJtdGZhR1ZoWkdWeUlIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlltVm5hVzRnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbElIQmhkWE5sQUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDNWeWJGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOXRaWFJvYjJSZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsSUhCaGRYTmxBRlZ1Wlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2MzUmhjblFnYkdsdVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nYm1GdFpRQlFZWFZ6WlNCdmJpQkRUMDVPUlVOVUwxVndaM0poWkdVQVVHRjFjMlVnYjI0Z1VGSkpMMVZ3WjNKaFpHVUFSWGh3WldOMFpXUWdTRlJVVUM4eUlFTnZibTVsWTNScGIyNGdVSEpsWm1GalpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyMWxkR2h2WkFCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnRaWFJvYjJRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmWm1sbGJHUUFVR0YxYzJWa0FFbHVkbUZzYVdRZ2QyOXlaQ0JsYm1OdmRXNTBaWEpsWkFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JsYm1OdmRXNTBaWEpsWkFCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5qYUdWdFlRQlNaWEYxWlhOMElHaGhjeUJwYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFBVTFkSlZFTklYMUJTVDFoWkFGVlRSVjlRVWs5WVdRQk5TMEZEVkVsV1NWUlpBRlZPVUZKUFEwVlRVMEZDVEVWZlJVNVVTVlJaQUVOUFVGa0FUVTlXUlVSZlVFVlNUVUZPUlU1VVRGa0FWRTlQWDBWQlVreFpBRTVQVkVsR1dRQkdRVWxNUlVSZlJFVlFSVTVFUlU1RFdRQkNRVVJmUjBGVVJWZEJXUUJRVEVGWkFGQlZWQUJEU0VWRFMwOVZWQUJIUVZSRlYwRlpYMVJKVFVWUFZWUUFVa1ZSVlVWVFZGOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlEwOU9Ua1ZEVkY5VVNVMUZUMVZVQUVOUFRrNUZRMVJKVDA1ZlZFbE5SVTlWVkFCTVQwZEpUbDlVU1UxRlQxVlVBRTVGVkZkUFVrdGZVa1ZCUkY5VVNVMUZUMVZVQUZCUFUxUUFUVWxUUkVsU1JVTlVSVVJmVWtWUlZVVlRWQUJEVEVsRlRsUmZRMHhQVTBWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlNVDBGRVgwSkJURUZPUTBWRVgxSkZVVlZGVTFRQVFrRkVYMUpGVVZWRlUxUUFTRlJVVUY5U1JWRlZSVk5VWDFORlRsUmZWRTlmU0ZSVVVGTmZVRTlTVkFCU1JWQlBVbFFBU1UxZlFWOVVSVUZRVDFRQVVrVlRSVlJmUTA5T1ZFVk9WQUJPVDE5RFQwNVVSVTVVQUZCQlVsUkpRVXhmUTA5T1ZFVk9WQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVRWRUZPVkFCSVVFVmZRMEpmVWtWVFJWUUFSMFZVQUVoUVJWOVRWRkpKUTFRQVEwOU9Sa3hKUTFRQVZFVk5VRTlTUVZKWlgxSkZSRWxTUlVOVUFGQkZVazFCVGtWT1ZGOVNSVVJKVWtWRFZBQkRUMDVPUlVOVUFFMVZURlJKWDFOVVFWUlZVd0JJVUVWZlNVNVdRVXhKUkY5VFZFRlVWVk1BVkU5UFgwMUJUbGxmVWtWUlZVVlRWRk1BUlVGU1RGbGZTRWxPVkZNQVZVNUJWa0ZKVEVGQ1RFVmZSazlTWDB4RlIwRk1YMUpGUVZOUFRsTUFUMUJVU1U5T1V3QlRWMGxVUTBoSlRrZGZVRkpQVkU5RFQweFRBRlpCVWtsQlRsUmZRVXhUVDE5T1JVZFBWRWxCVkVWVEFFMVZURlJKVUV4RlgwTklUMGxEUlZNQVNVNVVSVkpPUVV4ZlUwVlNWa1ZTWDBWU1VrOVNBRmRGUWw5VFJWSldSVkpmVlU1TFRrOVhUbDlGVWxKUFVnQlNRVWxNUjFWT1gwVlNVazlTQUVsRVJVNVVTVlJaWDFCU1QxWkpSRVZTWDBGVlZFaEZUbFJKUTBGVVNVOU9YMFZTVWs5U0FGTlRURjlEUlZKVVNVWkpRMEZVUlY5RlVsSlBVZ0JKVGxaQlRFbEVYMWhmUms5U1YwRlNSRVZFWDBaUFVnQlRSVlJmVUVGU1FVMUZWRVZTQUVkRlZGOVFRVkpCVFVWVVJWSUFTRkJGWDFWVFJWSUFVMFZGWDA5VVNFVlNBRWhRUlY5RFFsOURTRlZPUzE5SVJVRkVSVklBVFV0RFFVeEZUa1JCVWdCVFJWUlZVQUJYUlVKZlUwVlNWa1ZTWDBsVFgwUlBWMDRBVkVWQlVrUlBWMDRBU0ZCRlgwTk1UMU5GUkY5RFQwNU9SVU5VU1U5T0FFaEZWVkpKVTFSSlExOUZXRkJKVWtGVVNVOU9BRVJKVTBOUFRrNUZRMVJGUkY5UFVFVlNRVlJKVDA0QVRrOU9YMEZWVkVoUFVrbFVRVlJKVmtWZlNVNUdUMUpOUVZSSlQwNEFTRkJGWDBsT1ZrRk1TVVJmVmtWU1UwbFBUZ0JJVUVWZlEwSmZUVVZUVTBGSFJWOUNSVWRKVGdCVFNWUkZYMGxUWDBaU1QxcEZUZ0JJVUVWZlNVNVdRVXhKUkY5SVJVRkVSVkpmVkU5TFJVNEFTVTVXUVV4SlJGOVVUMHRGVGdCR1QxSkNTVVJFUlU0QVJVNUlRVTVEUlY5WlQxVlNYME5CVEUwQVNGQkZYMGxPVmtGTVNVUmZWVkpNQUVKTVQwTkxSVVJmUWxsZlVFRlNSVTVVUVV4ZlEwOU9WRkpQVEFCTlMwTlBUQUJCUTB3QVNGQkZYMGxPVkVWU1RrRk1BRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBWZlZVNVBSa1pKUTBsQlRBQklVRVZmVDBzQVZVNU1TVTVMQUZWT1RFOURTd0JRVWtrQVVrVlVVbGxmVjBsVVNBQklVRVZmU1U1V1FVeEpSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQklVRVZmVlU1RldGQkZRMVJGUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJHVEZWVFNBQlFVazlRVUVGVVEwZ0FUUzFUUlVGU1EwZ0FWVkpKWDFSUFQxOU1UMDVIQUZCU1QwTkZVMU5KVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlRUlZKVFNWTlVSVTVVWDFkQlVrNUpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVhRVkpPU1U1SEFFaFFSVjlKVGxaQlRFbEVYMVJTUVU1VFJrVlNYMFZPUTA5RVNVNUhBRVY0Y0dWamRHVmtJRU5TVEVZQVNGQkZYMGxPVmtGTVNVUmZRMGhWVGt0ZlUwbGFSUUJOVDFaRkFFTlBUbFJKVGxWRkFFaFFSVjlEUWw5VFZFRlVWVk5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxWkZVbE5KVDA1ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFWU1RGOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVGtGTlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlRVMEZIUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVVNFOUVYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlJrbEZURVJmUTA5TlVFeEZWRVVBUkVWTVJWUkZBRWhRUlY5SlRsWkJURWxFWDBWUFJsOVRWRUZVUlFCSlRsWkJURWxFWDFOVFRGOURSVkpVU1VaSlEwRlVSUUJRUVZWVFJRQk9UMTlTUlZOUVQwNVRSUUJWVGxOVlVGQlBVbFJGUkY5TlJVUkpRVjlVV1ZCRkFFZFBUa1VBVGs5VVgwRkRRMFZRVkVGQ1RFVUFVMFZTVmtsRFJWOVZUa0ZXUVVsTVFVSk1SUUJTUVU1SFJWOU9UMVJmVTBGVVNWTkdTVUZDVEVVQVQxSkpSMGxPWDBsVFgxVk9Va1ZCUTBoQlFreEZBRkpGVTFCUFRsTkZYMGxUWDFOVVFVeEZBRkJWVWtkRkFFMUZVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVUFVa1ZSVlVWVFZGOUlSVUZFUlZKZlZFOVBYMHhCVWtkRkFGQkJXVXhQUVVSZlZFOVBYMHhCVWtkRkFFbE9VMVZHUmtsRFNVVk9WRjlUVkU5U1FVZEZBRWhRUlY5UVFWVlRSVVJmVlZCSFVrRkVSUUJJVUVWZlVFRlZVMFZFWDBneVgxVlFSMUpCUkVVQVUwOVZVa05GQUVGT1RrOVZUa05GQUZSU1FVTkZBRWhRUlY5VlRrVllVRVZEVkVWRVgxTlFRVU5GQUVSRlUwTlNTVUpGQUZWT1UxVkNVME5TU1VKRkFGSkZRMDlTUkFCSVVFVmZTVTVXUVV4SlJGOU5SVlJJVDBRQVRrOVVYMFpQVlU1RUFGQlNUMUJHU1U1RUFGVk9Ra2xPUkFCU1JVSkpUa1FBVlU1QlZWUklUMUpKV2tWRUFFMUZWRWhQUkY5T1QxUmZRVXhNVDFkRlJBQklWRlJRWDFaRlVsTkpUMDVmVGs5VVgxTlZVRkJQVWxSRlJBQkJURkpGUVVSWlgxSkZVRTlTVkVWRUFFRkRRMFZRVkVWRUFFNVBWRjlKVFZCTVJVMUZUbFJGUkFCTVQwOVFYMFJGVkVWRFZFVkVBRWhRUlY5RFVsOUZXRkJGUTFSRlJBQklVRVZmVEVaZlJWaFFSVU5VUlVRQVExSkZRVlJGUkFCSlRWOVZVMFZFQUVoUVJWOVFRVlZUUlVRQVZFbE5SVTlWVkY5UFEwTlZVa1ZFQUZCQldVMUZUbFJmVWtWUlZVbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gxSkZVVlZKVWtWRUFGQlNUMWhaWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRTVGVkZkUFVrdGZRVlZVU0VWT1ZFbERRVlJKVDA1ZlVrVlJWVWxTUlVRQVRFVk9SMVJJWDFKRlVWVkpVa1ZFQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlTUlZGVlNWSkZSQUJWVUVkU1FVUkZYMUpGVVZWSlVrVkVBRkJCUjBWZlJWaFFTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZSa0ZKVEVWRUFFVllVRVZEVkVGVVNVOU9YMFpCU1V4RlJBQlNSVlpCVEVsRVFWUkpUMDVmUmtGSlRFVkVBRk5UVEY5SVFVNUVVMGhCUzBWZlJrRkpURVZFQUV4UFEwdEZSQUJVVWtGT1UwWlBVazFCVkVsUFRsOUJVRkJNU1VWRUFFNVBWRjlOVDBSSlJrbEZSQUJPVDFSZlJWaFVSVTVFUlVRQVFrRk9SRmRKUkZSSVgweEpUVWxVWDBWWVEwVkZSRVZFQUZOSlZFVmZTVk5mVDFaRlVreFBRVVJGUkFCSVJVRkVBRVY0Y0dWamRHVmtJRWhVVkZBdkFBQmVFd0FBSmhNQUFEQVFBQUR3RndBQW5STUFBQlVTQUFBNUZ3QUE4QklBQUFvUUFBQjFFZ0FBclJJQUFJSVRBQUJQRkFBQWZ4QUFBS0FWQUFBakZBQUFpUklBQUlzVUFBQk5GUUFBMUJFQUFNOFVBQUFRR0FBQXlSWUFBTndXQUFEQkVRQUE0QmNBQUxzVUFBQjBGQUFBZkJVQUFPVVVBQUFJRndBQUh4QUFBR1VWQUFDakZBQUFLQlVBQUFJVkFBQ1pGUUFBTEJBQUFJc1pBQUJQRHdBQTFBNEFBR29RQUFET0VBQUFBaGNBQUlrT0FBQnVFd0FBSEJNQUFHWVVBQUJXRndBQXdSTUFBTTBUQUFCc0V3QUFhQmNBQUdZWEFBQmZGd0FBSWhNQUFNNFBBQUJwRGdBQTJBNEFBR01XQUFETEV3QUFxZzRBQUNnWEFBQW1Gd0FBeFJNQUFGMFdBQURvRVFBQVp4TUFBR1VUQUFEeUZnQUFjeE1BQUIwWEFBRDVGZ0FBOHhFQUFNOE9BQURPRlFBQURCSUFBTE1SQUFDbEVRQUFZUkFBQURJWEFBQzdFd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUF3QUVBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCc2IzTmxaV1Z3TFdGc2FYWmxBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUZqYUhWdWEyVmtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRQUJBUUVCQVFBQUFRRUFBUUVBQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0FBQUFBQUFBQUFBQUFBQUFBQUFISmhibk5tWlhJdFpXNWpiMlJwYm1kd1ozSmhaR1VOQ2cwS0RRcFRUUTBLRFFwVVZGQXZRMFV2VkZOUUx3QUFBQUFBQUFBQUFBQUFBQUVDQUFFREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFVQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQkFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBZ0FBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFNVBWVTVEUlVWRFMwOVZWRTVGUTFSRlZFVkRVa2xDUlV4VlUwaEZWRVZCUkZORlFWSkRTRkpIUlVOVVNWWkpWRmxNUlU1RVFWSldSVTlVU1VaWlVGUkpUMDVUUTBoVFJVRlpVMVJCVkVOSVIwVlBVa1JKVWtWRFZFOVNWRkpEU0ZCQlVrRk5SVlJGVWxWU1EwVkNVME5TU1VKRlFWSkVUMWRPUVVORlNVNUVUa3REUzFWQ1UwTlNTVUpGU0ZSVVVDOUJSRlJRTHc9PSdcbiIsICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4ndXNlIHN0cmljdCdcblxuLy8gRXh0cmFjdGVkIGZyb20gbm9kZS9saWIvaW50ZXJuYWwvZml4ZWRfcXVldWUuanNcblxuLy8gQ3VycmVudGx5IG9wdGltYWwgcXVldWUgc2l6ZSwgdGVzdGVkIG9uIFY4IDYuMCAtIDYuNi4gTXVzdCBiZSBwb3dlciBvZiB0d28uXG5jb25zdCBrU2l6ZSA9IDIwNDg7XG5jb25zdCBrTWFzayA9IGtTaXplIC0gMTtcblxuLy8gVGhlIEZpeGVkUXVldWUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgZml4ZWQtc2l6ZVxuLy8gY2lyY3VsYXIgYnVmZmVycy4gSXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczpcbi8vXG4vLyAgaGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsXG4vLyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi8vICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyA8LS0tLS1cXCAgICAgICArLS0tLS0tLS0tLS0rIDwtLS0tLS1cXCAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgIFxcLS0tLS0gfCAgIG5leHQgICAgfCAgICAgICAgIFxcLS0tLS0tLSB8ICAgbmV4dCAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfCA8LS0gdG9wICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIE9yLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIsIGl0IGxvb2tzIHNvbWV0aGluZ1xuLy8gbGlrZSBlaXRoZXIgb2YgdGhlc2U6XG4vL1xuLy8gIGhlYWQgICB0YWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCAgIHRhaWxcbi8vICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfFxuLy8gICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICB2XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW251bGxdICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgICAgICAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBBZGRpbmcgYSB2YWx1ZSBtZWFucyBtb3ZpbmcgYHRvcGAgZm9yd2FyZCBieSBvbmUsIHJlbW92aW5nIG1lYW5zXG4vLyBtb3ZpbmcgYGJvdHRvbWAgZm9yd2FyZCBieSBvbmUuIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQsIHRoZSBxdWV1ZVxuLy8gd3JhcHMgYXJvdW5kLlxuLy9cbi8vIFdoZW4gYHRvcCA9PT0gYm90dG9tYCB0aGUgY3VycmVudCBxdWV1ZSBpcyBlbXB0eSBhbmQgd2hlblxuLy8gYHRvcCArIDEgPT09IGJvdHRvbWAgaXQncyBmdWxsLiBUaGlzIHdhc3RlcyBhIHNpbmdsZSBzcGFjZSBvZiBzdG9yYWdlXG4vLyBidXQgYWxsb3dzIG11Y2ggcXVpY2tlciBjaGVja3MuXG5cbmNsYXNzIEZpeGVkQ2lyY3VsYXJCdWZmZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJvdHRvbSA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheShrU2l6ZSk7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGlzRnVsbCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnRvcCArIDEpICYga01hc2spID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIHRoaXMubGlzdFt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0W3RoaXMuYm90dG9tXTtcbiAgICBpZiAobmV4dEl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHRoaXMubGlzdFt0aGlzLmJvdHRvbV0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSAodGhpcy5ib3R0b20gKyAxKSAmIGtNYXNrO1xuICAgIHJldHVybiBuZXh0SXRlbTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufTtcbiIsICJjb25zdCB7IGtGcmVlLCBrQ29ubmVjdGVkLCBrUGVuZGluZywga1F1ZXVlZCwga1J1bm5pbmcsIGtTaXplIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBwYXJzZU9yaWdpbiB9ID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbmZ1bmN0aW9uIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciAoYSwgYikge1xuICBpZiAoYiA9PT0gMCkgcmV0dXJuIGFcbiAgcmV0dXJuIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvcihiLCBhICUgYilcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICBmb3IgKGNvbnN0IHVwc3RyZWFtIG9mIHVwc3RyZWFtcykge1xuICAgICAgdGhpcy5hZGRVcHN0cmVhbSh1cHN0cmVhbSlcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICB9XG5cbiAgYWRkVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBpZiAodGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0ZhY3RvcnldKHVwc3RyZWFtT3JpZ2luLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzW2tPcHRpb25zXSkpXG5cbiAgICB0aGlzW2tBZGRDbGllbnRdKHBvb2wpXG4gICAgcG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1pbih0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdLCBwb29sW2tXZWlnaHRdICsgdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICB9KVxuXG4gICAgcG9vbC5vbignY29ubmVjdGlvbkVycm9yJywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdkaXNjb25uZWN0JywgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IGFyZ3NbMl1cbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdVTkRfRVJSX1NPQ0tFVCcpIHtcbiAgICAgICAgLy8gZGVjcmVhc2UgdGhlIHdlaWdodCBvZiB0aGUgcG9vbC5cbiAgICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICBjbGllbnRba1dlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cyAoKSB7XG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHRoaXNba0NsaWVudHNdLm1hcChwID0+IHBba1dlaWdodF0pLnJlZHVjZShnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IsIDApXG4gIH1cblxuICByZW1vdmVVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpc1trUmVtb3ZlQ2xpZW50XShwb29sKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgdXBzdHJlYW1zICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11cbiAgICAgIC5maWx0ZXIoZGlzcGF0Y2hlciA9PiBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJiBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHApID0+IHBba1VybF0ub3JpZ2luKVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgLy8gV2UgdmFsaWRhdGUgdGhhdCBwb29scyBpcyBncmVhdGVyIHRoYW4gMCxcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byB3YWl0IHVudGlsIGFuIHVwc3RyZWFtXG4gICAgLy8gaXMgYWRkZWQsIHdoaWNoIG1pZ2h0IG5ldmVyIGhhcHBlbi5cbiAgICBpZiAodGhpc1trQ2xpZW50c10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFsbENsaWVudHNCdXN5ID0gdGhpc1trQ2xpZW50c10ubWFwKHBvb2wgPT4gcG9vbFtrTmVlZERyYWluXSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpXG5cbiAgICBpZiAoYWxsQ2xpZW50c0J1c3kpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBjb3VudGVyID0gMFxuXG4gICAgbGV0IG1heFdlaWdodEluZGV4ID0gdGhpc1trQ2xpZW50c10uZmluZEluZGV4KHBvb2wgPT4gIXBvb2xba05lZWREcmFpbl0pXG5cbiAgICB3aGlsZSAoY291bnRlcisrIDwgdGhpc1trQ2xpZW50c10ubGVuZ3RoKSB7XG4gICAgICB0aGlzW2tJbmRleF0gPSAodGhpc1trSW5kZXhdICsgMSkgJSB0aGlzW2tDbGllbnRzXS5sZW5ndGhcbiAgICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXVt0aGlzW2tJbmRleF1dXG5cbiAgICAgIC8vIGZpbmQgcG9vbCBpbmRleCB3aXRoIHRoZSBsYXJnZXN0IHdlaWdodFxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF0gJiYgIXBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tJbmRleF1cbiAgICAgIH1cblxuICAgICAgLy8gZGVjcmVhc2UgdGhlIGN1cnJlbnQgd2VpZ2h0IGV2ZXJ5IGB0aGlzW2tDbGllbnRzXS5sZW5ndGhgLlxuICAgICAgaWYgKHRoaXNba0luZGV4XSA9PT0gMCkge1xuICAgICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgd2VpZ2h0IHRvIHRoZSBuZXh0IGxvd2VyIHdlaWdodC5cbiAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAtIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl1cblxuICAgICAgICBpZiAodGhpc1trQ3VycmVudFdlaWdodF0gPD0gMCkge1xuICAgICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+PSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAmJiAoIXBvb2xba05lZWREcmFpbl0pKSB7XG4gICAgICAgIHJldHVybiBwb29sXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF1cbiAgICB0aGlzW2tJbmRleF0gPSBtYXhXZWlnaHRJbmRleFxuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhbGFuY2VkUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZTogb25seSBmb3IgTm9kZSAxMiAqL1xuXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jbGFzcyBDb21wYXRXZWFrUmVmIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBkZXJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVba0Nvbm5lY3RlZF0gPT09IDAgJiYgdGhpcy52YWx1ZVtrU2l6ZV0gPT09IDBcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMudmFsdWVcbiAgfVxufVxuXG5jbGFzcyBDb21wYXRGaW5hbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoZmluYWxpemVyKSB7XG4gICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXJcbiAgfVxuXG4gIHJlZ2lzdGVyIChkaXNwYXRjaGVyLCBrZXkpIHtcbiAgICBpZiAoZGlzcGF0Y2hlci5vbikge1xuICAgICAgZGlzcGF0Y2hlci5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgaWYgKGRpc3BhdGNoZXJba0Nvbm5lY3RlZF0gPT09IDAgJiYgZGlzcGF0Y2hlcltrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgICB0aGlzLmZpbmFsaXplcihrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICAgIHJldHVybiB7XG4gICAgICBXZWFrUmVmOiBDb21wYXRXZWFrUmVmLFxuICAgICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IENvbXBhdEZpbmFsaXplclxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFdlYWtSZWY6IGdsb2JhbC5XZWFrUmVmIHx8IENvbXBhdFdlYWtSZWYsXG4gICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSB8fCBDb21wYXRGaW5hbGl6ZXJcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbUZyb20sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5sZXQgQmxvYlxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2Fib3J0JylcbmNvbnN0IGtDb250ZW50VHlwZSA9IFN5bWJvbCgna0NvbnRlbnRUeXBlJylcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGhpZ2hXYXRlck1hcmsgPSA2NCAqIDEwMjQgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogcmVzdW1lLFxuICAgICAgaGlnaFdhdGVyTWFya1xuICAgIH0pXG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gZmFsc2VcblxuICAgIHRoaXNba0Fib3J0XSA9IGFib3J0XG4gICAgdGhpc1trQ29uc3VtZV0gPSBudWxsXG4gICAgdGhpc1trQm9keV0gPSBudWxsXG4gICAgdGhpc1trQ29udGVudFR5cGVdID0gY29udGVudFR5cGVcblxuICAgIC8vIElzIHN0cmVhbSBiZWluZyBjb25zdW1lZCB0aHJvdWdoIFJlYWRhYmxlIEFQST9cbiAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGF2b2lkIGNoZWNraW5nXG4gICAgLy8gZm9yICdkYXRhJyBhbmQgJ3JlYWRhYmxlJyBsaXN0ZW5lcnMgaW4gdGhlIGhvdCBwYXRoXG4gICAgLy8gaW5zaWRlIHB1c2goKS5cbiAgICB0aGlzW2tSZWFkaW5nXSA9IGZhbHNlXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpc1trQWJvcnRdKClcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZGVzdHJveShlcnIpXG4gIH1cblxuICBlbWl0IChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAvLyBOb2RlIDwgMTYuN1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZW1pdChldiwgLi4uYXJncylcbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwgJiYgdGhpcy5yZWFkYWJsZUxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3VtZVB1c2godGhpc1trQ29uc3VtZV0sIGNodW5rKVxuICAgICAgcmV0dXJuIHRoaXNba1JlYWRpbmddID8gc3VwZXIucHVzaChjaHVuaykgOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wdXNoKGNodW5rKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LXRleHRcbiAgYXN5bmMgdGV4dCAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ3RleHQnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWpzb25cbiAgYXN5bmMganNvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2pzb24nKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJsb2JcbiAgYXN5bmMgYmxvYiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2Jsb2InKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWFycmF5YnVmZmVyXG4gIGFzeW5jIGFycmF5QnVmZmVyICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWZvcm1kYXRhXG4gIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQuXG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5dXNlZFxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHRoaXMpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keVxuICBnZXQgYm9keSAoKSB7XG4gICAgaWYgKCF0aGlzW2tCb2R5XSkge1xuICAgICAgdGhpc1trQm9keV0gPSBSZWFkYWJsZVN0cmVhbUZyb20odGhpcylcbiAgICAgIGlmICh0aGlzW2tDb25zdW1lXSkge1xuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBmb3JjZSBhIGxvY2s/XG4gICAgICAgIHRoaXNba0JvZHldLmdldFJlYWRlcigpIC8vIEVuc3VyZSBzdHJlYW0gaXMgbG9ja2VkLlxuICAgICAgICBhc3NlcnQodGhpc1trQm9keV0ubG9ja2VkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trQm9keV1cbiAgfVxuXG4gIGR1bXAgKG9wdHMpIHtcbiAgICBsZXQgbGltaXQgPSBvcHRzICYmIE51bWJlci5pc0Zpbml0ZShvcHRzLmxpbWl0KSA/IG9wdHMubGltaXQgOiAyNjIxNDRcbiAgICBjb25zdCBzaWduYWwgPSBvcHRzICYmIG9wdHMuc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwnKVxuICAgICAgICB9XG4gICAgICAgIHV0aWwudGhyb3dJZkFib3J0ZWQoc2lnbmFsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25hbExpc3RlbmVyQ2xlYW51cCA9IHNpZ25hbFxuICAgICAgICA/IHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgICA6IG5vb3BcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbExpc3RlbmVyQ2xlYW51cCgpXG4gICAgICAgICAgaWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24gfHwgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKSwgeyBuYW1lOiAnQWJvcnRFcnJvcicgfSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgfVxuXG4gIGFzc2VydCghc3RyZWFtW2tDb25zdW1lXSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICB0eXBlLFxuICAgICAgc3RyZWFtLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGJvZHk6IFtdXG4gICAgfVxuXG4gICAgc3RyZWFtXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXNba0NvbnN1bWVdLmJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjb25zdW1lU3RhcnQsIHN0cmVhbVtrQ29uc3VtZV0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTdGFydCAoY29uc3VtZSkge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IF9yZWFkYWJsZVN0YXRlOiBzdGF0ZSB9ID0gY29uc3VtZS5zdHJlYW1cblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgIGNvbnN1bWVQdXNoKGNvbnN1bWUsIGNodW5rKVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRW5kIChjb25zdW1lKSB7XG4gIGNvbnN0IHsgdHlwZSwgYm9keSwgcmVzb2x2ZSwgc3RyZWFtLCBsZW5ndGggfSA9IGNvbnN1bWVcblxuICB0cnkge1xuICAgIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJlc29sdmUodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnanNvbicpIHtcbiAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcblxuICAgICAgbGV0IHBvcyA9IDBcbiAgICAgIGZvciAoY29uc3QgYnVmIG9mIGJvZHkpIHtcbiAgICAgICAgZHN0LnNldChidWYsIHBvcylcbiAgICAgICAgcG9zICs9IGJ1Zi5ieXRlTGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZHN0LmJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdibG9iJykge1xuICAgICAgaWYgKCFCbG9iKSB7XG4gICAgICAgIEJsb2IgPSByZXF1aXJlKCdidWZmZXInKS5CbG9iXG4gICAgICB9XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfVxuXG4gICAgY29uc3VtZUZpbmlzaChjb25zdW1lKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZVB1c2ggKGNvbnN1bWUsIGNodW5rKSB7XG4gIGNvbnN1bWUubGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICBjb25zdW1lLmJvZHkucHVzaChjaHVuaylcbn1cblxuZnVuY3Rpb24gY29uc3VtZUZpbmlzaCAoY29uc3VtZSwgZXJyKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBjb25zdW1lLnJlamVjdChlcnIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNvbnN1bWUudHlwZSA9IG51bGxcbiAgY29uc3VtZS5zdHJlYW0gPSBudWxsXG4gIGNvbnN1bWUucmVzb2x2ZSA9IG51bGxcbiAgY29uc3VtZS5yZWplY3QgPSBudWxsXG4gIGNvbnN1bWUubGVuZ3RoID0gMFxuICBjb25zdW1lLmJvZHkgPSBudWxsXG59XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHtcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgKHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH0pIHtcbiAgYXNzZXJ0KGJvZHkpXG5cbiAgbGV0IGNodW5rcyA9IFtdXG4gIGxldCBsaW1pdCA9IDBcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICBsaW1pdCArPSBjaHVuay5sZW5ndGhcbiAgICBpZiAobGltaXQgPiAxMjggKiAxMDI0KSB7XG4gICAgICBjaHVua3MgPSBudWxsXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0dXNDb2RlID09PSAyMDQgfHwgIWNvbnRlbnRUeXBlIHx8ICFjaHVua3MpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gUHJvY2VzcyBpbiBhIGZhbGxiYWNrIGlmIGVycm9yXG4gIH1cblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH1cbiIsICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFJlcXVlc3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IsIGhpZ2hXYXRlck1hcmsgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChoaWdoV2F0ZXJNYXJrICYmICh0eXBlb2YgaGlnaFdhdGVyTWFyayAhPT0gJ251bWJlcicgfHwgaGlnaFdhdGVyTWFyayA8IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoaWdoV2F0ZXJNYXJrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1JFUVVFU1QnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGFib3J0LCBjb250ZXh0LCByZXNwb25zZUhlYWRlcnMsIGhpZ2hXYXRlck1hcmsgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgIGNvbnN0IGJvZHkgPSBuZXcgUmVhZGFibGUoeyByZXN1bWUsIGFib3J0LCBjb250ZW50VHlwZSwgaGlnaFdhdGVyTWFyayB9KVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICB0aGlzLnJlcyA9IGJvZHlcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgICAgeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycywgdGhpcy50cmFpbGVycylcblxuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIGJvZHksIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgUmVxdWVzdEhhbmRsZXIob3B0cywgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZSAmJiByZXMuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmVhbVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jbGFzcyBVcGdyYWRlSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1VQR1JBREUnKVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzQ29kZSwgMTAxKVxuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGdyYWRlIChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1cGdyYWRlLmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVwZ3JhZGVIYW5kbGVyID0gbmV3IFVwZ3JhZGVIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICB1cGdyYWRlOiBvcHRzLnByb3RvY29sIHx8ICdXZWJzb2NrZXQnXG4gICAgfSwgdXBncmFkZUhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZ3JhZGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNsYXNzIE1vY2tOb3RNYXRjaGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBNb2NrTm90TWF0Y2hlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNb2NrTm90TWF0Y2hlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcydcbiAgICB0aGlzLmNvZGUgPSAnVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1vY2tOb3RNYXRjaGVkRXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtBZ2VudDogU3ltYm9sKCdhZ2VudCcpLFxuICBrT3B0aW9uczogU3ltYm9sKCdvcHRpb25zJyksXG4gIGtGYWN0b3J5OiBTeW1ib2woJ2ZhY3RvcnknKSxcbiAga0Rpc3BhdGNoZXM6IFN5bWJvbCgnZGlzcGF0Y2hlcycpLFxuICBrRGlzcGF0Y2hLZXk6IFN5bWJvbCgnZGlzcGF0Y2gga2V5JyksXG4gIGtEZWZhdWx0SGVhZGVyczogU3ltYm9sKCdkZWZhdWx0IGhlYWRlcnMnKSxcbiAga0RlZmF1bHRUcmFpbGVyczogU3ltYm9sKCdkZWZhdWx0IHRyYWlsZXJzJyksXG4gIGtDb250ZW50TGVuZ3RoOiBTeW1ib2woJ2NvbnRlbnQgbGVuZ3RoJyksXG4gIGtNb2NrQWdlbnQ6IFN5bWJvbCgnbW9jayBhZ2VudCcpLFxuICBrTW9ja0FnZW50U2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgc2V0JyksXG4gIGtNb2NrQWdlbnRHZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBnZXQnKSxcbiAga01vY2tEaXNwYXRjaDogU3ltYm9sKCdtb2NrIGRpc3BhdGNoJyksXG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrT3JpZ2luYWxDbG9zZTogU3ltYm9sKCdvcmlnaW5hbCBhZ2VudCBjbG9zZScpLFxuICBrT3JpZ2luOiBTeW1ib2woJ29yaWdpbicpLFxuICBrSXNNb2NrQWN0aXZlOiBTeW1ib2woJ2lzIG1vY2sgYWN0aXZlJyksXG4gIGtOZXRDb25uZWN0OiBTeW1ib2woJ25ldCBjb25uZWN0JyksXG4gIGtHZXROZXRDb25uZWN0OiBTeW1ib2woJ2dldCBuZXQgY29ubmVjdCcpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL2ZldGNoL2luZGV4LmpzI0wxODExXG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwob3B0cy5wYXRoLCAnZGF0YTovLycpXG4gICAgICAgIG9wdHMucGF0aCA9IHBhcnNlZFVSTC5wYXRobmFtZSArIHBhcnNlZFVSTC5zZWFyY2hcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgIH1cblxuICAgIHRoaXNba0Rpc3BhdGNoS2V5XSA9IGJ1aWxkS2V5KG9wdHMpXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBtb2NrRGlzcGF0Y2hlc1xuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IHt9XG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHt9XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBmYWxzZVxuICB9XG5cbiAgY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHN0YXR1c0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0YXR1c0NvZGUgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdkYXRhIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2VPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5RGF0YSkge1xuICAgIC8vIFZhbHVlcyBvZiByZXBseSBhcmVuJ3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyBhcyB0aGV5XG4gICAgLy8gY2FuIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHJlcGx5IGNhbGxiYWNrIGlzIGludm9rZWQuXG4gICAgaWYgKHR5cGVvZiByZXBseURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ2xsIGZpcnN0IHdyYXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGluIGFub3RoZXIgZnVuY3Rpb24sXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvcGVybHkgcmVzb2x2ZSB0aGUgZGF0YSBmcm9tIHRoZSBjYWxsYmFja1xuICAgICAgLy8gd2hlbiBpbnZva2VkLlxuICAgICAgY29uc3Qgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2sgPSAob3B0cykgPT4ge1xuICAgICAgICAvLyBPdXIgcmVwbHkgb3B0aW9ucyBjYWxsYmFjayBjb250YWlucyB0aGUgcGFyYW1ldGVyIGZvciBzdGF0dXNDb2RlLCBkYXRhIGFuZCBvcHRpb25zLlxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSByZXBseURhdGEob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwbHkgb3B0aW9ucyBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBvYmplY3QnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9IH0gPSByZXNvbHZlZERhdGFcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGltbWVkaWF0ZWx5IHdlIHJldHVybiB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhpcyBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdXN1YWwgZGlzcGF0Y2ggZGF0YSwgYnV0IHRoaXMgdGltZSBzZXQgdGhlIGRhdGEgcGFyYW1ldGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgZGF0YS5cbiAgICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjaylcbiAgICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgICB9XG5cbiAgICAvLyBXZSBjYW4gaGF2ZSBlaXRoZXIgb25lIG9yIHRocmVlIHBhcmFtZXRlcnMsIGlmIHdlIGdldCBoZXJlLFxuICAgIC8vIHdlIHNob3VsZCBoYXZlIDEtMyBwYXJhbWV0ZXJzLiBTbyB3ZSBzcHJlYWQgdGhlIGFyZ3VtZW50cyBvZlxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSByZXBseURhdGEgd2lsbCBhbHdheXNcbiAgICAvLyBqdXN0IGJlIHRoZSBzdGF0dXNDb2RlLlxuICAgIGNvbnN0IFtzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9XSA9IFsuLi5hcmd1bWVudHNdXG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi4vY2xpZW50JylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja0NsaWVudCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBDbGllbnQgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja0NsaWVudCBleHRlbmRzIENsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tDbGllbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNpbmd1bGFycyA9IHtcbiAgcHJvbm91bjogJ2l0JyxcbiAgaXM6ICdpcycsXG4gIHdhczogJ3dhcycsXG4gIHRoaXM6ICd0aGlzJ1xufVxuXG5jb25zdCBwbHVyYWxzID0ge1xuICBwcm9ub3VuOiAndGhleScsXG4gIGlzOiAnYXJlJyxcbiAgd2FzOiAnd2VyZScsXG4gIHRoaXM6ICd0aGVzZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQbHVyYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICB0aGlzLnNpbmd1bGFyID0gc2luZ3VsYXJcbiAgICB0aGlzLnBsdXJhbCA9IHBsdXJhbFxuICB9XG5cbiAgcGx1cmFsaXplIChjb3VudCkge1xuICAgIGNvbnN0IG9uZSA9IGNvdW50ID09PSAxXG4gICAgY29uc3Qga2V5cyA9IG9uZSA/IHNpbmd1bGFycyA6IHBsdXJhbHNcbiAgICBjb25zdCBub3VuID0gb25lID8gdGhpcy5zaW5ndWxhciA6IHRoaXMucGx1cmFsXG4gICAgcmV0dXJuIHsgLi4ua2V5cywgY291bnQsIG5vdW4gfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVHJhbnNmb3JtIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBDb25zb2xlIH0gPSByZXF1aXJlKCdjb25zb2xlJylcblxuLyoqXG4gKiBHZXRzIHRoZSBvdXRwdXQgb2YgYGNvbnNvbGUudGFibGUoXHUyMDI2KWAgYXMgYSBzdHJpbmcuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGRpc2FibGVDb2xvcnMgfSA9IHt9KSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcbiAgICAgIHRyYW5zZm9ybSAoY2h1bmssIF9lbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBDb25zb2xlKHtcbiAgICAgIHN0ZG91dDogdGhpcy50cmFuc2Zvcm0sXG4gICAgICBpbnNwZWN0T3B0aW9uczoge1xuICAgICAgICBjb2xvcnM6ICFkaXNhYmxlQ29sb3JzICYmICFwcm9jZXNzLmVudi5DSVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmb3JtYXQgKHBlbmRpbmdJbnRlcmNlcHRvcnMpIHtcbiAgICBjb25zdCB3aXRoUHJldHR5SGVhZGVycyA9IHBlbmRpbmdJbnRlcmNlcHRvcnMubWFwKFxuICAgICAgKHsgbWV0aG9kLCBwYXRoLCBkYXRhOiB7IHN0YXR1c0NvZGUgfSwgcGVyc2lzdCwgdGltZXMsIHRpbWVzSW52b2tlZCwgb3JpZ2luIH0pID0+ICh7XG4gICAgICAgIE1ldGhvZDogbWV0aG9kLFxuICAgICAgICBPcmlnaW46IG9yaWdpbixcbiAgICAgICAgUGF0aDogcGF0aCxcbiAgICAgICAgJ1N0YXR1cyBjb2RlJzogc3RhdHVzQ29kZSxcbiAgICAgICAgUGVyc2lzdGVudDogcGVyc2lzdCA/ICdcdTI3MDUnIDogJ1x1Mjc0QycsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ3VybCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtBZ2VudCA9IFN5bWJvbCgncHJveHkgYWdlbnQnKVxuY29uc3Qga0NsaWVudCA9IFN5bWJvbCgncHJveHkgY2xpZW50JylcbmNvbnN0IGtQcm94eUhlYWRlcnMgPSBTeW1ib2woJ3Byb3h5IGhlYWRlcnMnKVxuY29uc3Qga1JlcXVlc3RUbHMgPSBTeW1ib2woJ3JlcXVlc3QgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtQcm94eVRscyA9IFN5bWJvbCgncHJveHkgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtDb25uZWN0RW5kcG9pbnQgPSBTeW1ib2woJ2Nvbm5lY3QgZW5kcG9pbnQgZnVuY3Rpb24nKVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvdG9jb2xQb3J0IChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbn1cblxuZnVuY3Rpb24gYnVpbGRQcm94eU9wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gIH1cblxuICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB1cmk6IG9wdHMudXJpLFxuICAgIHByb3RvY29sOiBvcHRzLnByb3RvY29sIHx8ICdodHRwcydcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcbiAgICB0aGlzW2tQcm94eV0gPSBidWlsZFByb3h5T3B0aW9ucyhvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gICAgfVxuXG4gICAgY29uc3QgeyBjbGllbnRGYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnkgfSA9IG9wdHNcblxuICAgIGlmICh0eXBlb2YgY2xpZW50RmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLmNsaWVudEZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trUmVxdWVzdFRsc10gPSBvcHRzLnJlcXVlc3RUbHNcbiAgICB0aGlzW2tQcm94eVRsc10gPSBvcHRzLnByb3h5VGxzXG4gICAgdGhpc1trUHJveHlIZWFkZXJzXSA9IG9wdHMuaGVhZGVycyB8fCB7fVxuXG4gICAgY29uc3QgcmVzb2x2ZWRVcmwgPSBuZXcgVVJMKG9wdHMudXJpKVxuICAgIGNvbnN0IHsgb3JpZ2luLCBwb3J0LCBob3N0LCB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlc29sdmVkVXJsXG5cbiAgICBpZiAob3B0cy5hdXRoICYmIG9wdHMudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5hdXRoIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3B0cy50b2tlbicpXG4gICAgfSBlbHNlIGlmIChvcHRzLmF1dGgpIHtcbiAgICAgIC8qIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBvcHRzLnRva2VuICovXG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtvcHRzLmF1dGh9YFxuICAgIH0gZWxzZSBpZiAob3B0cy50b2tlbikge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gb3B0cy50b2tlblxuICAgIH0gZWxzZSBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2RlY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucHJveHlUbHMgfSlcbiAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnJlcXVlc3RUbHMgfSlcbiAgICB0aGlzW2tDbGllbnRdID0gY2xpZW50RmFjdG9yeShyZXNvbHZlZFVybCwgeyBjb25uZWN0IH0pXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZEhvc3QgPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRIb3N0ICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZEhvc3QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgeyBob3N0IH0gPSBuZXcgVVJMKG9wdHMub3JpZ2luKVxuICAgIGNvbnN0IGhlYWRlcnMgPSBidWlsZEhlYWRlcnMob3B0cy5oZWFkZXJzKVxuICAgIHRocm93SWZQcm94eUF1dGhJc1NlbnQoaGVhZGVycylcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICBob3N0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCB7IGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFJlcXVlc3RSZXRyeUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGlzRGlzdHVyYmVkLCBwYXJzZUhlYWRlcnMsIHBhcnNlUmFuZ2VIZWFkZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIgKHJldHJ5QWZ0ZXIpIHtcbiAgY29uc3QgY3VycmVudCA9IERhdGUubm93KClcbiAgY29uc3QgZGlmZiA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpLmdldFRpbWUoKSAtIGN1cnJlbnRcblxuICByZXR1cm4gZGlmZlxufVxuXG5jbGFzcyBSZXRyeUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcnMpIHtcbiAgICBjb25zdCB7IHJldHJ5T3B0aW9ucywgLi4uZGlzcGF0Y2hPcHRzIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgLy8gUmV0cnkgc2NvcGVkXG4gICAgICByZXRyeTogcmV0cnlGbixcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICAvLyBSZXNwb25zZSBzY29wZWRcbiAgICAgIG1ldGhvZHMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgcmV0cnlBZnRlcixcbiAgICAgIHN0YXR1c0NvZGVzXG4gICAgfSA9IHJldHJ5T3B0aW9ucyA/PyB7fVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGhhbmRsZXJzLmRpc3BhdGNoXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcnMuaGFuZGxlclxuICAgIHRoaXMub3B0cyA9IGRpc3BhdGNoT3B0c1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICB0aW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMuc3RhcnQgPSAwXG4gICAgdGhpcy5lbmQgPSBudWxsXG4gICAgdGhpcy5ldGFnID0gbnVsbFxuICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgLy8gSGFuZGxlIHBvc3NpYmxlIG9uQ29ubmVjdCBkdXBsaWNhdGlvblxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QocmVhc29uID0+IHtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcbiAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgIHRoaXMuYWJvcnQocmVhc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb25cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCgpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uVXBncmFkZSkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICB9XG5cbiAgc3RhdGljIFtrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSAoZXJyLCB7IHN0YXRlLCBvcHRzIH0sIGNiKSB7XG4gICAgY29uc3QgeyBzdGF0dXNDb2RlLCBjb2RlLCBoZWFkZXJzIH0gPSBlcnJcbiAgICBjb25zdCB7IG1ldGhvZCwgcmV0cnlPcHRpb25zIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIHN0YXR1c0NvZGVzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIG1ldGhvZHNcbiAgICB9ID0gcmV0cnlPcHRpb25zXG4gICAgbGV0IHsgY291bnRlciwgY3VycmVudFRpbWVvdXQgfSA9IHN0YXRlXG5cbiAgICBjdXJyZW50VGltZW91dCA9XG4gICAgICBjdXJyZW50VGltZW91dCAhPSBudWxsICYmIGN1cnJlbnRUaW1lb3V0ID4gMCA/IGN1cnJlbnRUaW1lb3V0IDogdGltZW91dFxuXG4gICAgLy8gQW55IGNvZGUgdGhhdCBpcyBub3QgYSBVbmRpY2kncyBvcmlnaW5hdGVkIGFuZCBhbGxvd2VkIHRvIHJldHJ5XG4gICAgaWYgKFxuICAgICAgY29kZSAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfUkVRX1JFVFJZJyAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJyAmJlxuICAgICAgIWVycm9yQ29kZXMuaW5jbHVkZXMoY29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIG1ldGhvZCBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRob2RzKSAmJiAhbWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBzdGF0dXMgY29kZSBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IHN0YXR1cyBjb2RlIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHN0YXR1c0NvZGUgIT0gbnVsbCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0dXNDb2RlcykgJiZcbiAgICAgICFzdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgbWF4IG51bWJlciBvZiByZXRyaWVzXG4gICAgaWYgKGNvdW50ZXIgPiBtYXhSZXRyaWVzKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgIT0gbnVsbCAmJiBoZWFkZXJzWydyZXRyeS1hZnRlciddXG4gICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHtcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBOdW1iZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBpc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKGN1cnJlbnRUaW1lb3V0ICogdGltZW91dEZhY3RvciAqKiBjb3VudGVyLCBtYXhUaW1lb3V0KVxuXG4gICAgc3RhdGUuY3VycmVudFRpbWVvdXQgPSByZXRyeVRpbWVvdXRcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gY2IobnVsbCksIHJldHJ5VGltZW91dClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ICs9IDFcblxuICAgIGlmIChzdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDYpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gTGV0J3Mgc3RhcnQgd2l0aCBhIHdlYWsgZXRhZyBjaGVja1xuICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsICYmIHRoaXMuZXRhZyAhPT0gaGVhZGVycy5ldGFnKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdFVGFnIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gcmFuZ2VcblxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgc3RhcnQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmIHRoaXMuc3RhcnQgIT09IHN0YXJ0LFxuICAgICAgICAgICdjb250ZW50LXJhbmdlIG1pc21hdGNoJ1xuICAgICAgICApXG4gICAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoc3RhcnQpKVxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgZW5kICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGVuZCkgJiYgdGhpcy5lbmQgIT09IGVuZCxcbiAgICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydFxuICAgICAgICB0aGlzLmVuZCA9IGVuZFxuICAgICAgfVxuXG4gICAgICAvLyBXZSBtYWtlIG91ciBiZXN0IHRvIGNoZWNrcG9pbnQgdGhlIGJvZHkgZm9yIGZ1cnRoZXIgcmFuZ2UgaGVhZGVyc1xuICAgICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgICAgICAgdGhpcy5lbmQgPSBjb250ZW50TGVuZ3RoICE9IG51bGwgPyBOdW1iZXIoY29udGVudExlbmd0aCkgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgIHJlc3VtZSxcbiAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlPcHRzLnJldHJ5KFxuICAgICAgZXJyLFxuICAgICAge1xuICAgICAgICBzdGF0ZTogeyBjb3VudGVyOiB0aGlzLnJldHJ5Q291bnQrKywgY3VycmVudFRpbWVvdXQ6IHRoaXMucmV0cnlBZnRlciB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cy5oZWFkZXJzLFxuICAgICAgICAgICAgcmFuZ2U6IGBieXRlcz0ke3RoaXMuc3RhcnR9LSR7dGhpcy5lbmQgPz8gJyd9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICBvbkNvbm5lY3QgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29ubmVjdCguLi5hcmdzKVxuICB9XG5cbiAgb25FcnJvciAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvciguLi5hcmdzKVxuICB9XG5cbiAgb25VcGdyYWRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoLi4uYXJncylcbiAgfVxuXG4gIG9uSGVhZGVycyAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKC4uLmFyZ3MpXG4gIH1cblxuICBvbkRhdGEgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YSguLi5hcmdzKVxuICB9XG5cbiAgb25Db21wbGV0ZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSguLi5hcmdzKVxuICB9XG5cbiAgb25Cb2R5U2VudCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudCguLi5hcmdzKVxuICB9XG59XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IGtHdWFyZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBrSGVhZGVyc01hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAnKVxuY29uc3Qga0hlYWRlcnNTb3J0ZWRNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwIHNvcnRlZCcpXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAweDAwYSB8fCBjb2RlID09PSAweDAwZCB8fCBjb2RlID09PSAweDAwOSB8fCBjb2RlID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLXZhbHVlLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGhlYWRlclZhbHVlTm9ybWFsaXplIChwb3RlbnRpYWxWYWx1ZSkge1xuICAvLyAgVG8gbm9ybWFsaXplIGEgYnl0ZSBzZXF1ZW5jZSBwb3RlbnRpYWxWYWx1ZSwgcmVtb3ZlXG4gIC8vICBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGJ5dGVzIGZyb21cbiAgLy8gIHBvdGVudGlhbFZhbHVlLlxuICBsZXQgaSA9IDA7IGxldCBqID0gcG90ZW50aWFsVmFsdWUubGVuZ3RoXG5cbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGogLSAxKSkpIC0talxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaSkpKSArK2lcblxuICByZXR1cm4gaSA9PT0gMCAmJiBqID09PSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGggPyBwb3RlbnRpYWxWYWx1ZSA6IHBvdGVudGlhbFZhbHVlLnN1YnN0cmluZyhpLCBqKVxufVxuXG5mdW5jdGlvbiBmaWxsIChoZWFkZXJzLCBvYmplY3QpIHtcbiAgLy8gVG8gZmlsbCBhIEhlYWRlcnMgb2JqZWN0IGhlYWRlcnMgd2l0aCBhIGdpdmVuIG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBzZXF1ZW5jZSwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gb2JqZWN0OlxuICAvLyBOb3RlOiB3ZWJpZGwgY29udmVyc2lvbiB0byBhcnJheSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaGVhZGVyID0gb2JqZWN0W2ldXG4gICAgICAvLyAxLiBJZiBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBleGFjdGx5IHR3byBpdGVtcywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChoZWFkZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgZXhwZWN0ZWQgbmFtZS92YWx1ZSBwYWlyIHRvIGJlIGxlbmd0aCAyLCBmb3VuZCAke2hlYWRlci5sZW5ndGh9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIChoZWFkZXJcdTIwMTlzIGZpcnN0IGl0ZW0sIGhlYWRlclx1MjAxOXMgc2Vjb25kIGl0ZW0pIHRvIGhlYWRlcnMuXG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywgaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIC8vIE5vdGU6IG51bGwgc2hvdWxkIHRocm93XG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIG9iamVjdCBpcyBhIHJlY29yZCwgdGhlbiBmb3IgZWFjaCBrZXkgXHUyMTkyIHZhbHVlIGluIG9iamVjdCxcbiAgICAvLyAgICBhcHBlbmQgKGtleSwgdmFsdWUpIHRvIGhlYWRlcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGtleXNbaV0sIG9iamVjdFtrZXlzW2ldXSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlcnMtYXBwZW5kXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZEhlYWRlciAoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgfSlcbiAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gNC4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9IGVsc2UgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCI6XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQobmFtZSwgdmFsdWUpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuY2xhc3MgSGVhZGVyc0xpc3Qge1xuICAvKiogQHR5cGUge1tzdHJpbmcsIHN0cmluZ11bXXxudWxsfSAqL1xuICBjb29raWVzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChpbml0KSB7XG4gICAgaWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXRba0hlYWRlcnNNYXBdKVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBpbml0W2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgdGhpcy5jb29raWVzID0gaW5pdC5jb29raWVzID09PSBudWxsID8gbnVsbCA6IFsuLi5pbml0LmNvb2tpZXNdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0KVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1saXN0LWNvbnRhaW5zXG4gIGNvbnRhaW5zIChuYW1lKSB7XG4gICAgLy8gQSBoZWFkZXIgbGlzdCBsaXN0IGNvbnRhaW5zIGEgaGVhZGVyIG5hbWUgbmFtZSBpZiBsaXN0XG4gICAgLy8gY29udGFpbnMgYSBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIG1hdGNoIGZvciBuYW1lLlxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTWFwXS5oYXMobmFtZSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgbmFtZSB0byB0aGUgZmlyc3Qgc3VjaFxuICAgIC8vICAgIGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgZXhpc3RzID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KGxvd2VyY2FzZU5hbWUpXG5cbiAgICAvLyAyLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGNvbnN0IGRlbGltaXRlciA9IGxvd2VyY2FzZU5hbWUgPT09ICdjb29raWUnID8gJzsgJyA6ICcsICdcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7XG4gICAgICAgIG5hbWU6IGV4aXN0cy5uYW1lLFxuICAgICAgICB2YWx1ZTogYCR7ZXhpc3RzLnZhbHVlfSR7ZGVsaW1pdGVyfSR7dmFsdWV9YFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgICB9XG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPz89IFtdXG4gICAgICB0aGlzLmNvb2tpZXMucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IFt2YWx1ZV1cbiAgICB9XG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IHRoZSB2YWx1ZSBvZlxuICAgIC8vICAgIHRoZSBmaXJzdCBzdWNoIGhlYWRlciB0byB2YWx1ZSBhbmQgcmVtb3ZlIHRoZVxuICAgIC8vICAgIG90aGVycy5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGFwcGVuZCBoZWFkZXIgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobmFtZS50b0xvd2VyQ2FzZSgpKVxuXG4gICAgLy8gMS4gSWYgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsXG4gICAgLy8gICAgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSAweDJDIDB4MjAsIGluIG9yZGVyLlxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlLnZhbHVlXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgW25hbWUsIHsgdmFsdWUgfV0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgIHlpZWxkIFtuYW1lLCB2YWx1ZV1cbiAgICB9XG4gIH1cblxuICBnZXQgZW50cmllcyAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSkge1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKCkpIHtcbiAgICAgICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVycy1jbGFzc1xuY2xhc3MgSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGluaXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0gPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgLy8gVGhlIG5ldyBIZWFkZXJzKGluaXQpIGNvbnN0cnVjdG9yIHN0ZXBzIGFyZTpcblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyBndWFyZCB0byBcIm5vbmVcIi5cbiAgICB0aGlzW2tHdWFyZF0gPSAnbm9uZSdcblxuICAgIC8vIDIuIElmIGluaXQgaXMgZ2l2ZW4sIHRoZW4gZmlsbCB0aGlzIHdpdGggaW5pdC5cbiAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQoaW5pdClcbiAgICAgIGZpbGwodGhpcywgaW5pdClcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuYXBwZW5kJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICByZXR1cm4gYXBwZW5kSGVhZGVyKHRoaXMsIG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmRlbGV0ZScsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCBuYW1lXG4gICAgLy8gICAgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyIG5hbWUsIGFuZFxuICAgIC8vICAgIG5hbWUgaXMgbm90IGEgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzXG4gICAgLy8gICAgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZ2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyXG4gICAgLy8gICAgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmdldChuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWhhc1xuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmhhcycsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIG5hbWU7XG4gICAgLy8gICAgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5zZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gICAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAgIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiBhbmRcbiAgICAvLyAgICBuYW1lL3ZhbHVlIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlcixcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDcuIFNldCAobmFtZSwgdmFsdWUpIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXNcbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uc2V0KG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldHNldGNvb2tpZVxuICBnZXRTZXRDb29raWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBTZXQtQ29va2llYCwgdGhlbiByZXR1cm4gXHUwMEFCIFx1MDBCQi5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgW3V0aWwuaW5zcGVjdC5jdXN0b21dOiB7XG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgZXh0cmFjdEJvZHksIGNsb25lQm9keSwgbWl4aW5Cb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxuY29uc3QgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtIHx8IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlLWNsYXNzXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8vIENyZWF0ZXMgbmV0d29yayBlcnJvciBSZXNwb25zZS5cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICAvLyBUT0RPXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlLWpzb25cbiAgc3RhdGljIGpzb24gKGRhdGEsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5qc29uJyB9KVxuXG4gICAgaWYgKGluaXQgIT09IG51bGwpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNlcmlhbGl6ZSBhIEphdmFTY3JpcHQgdmFsdWUgdG8gSlNPTiBieXRlcyBvbiBkYXRhLlxuICAgIGNvbnN0IGJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKFxuICAgICAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nKGRhdGEpXG4gICAgKVxuXG4gICAgLy8gMi4gTGV0IGJvZHkgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJ5dGVzLlxuICAgIGNvbnN0IGJvZHkgPSBleHRyYWN0Qm9keShieXRlcylcblxuICAgIC8vIDMuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyByZXNwb25zZSxcbiAgICAvLyAgICBcInJlc3BvbnNlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5yZWRpcmVjdCcgfSlcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgc3RhdHVzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oc3RhdHVzKVxuXG4gICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdXJsIHdpdGggY3VycmVudCBzZXR0aW5nc1xuICAgIC8vIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIFRPRE86IGJhc2UtVVJMP1xuICAgIGxldCBwYXJzZWRVUkxcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIGdldEdsb2JhbE9yaWdpbigpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIHVybCksIHtcbiAgICAgICAgY2F1c2U6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZSAnICsgc3RhdHVzKVxuICAgIH1cblxuICAgIC8vIDQuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIGEgbmV3IHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyBUT0RPXG4gICAgdGhpc1trUmVhbG1dID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIHJlc3BvbnNlIHRvIGEgbmV3IHJlc3BvbnNlLlxuICAgIHRoaXNba1N0YXRlXSA9IG1ha2VSZXNwb25zZSh7fSlcblxuICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZFxuICAgIC8vIGlzIFwicmVzcG9uc2VcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gdGhpc1trU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSBudWxsLlxuICAgIGxldCBib2R5V2l0aFR5cGUgPSBudWxsXG5cbiAgICAvLyA0LiBJZiBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBib2R5V2l0aFR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJvZHkuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIHR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGJvZHlXaXRoVHlwZSA9IHsgYm9keTogZXh0cmFjdGVkQm9keSwgdHlwZSB9XG4gICAgfVxuXG4gICAgLy8gNS4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gdGhpcywgaW5pdCwgYW5kIGJvZHlXaXRoVHlwZS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UodGhpcywgaW5pdCwgYm9keVdpdGhUeXBlKVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgdHlwZSwgZS5nLiwgXCJjb3JzXCIuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSB0eXBlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyB0eXBlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgVVJMLCBpZiBpdCBoYXMgb25lOyBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICBjb25zdCB1cmxMaXN0ID0gdGhpc1trU3RhdGVdLnVybExpc3RcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBVUkwgaXMgbnVsbDsgb3RoZXJ3aXNlIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkwsXG4gICAgLy8gc2VyaWFsaXplZCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnQgc2V0IHRvIHRydWUuXG4gICAgY29uc3QgdXJsID0gdXJsTGlzdFt1cmxMaXN0Lmxlbmd0aCAtIDFdID8/IG51bGxcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHVybCwgdHJ1ZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZSB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIHJlZGlyZWN0LlxuICBnZXQgcmVkaXJlY3RlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3RlZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkxcbiAgICAvLyBsaXN0IGhhcyBtb3JlIHRoYW4gb25lIGl0ZW07IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnVybExpc3QubGVuZ3RoID4gMVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICBnZXQgc3RhdHVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW4gb2sgc3RhdHVzLlxuICBnZXQgb2sgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIG9rIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhblxuICAgIC8vIG9rIHN0YXR1czsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW2tTdGF0ZV0uc3RhdHVzIDw9IDI5OVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UuXG4gIGdldCBzdGF0dXNUZXh0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXNUZXh0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXNcbiAgICAvLyBtZXNzYWdlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgaGVhZGVycyBhcyBIZWFkZXJzLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlc3BvbnNlLlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8ICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UuY2xvbmUnLFxuICAgICAgICBtZXNzYWdlOiAnQm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXNwb25zZS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuXG4gICAgLy8gY2xvbmVkUmVzcG9uc2UsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXNwb25zZVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICByZXR1cm4gY2xvbmVkUmVzcG9uc2VPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVzcG9uc2UpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuICB0eXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb2s6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0ZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1c1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1Jlc3BvbnNlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UsIHtcbiAganNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXNwb25zZSByZXNwb25zZSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2UsIHRoZW4gcmV0dXJuIGEgbmV3IGlkZW50aWNhbFxuICAvLyBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbCByZXNwb25zZSBpcyBhIGNsb25lIG9mIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZS5cbiAgaWYgKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmlsdGVyUmVzcG9uc2UoXG4gICAgICBjbG9uZVJlc3BvbnNlKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpLFxuICAgICAgcmVzcG9uc2UudHlwZVxuICAgIClcbiAgfVxuXG4gIC8vIDIuIExldCBuZXdSZXNwb25zZSBiZSBhIGNvcHkgb2YgcmVzcG9uc2UsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1Jlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgLi4ucmVzcG9uc2UsIGJvZHk6IG51bGwgfSlcblxuICAvLyAzLiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgbmV3UmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVzcG9uc2UuYm9keSA9IGNsb25lQm9keShyZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KCksXG4gICAgdXJsTGlzdDogaW5pdC51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG5mdW5jdGlvbiBtYWtlRmlsdGVyZWRSZXNwb25zZSAocmVzcG9uc2UsIHN0YXRlKSB7XG4gIHN0YXRlID0ge1xuICAgIGludGVybmFsUmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgIC4uLnN0YXRlXG4gIH1cblxuICByZXR1cm4gbmV3IFByb3h5KHJlc3BvbnNlLCB7XG4gICAgZ2V0ICh0YXJnZXQsIHApIHtcbiAgICAgIHJldHVybiBwIGluIHN0YXRlID8gc3RhdGVbcF0gOiB0YXJnZXRbcF1cbiAgICB9LFxuICAgIHNldCAodGFyZ2V0LCBwLCB2YWx1ZSkge1xuICAgICAgYXNzZXJ0KCEocCBpbiBzdGF0ZSkpXG4gICAgICB0YXJnZXRbcF0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWZpbHRlcmVkLXJlc3BvbnNlXG5mdW5jdGlvbiBmaWx0ZXJSZXNwb25zZSAocmVzcG9uc2UsIHR5cGUpIHtcbiAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgaWYgKHR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAvLyBBIGJhc2ljIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImJhc2ljXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZS5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcnMnKSB7XG4gICAgLy8gQSBDT1JTIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImNvcnNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyXG4gICAgLy8gbGlzdCB3aG9zZSBuYW1lIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZSwgZ2l2ZW5cbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdjb3JzJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZScpIHtcbiAgICAvLyBBbiBvcGFxdWUgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzXG4gICAgLy8gXCJvcGFxdWVcIiwgVVJMIGxpc3QgaXMgdGhlIGVtcHR5IGxpc3QsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZVxuICAgIC8vIGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZScsXG4gICAgICB1cmxMaXN0OiBPYmplY3QuZnJlZXplKFtdKSxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZXJlZGlyZWN0Jykge1xuICAgIC8vIEFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGVcbiAgICAvLyBpcyBcIm9wYXF1ZXJlZGlyZWN0XCIsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZSBpcyB0aGUgZW1wdHkgYnl0ZVxuICAgIC8vIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZXJlZGlyZWN0JyxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgaGVhZGVyc0xpc3Q6IFtdLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHByb3ByaWF0ZS1uZXR3b3JrLWVycm9yXG5mdW5jdGlvbiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IgKGZldGNoUGFyYW1zLCBlcnIgPSBudWxsKSB7XG4gIC8vIDEuIEFzc2VydDogZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQuXG4gIGFzc2VydChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpXG5cbiAgLy8gMi4gUmV0dXJuIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciBpZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkO1xuICAvLyBvdGhlcndpc2UgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgcmV0dXJuIGlzQWJvcnRlZChmZXRjaFBhcmFtcylcbiAgICA/IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJyksIHsgY2F1c2U6IGVyciB9KSlcbiAgICA6IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdSZXF1ZXN0IHdhcyBjYW5jZWxsZWQuJyksIHsgY2F1c2U6IGVyciB9KSlcbn1cblxuLy8gaHR0cHM6Ly93aGF0cHIub3JnL2ZldGNoLzEzOTIuaHRtbCNpbml0aWFsaXplLWEtcmVzcG9uc2VcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXNwb25zZSAocmVzcG9uc2UsIGluaXQsIGJvZHkpIHtcbiAgLy8gMS4gSWYgaW5pdFtcInN0YXR1c1wiXSBpcyBub3QgaW4gdGhlIHJhbmdlIDIwMCB0byA1OTksIGluY2x1c2l2ZSwgdGhlblxuICAvLyAgICB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gIGlmIChpbml0LnN0YXR1cyAhPT0gbnVsbCAmJiAoaW5pdC5zdGF0dXMgPCAyMDAgfHwgaW5pdC5zdGF0dXMgPiA1OTkpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luaXRbXCJzdGF0dXNcIl0gbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLicpXG4gIH1cblxuICAvLyAyLiBJZiBpbml0W1wic3RhdHVzVGV4dFwiXSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVhc29uLXBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICAvLyBTZWUsIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yOlxuICAgIC8vICAgcmVhc29uLXBocmFzZSAgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAgICBpZiAoIWlzVmFsaWRSZWFzb25QaHJhc2UoU3RyaW5nKGluaXQuc3RhdHVzVGV4dCkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0YXR1c1RleHQnKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byBpbml0W1wic3RhdHVzXCJdLlxuICBpZiAoJ3N0YXR1cycgaW4gaW5pdCAmJiBpbml0LnN0YXR1cyAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXMgPSBpbml0LnN0YXR1c1xuICB9XG5cbiAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gaW5pdFtcInN0YXR1c1RleHRcIl0uXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzVGV4dCA9IGluaXQuc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gNS4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIGZpbGwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgd2l0aCBpbml0W1wiaGVhZGVyc1wiXS5cbiAgaWYgKCdoZWFkZXJzJyBpbiBpbml0ICYmIGluaXQuaGVhZGVycyAhPSBudWxsKSB7XG4gICAgZmlsbChyZXNwb25zZVtrSGVhZGVyc10sIGluaXQuaGVhZGVycylcbiAgfVxuXG4gIC8vIDYuIElmIGJvZHkgd2FzIGdpdmVuLCB0aGVuOlxuICBpZiAoYm9keSkge1xuICAgIC8vIDEuIElmIHJlc3BvbnNlJ3Mgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlJ3MgYm9keSB0byBib2R5J3MgYm9keS5cbiAgICByZXNwb25zZVtrU3RhdGVdLmJvZHkgPSBib2R5LmJvZHlcblxuICAgIC8vIDMuIElmIGJvZHkncyB0eXBlIGlzIG5vbi1udWxsIGFuZCByZXNwb25zZSdzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW5cbiAgICAvLyAgICBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LVR5cGVgLCBib2R5J3MgdHlwZSkgdG8gcmVzcG9uc2UncyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoYm9keS50eXBlICE9IG51bGwgJiYgIXJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuY29udGFpbnMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICByZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC10eXBlJywgYm9keS50eXBlKVxuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKFYpIHx8IHR5cGVzLmlzVHlwZWRBcnJheShWKSB8fCB0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oVilcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZVJlc3BvbnNlLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBSZXNwb25zZSxcbiAgY2xvbmVSZXNwb25zZVxufVxuIiwgIi8qIGdsb2JhbHMgQWJvcnRDb250cm9sbGVyICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBtaXhpbkJvZHksIGNsb25lQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnZXZlbnRzJylcblxubGV0IFRyYW5zZm9ybVN0cmVhbSA9IGdsb2JhbFRoaXMuVHJhbnNmb3JtU3RyZWFtXG5cbmNvbnN0IGtBYm9ydENvbnRyb2xsZXIgPSBTeW1ib2woJ2Fib3J0Q29udHJvbGxlcicpXG5cbmNvbnN0IHJlcXVlc3RGaW5hbGl6ZXIgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHsgc2lnbmFsLCBhYm9ydCB9KSA9PiB7XG4gIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY2xhc3NcbmNsYXNzIFJlcXVlc3Qge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3RcbiAgY29uc3RydWN0b3IgKGlucHV0LCBpbml0ID0ge30pIHtcbiAgICBpZiAoaW5wdXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaW5wdXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhpbnB1dClcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdClcblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3RcbiAgICB0aGlzW2tSZWFsbV0gPSB7XG4gICAgICBzZXR0aW5nc09iamVjdDoge1xuICAgICAgICBiYXNlVXJsOiBnZXRHbG9iYWxPcmlnaW4oKSxcbiAgICAgICAgZ2V0IG9yaWdpbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybD8ub3JpZ2luXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeUNvbnRhaW5lcjogbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgbnVsbC5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuIExldCBmYWxsYmFja01vZGUgYmUgbnVsbC5cbiAgICBsZXQgZmFsbGJhY2tNb2RlID0gbnVsbFxuXG4gICAgLy8gMy4gTGV0IGJhc2VVUkwgYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNi4gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyA3LiBBc3NlcnQ6IGlucHV0IGlzIGEgUmVxdWVzdCBvYmplY3QuXG4gICAgICBhc3NlcnQoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdCB0byBpbnB1dFx1MjAxOXMgcmVxdWVzdC5cbiAgICAgIHJlcXVlc3QgPSBpbnB1dFtrU3RhdGVdXG5cbiAgICAgIC8vIDkuIFNldCBzaWduYWwgdG8gaW5wdXRcdTIwMTlzIHNpZ25hbC5cbiAgICAgIHNpZ25hbCA9IGlucHV0W2tTaWduYWxdXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IG9yaWdpbiBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIG9yaWdpbi5cbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3Qub3JpZ2luXG5cbiAgICAvLyA4LiBMZXQgd2luZG93IGJlIFwiY2xpZW50XCIuXG4gICAgbGV0IHdpbmRvdyA9ICdjbGllbnQnXG5cbiAgICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0IGFuZCBpdHMgb3JpZ2luXG4gICAgLy8gaXMgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW4sIHRoZW4gc2V0IHdpbmRvdyB0byByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC53aW5kb3c/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCcgJiZcbiAgICAgIHNhbWVPcmlnaW4ocmVxdWVzdC53aW5kb3csIG9yaWdpbilcbiAgICApIHtcbiAgICAgIHdpbmRvdyA9IHJlcXVlc3Qud2luZG93XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoaW5pdC53aW5kb3cgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJ3dpbmRvdycgb3B0aW9uICcke3dpbmRvd30nIG11c3QgYmUgbnVsbGApXG4gICAgfVxuXG4gICAgLy8gMTEuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzLCB0aGVuIHNldCB3aW5kb3cgdG8gXCJuby13aW5kb3dcIi5cbiAgICBpZiAoJ3dpbmRvdycgaW4gaW5pdCkge1xuICAgICAgd2luZG93ID0gJ25vLXdpbmRvdydcbiAgICB9XG5cbiAgICAvLyAxMi4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgICAgLy8gVVJMIHJlcXVlc3RcdTIwMTlzIFVSTC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB0aGlzIGlzIHNldCBhcyB0aGUgZmlyc3QgaXRlbSBpbiByZXF1ZXN0J3MgdXJsTGlzdCBpbiBtYWtlUmVxdWVzdFxuICAgICAgLy8gbWV0aG9kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAvLyBoZWFkZXIgbGlzdCBBIGNvcHkgb2YgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogaGVhZGVyc0xpc3QgaXMgY2xvbmVkIGluIG1ha2VSZXF1ZXN0XG4gICAgICBoZWFkZXJzTGlzdDogcmVxdWVzdC5oZWFkZXJzTGlzdCxcbiAgICAgIC8vIHVuc2FmZS1yZXF1ZXN0IGZsYWcgU2V0LlxuICAgICAgdW5zYWZlUmVxdWVzdDogcmVxdWVzdC51bnNhZmVSZXF1ZXN0LFxuICAgICAgLy8gY2xpZW50IFRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cbiAgICAgIGNsaWVudDogdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3RcdTIwMTlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc1x1MjAxOXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVyXHUyMDE5cyBuYW1lL2hlYWRlclx1MjAxOXMgdmFsdWUgdG8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXNcdTIwMTlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dFx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFsXHUyMDE5cyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3Nlclx1MjAxOXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3RcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVzcG9uc2UsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJylcbmNvbnN0IHtcbiAgYnl0ZXNNYXRjaCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIHJlcXVlc3RCYWRQb3J0LFxuICBUQU9DaGVjayxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGlzQmxvYkxpa2UsXG4gIHNhbWVPcmlnaW4sXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgdXJsSGFzSHR0cHNTY2hlbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHNhZmVseUV4dHJhY3RCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzU2V0LFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgc3VicmVzb3VyY2VTZXQsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgbm9kZU1ham9yLCBub2RlTWlub3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGRhdGFVUkxQcm9jZXNzb3IsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsgVHJhbnNmb3JtU3RyZWFtIH0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBHRVRfT1JfSEVBRCA9IFsnR0VUJywgJ0hFQUQnXVxuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gICAgLy8gMiB0ZXJtaW5hdGVkIGxpc3RlbmVycyBnZXQgYWRkZWQgcGVyIHJlcXVlc3QsXG4gICAgLy8gYnV0IG9ubHkgMSBnZXRzIHJlbW92ZWQuIElmIHRoZXJlIGFyZSAyMCByZWRpcmVjdHMsXG4gICAgLy8gMjEgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzExXG4gICAgLy8gVE9ETyAoZml4KTogRmluZCBhbmQgZml4IHJvb3QgY2F1c2UgZm9yIGxlYWtlZCBsaXN0ZW5lci5cbiAgICB0aGlzLnNldE1heExpc3RlbmVycygyMSlcbiAgfVxuXG4gIHRlcm1pbmF0ZSAocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICd0ZXJtaW5hdGVkJ1xuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShyZWFzb24pXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgcmVhc29uKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWNvbnRyb2xsZXItYWJvcnRcbiAgYWJvcnQgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHN0YXRlIHRvIFwiYWJvcnRlZFwiLlxuICAgIHRoaXMuc3RhdGUgPSAnYWJvcnRlZCdcblxuICAgIC8vIDIuIExldCBmYWxsYmFja0Vycm9yIGJlIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAvLyAzLiBTZXQgZXJyb3IgdG8gZmFsbGJhY2tFcnJvciBpZiBpdCBpcyBub3QgZ2l2ZW4uXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZXJyb3IpLlxuICAgIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCBjYXRjaCBpdCwgYW5kIGxldFxuICAgIC8vICAgIHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGZhbGxiYWNrRXJyb3IpLlxuXG4gICAgLy8gNS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIHRvIHNlcmlhbGl6ZWRFcnJvci5cbiAgICB0aGlzLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbiA9IGVycm9yXG5cbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3koZXJyb3IpXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgZXJyb3IpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLW1ldGhvZFxuZnVuY3Rpb24gZmV0Y2ggKGlucHV0LCBpbml0ID0ge30pIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dsb2JhbFRoaXMuZmV0Y2gnIH0pXG5cbiAgLy8gMS4gTGV0IHAgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IG51bGxcblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcbiAgICB9XG4gIClcblxuICAvLyAxMi4gTGV0IGhhbmRsZUZldGNoRG9uZSBnaXZlbiByZXNwb25zZSByZXNwb25zZSBiZSB0byBmaW5hbGl6ZSBhbmRcbiAgLy8gcmVwb3J0IHRpbWluZyB3aXRoIHJlc3BvbnNlLCBnbG9iYWxPYmplY3QsIGFuZCBcImZldGNoXCIuXG4gIGNvbnN0IGhhbmRsZUZldGNoRG9uZSA9IChyZXNwb25zZSkgPT5cbiAgICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyhyZXNwb25zZSwgJ2ZldGNoJylcblxuICAvLyAxMy4gU2V0IGNvbnRyb2xsZXIgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGZldGNoIGdpdmVuIHJlcXVlc3QsXG4gIC8vIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBoYW5kbGVGZXRjaERvbmUsIGFuZCBwcm9jZXNzUmVzcG9uc2VcbiAgLy8gZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3Vic3RlcHM6XG5cbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gMS4gSWYgbG9jYWxseUFib3J0ZWQgaXMgdHJ1ZSwgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChsb2NhbGx5QWJvcnRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgIC8vIDEuIExldCBkZXNlcmlhbGl6ZWRFcnJvciBiZSB0aGUgcmVzdWx0IG9mIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZFxuICAgICAgLy8gICAgYWJvcnQgcmVhc29uIGdpdmVuIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZFxuICAgICAgLy8gICAgcmVsZXZhbnRSZWFsbS5cblxuICAgICAgLy8gMi4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBhbmRcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplZEVycm9yLlxuXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBjb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbilcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDMuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWplY3QgcCB3aXRoIGEgVHlwZUVycm9yXG4gICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcC5yZWplY3QoXG4gICAgICAgIE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignZmV0Y2ggZmFpbGVkJyksIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VPYmplY3QgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHJlbGV2YW50UmVhbG0uXG4gICAgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdClcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHk6IGhhbmRsZUZldGNoRG9uZSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgZGlzcGF0Y2hlcjogaW5pdC5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSAvLyB1bmRpY2lcbiAgfSlcblxuICAvLyAxNC4gUmV0dXJuIHAuXG4gIHJldHVybiBwLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLWFuZC1yZXBvcnQtdGltaW5nXG5mdW5jdGlvbiBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyAocmVzcG9uc2UsIGluaXRpYXRvclR5cGUgPSAnb3RoZXInKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBudWxsIG9yIGVtcHR5LCB0aGVuIHJldHVybi5cbiAgaWYgKCFyZXNwb25zZS51cmxMaXN0Py5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDMuIExldCBvcmlnaW5hbFVSTCBiZSByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3RbMF0uXG4gIGNvbnN0IG9yaWdpbmFsVVJMID0gcmVzcG9uc2UudXJsTGlzdFswXVxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgbGV0IHRpbWluZ0luZm8gPSByZXNwb25zZS50aW1pbmdJbmZvXG5cbiAgLy8gNS4gTGV0IGNhY2hlU3RhdGUgYmUgcmVzcG9uc2VcdTIwMTlzIGNhY2hlIHN0YXRlLlxuICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAvLyA2LiBJZiBvcmlnaW5hbFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4uXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUob3JpZ2luYWxVUkwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA3LiBJZiB0aW1pbmdJbmZvIGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAodGltaW5nSW5mbyA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZyBpcyBub3Qgc2V0LCB0aGVuOlxuICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgLy8gIDEuIFNldCB0aW1pbmdJbmZvIHRvIGEgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8uXG4gICAgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG5cbiAgICAvLyAgMi4gU2V0IGNhY2hlU3RhdGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICBjYWNoZVN0YXRlID0gJydcbiAgfVxuXG4gIC8vIDkuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWVcbiAgLy8gZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICAvLyBUT0RPOiBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHk/XG4gIHRpbWluZ0luZm8uZW5kVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKClcblxuICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDExLiBNYXJrIHJlc291cmNlIHRpbWluZyBmb3IgdGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsXG4gIC8vIGdsb2JhbCwgYW5kIGNhY2hlU3RhdGUuXG4gIG1hcmtSZXNvdXJjZVRpbWluZyhcbiAgICB0aW1pbmdJbmZvLFxuICAgIG9yaWdpbmFsVVJMLFxuICAgIGluaXRpYXRvclR5cGUsXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBjYWNoZVN0YXRlXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Jlc291cmNlLXRpbWluZy8jZGZuLW1hcmstcmVzb3VyY2UtdGltaW5nXG5mdW5jdGlvbiBtYXJrUmVzb3VyY2VUaW1pbmcgKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKSB7XG4gIGlmIChub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMikpIHtcbiAgICBwZXJmb3JtYW5jZS5tYXJrUmVzb3VyY2VUaW1pbmcodGltaW5nSW5mbywgb3JpZ2luYWxVUkwuaHJlZiwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYWJvcnQtZmV0Y2hcbmZ1bmN0aW9uIGFib3J0RmV0Y2ggKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBlcnJvcikge1xuICAvLyBOb3RlOiBBYm9ydFNpZ25hbC5yZWFzb24gd2FzIGFkZGVkIGluIG5vZGUgdjE3LjIuMFxuICAvLyB3aGljaCB3b3VsZCBnaXZlIHVzIGFuIHVuZGVmaW5lZCBlcnJvciB0byByZWplY3Qgd2l0aC5cbiAgLy8gUmVtb3ZlIHRoaXMgb25jZSBub2RlIHYxNiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICBpZiAoIWVycm9yKSB7XG4gICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxuXG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIHAucmVqZWN0KGVycm9yKVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgLy8gdW5kaWNpXG59KSB7XG4gIC8vIDEuIExldCB0YXNrRGVzdGluYXRpb24gYmUgbnVsbC5cbiAgbGV0IHRhc2tEZXN0aW5hdGlvbiA9IG51bGxcblxuICAvLyAyLiBMZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgYmUgZmFsc2UuXG4gIGxldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9IGZhbHNlXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCB0YXNrRGVzdGluYXRpb24gdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICAgIHRhc2tEZXN0aW5hdGlvbiA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gICAgLy8gMi4gU2V0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgY3Jvc3Mtb3JpZ2luXG4gICAgLy8gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9XG4gICAgICByZXF1ZXN0LmNsaWVudC5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNC4gSWYgdXNlUGFyYWxsZWxRdWV1ZSBpcyB0cnVlLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIExldCB0aW1pbmdJbmZvIGJlIGEgbmV3IGZldGNoIHRpbWluZyBpbmZvIHdob3NlIHN0YXJ0IHRpbWUgYW5kXG4gIC8vIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSBhcmUgdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gIC8vIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBjdXJyZW5UaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICBzdGFydFRpbWU6IGN1cnJlblRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0Lm9yaWdpbiA9IHJlcXVlc3QuY2xpZW50Py5vcmlnaW5cbiAgfVxuXG4gIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgaXMgXCJjbGllbnRcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucG9saWN5Q29udGFpbmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5XG4gICAgLy8gY29udGFpbmVyIHRvIGEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyLiBbSFRNTF1cbiAgICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBjbG9uZVBvbGljeUNvbnRhaW5lcihcbiAgICAgICAgcmVxdWVzdC5jbGllbnQucG9saWN5Q29udGFpbmVyXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDIuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgdG8gYSBuZXcgcG9saWN5XG4gICAgICAvLyBjb250YWluZXIuXG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHRgLCB0aGVuOlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdCcpKSB7XG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIGAqLypgLlxuICAgIGNvbnN0IHZhbHVlID0gJyovKidcblxuICAgIC8vIDIuIEEgdXNlciBhZ2VudCBzaG91bGQgc2V0IHZhbHVlIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQsIGlmXG4gICAgLy8gYW55LCBzd2l0Y2hpbmcgb24gcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb246XG4gICAgLy8gXCJkb2N1bWVudFwiXG4gICAgLy8gXCJmcmFtZVwiXG4gICAgLy8gXCJpZnJhbWVcIlxuICAgIC8vIGB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjhgXG4gICAgLy8gXCJpbWFnZVwiXG4gICAgLy8gYGltYWdlL3BuZyxpbWFnZS9zdmcreG1sLGltYWdlLyo7cT0wLjgsKi8qO3E9MC41YFxuICAgIC8vIFwic3R5bGVcIlxuICAgIC8vIGB0ZXh0L2NzcywqLyo7cT0wLjFgXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMy4gQXBwZW5kIGBBY2NlcHRgL3ZhbHVlIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQnLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHQtTGFuZ3VhZ2VgLCB0aGVuXG4gIC8vIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYEFjY2VwdC1MYW5ndWFnZWAvYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG9cbiAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWxhbmd1YWdlJykpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWxhbmd1YWdlJywgJyonKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IGlzIG51bGwsIHRoZW4gdXNlIHJlcXVlc3RcdTIwMTlzIGluaXRpYXRvciBhbmRcbiAgLy8gZGVzdGluYXRpb24gYXBwcm9wcmlhdGVseSBpbiBzZXR0aW5nIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IHRvIGFcbiAgLy8gdXNlci1hZ2VudC1kZWZpbmVkIG9iamVjdC5cbiAgaWYgKHJlcXVlc3QucHJpb3JpdHkgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNS4gSWYgcmVxdWVzdCBpcyBhIHN1YnJlc291cmNlIHJlcXVlc3QsIHRoZW46XG4gIGlmIChzdWJyZXNvdXJjZVNldC5oYXMocmVxdWVzdC5kZXN0aW5hdGlvbikpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNi4gUnVuIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gIG1haW5GZXRjaChmZXRjaFBhcmFtcylcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycilcbiAgICB9KVxuXG4gIC8vIDE3LiBSZXR1cm4gZmV0Y2hQYXJhbSdzIGNvbnRyb2xsZXJcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWFpbi1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gbWFpbkZldGNoIChmZXRjaFBhcmFtcywgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBsb2NhbC1VUkxzLW9ubHkgZmxhZyBpcyBzZXQgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzXG4gIC8vIG5vdCBsb2NhbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5sb2NhbFVSTHNPbmx5ICYmICF1cmxJc0xvY2FsKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignbG9jYWwgVVJMcyBvbmx5JylcbiAgfVxuXG4gIC8vIDQuIFJ1biByZXBvcnQgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdmlvbGF0aW9ucyBmb3IgcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIFVwZ3JhZGUgcmVxdWVzdCB0byBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgaWYgYXBwcm9wcmlhdGUuXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTChyZXF1ZXN0KVxuXG4gIC8vIDYuIElmIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGEgYmFkIHBvcnQsIHNob3VsZCBmZXRjaGluZyByZXF1ZXN0XG4gIC8vIGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudCwgb3Igc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50XG4gIC8vIFNlY3VyaXR5IFBvbGljeSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3RCYWRQb3J0KHJlcXVlc3QpID09PSAnYmxvY2tlZCcpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2JhZCBwb3J0JylcbiAgfVxuICAvLyBUT0RPOiBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQ/XG4gIC8vIFRPRE86IHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3k/XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHBvbGljeSB0byByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyXHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5ID09PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSByZXF1ZXN0LnBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgbm90IFwibm8tcmVmZXJyZXJcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgdG8gdGhlIHJlc3VsdCBvZiBpbnZva2luZyBkZXRlcm1pbmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyICE9PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlciA9IGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIocmVxdWVzdClcbiAgfVxuXG4gIC8vIDkuIFNldCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIHRvIFwiaHR0cHNcIiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCJcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBpcyBhIGRvbWFpblxuICAvLyAtIE1hdGNoaW5nIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IHBlciBLbm93biBIU1RTIEhvc3QgRG9tYWluIE5hbWVcbiAgLy8gICBNYXRjaGluZyByZXN1bHRzIGluIGVpdGhlciBhIHN1cGVyZG9tYWluIG1hdGNoIHdpdGggYW4gYXNzZXJ0ZWRcbiAgLy8gICBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUgb3IgYSBjb25ncnVlbnQgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCBhblxuICAvLyAgIGFzc2VydGVkIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSkuIFtIU1RTXVxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlY3Vyc2l2ZSBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBpbiBwYXJhbGxlbC5cbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuIHNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgLy8gdGhlIHN0ZXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudDpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgb3JpZ2luLFxuICAgICAgICAvLyAgIGFuZCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImJhc2ljXCJcbiAgICAgICAgKHNhbWVPcmlnaW4oY3VycmVudFVSTCwgcmVxdWVzdC51cmwpICYmIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykgfHxcbiAgICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIlxuICAgICAgICAoY3VycmVudFVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgfHxcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiBvciBcIndlYnNvY2tldFwiXG4gICAgICAgIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JylcbiAgICAgICkge1xuICAgICAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJiYXNpY1wiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnYmFzaWMnXG5cbiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcInNhbWUtb3JpZ2luXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgICAgLy8gMS4gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3JlcXVlc3QgbW9kZSBjYW5ub3QgYmUgXCJzYW1lLW9yaWdpblwiJylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgbm90IFwiZm9sbG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdmb2xsb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAgICAgICAncmVkaXJlY3QgbW9kZSBjYW5ub3QgYmUgXCJmb2xsb3dcIiBmb3IgXCJuby1jb3JzXCIgcmVxdWVzdCdcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJvcGFxdWVcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ29wYXF1ZSdcblxuICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZVxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJylcbiAgICAgIH1cblxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZyBpcyBzZXRcbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdW5zYWZlLXJlcXVlc3QgZmxhZyBpcyBzZXQgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgICAgIC8vICAgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCBvciBDT1JTLXVuc2FmZSByZXF1ZXN0LWhlYWRlciBuYW1lcyB3aXRoXG4gICAgICAvLyAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGlzIG5vdCBlbXB0eVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgLy8gICAgMi4gTGV0IGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2hcbiAgICAgIC8vICAgIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICAgICAgLy8gICAgMy4gSWYgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gY2xlYXIgY2FjaGVcbiAgICAgIC8vICAgIGVudHJpZXMgdXNpbmcgcmVxdWVzdC5cbiAgICAgIC8vICAgIDQuIFJldHVybiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlLlxuICAgICAgLy8gVE9ET1xuXG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdjb3JzJ1xuXG4gICAgICAvLyAgICAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gYXdhaXQgaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIDEyLiBJZiByZWN1cnNpdmUgaXMgdHJ1ZSwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZFxuICAvLyByZXNwb25zZSwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJiAhcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiLCB0aGVuOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgLy8gMS4gTGV0IGhlYWRlck5hbWVzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgIC8vIGdpdmVuIGBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUgaXMgbm90IFwiaW5jbHVkZVwiIGFuZCBoZWFkZXJOYW1lc1xuICAgICAgLy8gY29udGFpbnMgYCpgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG9cbiAgICAgIC8vIGFsbCB1bmlxdWUgaGVhZGVyIG5hbWVzIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgaGVhZGVyTmFtZXMgaXMgbm90IG51bGwgb3IgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0byBoZWFkZXJOYW1lcy5cbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAgIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2Jhc2ljJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnY29ycycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnb3BhcXVlJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDE0LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgbGV0IGludGVybmFsUmVzcG9uc2UgPVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuXG4gIC8vIDE1LiBJZiBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eSwgdGhlbiBzZXQgaXQgdG8gYSBjbG9uZSBvZlxuICAvLyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgaWYgKGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QucHVzaCguLi5yZXF1ZXN0LnVybExpc3QpXG4gIH1cblxuICAvLyAxNi4gSWYgcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnIGlzIHVuc2V0LCB0aGVuIHNldFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcuXG4gIGlmICghcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCkge1xuICAgIHJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTcuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnNcbiAgLy8gYmxvY2tlZFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBpdHMgTUlNRSB0eXBlXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBub3NuaWZmXG4gIC8vIFRPRE9cblxuICAvLyAxOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHR5cGUgaXMgXCJvcGFxdWVcIiwgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDIwNixcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgcmFuZ2UtcmVxdWVzdGVkIGZsYWcgaXMgc2V0LCBhbmQgcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZSBhbmQgaW50ZXJuYWxSZXNwb25zZVxuICAvLyB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJyAmJlxuICAgIGludGVybmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkICYmXG4gICAgIXJlcXVlc3QuaGVhZGVycy5jb250YWlucygncmFuZ2UnKVxuICApIHtcbiAgICByZXNwb25zZSA9IGludGVybmFsUmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgfVxuXG4gIC8vIDE5LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gIC8vIGBIRUFEYCBvciBgQ09OTkVDVGAsIG9yIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsXG4gIC8vIHNldCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIG51bGwgYW5kIGRpc3JlZ2FyZCBhbnkgZW5xdWV1aW5nIHRvd2FyZFxuICAvLyBpdCAoaWYgYW55KS5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJlxuICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICBudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cykpXG4gICkge1xuICAgIGludGVybmFsUmVzcG9uc2UuYm9keSA9IG51bGxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXAgPSB0cnVlXG4gIH1cblxuICAvLyAyMC4gSWYgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICBpZiAocmVxdWVzdC5pbnRlZ3JpdHkpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXNcbiAgICAvLyBhbmQgYSBuZXR3b3JrIGVycm9yLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAocmVhc29uKSA9PlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIG1ha2VOZXR3b3JrRXJyb3IocmVhc29uKSlcblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwib3BhcXVlXCIsIG9yIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsXG4gICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzQm9keUVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKGJ5dGVzKSA9PiB7XG4gICAgICAvLyAxLiBJZiBieXRlcyBkbyBub3QgbWF0Y2ggcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLFxuICAgICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIFtTUkldXG4gICAgICBpZiAoIWJ5dGVzTWF0Y2goYnl0ZXMsIHJlcXVlc3QuaW50ZWdyaXR5KSkge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKCdpbnRlZ3JpdHkgbWlzbWF0Y2gnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGJ5dGVzIGFzIGEgYm9keS5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShieXRlcylbMF1cblxuICAgICAgLy8gMy4gUnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gNC4gRnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSBhbmQgcHJvY2Vzc0JvZHlFcnJvci5cbiAgICBhd2FpdCBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIDIxLiBPdGhlcndpc2UsIHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zY2hlbWUtZmV0Y2hcbi8vIGdpdmVuIGEgZmV0Y2ggcGFyYW1zIGZldGNoUGFyYW1zXG5mdW5jdGlvbiBzY2hlbWVGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gTm90ZTogc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkIG9uIHJlZGlyZWN0LCB3aGljaCBzZXRzIGZldGNoUGFyYW1zIHRvIGFcbiAgLy8gY2FuY2VsbGVkIHN0YXRlLCB3ZSBkbyBub3Qgd2FudCB0aGlzIGNvbmRpdGlvbiB0byB0cmlnZ2VyICp1bmxlc3MqIHRoZXJlIGhhdmUgYmVlblxuICAvLyBubyByZWRpcmVjdHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTc3NlxuICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpICYmIGZldGNoUGFyYW1zLnJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKSlcbiAgfVxuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCB7IHJlcXVlc3QgfSA9IGZldGNoUGFyYW1zXG5cbiAgY29uc3QgeyBwcm90b2NvbDogc2NoZW1lIH0gPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGFuZCBydW4gdGhlIGFzc29jaWF0ZWQgc3RlcHM6XG4gIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnYWJvdXQ6Jzoge1xuICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHBhdGggaXMgdGhlIHN0cmluZyBcImJsYW5rXCIsIHRoZW4gcmV0dXJuIGEgbmV3IHJlc3BvbnNlXG4gICAgICAvLyB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSBcdTAwQkIsXG4gICAgICAvLyBhbmQgYm9keSBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSBhcyBhIGJvZHkuXG5cbiAgICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignYWJvdXQgc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQnKSlcbiAgICB9XG4gICAgY2FzZSAnYmxvYjonOiB7XG4gICAgICBpZiAoIXJlc29sdmVPYmplY3RVUkwpIHtcbiAgICAgICAgcmVzb2x2ZU9iamVjdFVSTCA9IHJlcXVpcmUoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeU9iamVjdCA9IHJlc29sdmVPYmplY3RVUkwoYmxvYlVSTEVudHJ5LnRvU3RyaW5nKCkpXG5cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAsIGJsb2JVUkxFbnRyeSBpcyBudWxsLCBvciBibG9iVVJMRW50cnlcdTIwMTlzXG4gICAgICAvLyAgICBvYmplY3QgaXMgbm90IGEgQmxvYiBvYmplY3QsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgfHwgIWlzQmxvYkxpa2UoYmxvYlVSTEVudHJ5T2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ludmFsaWQgbWV0aG9kJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgdGhlIHJlc3VsdCBvZiBzYWZlbHkgZXh0cmFjdGluZyBibG9iVVJMRW50cnlcdTIwMTlzIG9iamVjdC5cbiAgICAgIGNvbnN0IGJvZHlXaXRoVHlwZSA9IHNhZmVseUV4dHJhY3RCb2R5KGJsb2JVUkxFbnRyeU9iamVjdClcblxuICAgICAgLy8gNC4gTGV0IGJvZHkgYmUgYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgY29uc3QgYm9keSA9IGJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAvLyA1LiBMZXQgbGVuZ3RoIGJlIGJvZHlcdTIwMTlzIGxlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgICAgY29uc3QgbGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtib2R5Lmxlbmd0aH1gKVxuXG4gICAgICAvLyA2LiBMZXQgdHlwZSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIHR5cGUgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICAgIGNvbnN0IHR5cGUgPSBib2R5V2l0aFR5cGVbMV0gPz8gJydcblxuICAgICAgLy8gNy4gUmV0dXJuIGEgbmV3IHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzXG4gICAgICAvLyAgICBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIGxlbmd0aCksIChgQ29udGVudC1UeXBlYCwgdHlwZSkgXHUwMEJCLCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN0XHUyMDE5cyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgbWltZVR5cGUpIFx1MDBCQixcbiAgICAgIC8vICAgIGFuZCBib2R5IGlzIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IG1pbWVUeXBlIH1dXG4gICAgICAgIF0sXG4gICAgICAgIGJvZHk6IHNhZmVseUV4dHJhY3RCb2R5KGRhdGFVUkxTdHJ1Y3QuYm9keSlbMF1cbiAgICAgIH0pKVxuICAgIH1cbiAgICBjYXNlICdmaWxlOic6IHtcbiAgICAgIC8vIEZvciBub3csIHVuZm9ydHVuYXRlIGFzIGl0IGlzLCBmaWxlIFVSTHMgYXJlIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG4gICAgICAvLyBXaGVuIGluIGRvdWJ0LCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdub3QgaW1wbGVtZW50ZWQuLi4geWV0Li4uJykpXG4gICAgfVxuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICBjYXNlICdodHRwczonOiB7XG4gICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG5cbiAgICAgIHJldHVybiBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiBtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigndW5rbm93biBzY2hlbWUnKSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLXJlc3BvbnNlXG5mdW5jdGlvbiBmaW5hbGl6ZVJlc3BvbnNlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAvLyAyLCBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGlzIG5vdCBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2hcbiAgLy8gdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBnaXZlbiByZXNwb25zZSwgd2l0aFxuICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUocmVzcG9uc2UpKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1maW5hbGVcbmZ1bmN0aW9uIGZldGNoRmluYWxlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuOlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gXHUwMEFCIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdFswXSBcdTAwQkIuXG4gICAgcmVzcG9uc2UudXJsTGlzdCA9IFtmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybExpc3RbMF1dXG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZ1xuICAgIC8vIGluZm8gZm9yIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICByZXNwb25zZS50aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IGZldGNoUGFyYW1zLnRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgIC8vIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZVxuICAgIC8vIGVuZC1vZi1ib2R5IGdpdmVuIHJlc3BvbnNlIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAhPSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFza1xuICAvLyB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSkpXG4gIH1cblxuICAvLyA0LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkoKVxuICB9IGVsc2Uge1xuICAvLyA1LiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgdHJhbnNmb3JtU3RyZWFtIGJlIGEgbmV3IGEgVHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgLy8gMi4gTGV0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB3aGljaCwgZ2l2ZW4gY2h1bmssXG4gICAgLy8gZW5xdWV1ZXMgY2h1bmsgaW4gdHJhbnNmb3JtU3RyZWFtLlxuICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG1cbiAgICAvLyBhbmQgZmx1c2hBbGdvcml0aG0gc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHJhbnNmb3JtOiBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSxcbiAgICAgIGZsdXNoOiBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHlcbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZSByZXN1bHQgb2YgcGlwaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5IHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuICAgIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbTogcmVzcG9uc2UuYm9keS5zdHJlYW0ucGlwZVRocm91Z2godHJhbnNmb3JtU3RyZWFtKSB9XG4gIH1cblxuICAvLyA2LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSAhPSBudWxsKSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIG51bGxPckJ5dGVzIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBudWxsT3JCeXRlcy5cbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChudWxsT3JCeXRlcykgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIG51bGxPckJ5dGVzKVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3NcbiAgICAvLyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIGZhaWx1cmUuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChmYWlsdXJlKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgZmFpbHVyZSlcblxuICAgIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keVxuICAgIC8vIGdpdmVuIG51bGwsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcHJvY2Vzc0JvZHkobnVsbCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcixcbiAgICAgIC8vIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICAgIHJldHVybiBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cEZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBhY3R1YWxSZXNwb25zZSBiZSBudWxsLlxuICBsZXQgYWN0dWFsUmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDUuIElmIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwiYWxsXCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID09PSAnYWxsJykge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIC8vIDEuIElmIG1ha2VDT1JTUHJlZmxpZ2h0IGlzIHRydWUgYW5kIG9uZSBvZiB0aGVzZSBjb25kaXRpb25zIGlzIHRydWU6XG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBcImZvbGxvd1wiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICAgIH1cblxuICAgIC8vIDMuIFNldCByZXNwb25zZSBhbmQgYWN0dWFsUmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgLy8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgIGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChmZXRjaFBhcmFtcylcblxuICAgIC8vIDQuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBhIENPUlMgY2hlY2tcbiAgICAvLyBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAgIGNvcnNDaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2NvcnMgZmFpbHVyZScpXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgdGhlIFRBTyBjaGVjayBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHNldFxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZy5cbiAgICBpZiAoVEFPQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gSWYgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIG9yIHJlc3BvbnNlXHUyMDE5cyB0eXBlXG4gIC8vIGlzIFwib3BhcXVlXCIsIGFuZCB0aGUgY3Jvc3Mtb3JpZ2luIHJlc291cmNlIHBvbGljeSBjaGVjayB3aXRoXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiwgcmVxdWVzdFx1MjAxOXMgY2xpZW50LCByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbixcbiAgLy8gYW5kIGFjdHVhbFJlc3BvbnNlIHJldHVybnMgYmxvY2tlZCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScpICYmXG4gICAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrKFxuICAgICAgcmVxdWVzdC5vcmlnaW4sXG4gICAgICByZXF1ZXN0LmNsaWVudCxcbiAgICAgIHJlcXVlc3QuZGVzdGluYXRpb24sXG4gICAgICBhY3R1YWxSZXNwb25zZVxuICAgICkgPT09ICdibG9ja2VkJ1xuICApIHtcbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignYmxvY2tlZCcpXG4gIH1cblxuICAvLyA4LiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuOlxuICBpZiAocmVkaXJlY3RTdGF0dXNTZXQuaGFzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAvLyAxLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gYW5kIHRoZSBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHVzZXIgYWdlbnRzIG1heSwgYW5kIGFyZSBldmVuXG4gICAgLy8gZW5jb3VyYWdlZCB0bywgdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODhcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBtYWtlUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgLy8gMi4gU2V0IGh0dHBGZXRjaFBhcmFtcyB0byBhIGNvcHkgb2YgZmV0Y2hQYXJhbXMuXG4gICAgaHR0cEZldGNoUGFyYW1zID0geyAuLi5mZXRjaFBhcmFtcyB9XG5cbiAgICAvLyAzLiBTZXQgaHR0cEZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0IHRvIGh0dHBSZXF1ZXN0LlxuICAgIGh0dHBGZXRjaFBhcmFtcy5yZXF1ZXN0ID0gaHR0cFJlcXVlc3RcbiAgfVxuXG4gIC8vICAgIDMuIExldCBpbmNsdWRlQ3JlZGVudGlhbHMgYmUgdHJ1ZSBpZiBvbmUgb2ZcbiAgY29uc3QgaW5jbHVkZUNyZWRlbnRpYWxzID1cbiAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScgfHxcbiAgICAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ3NhbWUtb3JpZ2luJyAmJlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKVxuXG4gIC8vICAgIDQuIExldCBjb250ZW50TGVuZ3RoIGJlIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBsZW5ndGgsIGlmIGh0dHBSZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBib2R5IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgbnVsbC5cbiAgY29uc3QgY29udGVudExlbmd0aCA9IGh0dHBSZXF1ZXN0LmJvZHkgPyBodHRwUmVxdWVzdC5ib2R5Lmxlbmd0aCA6IG51bGxcblxuICAvLyAgICA1LiBMZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGJlIG51bGwuXG4gIGxldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBudWxsXG5cbiAgLy8gICAgNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGAgb3JcbiAgLy8gICAgYFBVVGAsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBgMGAuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5ib2R5ID09IG51bGwgJiZcbiAgICBbJ1BPU1QnLCAnUFVUJ10uaW5jbHVkZXMoaHR0cFJlcXVlc3QubWV0aG9kKVxuICApIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSAnMCdcbiAgfVxuXG4gIC8vICAgIDcuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0b1xuICAvLyAgICBjb250ZW50TGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKGAke2NvbnRlbnRMZW5ndGh9YClcbiAgfVxuXG4gIC8vICAgIDguIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENvbnRlbnQtTGVuZ3RoYC9jb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBpZiAoY29udGVudExlbmd0aEhlYWRlclZhbHVlICE9IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtbGVuZ3RoJywgY29udGVudExlbmd0aEhlYWRlclZhbHVlKVxuICB9XG5cbiAgLy8gICAgOS4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtTGVuZ3RoYCxcbiAgLy8gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlKSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgMTAuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBodHRwUmVxdWVzdC5rZWVwYWxpdmUpIHtcbiAgICAvLyBOT1RFOiBrZWVwYWxpdmUgaXMgYSBub29wIG91dHNpZGUgb2YgYnJvd3NlciBjb250ZXh0LlxuICB9XG5cbiAgLy8gICAgMTEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBhIFVSTCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYFJlZmVyZXJgL2h0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLFxuICAvLyAgICAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3JlZmVyZXInLCBpc29tb3JwaGljRW5jb2RlKGh0dHBSZXF1ZXN0LnJlZmVycmVyLmhyZWYpKVxuICB9XG5cbiAgLy8gICAgMTIuIEFwcGVuZCBhIHJlcXVlc3QgYE9yaWdpbmAgaGVhZGVyIGZvciBodHRwUmVxdWVzdC5cbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcihodHRwUmVxdWVzdClcblxuICAvLyAgICAxMy4gQXBwZW5kIHRoZSBGZXRjaCBtZXRhZGF0YSBoZWFkZXJzIGZvciBodHRwUmVxdWVzdC4gW0ZFVENILU1FVEFEQVRBXVxuICBhcHBlbmRGZXRjaE1ldGFkYXRhKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDE0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgVXNlci1BZ2VudGAsIHRoZW5cbiAgLy8gICAgdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgVXNlci1BZ2VudGAvZGVmYXVsdCBgVXNlci1BZ2VudGAgdmFsdWUgdG9cbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd1c2VyLWFnZW50JykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3VzZXItYWdlbnQnLCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kaWNpJyA6ICdub2RlJylcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJykpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJylcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJylcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QubW9kZSAhPT0gJ25vLXN0b3JlJyAmJiBodHRwUmVxdWVzdC5tb2RlICE9PSAncmVsb2FkJykge1xuICAgIC8vIFRPRE86IGNhY2hlXG4gIH1cblxuICAvLyA5LiBJZiBhYm9ydGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIsIHRoZW4gcmV0dXJuIGFcbiAgICAvLyBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChodHRwUmVxdWVzdC5tb2RlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuYWJvcnQ/LihlcnIgPz8gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDQuIExldCBodHRwQ2FjaGUgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZSBwYXJ0aXRpb24sXG4gIC8vIGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE86IGNhY2hlXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA1LiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIHJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyA2LiBMZXQgbmV0d29ya1BhcnRpdGlvbktleSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBuZXR3b3JrXG4gIC8vIHBhcnRpdGlvbiBrZXkgZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDcuIExldCBuZXdDb25uZWN0aW9uIGJlIFwieWVzXCIgaWYgZm9yY2VOZXdDb25uZWN0aW9uIGlzIHRydWU7IG90aGVyd2lzZVxuICAvLyBcIm5vXCIuXG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSBmb3JjZU5ld0Nvbm5lY3Rpb24gPyAneWVzJyA6ICdubycgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8vIDguIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBtb2RlOlxuICBpZiAocmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sXG4gICAgLy8gZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgLy8gVE9ET1xuICB9IGVsc2Uge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgY29ubmVjdGlvbiwgZ2l2ZW5cbiAgICAvLyBuZXR3b3JrUGFydGl0aW9uS2V5LCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLFxuICAgIC8vIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGZvcmNlTmV3Q29ubmVjdGlvbi5cbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA5LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgY29ubmVjdGlvbiBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgMi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBjYWxsaW5nIGNsYW1wIGFuZCBjb2Fyc2VuIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gd2l0aCBjb25uZWN0aW9uXHUyMDE5c1xuICAvLyAgICB0aW1pbmcgaW5mbywgdGltaW5nSW5mb1x1MjAxOXMgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDMuIElmIGNvbm5lY3Rpb24gaXMgbm90IGFuIEhUVFAvMiBjb25uZWN0aW9uLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyAgICBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gYXBwZW5kIChgVHJhbnNmZXItRW5jb2RpbmdgLFxuICAvLyAgICBgY2h1bmtlZGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDQuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlcXVlc3Qgc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyAgICBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIG1ha2luZyBhbiBIVFRQIHJlcXVlc3Qgb3ZlciBjb25uZWN0aW9uXG4gIC8vICAgIHVzaW5nIHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNhdmVhdHM6XG5cbiAgLy8gICAgICAgIC0gRm9sbG93IHRoZSByZWxldmFudCByZXF1aXJlbWVudHMgZnJvbSBIVFRQLiBbSFRUUF0gW0hUVFAtU0VNQU5USUNTXVxuICAvLyAgICAgICAgW0hUVFAtQ09ORF0gW0hUVFAtQ0FDSElOR10gW0hUVFAtQVVUSF1cblxuICAvLyAgICAgICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsXG4gIC8vICAgICAgICB0aGVuIHRoZSB1c2VyIGFnZW50IG1heSBoYXZlIGEgYnVmZmVyIG9mIHVwIHRvIDY0IGtpYmlieXRlcyBhbmQgc3RvcmVcbiAgLy8gICAgICAgIGEgcGFydCBvZiByZXF1ZXN0XHUyMDE5cyBib2R5IGluIHRoYXQgYnVmZmVyLiBJZiB0aGUgdXNlciBhZ2VudCByZWFkcyBmcm9tXG4gIC8vICAgICAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGJleW9uZCB0aGF0IGJ1ZmZlclx1MjAxOXMgc2l6ZSBhbmQgdGhlIHVzZXIgYWdlbnQgbmVlZHMgdG9cbiAgLy8gICAgICAgIHJlc2VuZCByZXF1ZXN0LCB0aGVuIGluc3RlYWQgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAgICAgLSBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LFxuICAvLyAgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgYWdlbnRcdTIwMTlzIEhUVFAgcGFyc2VyIHJlY2VpdmVzIHRoZSBmaXJzdCBieXRlXG4gIC8vICAgICAgICBvZiB0aGUgcmVzcG9uc2UgKGUuZy4sIGZyYW1lIGhlYWRlciBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1c1xuICAvLyAgICAgICAgbGluZSBmb3IgSFRUUC8xLngpLlxuXG4gIC8vICAgICAgICAtIFdhaXQgdW50aWwgYWxsIHRoZSBoZWFkZXJzIGFyZSB0cmFuc21pdHRlZC5cblxuICAvLyAgICAgICAgLSBBbnkgcmVzcG9uc2VzIHdob3NlIHN0YXR1cyBpcyBpbiB0aGUgcmFuZ2UgMTAwIHRvIDE5OSwgaW5jbHVzaXZlLFxuICAvLyAgICAgICAgYW5kIGlzIG5vdCAxMDEsIGFyZSB0byBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiBzZXR0aW5nXG4gIC8vICAgICAgICB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgYWJvdmUuXG5cbiAgLy8gICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgVHJhbnNmZXItRW5jb2RpbmdgL2BjaHVua2VkYCBhbmRcbiAgLy8gICAgcmVzcG9uc2UgaXMgdHJhbnNmZXJyZWQgdmlhIEhUVFAvMS4wIG9yIG9sZGVyLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gICAgZXJyb3IuXG5cbiAgLy8gICAgLSBJZiB0aGUgSFRUUCByZXF1ZXN0IHJlc3VsdHMgaW4gYSBUTFMgY2xpZW50IGNlcnRpZmljYXRlIGRpYWxvZywgdGhlbjpcblxuICAvLyAgICAgICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCwgbWFrZSB0aGVcbiAgLy8gICAgICAgIGRpYWxvZyBhdmFpbGFibGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuXG4gIC8vICAgICAgICAyLiBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gVG8gdHJhbnNtaXQgcmVxdWVzdFx1MjAxOXMgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG4gIGxldCByZXF1ZXN0Qm9keSA9IG51bGxcbiAgLy8gMS4gSWYgYm9keSBpcyBudWxsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzXG4gIC8vIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0XG4gIC8vIGVuZC1vZi1ib2R5IGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKHJlcXVlc3QuYm9keSA9PSBudWxsICYmIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYm9keSBpcyBub24tbnVsbDpcblxuICAgIC8vICAgIDEuIExldCBwcm9jZXNzQm9keUNodW5rIGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5Q2h1bmsgPSBhc3luYyBmdW5jdGlvbiAqIChieXRlcykge1xuICAgICAgLy8gMS4gSWYgdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6IHRyYW5zbWl0IGJ5dGVzLlxuICAgICAgeWllbGQgYnl0ZXNcblxuICAgICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHJ1blxuICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGdpdmVuIGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aD8uKGJ5dGVzLmJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NFbmRPZkJvZHkgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0VuZE9mQm9keSA9ICgpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBub24tbnVsbCxcbiAgICAgIC8vIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkuXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keUVycm9yIGdpdmVuIGUgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChlKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGUgaXMgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLCB0aGVuIGFib3J0IGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJbmNyZW1lbnRhbGx5IHJlYWQgcmVxdWVzdFx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keUNodW5rLCBwcm9jZXNzRW5kT2ZCb2R5LFxuICAgIC8vIHByb2Nlc3NCb2R5RXJyb3IsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICByZXF1ZXN0Qm9keSA9IChhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgYnl0ZXMgb2YgcmVxdWVzdC5ib2R5LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcHJvY2Vzc0JvZHlDaHVuayhieXRlcylcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRW5kT2ZCb2R5KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKGVycilcbiAgICAgIH1cbiAgICB9KSgpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIHNvY2tldCBpcyBvbmx5IHByb3ZpZGVkIGZvciB3ZWJzb2NrZXRzXG4gICAgY29uc3QgeyBib2R5LCBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSA9IGF3YWl0IGRpc3BhdGNoKHsgYm9keTogcmVxdWVzdEJvZHkgfSlcblxuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gYm9keVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0ID0gKCkgPT4gaXRlcmF0b3IubmV4dCgpXG5cbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCB9KVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gMTAuIElmIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgIC8vIDEuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgICAgLy8gMi4gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMsIGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihlcnIpXG4gIH1cblxuICAvLyAxMS4gTGV0IHB1bGxBbGdvcml0aG0gYmUgYW4gYWN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgb25nb2luZyBmZXRjaFxuICAvLyBpZiBpdCBpcyBzdXNwZW5kZWQuXG4gIGNvbnN0IHB1bGxBbGdvcml0aG0gPSAoKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUoKVxuICB9XG5cbiAgLy8gMTIuIExldCBjYW5jZWxBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWJvcnRzIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyBjb250cm9sbGVyIHdpdGggcmVhc29uLCBnaXZlbiByZWFzb24uXG4gIGNvbnN0IGNhbmNlbEFsZ29yaXRobSA9IChyZWFzb24pID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgfVxuXG4gIC8vIDEzLiBMZXQgaGlnaFdhdGVyTWFyayBiZSBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiBudW1iZXIsIGNob3NlbiBieVxuICAvLyB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE0LiBMZXQgc2l6ZUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhY2NlcHRzIGEgY2h1bmsgb2JqZWN0XG4gIC8vIGFuZCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOLCBub24taW5maW5pdGUgbnVtYmVyLCBjaG9zZW4gYnkgdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNS4gTGV0IHN0cmVhbSBiZSBhIG5ldyBSZWFkYWJsZVN0cmVhbS5cbiAgLy8gMTYuIFNldCB1cCBzdHJlYW0gd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyBjYW5jZWxBbGdvcml0aG0gc2V0IHRvIGNhbmNlbEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyayBzZXQgdG9cbiAgLy8gaGlnaFdhdGVyTWFyaywgYW5kIHNpemVBbGdvcml0aG0gc2V0IHRvIHNpemVBbGdvcml0aG0uXG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0IChjb250cm9sbGVyKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGF3YWl0IHB1bGxBbGdvcml0aG0oY29udHJvbGxlcilcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBjYW5jZWxBbGdvcml0aG0ocmVhc29uKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaGlnaFdhdGVyTWFyazogMCxcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH1cbiAgKVxuXG4gIC8vIDE3LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGEgbmV3IGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbS5cbiAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5kZXNpcmVkU2l6ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAgICAyLiBJZiBhYm9ydGVkLCB0aGVuOlxuICBmdW5jdGlvbiBvbkFib3J0ZWQgKHJlYXNvbikge1xuICAgIC8vIDIuIElmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnLlxuICAgICAgcmVzcG9uc2UuYWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHN0cmVhbSB3aXRoIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgICAvLyAgICBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmQgYW5cbiAgICAgIC8vICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmVhbG0uXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihcbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvblxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgc3RyZWFtIGlzIHJlYWRhYmxlLCBlcnJvciBzdHJlYW0gd2l0aCBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ3Rlcm1pbmF0ZWQnLCB7XG4gICAgICAgICAgY2F1c2U6IGlzRXJyb3JMaWtlKHJlYXNvbikgPyByZWFzb24gOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgdGhlIHVzZXIgYWdlbnQgc2hvdWxkIGNsb3NlIGNvbm5lY3Rpb24gdW5sZXNzIGl0IHdvdWxkIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgdG8gZG8gc28uXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gMjAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2ggKHsgYm9keSB9KSB7XG4gICAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnLi4vLi4nKS5BZ2VudH0gKi9cbiAgICBjb25zdCBhZ2VudCA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlclxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGFnZW50LmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLFxuICAgICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGJvZHk6IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlci5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGFib3J0KG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIGFib3J0KVxuICAgICAgICAgICAgdGhpcy5hYm9ydCA9IGNvbm5lY3Rpb24uYWJvcnQgPSBhYm9ydFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvbkhlYWRlcnMgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgPCAyMDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjb2RpbmdzID0gW11cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIC8vIEZvciBIMiwgdGhlIGhlYWRlcnMgYXJlIGEgcGxhaW4gSlMgb2JqZWN0XG4gICAgICAgICAgLy8gV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtIGFuZCBpdGVyYXRlIGFjY29yZGluZ2x5XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc0xpc3QpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc0xpc3QpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W2tleV1cbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpLnJldmVyc2UoKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uICYmXG4gICAgICAgICAgICByZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKVxuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRW5jb2RpbmdcbiAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0NPTk5FQ1QnICYmICFudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhzdGF0dXMpICYmICF3aWxsRm9sbG93KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGluZyBvZiBjb2RpbmdzKSB7XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEyLmh0bWwjc2VjdGlvbi03LjJcbiAgICAgICAgICAgICAgaWYgKGNvZGluZyA9PT0gJ3gtZ3ppcCcgfHwgY29kaW5nID09PSAnZ3ppcCcpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlR3VuemlwKHtcbiAgICAgICAgICAgICAgICAgIC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuICAgICAgICAgICAgICAgICAgLy8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG4gICAgICAgICAgICAgICAgICAvLyBieSBjb21tb24gYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdkZWZsYXRlJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVJbmZsYXRlKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5sZW5ndGggPSAwXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBib2R5OiBkZWNvZGVycy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBwaXBlbGluZSh0aGlzLmJvZHksIC4uLmRlY29kZXJzLCAoKSA9PiB7IH0pXG4gICAgICAgICAgICAgIDogdGhpcy5ib2R5Lm9uKCdlcnJvcicsICgpID0+IHt9KVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmJvZHkucHVzaChudWxsKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHk/LmRlc3Ryb3koZXJyb3IpXG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnJvcilcblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcblxuICAgICAgICBvblVwZ3JhZGUgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcblxuICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnRJbml0RGljdC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgbG9hZGVkOiBldmVudEluaXREaWN0LmxvYWRlZCxcbiAgICAgIHRvdGFsOiBldmVudEluaXREaWN0LnRvdGFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aENvbXB1dGFibGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxlbmd0aENvbXB1dGFibGVcbiAgfVxuXG4gIGdldCBsb2FkZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxvYWRlZFxuICB9XG5cbiAgZ2V0IHRvdGFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50b3RhbFxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGVuZ3RoQ29tcHV0YWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2xvYWRlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0b3RhbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGxhYmVsXG4gKi9cbmZ1bmN0aW9uIGdldEVuY29kaW5nIChsYWJlbCkge1xuICBpZiAoIWxhYmVsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gbGFiZWwuXG4gIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgLy8gICAgbGFiZWxzIGxpc3RlZCBpbiB0aGUgdGFibGUgYmVsb3csIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBjb3JyZXNwb25kaW5nIGVuY29kaW5nOyBvdGhlcndpc2UgcmV0dXJuIGZhaWx1cmUuXG4gIHN3aXRjaCAobGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd1bmljb2RlLTEtMS11dGYtOCc6XG4gICAgY2FzZSAndW5pY29kZTExdXRmOCc6XG4gICAgY2FzZSAndW5pY29kZTIwdXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3gtdW5pY29kZTIwdXRmOCc6XG4gICAgICByZXR1cm4gJ1VURi04J1xuICAgIGNhc2UgJzg2Nic6XG4gICAgY2FzZSAnY3A4NjYnOlxuICAgIGNhc2UgJ2NzaWJtODY2JzpcbiAgICBjYXNlICdpYm04NjYnOlxuICAgICAgcmV0dXJuICdJQk04NjYnXG4gICAgY2FzZSAnY3Npc29sYXRpbjInOlxuICAgIGNhc2UgJ2lzby04ODU5LTInOlxuICAgIGNhc2UgJ2lzby1pci0xMDEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMic6XG4gICAgY2FzZSAnaXNvODg1OTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTI6MTk4Nyc6XG4gICAgY2FzZSAnbDInOlxuICAgIGNhc2UgJ2xhdGluMic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTInXG4gICAgY2FzZSAnY3Npc29sYXRpbjMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTMnOlxuICAgIGNhc2UgJ2lzby1pci0xMDknOlxuICAgIGNhc2UgJ2lzbzg4NTktMyc6XG4gICAgY2FzZSAnaXNvODg1OTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTM6MTk4OCc6XG4gICAgY2FzZSAnbDMnOlxuICAgIGNhc2UgJ2xhdGluMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTMnXG4gICAgY2FzZSAnY3Npc29sYXRpbjQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTQnOlxuICAgIGNhc2UgJ2lzby1pci0xMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTktNCc6XG4gICAgY2FzZSAnaXNvODg1OTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQ6MTk4OCc6XG4gICAgY2FzZSAnbDQnOlxuICAgIGNhc2UgJ2xhdGluNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbmN5cmlsbGljJzpcbiAgICBjYXNlICdjeXJpbGxpYyc6XG4gICAgY2FzZSAnaXNvLTg4NTktNSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0NCc6XG4gICAgY2FzZSAnaXNvODg1OS01JzpcbiAgICBjYXNlICdpc284ODU5NSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNToxOTg4JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNSdcbiAgICBjYXNlICdhcmFiaWMnOlxuICAgIGNhc2UgJ2FzbW8tNzA4JzpcbiAgICBjYXNlICdjc2lzbzg4NTk2ZSc6XG4gICAgY2FzZSAnY3Npc284ODU5NmknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5hcmFiaWMnOlxuICAgIGNhc2UgJ2VjbWEtMTE0JzpcbiAgICBjYXNlICdpc28tODg1OS02JzpcbiAgICBjYXNlICdpc28tODg1OS02LWUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtaSc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNyc6XG4gICAgY2FzZSAnaXNvODg1OS02JzpcbiAgICBjYXNlICdpc284ODU5Nic6XG4gICAgY2FzZSAnaXNvXzg4NTktNic6XG4gICAgY2FzZSAnaXNvXzg4NTktNjoxOTg3JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNidcbiAgICBjYXNlICdjc2lzb2xhdGluZ3JlZWsnOlxuICAgIGNhc2UgJ2VjbWEtMTE4JzpcbiAgICBjYXNlICdlbG90XzkyOCc6XG4gICAgY2FzZSAnZ3JlZWsnOlxuICAgIGNhc2UgJ2dyZWVrOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNyc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNic6XG4gICAgY2FzZSAnaXNvODg1OS03JzpcbiAgICBjYXNlICdpc284ODU5Nyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNzoxOTg3JzpcbiAgICBjYXNlICdzdW5fZXVfZ3JlZWsnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS03J1xuICAgIGNhc2UgJ2NzaXNvODg1OThlJzpcbiAgICBjYXNlICdjc2lzb2xhdGluaGVicmV3JzpcbiAgICBjYXNlICdoZWJyZXcnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtZSc6XG4gICAgY2FzZSAnaXNvLWlyLTEzOCc6XG4gICAgY2FzZSAnaXNvODg1OS04JzpcbiAgICBjYXNlICdpc284ODU5OCc6XG4gICAgY2FzZSAnaXNvXzg4NTktOCc6XG4gICAgY2FzZSAnaXNvXzg4NTktODoxOTg4JzpcbiAgICBjYXNlICd2aXN1YWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04J1xuICAgIGNhc2UgJ2NzaXNvODg1OThpJzpcbiAgICBjYXNlICdpc28tODg1OS04LWknOlxuICAgIGNhc2UgJ2xvZ2ljYWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04LUknXG4gICAgY2FzZSAnY3Npc29sYXRpbjYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTEwJzpcbiAgICBjYXNlICdpc28taXItMTU3JzpcbiAgICBjYXNlICdpc284ODU5LTEwJzpcbiAgICBjYXNlICdpc284ODU5MTAnOlxuICAgIGNhc2UgJ2w2JzpcbiAgICBjYXNlICdsYXRpbjYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMCdcbiAgICBjYXNlICdpc28tODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OTEzJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTMnXG4gICAgY2FzZSAnaXNvLTg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE0J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW45JzpcbiAgICBjYXNlICdpc28tODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OTE1JzpcbiAgICBjYXNlICdpc29fODg1OS0xNSc6XG4gICAgY2FzZSAnbDknOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNSdcbiAgICBjYXNlICdpc28tODg1OS0xNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE2J1xuICAgIGNhc2UgJ2Nza29pOHInOlxuICAgIGNhc2UgJ2tvaSc6XG4gICAgY2FzZSAna29pOCc6XG4gICAgY2FzZSAna29pOC1yJzpcbiAgICBjYXNlICdrb2k4X3InOlxuICAgICAgcmV0dXJuICdLT0k4LVInXG4gICAgY2FzZSAna29pOC1ydSc6XG4gICAgY2FzZSAna29pOC11JzpcbiAgICAgIHJldHVybiAnS09JOC1VJ1xuICAgIGNhc2UgJ2NzbWFjaW50b3NoJzpcbiAgICBjYXNlICdtYWMnOlxuICAgIGNhc2UgJ21hY2ludG9zaCc6XG4gICAgY2FzZSAneC1tYWMtcm9tYW4nOlxuICAgICAgcmV0dXJuICdtYWNpbnRvc2gnXG4gICAgY2FzZSAnaXNvLTg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMSc6XG4gICAgY2FzZSAndGlzLTYyMCc6XG4gICAgY2FzZSAnd2luZG93cy04NzQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTg3NCdcbiAgICBjYXNlICdjcDEyNTAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MCc6XG4gICAgY2FzZSAneC1jcDEyNTAnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTAnXG4gICAgY2FzZSAnY3AxMjUxJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTEnOlxuICAgIGNhc2UgJ3gtY3AxMjUxJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUxJ1xuICAgIGNhc2UgJ2Fuc2lfeDMuNC0xOTY4JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnY3AxMjUyJzpcbiAgICBjYXNlICdjcDgxOSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjEnOlxuICAgIGNhc2UgJ2libTgxOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgY2FzZSAnaXNvLWlyLTEwMCc6XG4gICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICBjYXNlICdpc284ODU5MSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICBjYXNlICdsMSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MidcbiAgICBjYXNlICdjcDEyNTMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Myc6XG4gICAgY2FzZSAneC1jcDEyNTMnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTMnXG4gICAgY2FzZSAnY3AxMjU0JzpcbiAgICBjYXNlICdjc2lzb2xhdGluNSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0OCc6XG4gICAgY2FzZSAnaXNvODg1OS05JzpcbiAgICBjYXNlICdpc284ODU5OSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOToxOTg5JzpcbiAgICBjYXNlICdsNSc6XG4gICAgY2FzZSAnbGF0aW41JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTQnOlxuICAgIGNhc2UgJ3gtY3AxMjU0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU0J1xuICAgIGNhc2UgJ2NwMTI1NSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU1JzpcbiAgICBjYXNlICd4LWNwMTI1NSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NSdcbiAgICBjYXNlICdjcDEyNTYnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nic6XG4gICAgY2FzZSAneC1jcDEyNTYnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnXG4gICAgY2FzZSAnY3AxMjU3JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTcnOlxuICAgIGNhc2UgJ3gtY3AxMjU3JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU3J1xuICAgIGNhc2UgJ2NwMTI1OCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU4JzpcbiAgICBjYXNlICd4LWNwMTI1OCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1OCdcbiAgICBjYXNlICd4LW1hYy1jeXJpbGxpYyc6XG4gICAgY2FzZSAneC1tYWMtdWtyYWluaWFuJzpcbiAgICAgIHJldHVybiAneC1tYWMtY3lyaWxsaWMnXG4gICAgY2FzZSAnY2hpbmVzZSc6XG4gICAgY2FzZSAnY3NnYjIzMTInOlxuICAgIGNhc2UgJ2NzaXNvNThnYjIzMTI4MCc6XG4gICAgY2FzZSAnZ2IyMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyLTgwJzpcbiAgICBjYXNlICdnYmsnOlxuICAgIGNhc2UgJ2lzby1pci01OCc6XG4gICAgY2FzZSAneC1nYmsnOlxuICAgICAgcmV0dXJuICdHQksnXG4gICAgY2FzZSAnZ2IxODAzMCc6XG4gICAgICByZXR1cm4gJ2diMTgwMzAnXG4gICAgY2FzZSAnYmlnNSc6XG4gICAgY2FzZSAnYmlnNS1oa3Njcyc6XG4gICAgY2FzZSAnY24tYmlnNSc6XG4gICAgY2FzZSAnY3NiaWc1JzpcbiAgICBjYXNlICd4LXgtYmlnNSc6XG4gICAgICByZXR1cm4gJ0JpZzUnXG4gICAgY2FzZSAnY3NldWNwa2RmbXRqYXBhbmVzZSc6XG4gICAgY2FzZSAnZXVjLWpwJzpcbiAgICBjYXNlICd4LWV1Yy1qcCc6XG4gICAgICByZXR1cm4gJ0VVQy1KUCdcbiAgICBjYXNlICdjc2lzbzIwMjJqcCc6XG4gICAgY2FzZSAnaXNvLTIwMjItanAnOlxuICAgICAgcmV0dXJuICdJU08tMjAyMi1KUCdcbiAgICBjYXNlICdjc3NoaWZ0amlzJzpcbiAgICBjYXNlICdtczkzMic6XG4gICAgY2FzZSAnbXNfa2FuamknOlxuICAgIGNhc2UgJ3NoaWZ0LWppcyc6XG4gICAgY2FzZSAnc2hpZnRfamlzJzpcbiAgICBjYXNlICdzamlzJzpcbiAgICBjYXNlICd3aW5kb3dzLTMxaic6XG4gICAgY2FzZSAneC1zamlzJzpcbiAgICAgIHJldHVybiAnU2hpZnRfSklTJ1xuICAgIGNhc2UgJ2NzZXVja3InOlxuICAgIGNhc2UgJ2Nza3NjNTYwMTE5ODcnOlxuICAgIGNhc2UgJ2V1Yy1rcic6XG4gICAgY2FzZSAnaXNvLWlyLTE0OSc6XG4gICAgY2FzZSAna29yZWFuJzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4Nyc6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODknOlxuICAgIGNhc2UgJ2tzYzU2MDEnOlxuICAgIGNhc2UgJ2tzY181NjAxJzpcbiAgICBjYXNlICd3aW5kb3dzLTk0OSc6XG4gICAgICByZXR1cm4gJ0VVQy1LUidcbiAgICBjYXNlICdjc2lzbzIwMjJrcic6XG4gICAgY2FzZSAnaHotZ2ItMjMxMic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24nOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuLWV4dCc6XG4gICAgY2FzZSAnaXNvLTIwMjIta3InOlxuICAgIGNhc2UgJ3JlcGxhY2VtZW50JzpcbiAgICAgIHJldHVybiAncmVwbGFjZW1lbnQnXG4gICAgY2FzZSAndW5pY29kZWZmZmUnOlxuICAgIGNhc2UgJ3V0Zi0xNmJlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2QkUnXG4gICAgY2FzZSAnY3N1bmljb2RlJzpcbiAgICBjYXNlICdpc28tMTA2NDYtdWNzLTInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1bmljb2RlJzpcbiAgICBjYXNlICd1bmljb2RlZmVmZic6XG4gICAgY2FzZSAndXRmLTE2JzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICAgIGNhc2UgJ3gtdXNlci1kZWZpbmVkJzpcbiAgICAgIHJldHVybiAneC11c2VyLWRlZmluZWQnXG4gICAgZGVmYXVsdDogcmV0dXJuICdmYWlsdXJlJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRFbmNvZGluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2JcdTIwMTlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ1x1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtFdmVudHMsXG4gIGtBYm9ydGVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trU3RhdGVdID0gJ2VtcHR5J1xuICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgdGhpc1trRXJyb3JdID0gbnVsbFxuICAgIHRoaXNba0V2ZW50c10gPSB7XG4gICAgICBsb2FkZW5kOiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBhYm9ydDogbnVsbCxcbiAgICAgIGxvYWQ6IG51bGwsXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICAgIGxvYWRzdGFydDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzQXJyYXlCdWZmZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0FycmF5QnVmZmVyIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQXJyYXlCdWZmZXIuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0JpbmFyeVN0cmluZ1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQmluYXJ5U3RyaW5nIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBCaW5hcnlTdHJpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQmluYXJ5U3RyaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNEYXRhVGV4dFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nXG4gICAqL1xuICByZWFkQXNUZXh0IChibG9iLCBlbmNvZGluZyA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RpbmcgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoZW5jb2RpbmcpXG4gICAgfVxuXG4gICAgLy8gVGhlIHJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIFRleHQgYW5kIGVuY29kaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ1RleHQnLCBlbmNvZGluZylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzRGF0YVVSTFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzRGF0YVVSTCAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzRGF0YVVSTChibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCwgbXVzdFxuICAgIC8vIGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBEYXRhVVJMLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0RhdGFVUkwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1hYm9ydFxuICAgKi9cbiAgYWJvcnQgKCkge1xuICAgIC8vIDEuIElmIHRoaXMncyBzdGF0ZSBpcyBcImVtcHR5XCIgb3IgaWYgdGhpcydzIHN0YXRlIGlzXG4gICAgLy8gICAgXCJkb25lXCIgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbCBhbmQgdGVybWluYXRlXG4gICAgLy8gICAgdGhpcyBhbGdvcml0aG0uXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2VtcHR5JyB8fCB0aGlzW2tTdGF0ZV0gPT09ICdkb25lJykge1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXMncyBzdGF0ZSBpcyBcImxvYWRpbmdcIiBzZXQgdGhpcydzIHN0YXRlIHRvXG4gICAgLy8gICAgXCJkb25lXCIgYW5kIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwuXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSAnZG9uZSdcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGFueSB0YXNrcyBmcm9tIHRoaXMgb24gdGhlIGZpbGUgcmVhZGluZ1xuICAgIC8vICAgIHRhc2sgc291cmNlIGluIGFuIGFmZmlsaWF0ZWQgdGFzayBxdWV1ZSwgdGhlbiByZW1vdmVcbiAgICAvLyAgICB0aG9zZSB0YXNrcyBmcm9tIHRoYXQgdGFzayBxdWV1ZS5cbiAgICB0aGlzW2tBYm9ydGVkXSA9IHRydWVcblxuICAgIC8vIDQuIFRlcm1pbmF0ZSB0aGUgYWxnb3JpdGhtIGZvciB0aGUgcmVhZCBtZXRob2QgYmVpbmcgcHJvY2Vzc2VkLlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDUuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgYWJvcnQgYXQgdGhpcy5cbiAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Fib3J0JywgdGhpcylcblxuICAgIC8vIDYuIElmIHRoaXMncyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoaXMuXG4gICAgaWYgKHRoaXNba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZWFkeXN0YXRlXG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHN3aXRjaCAodGhpc1trU3RhdGVdKSB7XG4gICAgICBjYXNlICdlbXB0eSc6IHJldHVybiB0aGlzLkVNUFRZXG4gICAgICBjYXNlICdsb2FkaW5nJzogcmV0dXJuIHRoaXMuTE9BRElOR1xuICAgICAgY2FzZSAnZG9uZSc6IHJldHVybiB0aGlzLkRPTkVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVzdWx0XG4gICAqL1xuICBnZXQgcmVzdWx0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIHJlc3VsdCBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyByZXN1bHQuXG4gICAgcmV0dXJuIHRoaXNba1Jlc3VsdF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lcnJvclxuICAgKi9cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIGVycm9yIGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIGVycm9yLlxuICAgIHJldHVybiB0aGlzW2tFcnJvcl1cbiAgfVxuXG4gIGdldCBvbmxvYWRlbmQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkZW5kXG4gIH1cblxuICBzZXQgb25sb2FkZW5kIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkZW5kKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCB0aGlzW2tFdmVudHNdLmxvYWRlbmQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpc1trRXZlbnRzXS5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2Fkc3RhcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnRcbiAgfVxuXG4gIHNldCBvbmxvYWRzdGFydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbnByb2dyZXNzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldCBvbnByb2dyZXNzIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5wcm9ncmVzcykge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRcbiAgfVxuXG4gIHNldCBvbmxvYWQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXNba0V2ZW50c10ubG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25hYm9ydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmFib3J0XG4gIH1cblxuICBzZXQgb25hYm9ydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uYWJvcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzW2tFdmVudHNdLmFib3J0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZW1wdHlcbkZpbGVSZWFkZXIuRU1QVFkgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5FTVBUWSA9IDBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1sb2FkaW5nXG5GaWxlUmVhZGVyLkxPQURJTkcgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5MT0FESU5HID0gMVxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWRvbmVcbkZpbGVSZWFkZXIuRE9ORSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkRPTkUgPSAyXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIucHJvdG90eXBlLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkQXNBcnJheUJ1ZmZlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzQmluYXJ5U3RyaW5nOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNEYXRhVVJMOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVzdWx0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2Fkc3RhcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ucHJvZ3Jlc3M6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25hYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZVJlYWRlcicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRmlsZVJlYWRlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0NvbnN0cnVjdDogcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJykua0NvbnN0cnVjdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB1cmxFcXVhbHMsIGZpZWxkVmFsdWVzOiBnZXRGaWVsZFZhbHVlcyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBSZXNwb25zZSwgY2xvbmVSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3N5bWJvbHMnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyB1cmxJc0h0dHBIdHRwc1NjaGVtZSwgY3JlYXRlRGVmZXJyZWRQcm9taXNlLCByZWFkQWxsQnl0ZXMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYXJndW1lbnRzWzFdXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIDIuMi4xXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXNwb25zZXMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIC8vIFdlIGRvbid0IGltcGxlbWVudCBDT1JzIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIHRoZSByZXNwb25zZXMsIHlheSFcblxuICAgIC8vIDUuNS4xXG4gICAgY29uc3QgcmVzcG9uc2VMaXN0ID0gW11cblxuICAgIC8vIDUuNS4yXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDUuNS4yLjFcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHk/LnNvdXJjZSA/PyBudWxsKVxuICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHkgPSBib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0KVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyB9KVxuXG4gICAgcmVxdWVzdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10ocmVxdWVzdHMpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVC4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIGZldGNoaW5nPltdfSAqL1xuICAgIGNvbnN0IGZldGNoQ29udHJvbGxlcnMgPSBbXVxuXG4gICAgLy8gNS5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIC8vIDUuMVxuICAgICAgY29uc3QgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cblxuICAgICAgLy8gNS4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZS4nXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNFxuICAgICAgci5pbml0aWF0b3IgPSAnZmV0Y2gnXG4gICAgICByLmRlc3RpbmF0aW9uID0gJ3N1YnJlc291cmNlJ1xuXG4gICAgICAvLyA1LjVcbiAgICAgIHJlcXVlc3RMaXN0LnB1c2gocilcblxuICAgICAgLy8gNS42XG4gICAgICBjb25zdCByZXNwb25zZVByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgICAvLyA1LjdcbiAgICAgIGZldGNoQ29udHJvbGxlcnMucHVzaChmZXRjaGluZyh7XG4gICAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICAgIGRpc3BhdGNoZXI6IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdDYWNoZS5wdXQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgaW5uZXJSZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlubmVyUmVxdWVzdCA9IHJlcXVlc3Rba1N0YXRlXVxuICAgIH0gZWxzZSB7IC8vIDMuXG4gICAgICBpbm5lclJlcXVlc3QgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGlubmVyUmVxdWVzdC51cmwpIHx8IGlubmVyUmVxdWVzdC5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0dvdCAyMDYgc3RhdHVzJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA3LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHtcbiAgICAgIC8vIDcuMS5cbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgLy8gNy4yLlxuICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgIC8vIDcuMi4xXG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0dvdCAqIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAmJiAoaXNEaXN0dXJiZWQoaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbSkgfHwgaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5kZWxldGUnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSZXF1ZXN0fVxuICAgICAqL1xuICAgIGxldCByID0gbnVsbFxuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKVxuXG4gICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgcmVxdWVzdDogcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG4gICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSghIXJlcXVlc3RSZXNwb25zZXM/Lmxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGUta2V5c1xuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVhZG9ubHkgUmVxdWVzdFtdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDIuMVxuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykgeyAvLyAyLjJcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXF1ZXN0cyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIC8vIDUuMi4xLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgLy8gNS4zLjIuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA1LjQuMVxuICAgICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgICAvLyA1LjQuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdCgnaHR0cHM6Ly9hJylcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrU3RhdGVdID0gcmVxdWVzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrUmVhbG1dID0gcmVxdWVzdC5jbGllbnRcblxuICAgICAgICAvLyA1LjQuMi4xXG4gICAgICAgIHJlcXVlc3RMaXN0LnB1c2gocmVxdWVzdE9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gNS40LjNcbiAgICAgIHByb21pc2UucmVzb2x2ZShPYmplY3QuZnJlZXplKHJlcXVlc3RMaXN0KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2JhdGNoLWNhY2hlLW9wZXJhdGlvbnMtYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSBvcGVyYXRpb25zXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2JhdGNoQ2FjaGVPcGVyYXRpb25zIChvcGVyYXRpb25zKSB7XG4gICAgLy8gMS5cbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgLy8gMi5cbiAgICBjb25zdCBiYWNrdXBDYWNoZSA9IFsuLi5jYWNoZV1cblxuICAgIC8vIDMuXG4gICAgY29uc3QgYWRkZWRJdGVtcyA9IFtdXG5cbiAgICAvLyA0LjFcbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIHRyeSB7XG4gICAgICAvLyA0LjJcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgLy8gNC4yLjFcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlICE9PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24udHlwZSAhPT0gJ3B1dCcpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ29wZXJhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIFwiZGVsZXRlXCIgb3IgXCJwdXRcIidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjJcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24ucmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjNcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zLCBhZGRlZEl0ZW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCc/Pz8nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjRcbiAgICAgICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgICAgICAvLyA0LjIuNVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgLy8gNC4yLjUuMVxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucylcblxuICAgICAgICAgIC8vIFRPRE86IHRoZSBzcGVjIGlzIHdyb25nLCB0aGlzIGlzIG5lZWRlZCB0byBwYXNzIFdQVHNcbiAgICAgICAgICBpZiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi41LjJcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNS4yLjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSAncHV0JykgeyAvLyA0LjIuNlxuICAgICAgICAgIC8vIDQuMi42LjFcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLnJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ3B1dCBvcGVyYXRpb24gc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuMlxuICAgICAgICAgIGNvbnN0IHIgPSBvcGVyYXRpb24ucmVxdWVzdFxuXG4gICAgICAgICAgLy8gNC4yLjYuM1xuICAgICAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdleHBlY3RlZCBodHRwIG9yIGh0dHBzIHNjaGVtZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNFxuICAgICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBnZXQgbWV0aG9kJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi41XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ29wdGlvbnMgbXVzdCBub3QgYmUgZGVmaW5lZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNlxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0KVxuXG4gICAgICAgICAgLy8gNC4yLjYuN1xuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi42LjcuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi44XG4gICAgICAgICAgY2FjaGUucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG5cbiAgICAgICAgICAvLyA0LjIuNi4xMFxuICAgICAgICAgIGFkZGVkSXRlbXMucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuN1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgfVxuXG4gICAgICAvLyA0LjNcbiAgICAgIHJldHVybiByZXN1bHRMaXN0XG4gICAgfSBjYXRjaCAoZSkgeyAvLyA1LlxuICAgICAgLy8gNS4xXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QubGVuZ3RoID0gMFxuXG4gICAgICAvLyA1LjJcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGJhY2t1cENhY2hlXG5cbiAgICAgIC8vIDUuM1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNxdWVyeS1jYWNoZVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gdGFyZ2V0U3RvcmFnZVxuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNxdWVyeUNhY2hlIChyZXF1ZXN0UXVlcnksIG9wdGlvbnMsIHRhcmdldFN0b3JhZ2UpIHtcbiAgICAvKiogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9ICovXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICBjb25zdCBzdG9yYWdlID0gdGFyZ2V0U3RvcmFnZSA/PyB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IFtjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZV0gPSByZXF1ZXN0UmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLiNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0ocmVxdWVzdFF1ZXJ5LCBjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3JlcXVlc3QtbWF0Y2hlcy1jYWNoZWQtaXRlbS1hbGdvcml0aG1cbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSAocmVxdWVzdFF1ZXJ5LCByZXF1ZXN0LCByZXNwb25zZSA9IG51bGwsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiAob3B0aW9ucz8uaWdub3JlTWV0aG9kID09PSBmYWxzZSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH1cblxuICAgIGNvbnN0IHF1ZXJ5VVJMID0gbmV3IFVSTChyZXF1ZXN0UXVlcnkudXJsKVxuXG4gICAgY29uc3QgY2FjaGVkVVJMID0gbmV3IFVSTChyZXF1ZXN0LnVybClcblxuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTZWFyY2gpIHtcbiAgICAgIGNhY2hlZFVSTC5zZWFyY2ggPSAnJ1xuXG4gICAgICBxdWVyeVVSTC5zZWFyY2ggPSAnJ1xuICAgIH1cblxuICAgIGlmICghdXJsRXF1YWxzKHF1ZXJ5VVJMLCBjYWNoZWRVUkwsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXNwb25zZSA9PSBudWxsIHx8XG4gICAgICBvcHRpb25zPy5pZ25vcmVWYXJ5IHx8XG4gICAgICAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0VmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcXVlc3RRdWVyeS5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcblxuICAgICAgLy8gSWYgb25lIGhhcyB0aGUgaGVhZGVyIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgb3Igb25lIGhhc1xuICAgICAgLy8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHJlcXVlc3RWYWx1ZSAhPT0gcXVlcnlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGlmIChvcHRpb25zLmNhY2hlTmFtZSAhPSBudWxsKSB7XG4gICAgICAvLyAxLjEuMS4xXG4gICAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhvcHRpb25zLmNhY2hlTmFtZSkpIHtcbiAgICAgICAgLy8gMS4xLjEuMS4xXG4gICAgICAgIGNvbnN0IGNhY2hlTGlzdCA9IHRoaXMuI2NhY2hlcy5nZXQob3B0aW9ucy5jYWNoZU5hbWUpXG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICByZXR1cm4gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyAyLlxuICAgICAgLy8gMi4yXG4gICAgICBmb3IgKGNvbnN0IGNhY2hlTGlzdCBvZiB0aGlzLiNjYWNoZXMudmFsdWVzKCkpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIC8vIDIuMi4xLjJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1oYXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGhhcyAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuaGFzJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm9wZW4nIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xXG4gICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKSkge1xuICAgICAgLy8gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJykgIT09IGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpXG5cbiAgICAgIC8vIDIuMS4xXG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuI2NhY2hlcy5nZXQoY2FjaGVOYW1lKVxuXG4gICAgICAvLyAyLjEuMS4xXG4gICAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICAgIH1cblxuICAgIC8vIDIuMlxuICAgIGNvbnN0IGNhY2hlID0gW11cblxuICAgIC8vIDIuM1xuICAgIHRoaXMuI2NhY2hlcy5zZXQoY2FjaGVOYW1lLCBjYWNoZSlcblxuICAgIC8vIDIuNFxuICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1kZWxldGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuZGVsZXRlJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuZGVsZXRlKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWtleXNcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgLy8gMi4xXG4gICAgY29uc3Qga2V5cyA9IHRoaXMuI2NhY2hlcy5rZXlzKClcblxuICAgIC8vIDIuMlxuICAgIHJldHVybiBbLi4ua2V5c11cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVN0b3JhZ2UucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZVN0b3JhZ2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVN0b3JhZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDVExFeGNsdWRpbmdIdGFiICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwIHx8IGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgfHwgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuYW1lKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPD0gMHgyMCB8fCBjb2RlID4gMHg3RikgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9J1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID09PSAweDIyIHx8XG4gICAgICBjb2RlID09PSAweDJDIHx8XG4gICAgICBjb2RlID09PSAweDNCIHx8XG4gICAgICBjb2RlID09PSAweDVDIHx8XG4gICAgICBjb2RlID4gMHg3RSAvLyBub24tYXNjaWlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZWFkZXIgdmFsdWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVQYXRoIChwYXRoKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBwYXRoKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKGNvZGUgPCAweDIxIHx8IGNoYXIgPT09ICc7Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBwYXRoJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJIGhhdmUgbm8gaWRlYSB3aHkgdGhlc2UgdmFsdWVzIGFyZW4ndCBhbGxvd2VkIHRvIGJlIGhvbmVzdCxcbiAqIGJ1dCBEZW5vIHRlc3RzIHRoZXNlLiAtIEtoYWZyYVxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIGlmIChcbiAgICBkb21haW4uc3RhcnRzV2l0aCgnLScpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCcuJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy0nKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICBjb25zdCBkYXlzID0gW1xuICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAgICdUaHUnLCAnRnJpJywgJ1NhdCdcbiAgXVxuXG4gIGNvbnN0IG1vbnRocyA9IFtcbiAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYydcbiAgXVxuXG4gIGNvbnN0IGRheU5hbWUgPSBkYXlzW2RhdGUuZ2V0VVRDRGF5KCldXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtb250aCA9IG1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgY29uc3QgaG91ciA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9IEdNVGBcbn1cblxuLyoqXG4gbWF4LWFnZS1hdiAgICAgICAgPSBcIk1heC1BZ2U9XCIgbm9uLXplcm8tZGlnaXQgKkRJR0lUXG4gICAgICAgICAgICAgICAgICAgICAgIDsgSW4gcHJhY3RpY2UsIGJvdGggZXhwaXJlcy1hdiBhbmQgbWF4LWFnZS1hdlxuICAgICAgICAgICAgICAgICAgICAgICA7IGFyZSBsaW1pdGVkIHRvIGRhdGVzIHJlcHJlc2VudGFibGUgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgIDsgdXNlciBhZ2VudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhBZ2VcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVNYXhBZ2UgKG1heEFnZSkge1xuICBpZiAobWF4QWdlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbWF4LWFnZScpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY1I3NlY3Rpb24tNC4xLjFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuQ29va2llfSBjb29raWVcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5IChjb29raWUpIHtcbiAgaWYgKGNvb2tpZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YWxpZGF0ZUNvb2tpZU5hbWUoY29va2llLm5hbWUpXG4gIHZhbGlkYXRlQ29va2llVmFsdWUoY29va2llLnZhbHVlKVxuXG4gIGNvbnN0IG91dCA9IFtgJHtjb29raWUubmFtZX09JHtjb29raWUudmFsdWV9YF1cblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjFcbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4yXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19Ib3N0LScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgICBjb29raWUuZG9tYWluID0gbnVsbFxuICAgIGNvb2tpZS5wYXRoID0gJy8nXG4gIH1cblxuICBpZiAoY29va2llLnNlY3VyZSkge1xuICAgIG91dC5wdXNoKCdTZWN1cmUnKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5odHRwT25seSkge1xuICAgIG91dC5wdXNoKCdIdHRwT25seScpXG4gIH1cblxuICBpZiAodHlwZW9mIGNvb2tpZS5tYXhBZ2UgPT09ICdudW1iZXInKSB7XG4gICAgdmFsaWRhdGVDb29raWVNYXhBZ2UoY29va2llLm1heEFnZSlcbiAgICBvdXQucHVzaChgTWF4LUFnZT0ke2Nvb2tpZS5tYXhBZ2V9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZG9tYWluKSB7XG4gICAgdmFsaWRhdGVDb29raWVEb21haW4oY29va2llLmRvbWFpbilcbiAgICBvdXQucHVzaChgRG9tYWluPSR7Y29va2llLmRvbWFpbn1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDb29raWVQYXRoKGNvb2tpZS5wYXRoKVxuICAgIG91dC5wdXNoKGBQYXRoPSR7Y29va2llLnBhdGh9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZXhwaXJlcyAmJiBjb29raWUuZXhwaXJlcy50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgIG91dC5wdXNoKGBFeHBpcmVzPSR7dG9JTUZEYXRlKGNvb2tpZS5leHBpcmVzKX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5zYW1lU2l0ZSkge1xuICAgIG91dC5wdXNoKGBTYW1lU2l0ZT0ke2Nvb2tpZS5zYW1lU2l0ZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGNvb2tpZS51bnBhcnNlZCkge1xuICAgIGlmICghcGFydC5pbmNsdWRlcygnPScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5wYXJzZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IFtrZXksIC4uLnZhbHVlXSA9IHBhcnQuc3BsaXQoJz0nKVxuXG4gICAgb3V0LnB1c2goYCR7a2V5LnRyaW0oKX09JHt2YWx1ZS5qb2luKCc9Jyl9YClcbiAgfVxuXG4gIHJldHVybiBvdXQuam9pbignOyAnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNDVExFeGNsdWRpbmdIdGFiLFxuICB2YWxpZGF0ZUNvb2tpZU5hbWUsXG4gIHZhbGlkYXRlQ29va2llUGF0aCxcbiAgdmFsaWRhdGVDb29raWVWYWx1ZSxcbiAgdG9JTUZEYXRlLFxuICBzdHJpbmdpZnlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwYXJzZVNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb29raWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZXxudW1iZXJ8dW5kZWZpbmVkfSBleHBpcmVzXG4gKiBAcHJvcGVydHkge251bWJlcnx1bmRlZmluZWR9IG1heEFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBkb21haW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gcGF0aFxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gc2VjdXJlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBodHRwT25seVxuICogQHByb3BlcnR5IHsnU3RyaWN0J3wnTGF4J3wnTm9uZSd9IHNhbWVTaXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSB1bnBhcnNlZFxuICovXG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWUgPSBoZWFkZXJzLmdldCgnY29va2llJylcbiAgY29uc3Qgb3V0ID0ge31cblxuICBpZiAoIWNvb2tpZSkge1xuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGZvciAoY29uc3QgcGllY2Ugb2YgY29va2llLnNwbGl0KCc7JykpIHtcbiAgICBjb25zdCBbbmFtZSwgLi4udmFsdWVdID0gcGllY2Uuc3BsaXQoJz0nKVxuXG4gICAgb3V0W25hbWUudHJpbSgpXSA9IHZhbHVlLmpvaW4oJz0nKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7eyBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcgfXx1bmRlZmluZWR9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWxldGVDb29raWUgKGhlYWRlcnMsIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ2RlbGV0ZUNvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKG5hbWUpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldFNldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVGhpcyBpcyBhIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIHVuaXF1ZSB1c2VkXG4vLyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBlbmRwb2ludCBhY2NlcHRzIHdlYnNvY2tldFxuLy8gY29ubmVjdGlvbnMuXG4vLyBTZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTEuM1xuY29uc3QgdWlkID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSdcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuY29uc3Qgc3RhdGVzID0ge1xuICBDT05ORUNUSU5HOiAwLFxuICBPUEVOOiAxLFxuICBDTE9TSU5HOiAyLFxuICBDTE9TRUQ6IDNcbn1cblxuY29uc3Qgb3Bjb2RlcyA9IHtcbiAgQ09OVElOVUFUSU9OOiAweDAsXG4gIFRFWFQ6IDB4MSxcbiAgQklOQVJZOiAweDIsXG4gIENMT1NFOiAweDgsXG4gIFBJTkc6IDB4OSxcbiAgUE9ORzogMHhBXG59XG5cbmNvbnN0IG1heFVuc2lnbmVkMTZCaXQgPSAyICoqIDE2IC0gMSAvLyA2NTUzNVxuXG5jb25zdCBwYXJzZXJTdGF0ZXMgPSB7XG4gIElORk86IDAsXG4gIFBBWUxPQURMRU5HVEhfMTY6IDIsXG4gIFBBWUxPQURMRU5HVEhfNjQ6IDMsXG4gIFJFQURfREFUQTogNFxufVxuXG5jb25zdCBlbXB0eUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtXZWJTb2NrZXRVUkw6IFN5bWJvbCgndXJsJyksXG4gIGtSZWFkeVN0YXRlOiBTeW1ib2woJ3JlYWR5IHN0YXRlJyksXG4gIGtDb250cm9sbGVyOiBTeW1ib2woJ2NvbnRyb2xsZXInKSxcbiAga1Jlc3BvbnNlOiBTeW1ib2woJ3Jlc3BvbnNlJyksXG4gIGtCaW5hcnlUeXBlOiBTeW1ib2woJ2JpbmFyeSB0eXBlJyksXG4gIGtTZW50Q2xvc2U6IFN5bWJvbCgnc2VudCBjbG9zZScpLFxuICBrUmVjZWl2ZWRDbG9zZTogU3ltYm9sKCdyZWNlaXZlZCBjbG9zZScpLFxuICBrQnl0ZVBhcnNlcjogU3ltYm9sKCdieXRlIHBhcnNlcicpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBNZXNzYWdlRXZlbnQsIEVycm9yRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0VzdGFibGlzaGVkICh3cykge1xuICAvLyBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGFzIHByb3ZpZGVkIGZvciBhYm92ZSwgaXQgaXNcbiAgLy8gc2FpZCB0aGF0IF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgRXN0YWJsaXNoZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBpbiB0aGUgT1BFTiBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLk9QRU5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2luZyAod3MpIHtcbiAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0lOR1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0V2ZW50SW5pdCB8IHVuZGVmaW5lZH0gZXZlbnRJbml0RGljdFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQgKGUsIHRhcmdldCwgZXZlbnRDb25zdHJ1Y3RvciA9IEV2ZW50LCBldmVudEluaXREaWN0KSB7XG4gIC8vIDEuIElmIGV2ZW50Q29uc3RydWN0b3IgaXMgbm90IGdpdmVuLCB0aGVuIGxldCBldmVudENvbnN0cnVjdG9yIGJlIEV2ZW50LlxuXG4gIC8vIDIuIExldCBldmVudCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGV2ZW50IGdpdmVuIGV2ZW50Q29uc3RydWN0b3IsXG4gIC8vICAgIGluIHRoZSByZWxldmFudCByZWFsbSBvZiB0YXJnZXQuXG4gIC8vIDMuIEluaXRpYWxpemUgZXZlbnRcdTIwMTlzIHR5cGUgYXR0cmlidXRlIHRvIGUuXG4gIGNvbnN0IGV2ZW50ID0gbmV3IGV2ZW50Q29uc3RydWN0b3IoZSwgZXZlbnRJbml0RGljdCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgLy8gNC4gSW5pdGlhbGl6ZSBhbnkgb3RoZXIgSURMIGF0dHJpYnV0ZXMgb2YgZXZlbnQgYXMgZGVzY3JpYmVkIGluIHRoZVxuICAvLyAgICBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLlxuXG4gIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGRpc3BhdGNoaW5nIGV2ZW50IGF0IHRhcmdldCwgd2l0aCBsZWdhY3kgdGFyZ2V0XG4gIC8vICAgIG92ZXJyaWRlIGZsYWcgc2V0IGlmIHNldC5cbiAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgT3Bjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBhcHBsaWNhdGlvbiBkYXRhXG4gKi9cbmZ1bmN0aW9uIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCAod3MsIHR5cGUsIGRhdGEpIHtcbiAgLy8gMS4gSWYgcmVhZHkgc3RhdGUgaXMgbm90IE9QRU4gKDEpLCB0aGVuIHJldHVybi5cbiAgaWYgKHdzW2tSZWFkeVN0YXRlXSAhPT0gc3RhdGVzLk9QRU4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIExldCBkYXRhRm9yRXZlbnQgYmUgZGV0ZXJtaW5lZCBieSBzd2l0Y2hpbmcgb24gdHlwZSBhbmQgYmluYXJ5IHR5cGU6XG4gIGxldCBkYXRhRm9yRXZlbnRcblxuICBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBUZXh0XG4gICAgLy8gICAgICBhIG5ldyBET01TdHJpbmcgY29udGFpbmluZyBkYXRhXG4gICAgdHJ5IHtcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShkYXRhKVxuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBpbnZhbGlkIFVURi04IGluIHRleHQgZnJhbWUuJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBvcGNvZGVzLkJJTkFSWSkge1xuICAgIGlmICh3c1trQmluYXJ5VHlwZV0gPT09ICdibG9iJykge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYmxvYlwiXG4gICAgICAvLyAgICAgIGEgbmV3IEJsb2Igb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICAgIG9iamVjdCwgdGhhdCByZXByZXNlbnRzIGRhdGEgYXMgaXRzIHJhdyBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgQmxvYihbZGF0YV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImFycmF5YnVmZmVyXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQXJyYXlCdWZmZXIgb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGVcbiAgICAgIC8vICAgICAgV2ViU29ja2V0IG9iamVjdCwgd2hvc2UgY29udGVudHMgYXJlIGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBVaW50OEFycmF5KGRhdGEpLmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgTWVzc2FnZUV2ZW50LCB7XG4gICAgb3JpZ2luOiB3c1trV2ViU29ja2V0VVJMXS5vcmlnaW4sXG4gICAgZGF0YTogZGF0YUZvckV2ZW50XG4gIH0pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyNjE2XG4gKiBAc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM5ODQwN1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3RvY29sXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJwcm90b2NvbCAocHJvdG9jb2wpIHtcbiAgLy8gSWYgcHJlc2VudCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMgb25lXG4gIC8vIG9yIG1vcmUgY29tbWEtc2VwYXJhdGVkIHN1YnByb3RvY29sIHRoZSBjbGllbnQgd2lzaGVzIHRvIHNwZWFrLFxuICAvLyBvcmRlcmVkIGJ5IHByZWZlcmVuY2UuICBUaGUgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGlzIHZhbHVlXG4gIC8vIE1VU1QgYmUgbm9uLWVtcHR5IHN0cmluZ3Mgd2l0aCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVKzAwMjEgdG9cbiAgLy8gVSswMDdFIG5vdCBpbmNsdWRpbmcgc2VwYXJhdG9yIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpblxuICAvLyBbUkZDMjYxNl0gYW5kIE1VU1QgYWxsIGJlIHVuaXF1ZSBzdHJpbmdzLlxuICBpZiAocHJvdG9jb2wubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgcHJvdG9jb2wpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fFxuICAgICAgY29kZSA+IDB4N0UgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9JyB8fFxuICAgICAgY29kZSA9PT0gMzIgfHwgLy8gU1BcbiAgICAgIGNvZGUgPT09IDkgLy8gSFRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LTRcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlIChjb2RlKSB7XG4gIGlmIChjb2RlID49IDEwMDAgJiYgY29kZSA8IDEwMTUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29kZSAhPT0gMTAwNCAmJiAvLyByZXNlcnZlZFxuICAgICAgY29kZSAhPT0gMTAwNSAmJiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICAgIGNvZGUgIT09IDEwMDYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICovXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiAod3MsIHJlYXNvbikge1xuICBjb25zdCB7IFtrQ29udHJvbGxlcl06IGNvbnRyb2xsZXIsIFtrUmVzcG9uc2VdOiByZXNwb25zZSB9ID0gd3NcblxuICBjb250cm9sbGVyLmFib3J0KClcblxuICBpZiAocmVzcG9uc2U/LnNvY2tldCAmJiAhcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3llZCkge1xuICAgIHJlc3BvbnNlLnNvY2tldC5kZXN0cm95KClcbiAgfVxuXG4gIGlmIChyZWFzb24pIHtcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsIEVycm9yRXZlbnQsIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IocmVhc29uKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNDbG9zZWQsXG4gIGZpcmVFdmVudCxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBpc1ZhbGlkU3RhdHVzQ29kZSxcbiAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sXG4gIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgdWlkLCBzdGF0ZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1JlYWR5U3RhdGUsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyLFxuICBrUmVjZWl2ZWRDbG9zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IENsb3NlRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcbmNvbnN0IHsgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5vcGVuID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpXG5jaGFubmVscy5jbG9zZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJylcbmNoYW5uZWxzLnNvY2tldEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnkpID0+IHZvaWR9IG9uRXN0YWJsaXNoXG4gKiBAcGFyYW0ge1BhcnRpYWw8aW1wb3J0KCcuLi8uLi90eXBlcy93ZWJzb2NrZXQnKS5XZWJTb2NrZXRJbml0Pn0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uICh1cmwsIHByb3RvY29scywgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ25vbmUnLFxuICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInLFxuICAgIG1vZGU6ICd3ZWJzb2NrZXQnLFxuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgY2FjaGU6ICduby1zdG9yZScsXG4gICAgcmVkaXJlY3Q6ICdlcnJvcidcbiAgfSlcblxuICAvLyBOb3RlOiB1bmRpY2kgZXh0ZW5zaW9uLCBhbGxvdyBzZXR0aW5nIGN1c3RvbSBoZWFkZXJzLlxuICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpW2tIZWFkZXJzTGlzdF1cblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIC8vIFRPRE86IGVuYWJsZSBvbmNlIHBlcm1lc3NhZ2UtZGVmbGF0ZSBpcyBzdXBwb3J0ZWRcbiAgY29uc3QgcGVybWVzc2FnZURlZmxhdGUgPSAnJyAvLyAncGVybWVzc2FnZS1kZWZsYXRlOyAxNSdcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yIG9yIGl0cyBzdGF0dXMgaXMgbm90IDEwMSxcbiAgICAgIC8vICAgIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBuZXR3b3JrIGVycm9yIG9yIG5vbi0xMDEgc3RhdHVzIGNvZGUuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHByb3RvY29scyBpcyBub3QgdGhlIGVtcHR5IGxpc3QgYW5kIGV4dHJhY3RpbmcgaGVhZGVyXG4gICAgICAvLyAgICBsaXN0IHZhbHVlcyBnaXZlbiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgYW5kIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgcmVzdWx0cyBpbiBudWxsLCBmYWlsdXJlLCBvciB0aGUgZW1wdHkgYnl0ZVxuICAgICAgLy8gICAgc2VxdWVuY2UsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gMCAmJiAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCByZXNwb25kIHdpdGggc2VudCBwcm90b2NvbHMuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEZvbGxvdyB0aGUgcmVxdWlyZW1lbnRzIHN0YXRlZCBzdGVwIDIgdG8gc3RlcCA2LCBpbmNsdXNpdmUsXG4gICAgICAvLyAgICBvZiB0aGUgbGFzdCBzZXQgb2Ygc3RlcHMgaW4gc2VjdGlvbiA0LjEgb2YgVGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgUHJvdG9jb2wgdG8gdmFsaWRhdGUgcmVzcG9uc2UuIFRoaXMgZWl0aGVyIHJlc3VsdHMgaW4gZmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIG9yIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpc1xuICAgICAgLy8gICAgZXN0YWJsaXNoZWQuXG5cbiAgICAgIC8vIDIuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhbiB8VXBncmFkZXwgaGVhZGVyIGZpZWxkIG9yIHRoZSB8VXBncmFkZXxcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIEFTQ0lJIGNhc2UtXG4gICAgICAvLyAgICBpbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwid2Vic29ja2V0XCIsIHRoZSBjbGllbnQgTVVTVFxuICAgICAgLy8gICAgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1VwZ3JhZGUnKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3dlYnNvY2tldCcpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgVXBncmFkZSBoZWFkZXIgdG8gXCJ3ZWJzb2NrZXRcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBvciB0aGVcbiAgICAgIC8vICAgIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgZG9lc24ndCBjb250YWluIGEgdG9rZW4gdGhhdCBpcyBhblxuICAgICAgLy8gICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwiVXBncmFkZVwiLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdDb25uZWN0aW9uJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd1cGdyYWRlJykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBDb25uZWN0aW9uIGhlYWRlciB0byBcInVwZ3JhZGVcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBoZWFkZXIgZmllbGQgb3JcbiAgICAgIC8vICAgIHRoZSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGNvbnRhaW5zIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGVcbiAgICAgIC8vICAgIGJhc2U2NC1lbmNvZGVkIFNIQS0xIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSB8U2VjLVdlYlNvY2tldC1cbiAgICAgIC8vICAgIEtleXwgKGFzIGEgc3RyaW5nLCBub3QgYmFzZTY0LWRlY29kZWQpIHdpdGggdGhlIHN0cmluZyBcIjI1OEVBRkE1LVxuICAgICAgLy8gICAgRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExXCIgYnV0IGlnbm9yaW5nIGFueSBsZWFkaW5nIGFuZFxuICAgICAgLy8gICAgdHJhaWxpbmcgd2hpdGVzcGFjZSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjV1NBY2NlcHQgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JylcbiAgICAgIGNvbnN0IGRpZ2VzdCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGtleVZhbHVlICsgdWlkKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICBpZiAoc2VjV1NBY2NlcHQgIT09IGRpZ2VzdCkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ0luY29ycmVjdCBoYXNoIHJlY2VpdmVkIGluIFNlYy1XZWJTb2NrZXQtQWNjZXB0IGhlYWRlci4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc3wgaGVhZGVyXG4gICAgICAvLyAgICBmaWVsZCBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYW4gZXh0ZW5zaW9uXG4gICAgICAvLyAgICB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhc1xuICAgICAgLy8gICAgaW5kaWNhdGVkIGFuIGV4dGVuc2lvbiBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uICAoVGhlIHBhcnNpbmcgb2YgdGhpc1xuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIHRvIGRldGVybWluZSB3aGljaCBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQgaXNcbiAgICAgIC8vICAgIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDkuMS4pXG4gICAgICBjb25zdCBzZWNFeHRlbnNpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycpXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwgJiYgc2VjRXh0ZW5zaW9uICE9PSBwZXJtZXNzYWdlRGVmbGF0ZSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGRpZmZlcmVudCBwZXJtZXNzYWdlLWRlZmxhdGUgdGhhbiB0aGUgb25lIHNldC4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtUHJvdG9jb2x8IGhlYWRlciBmaWVsZFxuICAgICAgLy8gICAgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGEgc3VicHJvdG9jb2wgdGhhdCB3YXNcbiAgICAgIC8vICAgIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzIGluZGljYXRlZCBhXG4gICAgICAvLyAgICBzdWJwcm90b2NvbCBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNQcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpXG5cbiAgICAgIGlmIChzZWNQcm90b2NvbCAhPT0gbnVsbCAmJiBzZWNQcm90b2NvbCAhPT0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1Byb3RvY29sIHdhcyBub3Qgc2V0IGluIHRoZSBvcGVuaW5nIGhhbmRzaGFrZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdkYXRhJywgb25Tb2NrZXREYXRhKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcblxuICAgICAgaWYgKGNoYW5uZWxzLm9wZW4uaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgY2hhbm5lbHMub3Blbi5wdWJsaXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5zb2NrZXQuYWRkcmVzcygpLFxuICAgICAgICAgIHByb3RvY29sOiBzZWNQcm90b2NvbCxcbiAgICAgICAgICBleHRlbnNpb25zOiBzZWNFeHRlbnNpb25cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgb25Fc3RhYmxpc2gocmVzcG9uc2UpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBjb250cm9sbGVyXG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICAvLyBJZiB0aGUgVENQIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBhZnRlciB0aGVcbiAgLy8gV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvblxuICAvLyBpcyBzYWlkIHRvIGhhdmUgYmVlbiBjbG9zZWQgX2NsZWFubHlfLlxuICBjb25zdCB3YXNDbGVhbiA9IHdzW2tTZW50Q2xvc2VdICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0KSB7XG4gICAgY29kZSA9IHJlc3VsdC5jb2RlID8/IDEwMDVcbiAgICByZWFzb24gPSByZXN1bHQucmVhc29uXG4gIH0gZWxzZSBpZiAoIXdzW2tTZW50Q2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgZmlyZUV2ZW50KCdjbG9zZScsIHdzLCBDbG9zZUV2ZW50LCB7XG4gICAgd2FzQ2xlYW4sIGNvZGUsIHJlYXNvblxuICB9KVxuXG4gIGlmIChjaGFubmVscy5jbG9zZS5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmNsb3NlLnB1Ymxpc2goe1xuICAgICAgd2Vic29ja2V0OiB3cyxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycm9yKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuXG4gIGlmIChjaGFubmVscy5zb2NrZXRFcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNvY2tldEVycm9yLnB1Ymxpc2goZXJyb3IpXG4gIH1cblxuICB0aGlzLmRlc3Ryb3koKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc1ZhbGlkU3RhdHVzQ29kZSwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcblxuLy8gVGhpcyBjb2RlIHdhcyBpbmZsdWVuY2VkIGJ5IHdzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxMSBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT5cbi8vIENvcHlyaWdodCAoYykgMjAxMyBBcm5vdXQgS2F6ZW1pZXIgYW5kIGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE2IEx1aWdpIFBpbmNhIGFuZCBjb250cmlidXRvcnNcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMucGluZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBpbmcnKVxuY2hhbm5lbHMucG9uZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKVxuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNieXRlT2Zmc2V0ID0gMFxuXG4gICNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgI2luZm8gPSB7fVxuICAjZnJhZ21lbnRzID0gW11cblxuICBjb25zdHJ1Y3RvciAod3MpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLndzID0gd3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcblxuICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlbmV2ZXIgYSBuZXcgY2h1bmsgaXMgcmVjZWl2ZWQuXG4gICAqIENhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgbm8gbW9yZSBjaHVua3MgYnVmZmVyaW5nLFxuICAgKiBvciBub3QgZW5vdWdoIGJ5dGVzIGFyZSBidWZmZXJlZCB0byBwYXJzZS5cbiAgICovXG4gIHJ1biAoY2FsbGJhY2spIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuSU5GTykge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGxlbmd0aCwgZXRjLlxuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5maW4gPSAoYnVmZmVyWzBdICYgMHg4MCkgIT09IDBcbiAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPSBidWZmZXJbMF0gJiAweDBGXG5cbiAgICAgICAgLy8gSWYgd2UgcmVjZWl2ZSBhIGZyYWdtZW50ZWQgbWVzc2FnZSwgd2UgdXNlIHRoZSB0eXBlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyBmcmFtZSB0byBwYXJzZSB0aGUgZnVsbCBtZXNzYWdlIGFzIGJpbmFyeS90ZXh0LCB3aGVuIGl0J3MgdGVybWluYXRlZFxuICAgICAgICB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlID8/PSB0aGlzLiNpbmZvLm9wY29kZVxuXG4gICAgICAgIHRoaXMuI2luZm8uZnJhZ21lbnRlZCA9ICF0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5DT05USU5VQVRJT05cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkJJTkFSWSAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZExlbmd0aCA9IGJ1ZmZlclsxXSAmIDB4N0ZcblxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8PSAxMjUpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBwYXlsb2FkTGVuZ3RoXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNlxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgcGF5bG9hZExlbmd0aCA+IDEyNSkge1xuICAgICAgICAgIC8vIEEgZnJhZ21lbnRlZCBmcmFtZSBjYW4ndCBiZSBmcmFnbWVudGVkIGl0c2VsZlxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdGcmFnbWVudGVkIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkgJiZcbiAgICAgICAgICBwYXlsb2FkTGVuZ3RoID4gMTI1XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWVzIGNhbiBoYXZlIGEgcGF5bG9hZCBsZW5ndGggb2YgMTI1IGJ5dGVzIE1BWFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdQYXlsb2FkIGxlbmd0aCBmb3IgY29udHJvbCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkge1xuICAgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgd2l0aCBhIDEtYnl0ZSBib2R5LicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNpbmZvLmNsb3NlSW5mbyA9IHRoaXMucGFyc2VDbG9zZUJvZHkoZmFsc2UsIGJvZHkpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1NlbnRDbG9zZV0pIHtcbiAgICAgICAgICAgIC8vIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgQ2xvc2UgZnJhbWUgYW5kIGRpZCBub3QgcHJldmlvdXNseSBzZW5kIGFcbiAgICAgICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAgICAgLy8gc2VuZGluZyBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLCB0aGUgZW5kcG9pbnQgdHlwaWNhbGx5IGVjaG9zIHRoZVxuICAgICAgICAgICAgLy8gc3RhdHVzIGNvZGUgaXQgcmVjZWl2ZWQuKVxuICAgICAgICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICAgICAgYm9keS53cml0ZVVJbnQxNkJFKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUsIDApXG4gICAgICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKFxuICAgICAgICAgICAgICBjbG9zZUZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMud3Nba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgICAgICB0aGlzLndzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmVuZCgpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HKSB7XG4gICAgICAgICAgLy8gVXBvbiByZWNlaXB0IG9mIGEgUGluZyBmcmFtZSwgYW4gZW5kcG9pbnQgTVVTVCBzZW5kIGEgUG9uZyBmcmFtZSBpblxuICAgICAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBzZW50IGluIHJlc3BvbnNlIHRvIGEgUGluZyBmcmFtZSBtdXN0IGhhdmUgaWRlbnRpY2FsXG4gICAgICAgICAgLy8gXCJBcHBsaWNhdGlvbiBkYXRhXCJcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuUE9ORykpXG5cbiAgICAgICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgIGNoYW5uZWxzLnBpbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcpIHtcbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgTUFZIGJlIHNlbnQgdW5zb2xpY2l0ZWQuICBUaGlzIHNlcnZlcyBhcyBhXG4gICAgICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAgICAgLy8gbm90IGV4cGVjdGVkLlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKGNoYW5uZWxzLnBvbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBidWZmZXIucmVhZFVJbnQxNkJFKDApXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCA4KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSg4KVxuICAgICAgICBjb25zdCB1cHBlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoMClcblxuICAgICAgICAvLyAyXjMxIGlzIHRoZSBtYXhpbmltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9ICh1cHBlciA8PCA4KSArIGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG1vcmUgZGF0YSBpbiB0aGlzIGNodW5rIHRoYXQgbmVlZHMgdG8gYmUgcmVhZFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYnl0ZU9mZnNldCA+PSB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIHNlbnQgbXVsdGlwbGUgZnJhbWVzIGluIGEgc2luZ2xlIGNodW5rXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGJvZHkpXG5cbiAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgdW5mcmFnbWVudGVkLCBvciBhIGZyYWdtZW50ZWQgZnJhbWUgd2FzIHRlcm1pbmF0ZWQsXG4gICAgICAgICAgLy8gYSBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICAgIGlmICghdGhpcy4jaW5mby5mcmFnbWVudGVkIHx8ICh0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DT05USU5VQVRJT04pKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IEJ1ZmZlci5jb25jYXQodGhpcy4jZnJhZ21lbnRzKVxuXG4gICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSwgZnVsbE1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHRoaXMuI2luZm8gPSB7fVxuICAgICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9IDBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ8bnVsbH1cbiAgICovXG4gIGNvbnN1bWUgKG4pIHtcbiAgICBpZiAobiA+IHRoaXMuI2J5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHlCdWZmZXJcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYnVmZmVyc1swXS5sZW5ndGggPT09IG4pIHtcbiAgICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gdGhpcy4jYnVmZmVyc1swXS5sZW5ndGhcbiAgICAgIHJldHVybiB0aGlzLiNidWZmZXJzLnNoaWZ0KClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgd2hpbGUgKG9mZnNldCAhPT0gbikge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuI2J1ZmZlcnNbMF1cbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBuZXh0XG5cbiAgICAgIGlmIChsZW5ndGggKyBvZmZzZXQgPT09IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoICsgb2Zmc2V0ID4gbikge1xuICAgICAgICBidWZmZXIuc2V0KG5leHQuc3ViYXJyYXkoMCwgbiAtIG9mZnNldCksIG9mZnNldClcbiAgICAgICAgdGhpcy4jYnVmZmVyc1swXSA9IG5leHQuc3ViYXJyYXkobiAtIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIG9mZnNldCArPSBuZXh0Lmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gblxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKG9ubHlDb2RlLCBkYXRhKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjVcbiAgICAvKiogQHR5cGUge251bWJlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzXG4gICAgICAvLyBkZWZpbmVkIGFzIHRoZSBzdGF0dXMgY29kZSAoU2VjdGlvbiA3LjQpIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQ2xvc2VcbiAgICAgIC8vIGNvbnRyb2wgZnJhbWUgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBjb2RlID0gZGF0YS5yZWFkVUludDE2QkUoMClcbiAgICB9XG5cbiAgICBpZiAob25seUNvZGUpIHtcbiAgICAgIGlmICghaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgY29kZSB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjZcbiAgICAvKiogQHR5cGUge0J1ZmZlcn0gKi9cbiAgICBsZXQgcmVhc29uID0gZGF0YS5zdWJhcnJheSgyKVxuXG4gICAgLy8gUmVtb3ZlIEJPTVxuICAgIGlmIChyZWFzb25bMF0gPT09IDB4RUYgJiYgcmVhc29uWzFdID09PSAweEJCICYmIHJlYXNvblsyXSA9PT0gMHhCRikge1xuICAgICAgcmVhc29uID0gcmVhc29uLnN1YmFycmF5KDMpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IG9wdGltaXplIHRoaXNcbiAgICAgIHJlYXNvbiA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShyZWFzb24pXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHJlYXNvbiB9XG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2NvbnN0YW50cycpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2dsb2JhbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgb3Bjb2RlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1dlYlNvY2tldFVSTCxcbiAga1JlYWR5U3RhdGUsXG4gIGtDb250cm9sbGVyLFxuICBrQmluYXJ5VHlwZSxcbiAga1Jlc3BvbnNlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlclxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzRXN0YWJsaXNoZWQsIGlzQ2xvc2luZywgaXNWYWxpZFN1YnByb3RvY29sLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgZmlyZUV2ZW50IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24nKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBCeXRlUGFyc2VyIH0gPSByZXF1aXJlKCcuL3JlY2VpdmVyJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5sZXQgZXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHByb3RvY29scyA9IFtdKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdXZWJTb2NrZXRzIGFyZSBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktV1MnXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scylcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgcHJvdG9jb2xzID0gb3B0aW9ucy5wcm90b2NvbHNcblxuICAgIC8vIDEuIExldCBiYXNlVVJMIGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QncyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVSTCA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICAvLyAxLiBMZXQgdXJsUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSTCBwYXJzZXIgdG8gdXJsIHdpdGggYmFzZVVSTC5cbiAgICBsZXQgdXJsUmVjb3JkXG5cbiAgICB0cnkge1xuICAgICAgdXJsUmVjb3JkID0gbmV3IFVSTCh1cmwsIGJhc2VVUkwpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gMy4gSWYgdXJsUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihlLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiLCB0aGVuIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzXCIuXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzOidcbiAgICB9IGVsc2UgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c3NcIi5cbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3c3M6J1xuICAgIH1cblxuICAgIC8vIDYuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcIndzXCIgb3IgXCJ3c3NcIiwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzOicgJiYgdXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3NzOicpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBFeHBlY3RlZCBhIHdzOiBvciB3c3M6IHByb3RvY29sLCBnb3QgJHt1cmxSZWNvcmQucHJvdG9jb2x9YCxcbiAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDcuIElmIHVybFJlY29yZFx1MjAxOXMgZnJhZ21lbnQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCJcbiAgICAvLyAgICBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5oYXNoIHx8IHVybFJlY29yZC5ocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0dvdCBmcmFnbWVudCcsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gOC4gSWYgcHJvdG9jb2xzIGlzIGEgc3RyaW5nLCBzZXQgcHJvdG9jb2xzIHRvIGEgc2VxdWVuY2UgY29uc2lzdGluZ1xuICAgIC8vICAgIG9mIGp1c3QgdGhhdCBzdHJpbmcuXG4gICAgaWYgKHR5cGVvZiBwcm90b2NvbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm90b2NvbHMgPSBbcHJvdG9jb2xzXVxuICAgIH1cblxuICAgIC8vIDkuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHByb3RvY29scyBvY2N1ciBtb3JlIHRoYW4gb25jZSBvciBvdGhlcndpc2VcbiAgICAvLyAgICBmYWlsIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgZm9yIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhlIHZhbHVlXG4gICAgLy8gICAgb2YgYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGZpZWxkcyBhcyBkZWZpbmVkIGJ5IFRoZSBXZWJTb2NrZXRcbiAgICAvLyAgICBwcm90b2NvbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IG5ldyBTZXQocHJvdG9jb2xzLm1hcChwID0+IHAudG9Mb3dlckNhc2UoKSkpLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggPiAwICYmICFwcm90b2NvbHMuZXZlcnkocCA9PiBpc1ZhbGlkU3VicHJvdG9jb2wocCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDEwLiBTZXQgdGhpcydzIHVybCB0byB1cmxSZWNvcmQuXG4gICAgdGhpc1trV2ViU29ja2V0VVJMXSA9IG5ldyBVUkwodXJsUmVjb3JkLmhyZWYpXG5cbiAgICAvLyAxMS4gTGV0IGNsaWVudCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICAvLyBUaGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBUaGUgcHJvdG9jb2wgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIGJpbmFyeSB0eXBlLCB3aGljaCBpcyBhXG4gICAgLy8gQmluYXJ5VHlwZS4gSW5pdGlhbGx5IGl0IG11c3QgYmUgXCJibG9iXCIuXG4gICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VcbiAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gICAqL1xuICBjbG9zZSAoY29kZSA9IHVuZGVmaW5lZCwgcmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29kZSA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKGNvZGUsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24pXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TSU5HIHx8IHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0VEKSB7XG4gICAgICAvLyBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ0xPU0lORyAoMikgb3IgQ0xPU0VEICgzKVxuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgICAgLy8gRmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gYW5kIHNldCB0aGlzJ3MgcmVhZHkgc3RhdGVcbiAgICAgIC8vIHRvIENMT1NJTkcgKDIpLlxuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcywgJ0Nvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgaXQgd2FzIGVzdGFibGlzaGVkLicpXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfSBlbHNlIGlmICghaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgICAgLy8gU3RhcnQgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBhbmQgc2V0IHRoaXMncyByZWFkeVxuICAgICAgLy8gc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vICAgbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgIC8vIC0gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIC8vIC0gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAvLyAgIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgLy8gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgICAgLy8gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAgIC8vIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgICAvLyB0aGUgYm9keSBNQVkgY29udGFpbiBVVEYtOC1lbmNvZGVkIGRhdGEgd2l0aCB2YWx1ZSAvcmVhc29uL1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gZW1wdHlCdWZmZXJcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgICAgc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgdGhpc1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LXNlbmRcbiAgICogQHBhcmFtIHtOb2RlSlMuVHlwZWRBcnJheXxBcnJheUJ1ZmZlcnxCbG9ifHN0cmluZ30gZGF0YVxuICAgKi9cbiAgc2VuZCAoZGF0YSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQuc2VuZCcgfSlcblxuICAgIGRhdGEgPSB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YShkYXRhKVxuXG4gICAgLy8gMS4gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENPTk5FQ1RJTkcsIHRoZW4gdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRTdGF0ZUVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NlbnQgYmVmb3JlIGNvbm5lY3RlZC4nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgIH1cblxuICAgIC8vIDIuIFJ1biB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTYuMVxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTUuMlxuXG4gICAgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpIHx8IGlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuVEVYVClcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkXG4gICAgICAvLyB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWdcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICAvLyBUaGUgZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIGRlc2NyaWJlZFxuICAgICAgLy8gYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdC4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhblxuICAgICAgLy8gQXJyYXlCdWZmZXIgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdFxuICAgICAgLy8gaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbGVuZ3RoIG9mIHRoZVxuICAgICAgLy8gQXJyYXlCdWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGVcbiAgICAgIC8vIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlclxuICAgICAgLy8gZGVzY3JpYmVkIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCBkYXRhIHJlZmVyZW5jZXMuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIHRoaXMga2luZCBvZiBhcmd1bWVudCB0aGF0IGRvZXNcbiAgICAgIC8vIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlXG4gICAgICAvLyBieSB0aGUgbGVuZ3RoIG9mIGRhdGFcdTIwMTlzIGJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgYWIgPSBCdWZmZXIuZnJvbShkYXRhLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGFiKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGFiLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gYWIuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YVxuICAgICAgLy8gdG8gYmUgc2VudCBpcyB0aGUgcmF3IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIEJsb2Igb2JqZWN0LiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhIEJsb2IgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvd1xuICAgICAgLy8gYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgc2l6ZVxuICAgICAgLy8gb2YgdGhlIEJsb2Igb2JqZWN0XHUyMDE5cyByYXcgZGF0YSwgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIGRhdGEuYXJyYXlCdWZmZXIoKS50aGVuKChhYikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGFiKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSB2YWx1ZVxuICAgICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgcmVhZHlTdGF0ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgcmVhZHkgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXNba1JlYWR5U3RhdGVdXG4gIH1cblxuICBnZXQgYnVmZmVyZWRBbW91bnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNidWZmZXJlZEFtb3VudFxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgdXJsLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1dlYlNvY2tldFVSTF0pXG4gIH1cblxuICBnZXQgZXh0ZW5zaW9ucyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V4dGVuc2lvbnNcbiAgfVxuXG4gIGdldCBwcm90b2NvbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI3Byb3RvY29sXG4gIH1cblxuICBnZXQgb25vcGVuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm9wZW5cbiAgfVxuXG4gIHNldCBvbm9wZW4gKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5vcGVuKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGlzLiNldmVudHMub3BlbilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLiNldmVudHMuZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmNsb3NlXG4gIH1cblxuICBzZXQgb25jbG9zZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmNsb3NlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy4jZXZlbnRzLmNsb3NlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25tZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm1lc3NhZ2VcbiAgfVxuXG4gIHNldCBvbm1lc3NhZ2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLiNldmVudHMubWVzc2FnZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGJpbmFyeVR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzW2tCaW5hcnlUeXBlXVxuICB9XG5cbiAgc2V0IGJpbmFyeVR5cGUgKHR5cGUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodHlwZSAhPT0gJ2Jsb2InICYmIHR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gdHlwZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gICAqL1xuICAjb25Db25uZWN0aW9uRXN0YWJsaXNoZWQgKHJlc3BvbnNlKSB7XG4gICAgLy8gcHJvY2Vzc1Jlc3BvbnNlIGlzIGNhbGxlZCB3aGVuIHRoZSBcInJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgaW5pdGlhbGl6ZWQuXCJcbiAgICAvLyBvbmNlIHRoaXMgaGFwcGVucywgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgIHRoaXNba1Jlc3BvbnNlXSA9IHJlc3BvbnNlXG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQnl0ZVBhcnNlcih0aGlzKVxuICAgIHBhcnNlci5vbignZHJhaW4nLCBmdW5jdGlvbiBvblBhcnNlckRyYWluICgpIHtcbiAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbiAgICB9KVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIE9QRU4gKDEpLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLk9QRU5cblxuICAgIC8vIDIuIENoYW5nZSB0aGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBleHRlbnNpb25zIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tOS4xXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJylcblxuICAgIGlmIChleHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIH1cblxuICAgIC8vIDMuIENoYW5nZSB0aGUgcHJvdG9jb2wgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgc3VicHJvdG9jb2wgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi0xLjlcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcpXG5cbiAgICBpZiAocHJvdG9jb2wgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI3Byb3RvY29sID0gcHJvdG9jb2xcbiAgICB9XG5cbiAgICAvLyA0LiBGaXJlIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gICAgZmlyZUV2ZW50KCdvcGVuJywgdGhpcylcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNvbm5lY3RpbmdcbldlYlNvY2tldC5DT05ORUNUSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DT05ORUNUSU5HID0gc3RhdGVzLkNPTk5FQ1RJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtb3BlblxuV2ViU29ja2V0Lk9QRU4gPSBXZWJTb2NrZXQucHJvdG90eXBlLk9QRU4gPSBzdGF0ZXMuT1BFTlxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zaW5nXG5XZWJTb2NrZXQuQ0xPU0lORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0lORyA9IHN0YXRlcy5DTE9TSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlZFxuV2ViU29ja2V0LkNMT1NFRCA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0VEID0gc3RhdGVzLkNMT1NFRFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQucHJvdG90eXBlLCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBidWZmZXJlZEFtb3VudDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25tZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBiaW5hcnlUeXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBleHRlbnNpb25zOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwcm90b2NvbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1dlYlNvY2tldCcsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgU3ltYm9sLml0ZXJhdG9yIGluIFYpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXShWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBUaGlzIGltcGxlbWVudHMgdGhlIHByb3BzYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnZGlzcGF0Y2hlcicsXG4gICAgY29udmVydGVyOiAoVikgPT4gVixcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBnZXRHbG9iYWxEaXNwYXRjaGVyKClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdClcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiBWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0KFYpXG4gIH1cblxuICByZXR1cm4geyBwcm90b2NvbHM6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fCB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2ViU29ja2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIvKipcbiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEJvdHRsZW5lY2sgbGlicmFyeSAoTUlUKSwgY29tcGlsZWQgdG8gRVMyMDE3LCBhbmQgd2l0aG91dCBDbHVzdGVyaW5nIHN1cHBvcnQuXG4gICogaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2tcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Cb3R0bGVuZWNrID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9O1xuXG5cdGZ1bmN0aW9uIGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UgKG4pIHtcblx0XHRyZXR1cm4gbiAmJiBuWydkZWZhdWx0J10gfHwgbjtcblx0fVxuXG5cdHZhciBsb2FkID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgcmVmLCB2O1xuXHQgIGZvciAoayBpbiBkZWZhdWx0cykge1xuXHQgICAgdiA9IGRlZmF1bHRzW2tdO1xuXHQgICAgb250b1trXSA9IChyZWYgPSByZWNlaXZlZFtrXSkgIT0gbnVsbCA/IHJlZiA6IHY7XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBvdmVyd3JpdGUgPSBmdW5jdGlvbihyZWNlaXZlZCwgZGVmYXVsdHMsIG9udG8gPSB7fSkge1xuXHQgIHZhciBrLCB2O1xuXHQgIGZvciAoayBpbiByZWNlaXZlZCkge1xuXHQgICAgdiA9IHJlY2VpdmVkW2tdO1xuXHQgICAgaWYgKGRlZmF1bHRzW2tdICE9PSB2b2lkIDApIHtcblx0ICAgICAgb250b1trXSA9IHY7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBwYXJzZXIgPSB7XG5cdFx0bG9hZDogbG9hZCxcblx0XHRvdmVyd3JpdGU6IG92ZXJ3cml0ZVxuXHR9O1xuXG5cdHZhciBETExpc3Q7XG5cblx0RExMaXN0ID0gY2xhc3MgRExMaXN0IHtcblx0ICBjb25zdHJ1Y3RvcihpbmNyLCBkZWNyKSB7XG5cdCAgICB0aGlzLmluY3IgPSBpbmNyO1xuXHQgICAgdGhpcy5kZWNyID0gZGVjcjtcblx0ICAgIHRoaXMuX2ZpcnN0ID0gbnVsbDtcblx0ICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgdGhpcy5sZW5ndGggPSAwO1xuXHQgIH1cblxuXHQgIHB1c2godmFsdWUpIHtcblx0ICAgIHZhciBub2RlO1xuXHQgICAgdGhpcy5sZW5ndGgrKztcblx0ICAgIGlmICh0eXBlb2YgdGhpcy5pbmNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgdGhpcy5pbmNyKCk7XG5cdCAgICB9XG5cdCAgICBub2RlID0ge1xuXHQgICAgICB2YWx1ZSxcblx0ICAgICAgcHJldjogdGhpcy5fbGFzdCxcblx0ICAgICAgbmV4dDogbnVsbFxuXHQgICAgfTtcblx0ICAgIGlmICh0aGlzLl9sYXN0ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5fbGFzdC5uZXh0ID0gbm9kZTtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG5vZGU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBzaGlmdCgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblx0ICAgIGlmICh0aGlzLl9maXJzdCA9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubGVuZ3RoLS07XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICB0aGlzLmRlY3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFsdWUgPSB0aGlzLl9maXJzdC52YWx1ZTtcblx0ICAgIGlmICgodGhpcy5fZmlyc3QgPSB0aGlzLl9maXJzdC5uZXh0KSAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2ZpcnN0LnByZXYgPSBudWxsO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXG5cdCAgZmlyc3QoKSB7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZ2V0QXJyYXkoKSB7XG5cdCAgICB2YXIgbm9kZSwgcmVmLCByZXN1bHRzO1xuXHQgICAgbm9kZSA9IHRoaXMuX2ZpcnN0O1xuXHQgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICByZXN1bHRzLnB1c2goKHJlZiA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQsIHJlZi52YWx1ZSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdCAgZm9yRWFjaFNoaWZ0KGNiKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIG5vZGUgPSB0aGlzLnNoaWZ0KCk7XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIChjYihub2RlKSwgbm9kZSA9IHRoaXMuc2hpZnQoKSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdm9pZCAwO1xuXHQgIH1cblxuXHQgIGRlYnVnKCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCB7XG5cdCAgICAgICAgdmFsdWU6IHJlZi52YWx1ZSxcblx0ICAgICAgICBwcmV2OiAocmVmMSA9IHJlZi5wcmV2KSAhPSBudWxsID8gcmVmMS52YWx1ZSA6IHZvaWQgMCxcblx0ICAgICAgICBuZXh0OiAocmVmMiA9IHJlZi5uZXh0KSAhPSBudWxsID8gcmVmMi52YWx1ZSA6IHZvaWQgMFxuXHQgICAgICB9KSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0cztcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRExMaXN0XzEgPSBETExpc3Q7XG5cblx0dmFyIEV2ZW50cztcblxuXHRFdmVudHMgPSBjbGFzcyBFdmVudHMge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIGlmICgodGhpcy5pbnN0YW5jZS5vbiAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5vbmNlICE9IG51bGwpIHx8ICh0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyAhPSBudWxsKSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBFbWl0dGVyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9iamVjdFwiKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuaW5zdGFuY2Uub24gPSAobmFtZSwgY2IpID0+IHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKG5hbWUsIFwibWFueVwiLCBjYik7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5vbmNlID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm9uY2VcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzID0gKG5hbWUgPSBudWxsKSA9PiB7XG5cdCAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgX2FkZExpc3RlbmVyKG5hbWUsIHN0YXR1cywgY2IpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKChiYXNlID0gdGhpcy5fZXZlbnRzKVtuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgIGJhc2VbbmFtZV0gPSBbXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX2V2ZW50c1tuYW1lXS5wdXNoKHtjYiwgc3RhdHVzfSk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcblx0ICB9XG5cblx0ICBsaXN0ZW5lckNvdW50KG5hbWUpIHtcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbmFtZV0gIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW25hbWVdLmxlbmd0aDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGFzeW5jIHRyaWdnZXIobmFtZSwgLi4uYXJncykge1xuXHQgICAgdmFyIGUsIHByb21pc2VzO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKG5hbWUgIT09IFwiZGVidWdcIikge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlcihcImRlYnVnXCIsIGBFdmVudCB0cmlnZ2VyZWQ6ICR7bmFtZX1gLCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gdGhpcy5fZXZlbnRzW25hbWVdLmZpbHRlcihmdW5jdGlvbihsaXN0ZW5lcikge1xuXHQgICAgICAgIHJldHVybiBsaXN0ZW5lci5zdGF0dXMgIT09IFwibm9uZVwiO1xuXHQgICAgICB9KTtcblx0ICAgICAgcHJvbWlzZXMgPSB0aGlzLl9ldmVudHNbbmFtZV0ubWFwKGFzeW5jKGxpc3RlbmVyKSA9PiB7XG5cdCAgICAgICAgdmFyIGUsIHJldHVybmVkO1xuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwibm9uZVwiKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwib25jZVwiKSB7XG5cdCAgICAgICAgICBsaXN0ZW5lci5zdGF0dXMgPSBcIm5vbmVcIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gdHlwZW9mIGxpc3RlbmVyLmNiID09PSBcImZ1bmN0aW9uXCIgPyBsaXN0ZW5lci5jYiguLi5hcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgKHJldHVybmVkICE9IG51bGwgPyByZXR1cm5lZC50aGVuIDogdm9pZCAwKSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoYXdhaXQgcmV0dXJuZWQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuICgoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKSkuZmluZChmdW5jdGlvbih4KSB7XG5cdCAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcblx0ICAgICAgfSk7XG5cdCAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICBlID0gZXJyb3I7XG5cdCAgICAgIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRXZlbnRzXzEgPSBFdmVudHM7XG5cblx0dmFyIERMTGlzdCQxLCBFdmVudHMkMSwgUXVldWVzO1xuXG5cdERMTGlzdCQxID0gRExMaXN0XzE7XG5cblx0RXZlbnRzJDEgPSBFdmVudHNfMTtcblxuXHRRdWV1ZXMgPSBjbGFzcyBRdWV1ZXMge1xuXHQgIGNvbnN0cnVjdG9yKG51bV9wcmlvcml0aWVzKSB7XG5cdCAgICB2YXIgaTtcblx0ICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQxKHRoaXMpO1xuXHQgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIHRoaXMuX2xpc3RzID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICB2YXIgaiwgcmVmLCByZXN1bHRzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoaSA9IGogPSAxLCByZWYgPSBudW1fcHJpb3JpdGllczsgKDEgPD0gcmVmID8gaiA8PSByZWYgOiBqID49IHJlZik7IGkgPSAxIDw9IHJlZiA/ICsraiA6IC0taikge1xuXHQgICAgICAgIHJlc3VsdHMucHVzaChuZXcgRExMaXN0JDEoKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmluY3IoKTtcblx0ICAgICAgICB9KSwgKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmRlY3IoKTtcblx0ICAgICAgICB9KSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgfSkuY2FsbCh0aGlzKTtcblx0ICB9XG5cblx0ICBpbmNyKCkge1xuXHQgICAgaWYgKHRoaXMuX2xlbmd0aCsrID09PSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwibGVmdHplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZGVjcigpIHtcblx0ICAgIGlmICgtLXRoaXMuX2xlbmd0aCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcHVzaChqb2IpIHtcblx0ICAgIHJldHVybiB0aGlzLl9saXN0c1tqb2Iub3B0aW9ucy5wcmlvcml0eV0ucHVzaChqb2IpO1xuXHQgIH1cblxuXHQgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgaWYgKHByaW9yaXR5ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xpc3RzW3ByaW9yaXR5XS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNoaWZ0QWxsKGZuKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG5cdCAgICAgIHJldHVybiBsaXN0LmZvckVhY2hTaGlmdChmbik7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBnZXRGaXJzdChhcnIgPSB0aGlzLl9saXN0cykge1xuXHQgICAgdmFyIGosIGxlbiwgbGlzdDtcblx0ICAgIGZvciAoaiA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGogPCBsZW47IGorKykge1xuXHQgICAgICBsaXN0ID0gYXJyW2pdO1xuXHQgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiBbXTtcblx0ICB9XG5cblx0ICBzaGlmdExhc3RGcm9tKHByaW9yaXR5KSB7XG5cdCAgICByZXR1cm4gdGhpcy5nZXRGaXJzdCh0aGlzLl9saXN0cy5zbGljZShwcmlvcml0eSkucmV2ZXJzZSgpKS5zaGlmdCgpO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBRdWV1ZXNfMSA9IFF1ZXVlcztcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yO1xuXG5cdEJvdHRsZW5lY2tFcnJvciA9IGNsYXNzIEJvdHRsZW5lY2tFcnJvciBleHRlbmRzIEVycm9yIHt9O1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3JfMSA9IEJvdHRsZW5lY2tFcnJvcjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDEsIERFRkFVTFRfUFJJT1JJVFksIEpvYiwgTlVNX1BSSU9SSVRJRVMsIHBhcnNlciQxO1xuXG5cdE5VTV9QUklPUklUSUVTID0gMTA7XG5cblx0REVGQVVMVF9QUklPUklUWSA9IDU7XG5cblx0cGFyc2VyJDEgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDEgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRKb2IgPSBjbGFzcyBKb2Ige1xuXHQgIGNvbnN0cnVjdG9yKHRhc2ssIGFyZ3MsIG9wdGlvbnMsIGpvYkRlZmF1bHRzLCByZWplY3RPbkRyb3AsIEV2ZW50cywgX3N0YXRlcywgUHJvbWlzZSkge1xuXHQgICAgdGhpcy50YXNrID0gdGFzaztcblx0ICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cdCAgICB0aGlzLnJlamVjdE9uRHJvcCA9IHJlamVjdE9uRHJvcDtcblx0ICAgIHRoaXMuRXZlbnRzID0gRXZlbnRzO1xuXHQgICAgdGhpcy5fc3RhdGVzID0gX3N0YXRlcztcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZXIkMS5sb2FkKG9wdGlvbnMsIGpvYkRlZmF1bHRzKTtcblx0ICAgIHRoaXMub3B0aW9ucy5wcmlvcml0eSA9IHRoaXMuX3Nhbml0aXplUHJpb3JpdHkodGhpcy5vcHRpb25zLnByaW9yaXR5KTtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuaWQgPT09IGpvYkRlZmF1bHRzLmlkKSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucy5pZCA9IGAke3RoaXMub3B0aW9ucy5pZH0tJHt0aGlzLl9yYW5kb21JbmRleCgpfWA7XG5cdCAgICB9XG5cdCAgICB0aGlzLnByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHQgICAgICB0aGlzLl9yZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHRoaXMuX3JlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cdCAgfVxuXG5cdCAgX3Nhbml0aXplUHJpb3JpdHkocHJpb3JpdHkpIHtcblx0ICAgIHZhciBzUHJvcGVydHk7XG5cdCAgICBzUHJvcGVydHkgPSB+fnByaW9yaXR5ICE9PSBwcmlvcml0eSA/IERFRkFVTFRfUFJJT1JJVFkgOiBwcmlvcml0eTtcblx0ICAgIGlmIChzUHJvcGVydHkgPCAwKSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfSBlbHNlIGlmIChzUHJvcGVydHkgPiBOVU1fUFJJT1JJVElFUyAtIDEpIHtcblx0ICAgICAgcmV0dXJuIE5VTV9QUklPUklUSUVTIC0gMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBzUHJvcGVydHk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXHQgIH1cblxuXHQgIGRvRHJvcCh7ZXJyb3IsIG1lc3NhZ2UgPSBcIlRoaXMgam9iIGhhcyBiZWVuIGRyb3BwZWQgYnkgQm90dGxlbmVja1wifSA9IHt9KSB7XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLnJlbW92ZSh0aGlzLm9wdGlvbnMuaWQpKSB7XG5cdCAgICAgIGlmICh0aGlzLnJlamVjdE9uRHJvcCkge1xuXHQgICAgICAgIHRoaXMuX3JlamVjdChlcnJvciAhPSBudWxsID8gZXJyb3IgOiBuZXcgQm90dGxlbmVja0Vycm9yJDEobWVzc2FnZSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkcm9wcGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgdGFzazogdGhpcy50YXNrLCBwcm9taXNlOiB0aGlzLnByb21pc2V9KTtcblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX2Fzc2VydFN0YXR1cyhleHBlY3RlZCkge1xuXHQgICAgdmFyIHN0YXR1cztcblx0ICAgIHN0YXR1cyA9IHRoaXMuX3N0YXRlcy5qb2JTdGF0dXModGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIGlmICghKHN0YXR1cyA9PT0gZXhwZWN0ZWQgfHwgKGV4cGVjdGVkID09PSBcIkRPTkVcIiAmJiBzdGF0dXMgPT09IG51bGwpKSkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDEoYEludmFsaWQgam9iIHN0YXR1cyAke3N0YXR1c30sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9LiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjay9pc3N1ZXNgKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBkb1JlY2VpdmUoKSB7XG5cdCAgICB0aGlzLl9zdGF0ZXMuc3RhcnQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmVjZWl2ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKSB7XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJSRUNFSVZFRFwiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInF1ZXVlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJlYWNoZWRIV00sIGJsb2NrZWR9KTtcblx0ICB9XG5cblx0ICBkb1J1bigpIHtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUVVFVUVEXCIpO1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJzY2hlZHVsZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgZG9FeGVjdXRlKGNoYWluZWQsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm8sIHBhc3NlZDtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUlVOTklOR1wiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIGV2ZW50SW5mbyA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgcmV0cnlDb3VudDogdGhpcy5yZXRyeUNvdW50fTtcblx0ICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJleGVjdXRpbmdcIiwgZXZlbnRJbmZvKTtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHBhc3NlZCA9IChhd2FpdCAoY2hhaW5lZCAhPSBudWxsID8gY2hhaW5lZC5zY2hlZHVsZSh0aGlzLm9wdGlvbnMsIHRoaXMudGFzaywgLi4udGhpcy5hcmdzKSA6IHRoaXMudGFzayguLi50aGlzLmFyZ3MpKSk7XG5cdCAgICAgIGlmIChjbGVhckdsb2JhbFN0YXRlKCkpIHtcblx0ICAgICAgICB0aGlzLmRvRG9uZShldmVudEluZm8pO1xuXHQgICAgICAgIGF3YWl0IGZyZWUodGhpcy5vcHRpb25zLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkRPTkVcIik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUocGFzc2VkKTtcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICByZXR1cm4gdGhpcy5fb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgZXJyb3IsIGV2ZW50SW5mbztcblx0ICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCA9PT0gXCJSVU5OSU5HXCIpKSB7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICBlcnJvciA9IG5ldyBCb3R0bGVuZWNrRXJyb3IkMShgVGhpcyBqb2IgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmV4cGlyYXRpb259IG1zLmApO1xuXHQgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgcmV0cnksIHJldHJ5QWZ0ZXI7XG5cdCAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgIHJldHJ5ID0gKGF3YWl0IHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJmYWlsZWRcIiwgZXJyb3IsIGV2ZW50SW5mbykpO1xuXHQgICAgICBpZiAocmV0cnkgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHJ5QWZ0ZXIgPSB+fnJldHJ5O1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJyZXRyeVwiLCBgUmV0cnlpbmcgJHt0aGlzLm9wdGlvbnMuaWR9IGFmdGVyICR7cmV0cnlBZnRlcn0gbXNgLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuXHQgICAgICAgIHJldHVybiBydW4ocmV0cnlBZnRlcik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyb3IpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9Eb25lKGV2ZW50SW5mbykge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZG9uZVwiLCBldmVudEluZm8pO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBKb2JfMSA9IEpvYjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDIsIExvY2FsRGF0YXN0b3JlLCBwYXJzZXIkMjtcblxuXHRwYXJzZXIkMiA9IHBhcnNlcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IkMiA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlID0gY2xhc3MgTG9jYWxEYXRhc3RvcmUge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHN0b3JlT3B0aW9ucztcblx0ICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmluc3RhbmNlLl9yYW5kb21JbmRleCgpO1xuXHQgICAgcGFyc2VyJDIubG9hZChzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHRoaXMpO1xuXHQgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IERhdGUubm93KCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX2RvbmUgPSAwO1xuXHQgICAgdGhpcy5fdW5ibG9ja1RpbWUgPSAwO1xuXHQgICAgdGhpcy5yZWFkeSA9IHRoaXMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB0aGlzLmNsaWVudHMgPSB7fTtcblx0ICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XG5cdCAgfVxuXG5cdCAgX3N0YXJ0SGVhcnRiZWF0KCkge1xuXHQgICAgdmFyIGJhc2U7XG5cdCAgICBpZiAoKHRoaXMuaGVhcnRiZWF0ID09IG51bGwpICYmICgoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudCAhPSBudWxsKSkgfHwgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmICh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUFtb3VudCAhPSBudWxsKSkpKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5oZWFydGJlYXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFtb3VudCwgaW5jciwgbWF4aW11bSwgbm93LCByZXNlcnZvaXI7XG5cdCAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiBub3cgPj0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoID0gbm93O1xuXHQgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudDtcblx0ICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSArIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICh7XG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBhbW91bnQsXG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbWF4aW11bSxcblx0ICAgICAgICAgICAgcmVzZXJ2b2lyXG5cdCAgICAgICAgICB9ID0gdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgICAgICAgdGhpcy5fbGFzdFJlc2Vydm9pckluY3JlYXNlID0gbm93O1xuXHQgICAgICAgICAgaW5jciA9IG1heGltdW0gIT0gbnVsbCA/IE1hdGgubWluKGFtb3VudCwgbWF4aW11bSAtIHJlc2Vydm9pcikgOiBhbW91bnQ7XG5cdCAgICAgICAgICBpZiAoaW5jciA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpKSkudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IGJhc2UudW5yZWYoKSA6IHZvaWQgMDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyBfX3B1Ymxpc2hfXyhtZXNzYWdlKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuRXZlbnRzLnRyaWdnZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19kaXNjb25uZWN0X18oZmx1c2gpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgIH1cblxuXHQgIHlpZWxkTG9vcCh0ID0gMCkge1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHQpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZVBlbmFsdHkoKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0b3JlT3B0aW9ucy5wZW5hbHR5KSAhPSBudWxsID8gcmVmIDogKDE1ICogdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZSkgfHwgNTAwMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX3VwZGF0ZVNldHRpbmdzX18ob3B0aW9ucykge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHBhcnNlciQyLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX3J1bm5pbmdfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fcnVubmluZztcblx0ICB9XG5cblx0ICBhc3luYyBfX3F1ZXVlZF9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnF1ZXVlZCgpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZG9uZV9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLl9kb25lO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZ3JvdXBDaGVja19fKHRpbWUpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gKHRoaXMuX25leHRSZXF1ZXN0ICsgdGhpcy50aW1lb3V0KSA8IHRpbWU7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZUNhcGFjaXR5KCkge1xuXHQgICAgdmFyIG1heENvbmN1cnJlbnQsIHJlc2Vydm9pcjtcblx0ICAgICh7bWF4Q29uY3VycmVudCwgcmVzZXJ2b2lyfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgIGlmICgobWF4Q29uY3VycmVudCAhPSBudWxsKSAmJiAocmVzZXJ2b2lyICE9IG51bGwpKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLm1pbihtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZywgcmVzZXJ2b2lyKTtcblx0ICAgIH0gZWxzZSBpZiAobWF4Q29uY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZztcblx0ICAgIH0gZWxzZSBpZiAocmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpIHtcblx0ICAgIHZhciBjYXBhY2l0eTtcblx0ICAgIGNhcGFjaXR5ID0gdGhpcy5jb21wdXRlQ2FwYWNpdHkoKTtcblx0ICAgIHJldHVybiAoY2FwYWNpdHkgPT0gbnVsbCkgfHwgd2VpZ2h0IDw9IGNhcGFjaXR5O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcikge1xuXHQgICAgdmFyIHJlc2Vydm9pcjtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXNlcnZvaXIgPSB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgKz0gaW5jcjtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBhc3luYyBfX2N1cnJlbnRSZXNlcnZvaXJfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyO1xuXHQgIH1cblxuXHQgIGlzQmxvY2tlZChub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLl91bmJsb2NrVGltZSA+PSBub3c7XG5cdCAgfVxuXG5cdCAgY2hlY2sod2VpZ2h0LCBub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpICYmICh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdykgPD0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX2NoZWNrX18od2VpZ2h0KSB7XG5cdCAgICB2YXIgbm93O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICByZXR1cm4gdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19yZWdpc3Rlcl9fKGluZGV4LCB3ZWlnaHQsIGV4cGlyYXRpb24pIHtcblx0ICAgIHZhciBub3csIHdhaXQ7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpKSB7XG5cdCAgICAgIHRoaXMuX3J1bm5pbmcgKz0gd2VpZ2h0O1xuXHQgICAgICBpZiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgLT0gd2VpZ2h0O1xuXHQgICAgICB9XG5cdCAgICAgIHdhaXQgPSBNYXRoLm1heCh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdywgMCk7XG5cdCAgICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gbm93ICsgd2FpdCArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgc3VjY2VzczogdHJ1ZSxcblx0ICAgICAgICB3YWl0LFxuXHQgICAgICAgIHJlc2Vydm9pcjogdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyXG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RyYXRlZ3lJc0Jsb2NrKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5ID09PSAzO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fc3VibWl0X18ocXVldWVMZW5ndGgsIHdlaWdodCkge1xuXHQgICAgdmFyIGJsb2NrZWQsIG5vdywgcmVhY2hlZEhXTTtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgd2VpZ2h0ID4gdGhpcy5zdG9yZU9wdGlvbnMubWF4Q29uY3VycmVudCkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDIoYEltcG9zc2libGUgdG8gYWRkIGEgam9iIGhhdmluZyBhIHdlaWdodCBvZiAke3dlaWdodH0gdG8gYSBsaW1pdGVyIGhhdmluZyBhIG1heENvbmN1cnJlbnQgc2V0dGluZyBvZiAke3RoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnR9YCk7XG5cdCAgICB9XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmVhY2hlZEhXTSA9ICh0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgIT0gbnVsbCkgJiYgcXVldWVMZW5ndGggPT09IHRoaXMuc3RvcmVPcHRpb25zLmhpZ2hXYXRlciAmJiAhdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgICBibG9ja2VkID0gdGhpcy5zdHJhdGVneUlzQmxvY2soKSAmJiAocmVhY2hlZEhXTSB8fCB0aGlzLmlzQmxvY2tlZChub3cpKTtcblx0ICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gbm93ICsgdGhpcy5jb21wdXRlUGVuYWx0eSgpO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IHRoaXMuX3VuYmxvY2tUaW1lICsgdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZS5fZHJvcEFsbFF1ZXVlZCgpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcmVhY2hlZEhXTSxcblx0ICAgICAgYmxvY2tlZCxcblx0ICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZnJlZV9fKGluZGV4LCB3ZWlnaHQpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nIC09IHdlaWdodDtcblx0ICAgIHRoaXMuX2RvbmUgKz0gd2VpZ2h0O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBydW5uaW5nOiB0aGlzLl9ydW5uaW5nXG5cdCAgICB9O1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBMb2NhbERhdGFzdG9yZV8xID0gTG9jYWxEYXRhc3RvcmU7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQzLCBTdGF0ZXM7XG5cblx0Qm90dGxlbmVja0Vycm9yJDMgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRTdGF0ZXMgPSBjbGFzcyBTdGF0ZXMge1xuXHQgIGNvbnN0cnVjdG9yKHN0YXR1czEpIHtcblx0ICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzMTtcblx0ICAgIHRoaXMuX2pvYnMgPSB7fTtcblx0ICAgIHRoaXMuY291bnRzID0gdGhpcy5zdGF0dXMubWFwKGZ1bmN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIG5leHQoaWQpIHtcblx0ICAgIHZhciBjdXJyZW50LCBuZXh0O1xuXHQgICAgY3VycmVudCA9IHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgbmV4dCA9IGN1cnJlbnQgKyAxO1xuXHQgICAgaWYgKChjdXJyZW50ICE9IG51bGwpICYmIG5leHQgPCB0aGlzLnN0YXR1cy5sZW5ndGgpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgdGhpcy5jb3VudHNbbmV4dF0rKztcblx0ICAgICAgcmV0dXJuIHRoaXMuX2pvYnNbaWRdKys7XG5cdCAgICB9IGVsc2UgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLmNvdW50c1tjdXJyZW50XS0tO1xuXHQgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXJ0KGlkKSB7XG5cdCAgICB2YXIgaW5pdGlhbDtcblx0ICAgIGluaXRpYWwgPSAwO1xuXHQgICAgdGhpcy5fam9ic1tpZF0gPSBpbml0aWFsO1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzW2luaXRpYWxdKys7XG5cdCAgfVxuXG5cdCAgcmVtb3ZlKGlkKSB7XG5cdCAgICB2YXIgY3VycmVudDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDtcblx0ICB9XG5cblx0ICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgIHZhciByZWY7XG5cdCAgICByZXR1cm4gKHJlZiA9IHRoaXMuc3RhdHVzW3RoaXMuX2pvYnNbaWRdXSkgIT0gbnVsbCA/IHJlZiA6IG51bGw7XG5cdCAgfVxuXG5cdCAgc3RhdHVzSm9icyhzdGF0dXMpIHtcblx0ICAgIHZhciBrLCBwb3MsIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xuXHQgICAgICBwb3MgPSB0aGlzLnN0YXR1cy5pbmRleE9mKHN0YXR1cyk7XG5cdCAgICAgIGlmIChwb3MgPCAwKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQzKGBzdGF0dXMgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLnN0YXR1cy5qb2luKCcsICcpfWApO1xuXHQgICAgICB9XG5cdCAgICAgIHJlZiA9IHRoaXMuX2pvYnM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgaWYgKHYgPT09IHBvcykge1xuXHQgICAgICAgICAgcmVzdWx0cy5wdXNoKGspO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9qb2JzKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0dXNDb3VudHMoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb3VudHMucmVkdWNlKCgoYWNjLCB2LCBpKSA9PiB7XG5cdCAgICAgIGFjY1t0aGlzLnN0YXR1c1tpXV0gPSB2O1xuXHQgICAgICByZXR1cm4gYWNjO1xuXHQgICAgfSksIHt9KTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3RhdGVzXzEgPSBTdGF0ZXM7XG5cblx0dmFyIERMTGlzdCQyLCBTeW5jO1xuXG5cdERMTGlzdCQyID0gRExMaXN0XzE7XG5cblx0U3luYyA9IGNsYXNzIFN5bmMge1xuXHQgIGNvbnN0cnVjdG9yKG5hbWUsIFByb21pc2UpIHtcblx0ICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgdGhpcy5Qcm9taXNlID0gUHJvbWlzZTtcblx0ICAgIHRoaXMuX3J1bm5pbmcgPSAwO1xuXHQgICAgdGhpcy5fcXVldWUgPSBuZXcgRExMaXN0JDIoKTtcblx0ICB9XG5cblx0ICBpc0VtcHR5KCkge1xuXHQgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfdHJ5VG9SdW4oKSB7XG5cdCAgICB2YXIgYXJncywgY2IsIGVycm9yLCByZWplY3QsIHJlc29sdmUsIHJldHVybmVkLCB0YXNrO1xuXHQgICAgaWYgKCh0aGlzLl9ydW5uaW5nIDwgMSkgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nKys7XG5cdCAgICAgICh7dGFzaywgYXJncywgcmVzb2x2ZSwgcmVqZWN0fSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCkpO1xuXHQgICAgICBjYiA9IChhd2FpdCAoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gKGF3YWl0IHRhc2soLi4uYXJncykpO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5lZCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pKCkpO1xuXHQgICAgICB0aGlzLl9ydW5uaW5nLS07XG5cdCAgICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICAgIHJldHVybiBjYigpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNjaGVkdWxlKHRhc2ssIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBwcm9taXNlLCByZWplY3QsIHJlc29sdmU7XG5cdCAgICByZXNvbHZlID0gcmVqZWN0ID0gbnVsbDtcblx0ICAgIHByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG5cdCAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcblx0ICAgICAgcmV0dXJuIHJlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuX3F1ZXVlLnB1c2goe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0pO1xuXHQgICAgdGhpcy5fdHJ5VG9SdW4oKTtcblx0ICAgIHJldHVybiBwcm9taXNlO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBTeW5jXzEgPSBTeW5jO1xuXG5cdHZhciB2ZXJzaW9uID0gXCIyLjE5LjVcIjtcblx0dmFyIHZlcnNpb24kMSA9IHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uXG5cdH07XG5cblx0dmFyIHZlcnNpb24kMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uLFxuXHRcdGRlZmF1bHQ6IHZlcnNpb24kMVxuXHR9KTtcblxuXHR2YXIgcmVxdWlyZSQkMiA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDMgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQ0ID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgRXZlbnRzJDIsIEdyb3VwLCBJT1JlZGlzQ29ubmVjdGlvbiQxLCBSZWRpc0Nvbm5lY3Rpb24kMSwgU2NyaXB0cyQxLCBwYXJzZXIkMztcblxuXHRwYXJzZXIkMyA9IHBhcnNlcjtcblxuXHRFdmVudHMkMiA9IEV2ZW50c18xO1xuXG5cdFJlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMjtcblxuXHRJT1JlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMztcblxuXHRTY3JpcHRzJDEgPSByZXF1aXJlJCQ0O1xuXG5cdEdyb3VwID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEdyb3VwIHtcblx0ICAgIGNvbnN0cnVjdG9yKGxpbWl0ZXJPcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5kZWxldGVLZXkgPSB0aGlzLmRlbGV0ZUtleS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLmxpbWl0ZXJPcHRpb25zID0gbGltaXRlck9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQzLmxvYWQodGhpcy5saW1pdGVyT3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQyKHRoaXMpO1xuXHQgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9O1xuXHQgICAgICB0aGlzLkJvdHRsZW5lY2sgPSBCb3R0bGVuZWNrXzE7XG5cdCAgICAgIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgdGhpcy5zaGFyZWRDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uICE9IG51bGw7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgUmVkaXNDb25uZWN0aW9uJDEoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5saW1pdGVyT3B0aW9ucywge0V2ZW50czogdGhpcy5FdmVudHN9KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJpb3JlZGlzXCIpIHtcblx0ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBJT1JlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBrZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuaW5zdGFuY2VzW2tleV0pICE9IG51bGwgPyByZWYgOiAoKCkgPT4ge1xuXHQgICAgICAgIHZhciBsaW1pdGVyO1xuXHQgICAgICAgIGxpbWl0ZXIgPSB0aGlzLmluc3RhbmNlc1trZXldID0gbmV3IHRoaXMuQm90dGxlbmVjayhPYmplY3QuYXNzaWduKHRoaXMubGltaXRlck9wdGlvbnMsIHtcblx0ICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke2tleX1gLFxuXHQgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuXHQgICAgICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uXG5cdCAgICAgICAgfSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJjcmVhdGVkXCIsIGxpbWl0ZXIsIGtleSk7XG5cdCAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGRlbGV0ZUtleShrZXkgPSBcIlwiKSB7XG5cdCAgICAgIHZhciBkZWxldGVkLCBpbnN0YW5jZTtcblx0ICAgICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG5cdCAgICAgICAgZGVsZXRlZCA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oWydkZWwnLCAuLi5TY3JpcHRzJDEuYWxsS2V5cyhgJHt0aGlzLmlkfS0ke2tleX1gKV0pKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuXHQgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICAgIGF3YWl0IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gKGluc3RhbmNlICE9IG51bGwpIHx8IGRlbGV0ZWQgPiAwO1xuXHQgICAgfVxuXG5cdCAgICBsaW1pdGVycygpIHtcblx0ICAgICAgdmFyIGssIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgcmVzdWx0cy5wdXNoKHtcblx0ICAgICAgICAgIGtleTogayxcblx0ICAgICAgICAgIGxpbWl0ZXI6IHZcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH1cblxuXHQgICAga2V5cygpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKTtcblx0ICAgIH1cblxuXHQgICAgYXN5bmMgY2x1c3RlcktleXMoKSB7XG5cdCAgICAgIHZhciBjdXJzb3IsIGVuZCwgZm91bmQsIGksIGssIGtleXMsIGxlbiwgbmV4dCwgc3RhcnQ7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0aGlzLmtleXMoKSk7XG5cdCAgICAgIH1cblx0ICAgICAga2V5cyA9IFtdO1xuXHQgICAgICBjdXJzb3IgPSBudWxsO1xuXHQgICAgICBzdGFydCA9IGBiXyR7dGhpcy5pZH0tYC5sZW5ndGg7XG5cdCAgICAgIGVuZCA9IFwiX3NldHRpbmdzXCIubGVuZ3RoO1xuXHQgICAgICB3aGlsZSAoY3Vyc29yICE9PSAwKSB7XG5cdCAgICAgICAgW25leHQsIGZvdW5kXSA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oW1wic2NhblwiLCBjdXJzb3IgIT0gbnVsbCA/IGN1cnNvciA6IDAsIFwibWF0Y2hcIiwgYGJfJHt0aGlzLmlkfS0qX3NldHRpbmdzYCwgXCJjb3VudFwiLCAxMDAwMF0pKTtcblx0ICAgICAgICBjdXJzb3IgPSB+fm5leHQ7XG5cdCAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgIGsgPSBmb3VuZFtpXTtcblx0ICAgICAgICAgIGtleXMucHVzaChrLnNsaWNlKHN0YXJ0LCAtZW5kKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBrZXlzO1xuXHQgICAgfVxuXG5cdCAgICBfc3RhcnRBdXRvQ2xlYW51cCgpIHtcblx0ICAgICAgdmFyIGJhc2U7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jKCkgPT4ge1xuXHQgICAgICAgIHZhciBlLCBrLCByZWYsIHJlc3VsdHMsIHRpbWUsIHY7XG5cdCAgICAgICAgdGltZSA9IERhdGUubm93KCk7XG5cdCAgICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBpZiAoKGF3YWl0IHYuX3N0b3JlLl9fZ3JvdXBDaGVja19fKHRpbWUpKSkge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlbGV0ZUtleShrKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIGUgPSBlcnJvcjtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHYuRXZlbnRzLnRyaWdnZXIoXCJlcnJvclwiLCBlKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgICB9LCB0aGlzLnRpbWVvdXQgLyAyKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9XG5cblx0ICAgIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHBhcnNlciQzLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLmxpbWl0ZXJPcHRpb25zKTtcblx0ICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICBpZiAoIXRoaXMuc2hhcmVkQ29ubmVjdGlvbikge1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5jb25uZWN0aW9uKSAhPSBudWxsID8gcmVmLmRpc2Nvbm5lY3QoZmx1c2gpIDogdm9pZCAwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgR3JvdXAucHJvdG90eXBlLmRlZmF1bHRzID0ge1xuXHQgICAgdGltZW91dDogMTAwMCAqIDYwICogNSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGwsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgaWQ6IFwiZ3JvdXAta2V5XCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEdyb3VwO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBHcm91cF8xID0gR3JvdXA7XG5cblx0dmFyIEJhdGNoZXIsIEV2ZW50cyQzLCBwYXJzZXIkNDtcblxuXHRwYXJzZXIkNCA9IHBhcnNlcjtcblxuXHRFdmVudHMkMyA9IEV2ZW50c18xO1xuXG5cdEJhdGNoZXIgPSAoZnVuY3Rpb24oKSB7XG5cdCAgY2xhc3MgQmF0Y2hlciB7XG5cdCAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0ICAgICAgcGFyc2VyJDQubG9hZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMyh0aGlzKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHRoaXMuX3Jlc2V0UHJvbWlzZSgpO1xuXHQgICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmVzZXRQcm9taXNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9IG5ldyB0aGlzLlByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUgPSByZXM7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZmx1c2goKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiYmF0Y2hcIiwgdGhpcy5fYXJyKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgIH1cblxuXHQgICAgYWRkKGRhdGEpIHtcblx0ICAgICAgdmFyIHJldDtcblx0ICAgICAgdGhpcy5fYXJyLnB1c2goZGF0YSk7XG5cdCAgICAgIHJldCA9IHRoaXMuX3Byb21pc2U7XG5cdCAgICAgIGlmICh0aGlzLl9hcnIubGVuZ3RoID09PSB0aGlzLm1heFNpemUpIHtcblx0ICAgICAgICB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICB9IGVsc2UgaWYgKCh0aGlzLm1heFRpbWUgIT0gbnVsbCkgJiYgdGhpcy5fYXJyLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICAgIH0sIHRoaXMubWF4VGltZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH1cblxuXHQgIH1cblx0ICBCYXRjaGVyLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIG1heFRpbWU6IG51bGwsXG5cdCAgICBtYXhTaXplOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZVxuXHQgIH07XG5cblx0ICByZXR1cm4gQmF0Y2hlcjtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgQmF0Y2hlcl8xID0gQmF0Y2hlcjtcblxuXHR2YXIgcmVxdWlyZSQkNCQxID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkOCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UodmVyc2lvbiQyKTtcblxuXHR2YXIgQm90dGxlbmVjaywgREVGQVVMVF9QUklPUklUWSQxLCBFdmVudHMkNCwgSm9iJDEsIExvY2FsRGF0YXN0b3JlJDEsIE5VTV9QUklPUklUSUVTJDEsIFF1ZXVlcyQxLCBSZWRpc0RhdGFzdG9yZSQxLCBTdGF0ZXMkMSwgU3luYyQxLCBwYXJzZXIkNSxcblx0ICBzcGxpY2UgPSBbXS5zcGxpY2U7XG5cblx0TlVNX1BSSU9SSVRJRVMkMSA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkkMSA9IDU7XG5cblx0cGFyc2VyJDUgPSBwYXJzZXI7XG5cblx0UXVldWVzJDEgPSBRdWV1ZXNfMTtcblxuXHRKb2IkMSA9IEpvYl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlJDEgPSBMb2NhbERhdGFzdG9yZV8xO1xuXG5cdFJlZGlzRGF0YXN0b3JlJDEgPSByZXF1aXJlJCQ0JDE7XG5cblx0RXZlbnRzJDQgPSBFdmVudHNfMTtcblxuXHRTdGF0ZXMkMSA9IFN0YXRlc18xO1xuXG5cdFN5bmMkMSA9IFN5bmNfMTtcblxuXHRCb3R0bGVuZWNrID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJvdHRsZW5lY2sge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5pbnZhbGlkKSB7XG5cdCAgICAgIHZhciBzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVPcHRpb25zO1xuXHQgICAgICB0aGlzLl9hZGRUb1F1ZXVlID0gdGhpcy5fYWRkVG9RdWV1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucywgaW52YWxpZCk7XG5cdCAgICAgIHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzID0gbmV3IFF1ZXVlcyQxKE5VTV9QUklPUklUSUVTJDEpO1xuXHQgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB7fTtcblx0ICAgICAgdGhpcy5fc3RhdGVzID0gbmV3IFN0YXRlcyQxKFtcIlJFQ0VJVkVEXCIsIFwiUVVFVUVEXCIsIFwiUlVOTklOR1wiLCBcIkVYRUNVVElOR1wiXS5jb25jYXQodGhpcy50cmFja0RvbmVTdGF0dXMgPyBbXCJET05FXCJdIDogW10pKTtcblx0ICAgICAgdGhpcy5fbGltaXRlciA9IG51bGw7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQ0KHRoaXMpO1xuXHQgICAgICB0aGlzLl9zdWJtaXRMb2NrID0gbmV3IFN5bmMkMShcInN1Ym1pdFwiLCB0aGlzLlByb21pc2UpO1xuXHQgICAgICB0aGlzLl9yZWdpc3RlckxvY2sgPSBuZXcgU3luYyQxKFwicmVnaXN0ZXJcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgc3RvcmVPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgdGhpcy5fc3RvcmUgPSAoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcInJlZGlzXCIgfHwgdGhpcy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiIHx8ICh0aGlzLmNvbm5lY3Rpb24gIT0gbnVsbCkpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnJlZGlzU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpc0RhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc3RvcmUgPT09IFwibG9jYWxcIikge1xuXHQgICAgICAgICAgc3RvcmVJbnN0YW5jZU9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMubG9jYWxTdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IExvY2FsRGF0YXN0b3JlJDEodGhpcywgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEludmFsaWQgZGF0YXN0b3JlIHR5cGU6ICR7dGhpcy5kYXRhc3RvcmV9YCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYWxsKHRoaXMpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJsZWZ0emVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYucmVmID09PSBcImZ1bmN0aW9uXCIgPyByZWYucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJ6ZXJvXCIsICgpID0+IHtcblx0ICAgICAgICB2YXIgcmVmO1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5fc3RvcmUuaGVhcnRiZWF0KSAhPSBudWxsID8gdHlwZW9mIHJlZi51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnVucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpIHtcblx0ICAgICAgaWYgKCEoKG9wdGlvbnMgIT0gbnVsbCkgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiYgaW52YWxpZC5sZW5ndGggPT09IDApKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcIkJvdHRsZW5lY2sgdjIgdGFrZXMgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjayN1cGdyYWRpbmctdG8tdjIgaWYgeW91J3JlIHVwZ3JhZGluZyBmcm9tIEJvdHRsZW5lY2sgdjEuXCIpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJlYWR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVhZHk7XG5cdCAgICB9XG5cblx0ICAgIGNsaWVudHMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5jbGllbnRzO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsKCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfWA7XG5cdCAgICB9XG5cblx0ICAgIGNoYW5uZWxfY2xpZW50KCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfV8ke3RoaXMuX3N0b3JlLmNsaWVudElkfWA7XG5cdCAgICB9XG5cblx0ICAgIHB1Ymxpc2gobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19wdWJsaXNoX18obWVzc2FnZSk7XG5cdCAgICB9XG5cblx0ICAgIGRpc2Nvbm5lY3QoZmx1c2ggPSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2Rpc2Nvbm5lY3RfXyhmbHVzaCk7XG5cdCAgICB9XG5cblx0ICAgIGNoYWluKF9saW1pdGVyKSB7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBfbGltaXRlcjtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnF1ZXVlZChwcmlvcml0eSk7XG5cdCAgICB9XG5cblx0ICAgIGNsdXN0ZXJRdWV1ZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3F1ZXVlZF9fKCk7XG5cdCAgICB9XG5cblx0ICAgIGVtcHR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWV1ZWQoKSA9PT0gMCAmJiB0aGlzLl9zdWJtaXRMb2NrLmlzRW1wdHkoKTtcblx0ICAgIH1cblxuXHQgICAgcnVubmluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcnVubmluZ19fKCk7XG5cdCAgICB9XG5cblx0ICAgIGRvbmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2RvbmVfXygpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5qb2JTdGF0dXMoaWQpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JzKHN0YXR1cykge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0pvYnMoc3RhdHVzKTtcblx0ICAgIH1cblxuXHQgICAgY291bnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0NvdW50cygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmFuZG9tSW5kZXgoKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICAgIH1cblxuXHQgICAgY2hlY2sod2VpZ2h0ID0gMSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jaGVja19fKHdlaWdodCk7XG5cdCAgICB9XG5cblx0ICAgIF9jbGVhckdsb2JhbFN0YXRlKGluZGV4KSB7XG5cdCAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRbaW5kZXhdICE9IG51bGwpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkW2luZGV4XS5leHBpcmF0aW9uKTtcblx0ICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkW2luZGV4XTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgYXN5bmMgX2ZyZWUoaW5kZXgsIGpvYiwgb3B0aW9ucywgZXZlbnRJbmZvKSB7XG5cdCAgICAgIHZhciBlLCBydW5uaW5nO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgICh7cnVubmluZ30gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19mcmVlX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRnJlZWQgJHtvcHRpb25zLmlkfWAsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgaWYgKHJ1bm5pbmcgPT09IDAgJiYgdGhpcy5lbXB0eSgpKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImlkbGVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlID0gZXJyb3IxO1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgX3J1bihpbmRleCwgam9iLCB3YWl0KSB7XG5cdCAgICAgIHZhciBjbGVhckdsb2JhbFN0YXRlLCBmcmVlLCBydW47XG5cdCAgICAgIGpvYi5kb1J1bigpO1xuXHQgICAgICBjbGVhckdsb2JhbFN0YXRlID0gdGhpcy5fY2xlYXJHbG9iYWxTdGF0ZS5iaW5kKHRoaXMsIGluZGV4KTtcblx0ICAgICAgcnVuID0gdGhpcy5fcnVuLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIGZyZWUgPSB0aGlzLl9mcmVlLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRbaW5kZXhdID0ge1xuXHQgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4ZWN1dGUodGhpcy5fbGltaXRlciwgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0KSxcblx0ICAgICAgICBleHBpcmF0aW9uOiBqb2Iub3B0aW9ucy5leHBpcmF0aW9uICE9IG51bGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4cGlyZShjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgICAgIH0sIHdhaXQgKyBqb2Iub3B0aW9ucy5leHBpcmF0aW9uKSA6IHZvaWQgMCxcblx0ICAgICAgICBqb2I6IGpvYlxuXHQgICAgICB9O1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5PbmUoY2FwYWNpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFyZ3MsIGluZGV4LCBuZXh0LCBvcHRpb25zLCBxdWV1ZTtcblx0ICAgICAgICBpZiAodGhpcy5xdWV1ZWQoKSA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZSA9IHRoaXMuX3F1ZXVlcy5nZXRGaXJzdCgpO1xuXHQgICAgICAgICh7b3B0aW9ucywgYXJnc30gPSBuZXh0ID0gcXVldWUuZmlyc3QoKSk7XG5cdCAgICAgICAgaWYgKChjYXBhY2l0eSAhPSBudWxsKSAmJiBvcHRpb25zLndlaWdodCA+IGNhcGFjaXR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRHJhaW5pbmcgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgaW5kZXggPSB0aGlzLl9yYW5kb21JbmRleCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3JlZ2lzdGVyX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0LCBvcHRpb25zLmV4cGlyYXRpb24pLnRoZW4oKHtzdWNjZXNzLCB3YWl0LCByZXNlcnZvaXJ9KSA9PiB7XG5cdCAgICAgICAgICB2YXIgZW1wdHk7XG5cdCAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluZWQgJHtvcHRpb25zLmlkfWAsIHtzdWNjZXNzLCBhcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuXHQgICAgICAgICAgICBxdWV1ZS5zaGlmdCgpO1xuXHQgICAgICAgICAgICBlbXB0eSA9IHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICAgICAgaWYgKGVtcHR5KSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImVtcHR5XCIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChyZXNlcnZvaXIgPT09IDApIHtcblx0ICAgICAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVwbGV0ZWRcIiwgZW1wdHkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3J1bihpbmRleCwgbmV4dCwgd2FpdCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShvcHRpb25zLndlaWdodCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5BbGwoY2FwYWNpdHksIHRvdGFsID0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZHJhaW5PbmUoY2FwYWNpdHkpLnRoZW4oKGRyYWluZWQpID0+IHtcblx0ICAgICAgICB2YXIgbmV3Q2FwYWNpdHk7XG5cdCAgICAgICAgaWYgKGRyYWluZWQgIT0gbnVsbCkge1xuXHQgICAgICAgICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0eSAhPSBudWxsID8gY2FwYWNpdHkgLSBkcmFpbmVkIDogY2FwYWNpdHk7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZHJhaW5BbGwobmV3Q2FwYWNpdHksIHRvdGFsICsgZHJhaW5lZCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0b3RhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJvcEFsbFF1ZXVlZChtZXNzYWdlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9xdWV1ZXMuc2hpZnRBbGwoZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5kb0Ryb3Aoe21lc3NhZ2V9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIHN0b3Aob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHZhciBkb25lLCB3YWl0Rm9yRXhlY3V0aW5nO1xuXHQgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3BEZWZhdWx0cyk7XG5cdCAgICAgIHdhaXRGb3JFeGVjdXRpbmcgPSAoYXQpID0+IHtcblx0ICAgICAgICB2YXIgZmluaXNoZWQ7XG5cdCAgICAgICAgZmluaXNoZWQgPSAoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgY291bnRzO1xuXHQgICAgICAgICAgY291bnRzID0gdGhpcy5fc3RhdGVzLmNvdW50cztcblx0ICAgICAgICAgIHJldHVybiAoY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdICsgY291bnRzWzNdKSA9PT0gYXQ7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oXCJkb25lXCIsICgpID0+IHtcblx0ICAgICAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkb25lXCIpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBkb25lID0gb3B0aW9ucy5kcm9wV2FpdGluZ0pvYnMgPyAodGhpcy5fcnVuID0gZnVuY3Rpb24oaW5kZXgsIG5leHQpIHtcblx0ICAgICAgICByZXR1cm4gbmV4dC5kb0Ryb3Aoe1xuXHQgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5kcm9wRXJyb3JNZXNzYWdlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0sIHRoaXMuX2RyYWluT25lID0gKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgfSwgdGhpcy5fcmVnaXN0ZXJMb2NrLnNjaGVkdWxlKCgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgaywgcmVmLCB2O1xuXHQgICAgICAgICAgcmVmID0gdGhpcy5fc2NoZWR1bGVkO1xuXHQgICAgICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXModi5qb2Iub3B0aW9ucy5pZCkgPT09IFwiUlVOTklOR1wiKSB7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYudGltZW91dCk7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYuZXhwaXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgdi5qb2IuZG9Ecm9wKHtcblx0ICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLl9kcm9wQWxsUXVldWVkKG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZSk7XG5cdCAgICAgICAgICByZXR1cm4gd2FpdEZvckV4ZWN1dGluZygwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSkpIDogdGhpcy5zY2hlZHVsZSh7XG5cdCAgICAgICAgcHJpb3JpdHk6IE5VTV9QUklPUklUSUVTJDEgLSAxLFxuXHQgICAgICAgIHdlaWdodDogMFxuXHQgICAgICB9LCAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9yZWNlaXZlID0gZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3Iob3B0aW9ucy5lbnF1ZXVlRXJyb3JNZXNzYWdlKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuc3RvcCA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKFwic3RvcCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkXCIpKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIGRvbmU7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9hZGRUb1F1ZXVlKGpvYikge1xuXHQgICAgICB2YXIgYXJncywgYmxvY2tlZCwgZXJyb3IsIG9wdGlvbnMsIHJlYWNoZWRIV00sIHNoaWZ0ZWQsIHN0cmF0ZWd5O1xuXHQgICAgICAoe2FyZ3MsIG9wdGlvbnN9ID0gam9iKTtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3JlYWNoZWRIV00sIGJsb2NrZWQsIHN0cmF0ZWd5fSA9IChhd2FpdCB0aGlzLl9zdG9yZS5fX3N1Ym1pdF9fKHRoaXMucXVldWVkKCksIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYENvdWxkIG5vdCBxdWV1ZSAke29wdGlvbnMuaWR9YCwge2FyZ3MsIG9wdGlvbnMsIGVycm9yfSk7XG5cdCAgICAgICAgam9iLmRvRHJvcCh7ZXJyb3J9KTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGJsb2NrZWQpIHtcblx0ICAgICAgICBqb2IuZG9Ecm9wKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVhY2hlZEhXTSkge1xuXHQgICAgICAgIHNoaWZ0ZWQgPSBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XX1BSSU9SSVRZID8gdGhpcy5fcXVldWVzLnNoaWZ0TGFzdEZyb20ob3B0aW9ucy5wcmlvcml0eSArIDEpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XID8gam9iIDogdm9pZCAwO1xuXHQgICAgICAgIGlmIChzaGlmdGVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIHNoaWZ0ZWQuZG9Ecm9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICgoc2hpZnRlZCA9PSBudWxsKSB8fCBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuT1ZFUkZMT1cpIHtcblx0ICAgICAgICAgIGlmIChzaGlmdGVkID09IG51bGwpIHtcblx0ICAgICAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGpvYi5kb1F1ZXVlKHJlYWNoZWRIV00sIGJsb2NrZWQpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMucHVzaChqb2IpO1xuXHQgICAgICBhd2FpdCB0aGlzLl9kcmFpbkFsbCgpO1xuXHQgICAgICByZXR1cm4gcmVhY2hlZEhXTTtcblx0ICAgIH1cblxuXHQgICAgX3JlY2VpdmUoam9iKSB7XG5cdCAgICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGpvYi5vcHRpb25zLmlkKSAhPSBudWxsKSB7XG5cdCAgICAgICAgam9iLl9yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihgQSBqb2Igd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cyAoaWQ9JHtqb2Iub3B0aW9ucy5pZH0pYCkpO1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBqb2IuZG9SZWNlaXZlKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUodGhpcy5fYWRkVG9RdWV1ZSwgam9iKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBzdWJtaXQoLi4uYXJncykge1xuXHQgICAgICB2YXIgY2IsIGZuLCBqb2IsIG9wdGlvbnMsIHJlZiwgcmVmMSwgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZWYgPSBhcmdzLCBbZm4sIC4uLmFyZ3NdID0gcmVmLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKHt9LCB0aGlzLmpvYkRlZmF1bHRzKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZWYxID0gYXJncywgW29wdGlvbnMsIGZuLCAuLi5hcmdzXSA9IHJlZjEsIFtjYl0gPSBzcGxpY2UuY2FsbChhcmdzLCAtMSk7XG5cdCAgICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGFzayA9ICguLi5hcmdzKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgZnVuY3Rpb24oLi4uYXJncykge1xuXHQgICAgICAgICAgICByZXR1cm4gKGFyZ3NbMF0gIT0gbnVsbCA/IHJlamVjdCA6IHJlc29sdmUpKGFyZ3MpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgam9iLnByb21pc2UudGhlbihmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGFyZ3MpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKGFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlKGpvYik7XG5cdCAgICB9XG5cblx0ICAgIHNjaGVkdWxlKC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGpvYiwgb3B0aW9ucywgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICBbdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBbb3B0aW9ucywgdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICB9XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgICByZXR1cm4gam9iLnByb21pc2U7XG5cdCAgICB9XG5cblx0ICAgIHdyYXAoZm4pIHtcblx0ICAgICAgdmFyIHNjaGVkdWxlLCB3cmFwcGVkO1xuXHQgICAgICBzY2hlZHVsZSA9IHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKTtcblx0ICAgICAgd3JhcHBlZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICByZXR1cm4gc2NoZWR1bGUoZm4uYmluZCh0aGlzKSwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHdyYXBwZWQud2l0aE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zLCAuLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKG9wdGlvbnMsIGZuLCAuLi5hcmdzKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIHdyYXBwZWQ7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5fX3VwZGF0ZVNldHRpbmdzX18ocGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuc3RvcmVEZWZhdWx0cykpO1xuXHQgICAgICBwYXJzZXIkNS5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGN1cnJlbnRSZXNlcnZvaXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2N1cnJlbnRSZXNlcnZvaXJfXygpO1xuXHQgICAgfVxuXG5cdCAgICBpbmNyZW1lbnRSZXNlcnZvaXIoaW5jciA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcik7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQm90dGxlbmVjay5kZWZhdWx0ID0gQm90dGxlbmVjaztcblxuXHQgIEJvdHRsZW5lY2suRXZlbnRzID0gRXZlbnRzJDQ7XG5cblx0ICBCb3R0bGVuZWNrLnZlcnNpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS52ZXJzaW9uID0gcmVxdWlyZSQkOC52ZXJzaW9uO1xuXG5cdCAgQm90dGxlbmVjay5zdHJhdGVneSA9IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5ID0ge1xuXHQgICAgTEVBSzogMSxcblx0ICAgIE9WRVJGTE9XOiAyLFxuXHQgICAgT1ZFUkZMT1dfUFJJT1JJVFk6IDQsXG5cdCAgICBCTE9DSzogM1xuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdCAgQm90dGxlbmVjay5Hcm91cCA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkdyb3VwID0gR3JvdXBfMTtcblxuXHQgIEJvdHRsZW5lY2suUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuUmVkaXNDb25uZWN0aW9uID0gcmVxdWlyZSQkMjtcblxuXHQgIEJvdHRsZW5lY2suSU9SZWRpc0Nvbm5lY3Rpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5JT1JlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDM7XG5cblx0ICBCb3R0bGVuZWNrLkJhdGNoZXIgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5CYXRjaGVyID0gQmF0Y2hlcl8xO1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuam9iRGVmYXVsdHMgPSB7XG5cdCAgICBwcmlvcml0eTogREVGQVVMVF9QUklPUklUWSQxLFxuXHQgICAgd2VpZ2h0OiAxLFxuXHQgICAgZXhwaXJhdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIlxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdG9yZURlZmF1bHRzID0ge1xuXHQgICAgbWF4Q29uY3VycmVudDogbnVsbCxcblx0ICAgIG1pblRpbWU6IDAsXG5cdCAgICBoaWdoV2F0ZXI6IG51bGwsXG5cdCAgICBzdHJhdGVneTogQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyxcblx0ICAgIHBlbmFsdHk6IG51bGwsXG5cdCAgICByZXNlcnZvaXI6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VNYXhpbXVtOiBudWxsXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmxvY2FsU3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIFByb21pc2U6IFByb21pc2UsXG5cdCAgICB0aW1lb3V0OiBudWxsLFxuXHQgICAgaGVhcnRiZWF0SW50ZXJ2YWw6IDI1MFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5yZWRpc1N0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxuXHQgICAgY2xpZW50VGltZW91dDogMTAwMDAsXG5cdCAgICBSZWRpczogbnVsbCxcblx0ICAgIGNsaWVudE9wdGlvbnM6IHt9LFxuXHQgICAgY2x1c3Rlck5vZGVzOiBudWxsLFxuXHQgICAgY2xlYXJEYXRhc3RvcmU6IGZhbHNlLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5pbnN0YW5jZURlZmF1bHRzID0ge1xuXHQgICAgZGF0YXN0b3JlOiBcImxvY2FsXCIsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgaWQ6IFwiPG5vLWlkPlwiLFxuXHQgICAgcmVqZWN0T25Ecm9wOiB0cnVlLFxuXHQgICAgdHJhY2tEb25lU3RhdHVzOiBmYWxzZSxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcERlZmF1bHRzID0ge1xuXHQgICAgZW5xdWV1ZUVycm9yTWVzc2FnZTogXCJUaGlzIGxpbWl0ZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgY2Fubm90IGFjY2VwdCBuZXcgam9icy5cIixcblx0ICAgIGRyb3BXYWl0aW5nSm9iczogdHJ1ZSxcblx0ICAgIGRyb3BFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQuXCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJvdHRsZW5lY2s7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJvdHRsZW5lY2tfMSA9IEJvdHRsZW5lY2s7XG5cblx0dmFyIGxpYiA9IEJvdHRsZW5lY2tfMTtcblxuXHRyZXR1cm4gbGliO1xuXG59KSkpO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBOdWxsT2JqZWN0ID0gZnVuY3Rpb24gTnVsbE9iamVjdCAoKSB7IH1cbk51bGxPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCAqKCBcIjtcIiBwYXJhbWV0ZXIgKSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIC8gcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICA9IFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCIgLyBcIidcIiAvIFwiKlwiXG4gKiAgICAgICAgICAgICAgIC8gXCIrXCIgLyBcIi1cIiAvIFwiLlwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiIC8gXCJ8XCIgLyBcIn5cIlxuICogICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEFcbiAqICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzXG4gKiBxdW90ZWQtc3RyaW5nID0gRFFVT1RFICooIHFkdGV4dCAvIHF1b3RlZC1wYWlyICkgRFFVT1RFXG4gKiBxZHRleHQgICAgICAgID0gSFRBQiAvIFNQIC8gJXgyMSAvICV4MjMtNUIgLyAleDVELTdFIC8gb2JzLXRleHRcbiAqIG9icy10ZXh0ICAgICAgPSAleDgwLUZGXG4gKiBxdW90ZWQtcGFpciAgID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKi9cbmNvbnN0IHBhcmFtUkUgPSAvOyAqKFshIyQlJicqKy5eXFx3YHx+LV0rKT0oXCIoPzpbXFx2XFx1MDAyMFxcdTAwMjFcXHUwMDIzLVxcdTAwNWJcXHUwMDVkLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdfFxcXFxbXFx2XFx1MDAyMC1cXHUwMGZmXSkqXCJ8WyEjJCUmJyorLl5cXHdgfH4tXSspICovZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggcXVvdGVkLXBhaXIgaW4gUkZDIDcyMzAgc2VjIDMuMi42XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqIG9icy10ZXh0ICAgID0gJXg4MC1GRlxuICovXG5jb25zdCBxdW90ZWRQYWlyUkUgPSAvXFxcXChbXFx2XFx1MDAyMC1cXHUwMGZmXSkvZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbmNvbnN0IG1lZGlhVHlwZVJFID0gL15bISMkJSYnKisuXlxcd3x+LV0rXFwvWyEjJCUmJyorLl5cXHd8fi1dKyQvdVxuXG4vLyBkZWZhdWx0IENvbnRlbnRUeXBlIHRvIHByZXZlbnQgcmVwZWF0ZWQgb2JqZWN0IGNyZWF0aW9uXG5jb25zdCBkZWZhdWx0Q29udGVudFR5cGUgPSB7IHR5cGU6ICcnLCBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpIH1cbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlLnBhcmFtZXRlcnMpXG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZSlcblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaGVhZGVyIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHNhZmVQYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSB7IHBhcnNlLCBzYWZlUGFyc2UgfVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuc2FmZVBhcnNlID0gc2FmZVBhcnNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGUgPSBkZWZhdWx0Q29udGVudFR5cGVcbiIsICJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCIgYXNzZXJ0IHsgdHlwZTogXCJqc29uXCIgfTtcblxuaW1wb3J0IHsgcmVhZFNlcnZlckluZm8gfSBmcm9tIFwiLi9yZWFkU2VydmVySW5mb1wiO1xuaW1wb3J0IHtcbiAgU2FuZGJveE1vZGUsXG4gIE91dHB1dFNjaGVtYVNvdXJjZSxcbiAgUHJvbXB0U291cmNlLFxuICBydW5Db2RleEV4ZWMsXG4gIFNhZmV0eVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGRyb3BTdWRvIH0gZnJvbSBcIi4vZHJvcFN1ZG9cIjtcbmltcG9ydCB7IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MgfSBmcm9tIFwiLi9jaGVja0FjdG9yUGVybWlzc2lvbnNcIjtcbmltcG9ydCBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgZnJvbSBcInN0cmluZy1hcmd2XCI7XG5pbXBvcnQgeyB3cml0ZVByb3h5Q29uZmlnIH0gZnJvbSBcIi4vd3JpdGVQcm94eUNvbmZpZ1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKFwiY29kZXgtYWN0aW9uXCIpXG4gICAgLnZlcnNpb24ocGtnLnZlcnNpb24pXG4gICAgLmRlc2NyaXB0aW9uKFwiTXVsdGl0b29sIHRvIHN1cHBvcnQgb3BlbmFpL2NvZGV4LWFjdGlvbi5cIik7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicmVhZC1zZXJ2ZXItaW5mb1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlJlYWQgc2VydmVyIGluZm8gZnJvbSB0aGUgcmVzcG9uc2VzIEFQSSBwcm94eVwiKVxuICAgIC5hcmd1bWVudChcIjxzZXJ2ZXJJbmZvRmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoc2VydmVySW5mb0ZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGUpO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlc29sdmUtY29kZXgtaG9tZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiUmVzb2x2ZSB0aGUgQ29kZXggaG9tZSBkaXJlY3Rvcnkgd2l0aCBwcmVjZWRlbmNlOiBpbnB1dCwgZW52LCBkZWZhdWx0ICh+Ly5jb2RleClcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZS1vdmVycmlkZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJPcHRpb25hbCBjb2RleC1ob21lIGlucHV0IHZhbHVlIChtYXkgYmUgZW1wdHkpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIHBpY2tpbmcgZGVmYXVsdHNcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiQ29kZXggdXNlciB0byBjb25zaWRlciB3aGVuIHNhZmV0eSBzdHJhdGVneSBpcyAndW5wcml2aWxlZ2VkLXVzZXInXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1naXRodWItcnVuLWlkIDxpZD5cIiwgXCJHaXRIdWIgcnVuIElEXCIpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZU92ZXJyaWRlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgICBnaXRodWJSdW5JZDogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGNvZGV4VXNlciA9IGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhVc2VyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ29kZXhIb21lKFxuICAgICAgICAgIGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhIb21lT3ZlcnJpZGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgICBvcHRpb25zLmdpdGh1YlJ1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRPdXRwdXQgfSA9IGF3YWl0IGltcG9ydChcIkBhY3Rpb25zL2NvcmVcIik7XG4gICAgICAgIHNldE91dHB1dChcImNvZGV4LWhvbWVcIiwgcmVzb2x2ZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgQ29kZXggaG9tZTogJHtyZXNvbHZlZH1gKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcIndyaXRlLXByb3h5LWNvbmZpZ1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiV3JpdGUgdGhlIE9wZW5BSSBQcm94eSBtb2RlbCBwcm92aWRlciBjb25maWcgaW50byBDT0RFWF9IT01FL2NvbmZpZy50b21sXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsIFwiUGF0aCB0byBDb2RleCBob21lIGRpcmVjdG9yeVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcG9ydCA8cG9ydD5cIiwgXCJQcm94eSBzZXJ2ZXIgcG9ydFwiLCBwYXJzZUludFN0cmljdClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBwb3J0OiBudW1iZXI7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmV0eVN0cmF0ZWd5ID0gdG9TYWZldHlTdHJhdGVneShvcHRpb25zLnNhZmV0eVN0cmF0ZWd5KTtcbiAgICAgICAgYXdhaXQgd3JpdGVQcm94eUNvbmZpZyhvcHRpb25zLmNvZGV4SG9tZSwgb3B0aW9ucy5wb3J0LCBzYWZldHlTdHJhdGVneSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLXJ1bm5lci1jcmVkZW50aWFscyA8anNvbj5cIiwgXCJpbnRlcm5hbFwiKS5oaWRlSGVscCgpKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAob3B0aW9uczoge1xuICAgICAgICB1c2VyOiBzdHJpbmc7XG4gICAgICAgIGdyb3VwOiBzdHJpbmc7XG4gICAgICAgIHJvb3RQaGFzZTogYm9vbGVhbjtcbiAgICAgICAgcnVubmVyQ3JlZGVudGlhbHM/OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGF3YWl0IGRyb3BTdWRvKHtcbiAgICAgICAgICB1c2VyOiBvcHRpb25zLnVzZXIsXG4gICAgICAgICAgZ3JvdXA6IG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgICAgcm9vdFBoYXNlOiBvcHRpb25zLnJvb3RQaGFzZSxcbiAgICAgICAgICBydW5uZXJDcmVkZW50aWFsczogb3B0aW9ucy5ydW5uZXJDcmVkZW50aWFscyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJydW4tY29kZXgtZXhlY1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIkludm9rZXMgYGNvZGV4IGV4ZWNgIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50c1wiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcHJvbXB0IDxwcm9tcHQ+XCIsIFwiUHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1wcm9tcHQtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiRmlsZSBjb250YWluaW5nIHRoZSBwcm9tcHQgdG8gcGFzcyB0byBgY29kZXggZXhlY2AuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LWhvbWUgPERJUkVDVE9SWT5cIixcbiAgICAgIFwiUGF0aCB0byB0aGUgQ29kZXggQ0xJIGhvbWUgZGlyZWN0b3J5ICh3aGVyZSBjb25maWcgZmlsZXMgYXJlIHN0b3JlZCkuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jZCA8RElSRUNUT1JZPlwiLCBcIldvcmtpbmcgZGlyZWN0b3J5IGZvciBDb2RleFwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1leHRyYS1hcmdzIDxhcmdzPlwiLFxuICAgICAgXCJBZGRpdGlvbmFsIGFyZ3MgdG8gcGFzcyB0aHJvdWdoIHRvIGBjb2RleCBleGVjYCBhcyBKU09OIGFycmF5IG9yIHNoZWxsIHN0cmluZy5cIixcbiAgICAgIHBhcnNlRXh0cmFBcmdzXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiUGF0aCB3aGVyZSB0aGUgZmluYWwgbWVzc2FnZSBmcm9tIGBjb2RleCBleGVjYCB3aWxsIGJlIHdyaXR0ZW4uXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1zY2hlbWEtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiUGF0aCB0byBhIHNjaGVtYSBmaWxlIHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWMgLS1vdXRwdXQtc2NoZW1hYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LXNjaGVtYSA8U0NIRU1BPlwiLFxuICAgICAgXCJJbmxpbmUgc2NoZW1hIGNvbnRlbnRzIHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWMgLS1vdXRwdXQtc2NoZW1hYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FuZGJveCA8U0FOREJPWD5cIixcbiAgICAgIFwiTGVnYWN5IHNhbmRib3ggbW9kZSBvdmVycmlkZSB0byBwYXNzIHRvIGBjb2RleCBleGVjYCAobWF5IGJlIGVtcHR5KS5cIlxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLXBlcm1pc3Npb24tcHJvZmlsZSA8UFJPRklMRT5cIixcbiAgICAgIFwiUGVybWlzc2lvbiBwcm9maWxlIHRvIHNlbGVjdCB0aHJvdWdoIGBkZWZhdWx0X3Blcm1pc3Npb25zYCAobWF5IGJlIGVtcHR5KS5cIixcbiAgICAgIFwiXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1tb2RlbCA8bW9kZWw+XCIsIFwiTW9kZWwgdGhlIGFnZW50IHNob3VsZCB1c2VcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLWVmZm9ydCA8ZWZmb3J0PlwiLCBcIlJlYXNvbmluZyBlZmZvcnQgdGhlIGFnZW50IHNob3VsZCB1c2VcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LXVzZXIgPHVzZXI+XCIsXG4gICAgICBcIlVzZXIgdG8gcnVuIGNvZGV4IGV4ZWMgYXMgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIHByb21wdDogc3RyaW5nO1xuICAgICAgICBwcm9tcHRGaWxlOiBzdHJpbmc7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBjZDogc3RyaW5nO1xuICAgICAgICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG4gICAgICAgIG91dHB1dEZpbGU6IHN0cmluZztcbiAgICAgICAgb3V0cHV0U2NoZW1hRmlsZTogc3RyaW5nO1xuICAgICAgICBvdXRwdXRTY2hlbWE6IHN0cmluZztcbiAgICAgICAgc2FuZGJveDogc3RyaW5nO1xuICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZTogc3RyaW5nO1xuICAgICAgICBtb2RlbDogc3RyaW5nO1xuICAgICAgICBlZmZvcnQ6IHN0cmluZztcbiAgICAgICAgc2FmZXR5U3RyYXRlZ3k6IHN0cmluZztcbiAgICAgICAgY29kZXhVc2VyOiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwcm9tcHQsXG4gICAgICAgICAgcHJvbXB0RmlsZSxcbiAgICAgICAgICBvdXRwdXRGaWxlLFxuICAgICAgICAgIGNvZGV4SG9tZSxcbiAgICAgICAgICBjZCxcbiAgICAgICAgICBleHRyYUFyZ3MsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hLFxuICAgICAgICAgIG91dHB1dFNjaGVtYUZpbGUsXG4gICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBlZmZvcnQsXG4gICAgICAgICAgc2FmZXR5U3RyYXRlZ3ksXG4gICAgICAgICAgY29kZXhVc2VyLFxuICAgICAgICB9ID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0ID0gZW1wdHlBc051bGwocHJvbXB0KTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFByb21wdEZpbGUgPSBlbXB0eUFzTnVsbChwcm9tcHRGaWxlKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9tcHQgIT0gbnVsbCAmJiBub3JtYWxpemVkUHJvbXB0RmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJPbmx5IG9uZSBvZiBgcHJvbXB0YCBvciBgcHJvbXB0LWZpbGVgIG1heSBiZSBzcGVjaWZpZWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb21wdFNvdXJjZTogUHJvbXB0U291cmNlO1xuICAgICAgICBpZiAobm9ybWFsaXplZFByb21wdCAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbXB0U291cmNlID0geyB0eXBlOiBcImlubGluZVwiLCBjb250ZW50OiBub3JtYWxpemVkUHJvbXB0IH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFByb21wdEZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21wdFNvdXJjZSA9IHsgdHlwZTogXCJmaWxlXCIsIHBhdGg6IG5vcm1hbGl6ZWRQcm9tcHRGaWxlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFaXRoZXIgYHByb21wdGAgb3IgYHByb21wdC1maWxlYCBtdXN0IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgdG8gY29lcmNlcyB0byBudWxsIGRvZXMgbm90IHdvcmsgd2l0aFxuICAgICAgICAvLyBDb21tYW5kZXIuanMncyByZXF1aXJlZE9wdGlvbiwgc28gd2UgaGF2ZSB0byBwb3N0LXByb2Nlc3MgaGVyZS5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgPSBlbXB0eUFzTnVsbChvdXRwdXRTY2hlbWFGaWxlKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE91dHB1dFNjaGVtYSA9IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWFGaWxlICE9IG51bGwgJiZcbiAgICAgICAgICBub3JtYWxpemVkT3V0cHV0U2NoZW1hICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJPbmx5IG9uZSBvZiBgb3V0cHV0LXNjaGVtYWAgb3IgYG91dHB1dC1zY2hlbWEtZmlsZWAgbWF5IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3V0cHV0U2NoZW1hU291cmNlOiBPdXRwdXRTY2hlbWFTb3VyY2UgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYVNvdXJjZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICBjb250ZW50OiBub3JtYWxpemVkT3V0cHV0U2NoZW1hLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYVNvdXJjZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgcGF0aDogbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJ1bkNvZGV4RXhlYyh7XG4gICAgICAgICAgcHJvbXB0OiBwcm9tcHRTb3VyY2UsXG4gICAgICAgICAgY29kZXhIb21lOiBlbXB0eUFzTnVsbChjb2RleEhvbWUpLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBleHBsaWNpdE91dHB1dEZpbGU6IGVtcHR5QXNOdWxsKG91dHB1dEZpbGUpLFxuICAgICAgICAgIG91dHB1dFNjaGVtYTogb3V0cHV0U2NoZW1hU291cmNlLFxuICAgICAgICAgIHNhbmRib3g6IHRvT3B0aW9uYWxTYW5kYm94TW9kZShzYW5kYm94KSxcbiAgICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZTogZW1wdHlBc051bGwocGVybWlzc2lvblByb2ZpbGUpLFxuICAgICAgICAgIG1vZGVsOiBlbXB0eUFzTnVsbChtb2RlbCksXG4gICAgICAgICAgZWZmb3J0OiBlbXB0eUFzTnVsbChlZmZvcnQpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5OiB0b1NhZmV0eVN0cmF0ZWd5KHNhZmV0eVN0cmF0ZWd5KSxcbiAgICAgICAgICBjb2RleFVzZXI6IGVtcHR5QXNOdWxsKGNvZGV4VXNlciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY2hlY2std3JpdGUtYWNjZXNzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJDaGVja3MgdGhhdCB0aGUgdHJpZ2dlcmluZyBhY3RvciBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5XCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3RzIDxib29sZWFuPlwiLFxuICAgICAgXCJBbGxvdyB0cnVzdGVkIEdpdEh1YiBib3QgYWN0b3JzIHRvIGJ5cGFzcyB0aGUgd3JpdGUtYWNjZXNzIGNoZWNrIChkZWZhdWx0OiBmYWxzZSkuXCIsXG4gICAgICBwYXJzZUJvb2xlYW4sXG4gICAgICBmYWxzZVxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLWFsbG93LXVzZXJzIDx1c2Vycz5cIixcbiAgICAgIFwiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgR2l0SHViIHVzZXJuYW1lcyB3aG8gY2FuIHJ1biB0aGlzIGFjdGlvbiwgb3IgJyonIHRvIGFsbG93IGFsbCB1c2Vycy5cIixcbiAgICAgIFwiXCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3QtdXNlcnMgPHVzZXJzPlwiLFxuICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBHaXRIdWIgYm90IHVzZXJuYW1lcyB0aGF0IGNhbiBieXBhc3MgdGhlIHdyaXRlLWFjY2VzcyBjaGVjay4gJyonIGlzIG5vdCBzdXBwb3J0ZWQuXCIsXG4gICAgICBcIlwiXG4gICAgKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAoe1xuICAgICAgICBhbGxvd0JvdHMsXG4gICAgICAgIGFsbG93VXNlcnMsXG4gICAgICAgIGFsbG93Qm90VXNlcnMsXG4gICAgICB9OiB7XG4gICAgICAgIGFsbG93Qm90czogYm9vbGVhbjtcbiAgICAgICAgYWxsb3dVc2Vyczogc3RyaW5nO1xuICAgICAgICBhbGxvd0JvdFVzZXJzOiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3Moe1xuICAgICAgICAgIGFsbG93Qm90QWN0b3JzOiBhbGxvd0JvdHMsXG4gICAgICAgICAgYWxsb3dVc2VycyxcbiAgICAgICAgICBhbGxvd0JvdFVzZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpdGNoIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBcImFwcHJvdmVkXCI6IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0b3IgJyR7cmVzdWx0LmFjdG9yfScgaXMgbm90IHBlcm1pdHRlZCB0byBydW4gdGhpcyBhY3Rpb246ICR7cmVzdWx0LnJlYXNvbn1gO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgaWYgKFxuICAgICAgIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fFxuICAgICAgIXBhcnNlZC5ldmVyeSgoYXJndW1lbnQpID0+IHR5cGVvZiBhcmd1bWVudCA9PT0gXCJzdHJpbmdcIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImBjb2RleC1hcmdzYCBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1NhZmV0eVN0cmF0ZWd5KHZhbHVlOiBzdHJpbmcpOiBTYWZldHlTdHJhdGVneSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwiZHJvcC1zdWRvXCI6XG4gICAgY2FzZSBcInJlYWQtb25seVwiOlxuICAgIGNhc2UgXCJ1bnByaXZpbGVnZWQtdXNlclwiOlxuICAgIGNhc2UgXCJ1bnNhZmVcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYWZldHkgc3RyYXRlZ3k6ICR7dmFsdWV9LiBNdXN0IGJlIG9uZSBvZiAnZHJvcC1zdWRvJywgJ3JlYWQtb25seScsICd1bnByaXZpbGVnZWQtdXNlcicsIG9yICd1bnNhZmUnLmBcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9PcHRpb25hbFNhbmRib3hNb2RlKHZhbHVlOiBzdHJpbmcpOiBTYW5kYm94TW9kZSB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkID0gZW1wdHlBc051bGwodmFsdWUpO1xuICBzd2l0Y2ggKG5vcm1hbGl6ZWQpIHtcbiAgICBjYXNlIG51bGw6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcIndvcmtzcGFjZS13cml0ZVwiOlxuICAgIGNhc2UgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjpcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhbmRib3g6ICR7bm9ybWFsaXplZH0uIE11c3QgYmUgb25lIG9mICdyZWFkLW9ubHknLCAnd29ya3NwYWNlLXdyaXRlJywgb3IgJ2Rhbmdlci1mdWxsLWFjY2VzcycuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUFzTnVsbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID09IDAgPyBudWxsIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwieVwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm5cIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbm1haW4oKTtcblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvZGV4SG9tZShcbiAgaW5wdXRDb2RleEhvbWU6IHN0cmluZyB8IG51bGwsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneSxcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsLFxuICBnaXRodWJSdW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoaW5wdXRDb2RleEhvbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBleHBhbmRUaWxkZShpbnB1dENvZGV4SG9tZSk7XG4gIH1cbiAgY29uc3QgZW52SG9tZSA9IGVtcHR5QXNOdWxsKHByb2Nlc3MuZW52LkNPREVYX0hPTUUgPz8gXCJcIik7XG4gIGlmIChlbnZIb21lICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW52SG9tZTtcbiAgfVxuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXgtdXNlciBpbnB1dCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgYW5kIG5vIGNvZGV4LWhvbWUgaXMgc3BlY2lmaWVkLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICAgICAgY29kZXhVc2VyLFxuICAgICAgZ2l0aHViUnVuSWRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvZGV4XCIpO1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzIGZvciBkb3duc3RyZWFtIHN0ZXBzIHRoYXQgd2lsbCB3cml0ZSBmaWxlcyBoZXJlLlxuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICB1c2VyOiBzdHJpbmcsXG4gIGdpdGh1YlJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhvbWUgPSAoXG4gICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIi11XCIsIHVzZXIsIFwiLS1cIiwgXCJwcmludGVudlwiLCBcIkhPTUVcIl0pXG4gICkudHJpbSgpO1xuICBpZiAoIWhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgaG9tZSBkaXJlY3RvcnkgZm9yIHVzZXIgJyR7dXNlcn0nLmApO1xuICB9XG4gIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihob21lLCBcIi5jb2RleFwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChjb2RleEhvbWUpO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIERpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBhbmQgbWF5IGNvbnRhaW4gYSBjb25maWcudG9tbCBjcmVhdGVkIGJ5IHRoZVxuICAgICAgLy8gdXNlciAob3IgYSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIGNvZGV4LWFjdGlvbiksIHNvIGFzc3VtZSBpdCdzXG4gICAgICAvLyBjb3JyZWN0bHkgcGVybWlzc2lvbmVkLlxuICAgICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBzdGF0IGVycm9ycyBhbmQgdHJ5IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5LlxuICB9XG5cbiAgLy8gV2UgbXVzdCB1c2Ugc3VkbyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGJlY2F1c2Ugd2VcbiAgLy8gYXJlIHdyaXRpbmcgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIGEgZGlmZmVyZW50IHVzZXIuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJta2RpclwiLCBjb2RleEhvbWVdKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNob3duXCIsIGAke3VzZXJ9YCwgY29kZXhIb21lXSk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjc1NVwiLCBjb2RleEhvbWVdKTtcblxuICAvLyBjb2RleC1yZXNwb25zZXMtYXBpLXByb3h5IHdpbGwgbmVlZCB0byB3cml0ZSB0aGUgc2VydmVyIGluZm8gZmlsZS5cbiAgY29uc3Qgc2VydmVySW5mb0ZpbGUgPSBwYXRoLmpvaW4oY29kZXhIb21lLCBgJHtnaXRodWJSdW5JZH0uanNvbmApO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwidG91Y2hcIiwgc2VydmVySW5mb0ZpbGVdKTtcbiAgLy8gTWFrZSB0aGUgZmlsZSB3b3JsZC13cml0YWJsZSBmb3IgdGhlIG1vbWVudCwgYnV0IHRoaXMgd2lsbCBiZSBsb2NrZWQgZG93blxuICAvLyB0byByZWFkLW9ubHkgYnkgcm9vdCBiZWZvcmUgdGhlIGFjdGlvbiBjb21wbGV0ZXMuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjY2NlwiLCBzZXJ2ZXJJbmZvRmlsZV0pO1xuXG4gIHJldHVybiBjb2RleEhvbWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRpbGRlKHA6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwID09PSBcIn5cIikge1xuICAgIHJldHVybiBvcy5ob21lZGlyKCk7XG4gIH1cbiAgaWYgKHAuc3RhcnRzV2l0aChcIn4vXCIpIHx8IHAuc3RhcnRzV2l0aChcIn5cXFxcXCIpKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihvcy5ob21lZGlyKCksIHAuc2xpY2UoMikpO1xuICB9XG4gIHJldHVybiBwO1xufVxuIiwgImltcG9ydCBjb21tYW5kZXIgZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8vIHdyYXBwZXIgdG8gcHJvdmlkZSBuYW1lZCBleHBvcnRzIGZvciBFU00uXG5leHBvcnQgY29uc3Qge1xuICBwcm9ncmFtLFxuICBjcmVhdGVDb21tYW5kLFxuICBjcmVhdGVBcmd1bWVudCxcbiAgY3JlYXRlT3B0aW9uLFxuICBDb21tYW5kZXJFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yLCAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gIENvbW1hbmQsXG4gIEFyZ3VtZW50LFxuICBPcHRpb24sXG4gIEhlbHAsXG59ID0gY29tbWFuZGVyO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwiQG9wZW5haS9jb2RleC1hY3Rpb25cIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjBcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkdpdEh1YiBBY3Rpb24gdG8gcnVuIGNvZGV4IGV4ZWMgdmlhIHRoZSBDb2RleCBDTEkgd2l0aCBhY2NvbXBhbnlpbmcgaGVscGVyIHN0ZXBzXCIsXG4gIFwicHJpdmF0ZVwiOiB0cnVlLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJlc2J1aWxkIHNyYy9tYWluLnRzIC0tc291cmNlbWFwPWlubGluZSAtLWZvcm1hdD1janMgLS1idW5kbGUgLS1wbGF0Zm9ybT1ub2RlIC0tdGFyZ2V0PW5vZGUyMCAtLW91dGRpcj1kaXN0XCIsXG4gICAgXCJjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwidGVzdFwiOiBcInBucG0gcnVuIGJ1aWxkICYmIG5vZGUgLS10ZXN0IHRlc3QvKi50ZXN0Lm1qc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhY3Rpb25zL2NvcmVcIjogXCJeMS4xMS4xXCIsXG4gICAgXCJAb2N0b2tpdC9ncmFwaHFsXCI6IFwiXjguMi4yXCIsXG4gICAgXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIjogXCJeNy4yLjFcIixcbiAgICBcIkBvY3Rva2l0L3Jlc3RcIjogXCJeMjEuMS4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjFcIixcbiAgICBcInN0cmluZy1hcmd2XCI6IFwiMC4zLjJcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMi43XCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMjMuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjQuNVwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjMzLjArc2hhNTEyLjEwNTY4YmI0YTZhZmI1OGM5ZWIzNjMwZGE5MGNjOTUxNjQxN2FiZWJkM2ZhYmJlNjczOWYwYWU3OTU3MjhkYTE0OTFlOWRiNWE1NDRjNzZhZDhlYjc1NzBmNWM0YmIzZDZjNjM3YjJjYjQxYmZkY2RiNDdmYTgyM2M4NjQ5MzE5XCJcbn1cbiIsICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCJAYWN0aW9ucy9jb3JlXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcblxuLyoqXG4gKiBJbiB0aGVvcnksIHRoaXMgaXMgbm90IGNhbGxlZCB1bnRpbCBgc2VydmVySW5mb0ZpbGVgIGlzIG5vbi1lbXB0eSwgYnV0IHdlXG4gKiB3aWxsIHBvbGwgaW4gdGhlIHJhcmUgY2FzZSB0aGF0IGl0IHdhcyBhIHBhcnRpYWwgd3JpdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2VydmVySW5mbyhzZXJ2ZXJJbmZvRmlsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMTAwOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShzZXJ2ZXJJbmZvRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgICAgaWYgKHR5cGVvZiBwb3J0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb3JlLnNldE91dHB1dChcInBvcnRcIiwgcG9ydC50b1N0cmluZygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVhZGluZyBzZXJ2ZXIgaW5mbzogJHtlcnJvcn1gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byByZWFkIHNlcnZlciBpbmZvIGZyb20gJHtzZXJ2ZXJJbmZvRmlsZX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjaG1vZCwgbWtkdGVtcCwgcmVhZEZpbGUsIHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzZXRPdXRwdXQgfSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuaW1wb3J0IHsgY2FwdHVyZUxpbnV4UnVubmVyQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi9saW51eENyZWRlbnRpYWxzXCI7XG5cbmNvbnN0IExJTlVYX0RST1BfU1VET19TQ1JJUFQgPSBTdHJpbmcucmF3YFxubm9kZT1cIiQxXCJcbmFjdGlvbj1cIiQyXCJcbnVzZXI9XCIkM1wiXG51aWQ9XCIkNFwiXG5ob21lPVwiJDVcIlxucnVubmVyX3BhdGg9XCIkNlwiXG5ub2RlX29wdGlvbnM9XCIkN1wiXG5ydW5uZXJfY3JlZGVudGlhbHM9XCIkOFwiXG5zaGlmdCA4XG5cbmlmIFsgISAteCAvdXNyL2Jpbi9zZXRwcml2IF07IHRoZW5cbiAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyByZXF1aXJlcyAvdXNyL2Jpbi9zZXRwcml2LlwiID4mMlxuICBleGl0IDFcbmZpXG5cbm5vYm9keV9naWQ9XCIkKC91c3IvYmluL2lkIC1nIG5vYm9keSAyPi9kZXYvbnVsbClcIiB8fCB7XG4gIGVjaG8gXCJMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgYW4gdW5wcml2aWxlZ2VkIG5vYm9keSBhY2NvdW50LlwiID4mMlxuICBleGl0IDFcbn1cbmNhc2UgXCIkbm9ib2R5X2dpZFwiIGluXG4gICcnfCpbITAtOV0qfDApXG4gICAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyBjb3VsZCBub3QgcmVzb2x2ZSBhIHNhZmUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gICAgZXhpdCAxXG4gICAgOztcbmVzYWNcbmdyb3VwX2VudHJ5PVwiJCgvdXNyL2Jpbi9nZXRlbnQgZ3JvdXAgXCIkbm9ib2R5X2dpZFwiIDI+L2Rldi9udWxsKVwiIHx8IHtcbiAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gIGV4aXQgMVxufVxuY2FzZSBcIiRncm91cF9lbnRyeVwiIGluXG4gIG5vYm9keToqfG5vZ3JvdXA6KikgOztcbiAgKilcbiAgICBlY2hvIFwiTGludXggZHJvcC1zdWRvIHJlZnVzZXMgYW4gdW5leHBlY3RlZCBub2JvZHkgcHJpbWFyeSBncm91cC5cIiA+JjJcbiAgICBleGl0IDFcbiAgICA7O1xuZXNhY1xuXG4vdXNyL2Jpbi9lbnYgLXUgTk9ERV9PUFRJT05TIFwiJG5vZGVcIiBcIiRhY3Rpb25cIiBkcm9wLXN1ZG8gLS1yb290LXBoYXNlIC0tdXNlciBcIiR1c2VyXCIgLS1ncm91cCBzdWRvIC0tcnVubmVyLWNyZWRlbnRpYWxzIFwiJHJ1bm5lcl9jcmVkZW50aWFsc1wiIHx8IGV4aXQgJD9cbnVuc2FmZV9ub2JvZHlfc29ja2V0PVwiJCgvdXNyL2Jpbi9maW5kIC9ydW4gLXR5cGUgcyAtdWlkIDAgLWdpZCBcIiRub2JvZHlfZ2lkXCIgLXBlcm0gLTAyMCAtcHJpbnQgLXF1aXQpXCIgfHwge1xuICBlY2hvIFwiTGludXggZHJvcC1zdWRvIGNvdWxkIG5vdCB2ZXJpZnkgdGhlIG5vYm9keSBwcmltYXJ5IGdyb3VwLlwiID4mMlxuICBleGl0IDFcbn1cbmlmIFsgLW4gXCIkdW5zYWZlX25vYm9keV9zb2NrZXRcIiBdOyB0aGVuXG4gIGVjaG8gXCJMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhbiB1bnNhZmUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gIGV4aXQgMVxuZmlcbmlmIC91c3IvYmluL3N1ZG8gLW4gLXUgXCIkdXNlclwiIC0tIC91c3IvYmluL3N1ZG8gLW4gdHJ1ZSAyPi9kZXYvbnVsbDsgdGhlblxuICBlY2hvIFwiRXhwZWN0ZWQgc3VkbyB0byBiZSBkaXNhYmxlZCwgYnV0IHN1ZG8gc3VjY2VlZGVkLlwiID4mMlxuICBleGl0IDFcbmZpXG5lY2hvIFwiQ29uZmlybWVkIHRoZSBzdGFuZGFyZCBzdWRvIHByb2JlIGlzIGRpc2FibGVkLlwiXG5cbnNldCAtLSAvdXNyL2Jpbi9zZXRwcml2IFxcXG4gIC0tcmV1aWQ9XCIkdWlkXCIgXFxcbiAgLS1yZWdpZD1cIiRub2JvZHlfZ2lkXCIgXFxcbiAgLS1jbGVhci1ncm91cHMgXFxcbiAgLS1uby1uZXctcHJpdnMgXFxcbiAgLS1ib3VuZGluZy1zZXQ9LWFsbCBcXFxuICAtLWluaC1jYXBzPS1hbGwgXFxcbiAgLS1hbWJpZW50LWNhcHM9LWFsbCBcXFxuICAtLSAvdXNyL2Jpbi9lbnYgXFxcbiAgLXUgU1VET19DT01NQU5EIC11IFNVRE9fVVNFUiAtdSBTVURPX1VJRCAtdSBTVURPX0dJRCBcXFxuICBcIkhPTUU9JGhvbWVcIiBcIlVTRVI9JHVzZXJcIiBcIkxPR05BTUU9JHVzZXJcIiBcIlBBVEg9JHJ1bm5lcl9wYXRoXCIgXFxcbiAgXCJOT0RFX09QVElPTlM9JG5vZGVfb3B0aW9uc1wiIFxcXG4gIFwiJEBcIlxuZWNobyBcIkxhdW5jaGluZyBDb2RleCB3aXRoIG5vX25ld19wcml2cyBhbmQgZW1wdHkgY2FwYWJpbGl0eSBzZXRzLlwiXG5leGVjIFwiJEBcIlxuYDtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImlubGluZVwiO1xuICAgICAgY29udGVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZldHlTdHJhdGVneSA9XG4gIHwgXCJkcm9wLXN1ZG9cIlxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcInVucHJpdmlsZWdlZC11c2VyXCJcbiAgfCBcInVuc2FmZVwiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94TW9kZSA9XG4gIHwgXCJyZWFkLW9ubHlcIlxuICB8IFwid29ya3NwYWNlLXdyaXRlXCJcbiAgfCBcImRhbmdlci1mdWxsLWFjY2Vzc1wiO1xuXG50eXBlIFBlcm1pc3Npb25TZWxlY3Rpb24gPVxuICB8IHsgdHlwZTogXCJzYW5kYm94XCI7IG1vZGU6IFNhbmRib3hNb2RlIH1cbiAgfCB7IHR5cGU6IFwicHJvZmlsZVwiOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcnVucyBhIGBjb2RleCBleGVjYCBjb21tYW5kLCB3cml0ZXMgdGhlIHByb21wdCB0byBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBwdWJsaXNoZXNcbiAqIHRoZSBjb21tYW5kJ3MgZmluYWwgbWVzc2FnZSBhcyB0aGUgYWN0aW9uIG91dHB1dC5cbiAqXG4gKiBBdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG91dHNpZGUgdGhpcyBmdW5jdGlvbi4gVGhlIGNvbXBvc2l0ZSBhY3Rpb24gc3RhcnRzIG9yIHJldXNlc1xuICogdGhlIFJlc3BvbnNlcyBBUEkgcHJveHkgYW5kIHdyaXRlcyB0aGUgY29ycmVzcG9uZGluZyBDb2RleCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbnZva2luZyB0aGlzXG4gKiBjb21tYW5kLiBLZWVwaW5nIHRoYXQgc2V0dXAgc2VwYXJhdGUgYWxzbyBsZXRzIHRlc3RzIHB1dCBhIGZha2UgYGNvZGV4YCBleGVjdXRhYmxlIG9uIGBQQVRIYCB0b1xuICogdmVyaWZ5IGNvbW1hbmQgY29uc3RydWN0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcgd2l0aG91dCBhbiBBUEkga2V5IG9yIG5ldHdvcmsgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgZXh0cmFBcmdzLFxuICBleHBsaWNpdE91dHB1dEZpbGUsXG4gIG91dHB1dFNjaGVtYSxcbiAgbW9kZWwsXG4gIGVmZm9ydCxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbiAgc2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG59OiB7XG4gIHByb21wdDogUHJvbXB0U291cmNlO1xuICBjb2RleEhvbWU6IHN0cmluZyB8IG51bGw7XG4gIGNkOiBzdHJpbmc7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBvdXRwdXRTY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBlZmZvcnQ6IHN0cmluZyB8IG51bGw7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsO1xuICBzYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaW5wdXQ6IHN0cmluZztcbiAgc3dpdGNoIChwcm9tcHQudHlwZSkge1xuICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgIGlucHV0ID0gcHJvbXB0LmNvbnRlbnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgaW5wdXQgPSBhd2FpdCByZWFkRmlsZShwcm9tcHQucGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGwgPVxuICAgIHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIgPyBjb2RleFVzZXIgOiBudWxsO1xuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSh7IHJ1bkFzVXNlciB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3V0cHV0U2NoZW1hID0gYXdhaXQgcmVzb2x2ZU91dHB1dFNjaGVtYShcbiAgICBvdXRwdXRTY2hlbWEsXG4gICAgcnVuQXNVc2VyXG4gICk7XG4gIGNvbnN0IHBlcm1pc3Npb25TZWxlY3Rpb24gPSBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgICBzYWZldHlTdHJhdGVneSxcbiAgICByZXF1ZXN0ZWRTYW5kYm94OiBzYW5kYm94LFxuICAgIHBlcm1pc3Npb25Qcm9maWxlLFxuICAgIGV4dHJhQXJncyxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGNvbnN0IGlzTGludXhEcm9wU3VkbyA9XG4gICAgc2FmZXR5U3RyYXRlZ3kgPT09IFwiZHJvcC1zdWRvXCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiO1xuICBsZXQgcGF0aFRvQ29kZXggPSBcImNvZGV4XCI7XG4gIGlmIChpc0xpbnV4RHJvcFN1ZG8pIHtcbiAgICBjb25zdCB1aWQgPSBwcm9jZXNzLmdldHVpZD8uKCk7XG4gICAgaWYgKHVpZCA9PSBudWxsIHx8IHVpZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIGEgbm9uLXJvb3QgcnVubmVyIHVzZXIuXCIpO1xuICAgIH1cbiAgICBjb25zdCBydW5uZXJDcmVkZW50aWFscyA9IGNhcHR1cmVMaW51eFJ1bm5lckNyZWRlbnRpYWxzKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wiL3Vzci9iaW4vc3Vkb1wiLCBcIi1uXCIsIFwidHJ1ZVwiXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHBhc3N3b3JkbGVzcyBzdWRvIGJlZm9yZSBDb2RleCBzdGFydHMuIEl0IGNhbm5vdCBydW4gYWdhaW4gYWZ0ZXIgc3VkbyBoYXMgYmVlbiByZW1vdmVkOyB1c2UgYSBzZXBhcmF0ZSBqb2IuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcGF0aFRvQ29kZXggPSAoYXdhaXQgY2hlY2tPdXRwdXQoW1wid2hpY2hcIiwgXCJjb2RleFwiXSkpLnRyaW0oKTtcbiAgICBpZiAoIXBhdGhUb0NvZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmluZCAnY29kZXgnIGluIFBBVEhcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlciA9IG9zLnVzZXJJbmZvKCk7XG4gICAgY29tbWFuZC5wdXNoKFxuICAgICAgXCIvdXNyL2Jpbi9zdWRvXCIsXG4gICAgICBcIi1uXCIsXG4gICAgICBcIi1FXCIsXG4gICAgICBcIi0tXCIsXG4gICAgICBcIi91c3IvYmluL2VudlwiLFxuICAgICAgXCItdVwiLFxuICAgICAgXCJFTlZcIixcbiAgICAgIFwiLXVcIixcbiAgICAgIFwiQkFTSF9FTlZcIixcbiAgICAgIFwiLXVcIixcbiAgICAgIFwiU0hFTExPUFRTXCIsXG4gICAgICBcIi9iaW4vc2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgIExJTlVYX0RST1BfU1VET19TQ1JJUFQsXG4gICAgICBcImNvZGV4LWFjdGlvbi1kcm9wLXN1ZG9cIixcbiAgICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAgICB1c2VyLnVzZXJuYW1lLFxuICAgICAgU3RyaW5nKHVpZCksXG4gICAgICBwcm9jZXNzLmVudi5IT01FID8/IHVzZXIuaG9tZWRpcixcbiAgICAgIHByb2Nlc3MuZW52LlBBVEggPz8gXCJcIixcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyA/PyBcIlwiLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocnVubmVyQ3JlZGVudGlhbHMpXG4gICAgKTtcbiAgfSBlbHNlIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXhVc2VyIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWQtdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhcyBhIHByaXZpbGVnZWQgdXNlciwgYnV0IGBjb2RleFVzZXJgIHdpbGwgcnVuXG4gICAgLy8gd2l0aCBhIGRpZmZlcmVudCAkUEFUSCB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBmaW5kIHRoZSBmdWxsIHBhdGggdG9cbiAgICAvLyBgY29kZXhgLlxuICAgIHBhdGhUb0NvZGV4ID0gKGF3YWl0IGNoZWNrT3V0cHV0KFtcIndoaWNoXCIsIFwiY29kZXhcIl0pKS50cmltKCk7XG4gICAgaWYgKCFwYXRoVG9Db2RleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGZpbmQgJ2NvZGV4JyBpbiBQQVRIXCIpO1xuICAgIH1cblxuICAgIGNvbW1hbmQucHVzaChcInN1ZG9cIiwgXCItdVwiLCBjb2RleFVzZXIsIFwiLS1cIik7XG4gIH1cblxuICBjb21tYW5kLnB1c2goXG4gICAgcGF0aFRvQ29kZXgsXG4gICAgXCJleGVjXCIsXG4gICAgXCItLXNraXAtZ2l0LXJlcG8tY2hlY2tcIixcbiAgICBcIi0tY2RcIixcbiAgICBjZCxcbiAgICBcIi0tb3V0cHV0LWxhc3QtbWVzc2FnZVwiLFxuICAgIG91dHB1dEZpbGUuZmlsZVxuICApO1xuXG4gIGlmIChyZXNvbHZlZE91dHB1dFNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29tbWFuZC5wdXNoKFwiLS1vdXRwdXQtc2NoZW1hXCIsIHJlc29sdmVkT3V0cHV0U2NoZW1hLmZpbGUpO1xuICB9XG5cbiAgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW1vZGVsXCIsIG1vZGVsKTtcbiAgfVxuXG4gIGlmIChlZmZvcnQgIT0gbnVsbCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvY29kZXgvYmxvYi8wMGRlYmI2Mzk5ZWI1MWM0YjkyNzNmMGJjMDEyOTEyYzQyZmU2YzkxL2RvY3MvY29uZmlnLm1kI2NvbmZpZ1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvY29kZXgvYmxvYi8wMGRlYmI2Mzk5ZWI1MWM0YjkyNzNmMGJjMDEyOTEyYzQyZmU2YzkxL2RvY3MvY29uZmlnLm1kI21vZGVsX3JlYXNvbmluZ19lZmZvcnRcbiAgICBjb21tYW5kLnB1c2goXCItLWNvbmZpZ1wiLCBgbW9kZWxfcmVhc29uaW5nX2VmZm9ydD1cIiR7ZWZmb3J0fVwiYCk7XG4gIH1cblxuICBjb21tYW5kLnB1c2goLi4uZXh0cmFBcmdzKTtcblxuICBzd2l0Y2ggKHBlcm1pc3Npb25TZWxlY3Rpb24udHlwZSkge1xuICAgIGNhc2UgXCJzYW5kYm94XCI6XG4gICAgICBjb21tYW5kLnB1c2goXCItLXNhbmRib3hcIiwgcGVybWlzc2lvblNlbGVjdGlvbi5tb2RlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJwcm9maWxlXCI6XG4gICAgICBjb21tYW5kLnB1c2goXG4gICAgICAgIFwiLS1jb25maWdcIixcbiAgICAgICAgYGRlZmF1bHRfcGVybWlzc2lvbnM9JHtKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9uU2VsZWN0aW9uLm5hbWUpfWBcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgaWYgKCFlbnYuQ09ERVhfSU5URVJOQUxfT1JJR0lOQVRPUl9PVkVSUklERSkge1xuICAgIGVudi5DT0RFWF9JTlRFUk5BTF9PUklHSU5BVE9SX09WRVJSSURFID0gXCJjb2RleF9naXRodWJfYWN0aW9uXCI7XG4gIH1cbiAgbGV0IGV4dHJhRW52ID0gXCJcIjtcbiAgaWYgKGNvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgZW52LkNPREVYX0hPTUUgPSBjb2RleEhvbWU7XG4gICAgZXh0cmFFbnYgPSBgQ09ERVhfSE9NRT0ke2NvZGV4SG9tZX0gYDtcbiAgfVxuXG4gIC8vIFNwbGl0IHRoZSBgcHJvZ3JhbWAgZnJvbSB0aGUgYGFyZ3NgIGZvciBgc3Bhd24oKWAuXG4gIGNvbnN0IHByb2dyYW0gPSBjb21tYW5kLnNoaWZ0KCkhO1xuICBjb25zb2xlLmxvZyhcbiAgICBgUnVubmluZzogJHtleHRyYUVudn0ke3Byb2dyYW19ICR7Y29tbWFuZFxuICAgICAgLm1hcCgoYSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkpXG4gICAgICAuam9pbihcIiBcIil9YFxuICApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvZ3JhbSwgY29tbWFuZCwge1xuICAgICAgICBlbnYsXG4gICAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICB9KTtcbiAgICAgIGNoaWxkLnN0ZGluLndyaXRlKGlucHV0KTtcbiAgICAgIGNoaWxkLnN0ZGluLmVuZCgpO1xuXG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIHJlamVjdCk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3Byb2dyYW19IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZpbmFsaXplRXhlY3V0aW9uKG91dHB1dEZpbGUsIHJ1bkFzVXNlcik7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY2xlYW51cE91dHB1dFNjaGVtYShyZXNvbHZlZE91dHB1dFNjaGVtYSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemVFeGVjdXRpb24oXG4gIG91dHB1dEZpbGU6IE91dHB1dEZpbGUsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgbGV0IGxhc3RNZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgICBsYXN0TWVzc2FnZSA9IGF3YWl0IHJlYWRGaWxlKG91dHB1dEZpbGUuZmlsZSwgXCJ1dGY4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TWVzc2FnZSA9IGF3YWl0IGNoZWNrT3V0cHV0KFtcbiAgICAgICAgXCJzdWRvXCIsXG4gICAgICAgIFwiLXVcIixcbiAgICAgICAgcnVuQXNVc2VyLFxuICAgICAgICBcImNhdFwiLFxuICAgICAgICBvdXRwdXRGaWxlLmZpbGUsXG4gICAgICBdKTtcbiAgICB9XG4gICAgc2V0T3V0cHV0KFwiZmluYWwtbWVzc2FnZVwiLCBsYXN0TWVzc2FnZSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY2xlYW51cFRlbXBPdXRwdXQob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgfVxufVxuXG50eXBlIE91dHB1dEZpbGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZXhwbGljaXRcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ0ZW1wXCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBSZXNvbHZlZE91dHB1dFNjaGVtYSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICAgIGRpcjogc3RyaW5nO1xuICAgIH07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBPdXRwdXRGaWxlKHtcbiAgcnVuQXNVc2VyLFxufToge1xuICBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGw7XG59KTogUHJvbWlzZTxPdXRwdXRGaWxlPiB7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGNyZWF0ZVRlbXBEaXIoXCJjb2RleC1leGVjLVwiLCBydW5Bc1VzZXIpO1xuICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZTogcGF0aC5qb2luKGRpciwgXCJvdXRwdXQubWRcIikgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cFRlbXBPdXRwdXQoXG4gIG91dHB1dEZpbGU6IE91dHB1dEZpbGUsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN3aXRjaCAob3V0cHV0RmlsZS50eXBlKSB7XG4gICAgY2FzZSBcImV4cGxpY2l0XCI6XG4gICAgICAvLyBEbyBub3QgZGVsZXRlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOiB7XG4gICAgICBjb25zdCB7IGZpbGUgfSA9IG91dHB1dEZpbGU7XG4gICAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpO1xuICAgICAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJybVwiLCBcIi1yZlwiLCBwYXRoLmRpcm5hbWUoZmlsZSldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlT3V0cHV0U2NoZW1hKFxuICBzY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGwsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxSZXNvbHZlZE91dHB1dFNjaGVtYSB8IG51bGw+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZXhwbGljaXRcIiwgZmlsZTogc2NoZW1hLnBhdGggfTtcbiAgICBjYXNlIFwiaW5saW5lXCI6IHtcbiAgICAgIGNvbnN0IGRpciA9IGF3YWl0IGNyZWF0ZVRlbXBEaXIoXCJjb2RleC1vdXRwdXQtc2NoZW1hLVwiLCBydW5Bc1VzZXIpO1xuICAgICAgY29uc3QgZmlsZSA9IHBhdGguam9pbihkaXIsIFwic2NoZW1hLmpzb25cIik7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZSwgc2NoZW1hLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0ZW1wXCIsIGZpbGUsIGRpciB9O1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT3V0cHV0U2NoZW1hKFxuICBzY2hlbWE6IFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzY2hlbWEgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOlxuICAgICAgYXdhaXQgcm0oc2NoZW1hLmRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBEaXIoXG4gIHByZWZpeDogc3RyaW5nLFxuICBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgcHJlZml4KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcbiAgICAgICAgXCJzdWRvXCIsXG4gICAgICAgIFwiLXVcIixcbiAgICAgICAgcnVuQXNVc2VyLFxuICAgICAgICBcIm1rdGVtcFwiLFxuICAgICAgICBcIi1kXCIsXG4gICAgICAgIFwiLXRcIixcbiAgICAgICAgYCR7cHJlZml4fS5YWFhYWFhgLFxuICAgICAgXSlcbiAgICApLnRyaW0oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIHJlcXVlc3RlZFNhbmRib3gsXG4gIHBlcm1pc3Npb25Qcm9maWxlLFxuICBleHRyYUFyZ3MsXG59OiB7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgcmVxdWVzdGVkU2FuZGJveDogU2FuZGJveE1vZGUgfCBudWxsO1xuICBwZXJtaXNzaW9uUHJvZmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgZXh0cmFBcmdzOiBBcnJheTxzdHJpbmc+O1xufSk6IFBlcm1pc3Npb25TZWxlY3Rpb24ge1xuICBpZiAocGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCAmJiByZXF1ZXN0ZWRTYW5kYm94ICE9IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImBwZXJtaXNzaW9uLXByb2ZpbGVgIGFuZCBgc2FuZGJveGAgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gUGVybWlzc2lvbiBwcm9maWxlcyBkbyBub3QgY29tcG9zZSB3aXRoIGxlZ2FjeSBzYW5kYm94IHNldHRpbmdzLlwiXG4gICAgKTtcbiAgfVxuICBpZiAocGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCAmJiBzYWZldHlTdHJhdGVneSA9PT0gXCJyZWFkLW9ubHlcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIGByZWFkLW9ubHlgIHNhZmV0eSBzdHJhdGVneSBiZWNhdXNlIHRoYXQgc3RyYXRlZ3kgZm9yY2VzIHRoZSBsZWdhY3kgcmVhZC1vbmx5IHNhbmRib3guXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGVmZmVjdGl2ZVNhbmRib3hSZWFkT25seSA9XG4gICAgc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZC1vbmx5XCIgfHwgcmVxdWVzdGVkU2FuZGJveCA9PT0gXCJyZWFkLW9ubHlcIjtcbiAgaWYgKFxuICAgIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsIHx8IGVmZmVjdGl2ZVNhbmRib3hSZWFkT25seSkgJiZcbiAgICBleHRyYUFyZ3Muc29tZShcbiAgICAgIChhcmcpID0+XG4gICAgICAgIGFyZyA9PT0gXCItLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3hcIiB8fFxuICAgICAgICBhcmcgPT09IFwiLS15b2xvXCIgfHxcbiAgICAgICAgYXJnID09PSBcIi0tZnVsbC1hdXRvXCJcbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYGNvZGV4LWFyZ3NgIGNhbm5vdCBieXBhc3Mgc2FuZGJveCBwcm90ZWN0aW9ucyB3aGVuIGEgYHBlcm1pc3Npb24tcHJvZmlsZWAgb3IgcmVhZC1vbmx5IHNhbmRib3ggaXMgc2VsZWN0ZWQuXCJcbiAgICApO1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIGV4dHJhQXJnc1NlbGVjdFNhbmRib3goZXh0cmFBcmdzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYSBzYW5kYm94IG92ZXJyaWRlIGluIGBjb2RleC1hcmdzYC5cIlxuICAgICk7XG4gIH1cbiAgY29uc3QgY3VzdG9tUGVybWlzc2lvblByb2ZpbGUgPVxuICAgIHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwgJiYgIXBlcm1pc3Npb25Qcm9maWxlLnN0YXJ0c1dpdGgoXCI6XCIpO1xuICBpZiAoXG4gICAgY3VzdG9tUGVybWlzc2lvblByb2ZpbGUgJiZcbiAgICBleHRyYUFyZ3Muc29tZShcbiAgICAgIChhcmcpID0+XG4gICAgICAgIGFyZyA9PT0gXCItLWltYWdlXCIgfHxcbiAgICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWltYWdlPVwiKSB8fFxuICAgICAgICAoYXJnLnN0YXJ0c1dpdGgoXCItaVwiKSAmJiAhYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSlcbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYGNvZGV4LWFyZ3NgIGNhbm5vdCBhdHRhY2ggbG9jYWwgaW1hZ2VzIHdpdGggYSBjdXN0b20gcGVybWlzc2lvbiBwcm9maWxlIGJlY2F1c2UgaW1hZ2UgbG9hZGluZyBkb2VzIG5vdCBlbmZvcmNlIGl0cyBmaWxlc3lzdGVtIHJlc3RyaWN0aW9ucy5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ICE9PSBcInVuc2FmZVwiIHx8IHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZVByb3RlY3RlZEV4dHJhQXJncyhleHRyYUFyZ3MsIGN1c3RvbVBlcm1pc3Npb25Qcm9maWxlKTtcbiAgfVxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZC1vbmx5XCIpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInNhbmRib3hcIiwgbW9kZTogXCJyZWFkLW9ubHlcIiB9O1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJwcm9maWxlXCIsIG5hbWU6IHBlcm1pc3Npb25Qcm9maWxlIH07XG4gIH1cbiAgcmV0dXJuIHsgdHlwZTogXCJzYW5kYm94XCIsIG1vZGU6IHJlcXVlc3RlZFNhbmRib3ggPz8gXCJ3b3Jrc3BhY2Utd3JpdGVcIiB9O1xufVxuXG5jb25zdCBSRVNUUklDVEVEX0NPTkZJR19ST09UUyA9IG5ldyBTZXQoW1xuICBcImFnZW50c1wiLFxuICBcImFwcHJvdmFsX3BvbGljeVwiLFxuICBcImFwcHJvdmFsc19yZXZpZXdlclwiLFxuICBcImFwcHNfbWNwX3Byb2R1Y3Rfc2t1XCIsXG4gIFwiYXV0b19yZXZpZXdcIixcbiAgXCJjaGF0Z3B0X2Jhc2VfdXJsXCIsXG4gIFwiZGVidWdcIixcbiAgXCJkZWZhdWx0X3Blcm1pc3Npb25zXCIsXG4gIFwiZXhwZXJpbWVudGFsX3JlYWx0aW1lX3dlYnJ0Y19jYWxsX2Jhc2VfdXJsXCIsXG4gIFwiZXhwZXJpbWVudGFsX3JlYWx0aW1lX3dzX2Jhc2VfdXJsXCIsXG4gIFwiaG9va3NcIixcbiAgXCJtYXJrZXRwbGFjZXNcIixcbiAgXCJtY3Bfc2VydmVyc1wiLFxuICBcIm1vZGVsX3Byb3ZpZGVyXCIsXG4gIFwibW9kZWxfcHJvdmlkZXJzXCIsXG4gIFwibm90aWZ5XCIsXG4gIFwib3BlbmFpX2Jhc2VfdXJsXCIsXG4gIFwib3NzX3Byb3ZpZGVyXCIsXG4gIFwib3RlbFwiLFxuICBcInBlcm1pc3Npb25zXCIsXG4gIFwicGx1Z2luc1wiLFxuICBcInByb2ZpbGVcIixcbiAgXCJwcm9maWxlc1wiLFxuICBcInByb2plY3RzXCIsXG4gIFwic2FuZGJveF9tb2RlXCIsXG4gIFwic2FuZGJveF93b3Jrc3BhY2Vfd3JpdGVcIixcbiAgXCJzaGVsbF9lbnZpcm9ubWVudF9wb2xpY3lcIixcbiAgXCJ1c2VfbGVnYWN5X2xhbmRsb2NrXCIsXG5dKTtcblxuY29uc3QgQ1VTVE9NX1BST0ZJTEVfUkVTVFJJQ1RFRF9DT05GSUdfUk9PVFMgPSBuZXcgU2V0KFtcbiAgXCJleHBlcmltZW50YWxfY29tcGFjdF9wcm9tcHRfZmlsZVwiLFxuICBcIm1vZGVsX2NhdGFsb2dfanNvblwiLFxuICBcIm1vZGVsX2luc3RydWN0aW9uc19maWxlXCIsXG5dKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm90ZWN0ZWRFeHRyYUFyZ3MoXG4gIGFyZ3M6IEFycmF5PHN0cmluZz4sXG4gIGN1c3RvbVBlcm1pc3Npb25Qcm9maWxlOiBib29sZWFuXG4pOiB2b2lkIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpbmRleF07XG4gICAgaWYgKFxuICAgICAgYXJnID09PSBcIi0tZGFuZ2Vyb3VzbHktYnlwYXNzLWhvb2stdHJ1c3RcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWRhbmdlcm91c2x5LWJ5cGFzcy1ob29rLXRydXN0PVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tYXBwcm92ZS1mb3ItbWVcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWFwcHJvdmUtZm9yLW1lPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tbm90LXNvLXlvbG9cIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLW5vdC1zby15b2xvPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tYWRkLWRpclwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tYWRkLWRpcj1cIikgfHxcbiAgICAgIGFyZyA9PT0gXCItLW9zc1wiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tb3NzPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tbG9jYWwtcHJvdmlkZXJcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWxvY2FsLXByb3ZpZGVyPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0taWdub3JlLXVzZXItY29uZmlnXCIgfHxcbiAgICAgIGFyZy5zdGFydHNXaXRoKFwiLS1pZ25vcmUtdXNlci1jb25maWc9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1pZ25vcmUtcnVsZXNcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWlnbm9yZS1ydWxlcz1cIikgfHxcbiAgICAgIGFyZyA9PT0gXCItLXByb2ZpbGVcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLXByb2ZpbGU9XCIpIHx8XG4gICAgICAoYXJnLnN0YXJ0c1dpdGgoXCItcFwiKSAmJiAhYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFxcYGNvZGV4LWFyZ3NcXGAgY2Fubm90IHVzZSAke2FyZ30gd2l0aCBhIHByb3RlY3RlZCBzYWZldHkgc3RyYXRlZ3kgb3IgcGVybWlzc2lvbiBwcm9maWxlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFyZyA9PT0gXCItLWVuYWJsZVwiIHx8IGFyZy5zdGFydHNXaXRoKFwiLS1lbmFibGU9XCIpKSB7XG4gICAgICBjb25zdCBmZWF0dXJlID1cbiAgICAgICAgYXJnID09PSBcIi0tZW5hYmxlXCIgPyBhcmdzWysraW5kZXhdIDogYXJnLnNsaWNlKFwiLS1lbmFibGU9XCIubGVuZ3RoKTtcbiAgICAgIGlmIChmZWF0dXJlICE9PSBcInVzZV9sZWdhY3lfbGFuZGxvY2tcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJgY29kZXgtYXJnc2AgY2FuIG9ubHkgZW5hYmxlIGB1c2VfbGVnYWN5X2xhbmRsb2NrYCB3aXRoIGEgcHJvdGVjdGVkIHNhZmV0eSBzdHJhdGVneSBvciBwZXJtaXNzaW9uIHByb2ZpbGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYXJnID09PSBcIi0tZGlzYWJsZVwiIHx8IGFyZy5zdGFydHNXaXRoKFwiLS1kaXNhYmxlPVwiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImBjb2RleC1hcmdzYCBjYW5ub3QgZGlzYWJsZSBDb2RleCBmZWF0dXJlcyB3aXRoIGEgcHJvdGVjdGVkIHNhZmV0eSBzdHJhdGVneSBvciBwZXJtaXNzaW9uIHByb2ZpbGUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IG92ZXJyaWRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGFyZyA9PT0gXCItLWNvbmZpZ1wiIHx8IGFyZyA9PT0gXCItY1wiKSB7XG4gICAgICBvdmVycmlkZSA9IGFyZ3NbKytpbmRleF07XG4gICAgfSBlbHNlIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tY29uZmlnPVwiKSkge1xuICAgICAgb3ZlcnJpZGUgPSBhcmcuc2xpY2UoXCItLWNvbmZpZz1cIi5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItY1wiKSAmJiAhYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgb3ZlcnJpZGUgPSBhcmcuc2xpY2UoXCItY1wiLmxlbmd0aCk7XG4gICAgICBpZiAob3ZlcnJpZGUuc3RhcnRzV2l0aChcIj1cIikpIHtcbiAgICAgICAgb3ZlcnJpZGUgPSBvdmVycmlkZS5zbGljZSgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZXF1YWxzSW5kZXggPSBvdmVycmlkZT8uaW5kZXhPZihcIj1cIikgPz8gLTE7XG4gICAgY29uc3Qga2V5ID0gb3ZlcnJpZGU/LnNsaWNlKDAsIGVxdWFsc0luZGV4KS50cmltKCk7XG4gICAgaWYgKFxuICAgICAgZXF1YWxzSW5kZXggPCAxIHx8XG4gICAgICBrZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgIS9eW0EtWmEtel9dW0EtWmEtejAtOV8tXSooPzpcXC5bQS1aYS16X11bQS1aYS16MC05Xy1dKikqJC8udGVzdChrZXkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYGNvZGV4LWFyZ3NgIGNvbnRhaW5zIGFuIGludmFsaWQgb3IgYW1iaWd1b3VzIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGUgZm9yIGEgcHJvdGVjdGVkIHNhZmV0eSBzdHJhdGVneSBvciBwZXJtaXNzaW9uIHByb2ZpbGUuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IGtleS5zcGxpdChcIi5cIiwgMSlbMF07XG4gICAgaWYgKFxuICAgICAgUkVTVFJJQ1RFRF9DT05GSUdfUk9PVFMuaGFzKHJvb3QpIHx8XG4gICAgICAoY3VzdG9tUGVybWlzc2lvblByb2ZpbGUgJiZcbiAgICAgICAgQ1VTVE9NX1BST0ZJTEVfUkVTVFJJQ1RFRF9DT05GSUdfUk9PVFMuaGFzKHJvb3QpKSB8fFxuICAgICAgKHJvb3QgPT09IFwiZmVhdHVyZXNcIiAmJiBrZXkgIT09IFwiZmVhdHVyZXMudXNlX2xlZ2FjeV9sYW5kbG9ja1wiKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXFxgY29kZXgtYXJnc1xcYCBjYW5ub3Qgb3ZlcnJpZGUgXFxgJHtrZXl9XFxgIHdpdGggYSBwcm90ZWN0ZWQgc2FmZXR5IHN0cmF0ZWd5IG9yIHBlcm1pc3Npb24gcHJvZmlsZS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYUFyZ3NTZWxlY3RTYW5kYm94KGFyZ3M6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGFyZ3Muc29tZSgoYXJnLCBpbmRleCkgPT4ge1xuICAgIGlmIChcbiAgICAgIGFyZyA9PT0gXCItLXNhbmRib3hcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLXNhbmRib3g9XCIpIHx8XG4gICAgICAoYXJnLnN0YXJ0c1dpdGgoXCItc1wiKSAmJiAhYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoYXJnID09PSBcIi0tY29uZmlnXCIgfHwgYXJnID09PSBcIi1jXCIpIHtcbiAgICAgIHJldHVybiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KGFyZ3NbaW5kZXggKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tY29uZmlnPVwiKSkge1xuICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3goYXJnLnNsaWNlKFwiLS1jb25maWc9XCIubGVuZ3RoKSk7XG4gICAgfVxuICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi1jXCIpICYmICFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGFyZy5zbGljZShcIi1jXCIubGVuZ3RoKTtcbiAgICAgIHJldHVybiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KFxuICAgICAgICBvdmVycmlkZS5zdGFydHNXaXRoKFwiPVwiKSA/IG92ZXJyaWRlLnNsaWNlKDEpIDogb3ZlcnJpZGVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3gob3ZlcnJpZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCBrZXkgPSBvdmVycmlkZT8udHJpbVN0YXJ0KCkuc3BsaXQoL1s9Ll0vLCAxKVswXS50cmltKCk7XG4gIHJldHVybiBrZXkgPT09IFwic2FuZGJveF9tb2RlXCIgfHwga2V5ID09PSBcInNhbmRib3hfd29ya3NwYWNlX3dyaXRlXCI7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tPdXRwdXQoY29tbWFuZDogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtwcm9nLCAuLi5hcmdzXSA9IGNvbW1hbmQ7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24ocHJvZywgYXJncywge1xuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaW5oZXJpdFwiXSxcbiAgICB9KTtcblxuICAgIHByb2Mub24oXCJlcnJvclwiLCByZWplY3QpO1xuXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XG4gICAgcHJvYy5zdGRvdXQub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgICAgb3V0cHV0ICs9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ30gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBMaW51eFJ1bm5lckNyZWRlbnRpYWxzIHtcbiAgdXNlcklkOiBudW1iZXI7XG4gIHByaW1hcnlHcm91cElkOiBudW1iZXI7XG4gIHN1cHBsZW1lbnRhcnlHcm91cElkczogQXJyYXk8bnVtYmVyPjtcbn1cblxuZnVuY3Rpb24gdmFsaWRJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmXG4gICAgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiZcbiAgICB2YWx1ZSA+PSAwICYmXG4gICAgdmFsdWUgPCAweGZmZmZmZmZmXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbnV4UnVubmVyQ3JlZGVudGlhbHMoXG4gIHZhbHVlOiBzdHJpbmdcbik6IExpbnV4UnVubmVyQ3JlZGVudGlhbHMge1xuICBjb25zdCBwYXJzZWQ6IHVua25vd24gPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgaWYgKHBhcnNlZCA9PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09IFwib2JqZWN0XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9yaWdpbmFsIExpbnV4IHJ1bm5lciBjcmVkZW50aWFscy5cIik7XG4gIH1cbiAgY29uc3QgY3JlZGVudGlhbHMgPSBwYXJzZWQgYXMgUGFydGlhbDxMaW51eFJ1bm5lckNyZWRlbnRpYWxzPjtcbiAgaWYgKFxuICAgICF2YWxpZElkKGNyZWRlbnRpYWxzLnVzZXJJZCkgfHxcbiAgICBjcmVkZW50aWFscy51c2VySWQgPT09IDAgfHxcbiAgICAhdmFsaWRJZChjcmVkZW50aWFscy5wcmltYXJ5R3JvdXBJZCkgfHxcbiAgICAhQXJyYXkuaXNBcnJheShjcmVkZW50aWFscy5zdXBwbGVtZW50YXJ5R3JvdXBJZHMpIHx8XG4gICAgY3JlZGVudGlhbHMuc3VwcGxlbWVudGFyeUdyb3VwSWRzLmxlbmd0aCA+IDY1NTM2IHx8XG4gICAgIWNyZWRlbnRpYWxzLnN1cHBsZW1lbnRhcnlHcm91cElkcy5ldmVyeSh2YWxpZElkKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9yaWdpbmFsIExpbnV4IHJ1bm5lciBjcmVkZW50aWFscy5cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VySWQ6IGNyZWRlbnRpYWxzLnVzZXJJZCxcbiAgICBwcmltYXJ5R3JvdXBJZDogY3JlZGVudGlhbHMucHJpbWFyeUdyb3VwSWQsXG4gICAgc3VwcGxlbWVudGFyeUdyb3VwSWRzOiBbLi4ubmV3IFNldChjcmVkZW50aWFscy5zdXBwbGVtZW50YXJ5R3JvdXBJZHMpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVMaW51eFJ1bm5lckNyZWRlbnRpYWxzKCk6IExpbnV4UnVubmVyQ3JlZGVudGlhbHMge1xuICBjb25zdCB1c2VySWQgPSBwcm9jZXNzLmdldHVpZD8uKCk7XG4gIGNvbnN0IHByaW1hcnlHcm91cElkID0gcHJvY2Vzcy5nZXRnaWQ/LigpO1xuICBjb25zdCBzdXBwbGVtZW50YXJ5R3JvdXBJZHMgPSBwcm9jZXNzLmdldGdyb3Vwcz8uKCk7XG4gIGlmIChcbiAgICB1c2VySWQgPT0gbnVsbCB8fFxuICAgIHVzZXJJZCA9PT0gMCB8fFxuICAgIHByaW1hcnlHcm91cElkID09IG51bGwgfHxcbiAgICBzdXBwbGVtZW50YXJ5R3JvdXBJZHMgPT0gbnVsbFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgYSBub24tcm9vdCBydW5uZXIgdXNlci5cIik7XG4gIH1cbiAgcmV0dXJuIHsgdXNlcklkLCBwcmltYXJ5R3JvdXBJZCwgc3VwcGxlbWVudGFyeUdyb3VwSWRzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlQWNjb3VudEdyb3VwcyhcbiAgb3JpZ2luYWw6IExpbnV4UnVubmVyQ3JlZGVudGlhbHMsXG4gIGFjY291bnRVc2VySWQ6IG51bWJlcixcbiAgYWNjb3VudEdyb3VwSWRzOiBBcnJheTxudW1iZXI+XG4pOiBMaW51eFJ1bm5lckNyZWRlbnRpYWxzIHtcbiAgaWYgKG9yaWdpbmFsLnVzZXJJZCAhPT0gYWNjb3VudFVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiT3JpZ2luYWwgcnVubmVyIFVJRCBkb2VzIG5vdCBtYXRjaCB0aGUgYWNjb3VudCBiZWluZyByZXN0cmljdGVkLlwiXG4gICAgKTtcbiAgfVxuICAvLyBDaGVja2luZyB0aGUgdW5pb24gaXMgY29uc2VydmF0aXZlOiBpdCBjb3ZlcnMgYm90aCBleGlzdGluZyBwcm9jZXNzZXMgYW5kXG4gIC8vIGZyZXNoIHByb2Nlc3NlcyB3aG9zZSBncm91cHMgY29tZSBmcm9tIHRoZSBjdXJyZW50IGFjY291bnQgZGF0YWJhc2UuXG4gIHJldHVybiB7XG4gICAgLi4ub3JpZ2luYWwsXG4gICAgc3VwcGxlbWVudGFyeUdyb3VwSWRzOiBbXG4gICAgICAuLi5uZXcgU2V0KFsuLi5vcmlnaW5hbC5zdXBwbGVtZW50YXJ5R3JvdXBJZHMsIC4uLmFjY291bnRHcm91cElkc10pLFxuICAgIF0uZmlsdGVyKChpZCkgPT4gaWQgIT09IG9yaWdpbmFsLnByaW1hcnlHcm91cElkKSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNvbnN0YW50cyBhcyBmc0NvbnN0YW50cywgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQge1xuICBjYXB0dXJlTGludXhSdW5uZXJDcmVkZW50aWFscyxcbiAgaW5jbHVkZUFjY291bnRHcm91cHMsXG4gIExpbnV4UnVubmVyQ3JlZGVudGlhbHMsXG4gIHBhcnNlTGludXhSdW5uZXJDcmVkZW50aWFscyxcbn0gZnJvbSBcIi4vbGludXhDcmVkZW50aWFsc1wiO1xuXG5pbnRlcmZhY2UgRXhlY09wdGlvbnMge1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgaWdub3JlRmFpbHVyZT86IGJvb2xlYW47XG4gIGluaGVyaXRlZEZpbGVEZXNjcmlwdG9yPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTdWRvT3B0aW9ucyB7XG4gIHVzZXI6IHN0cmluZztcbiAgZ3JvdXA6IHN0cmluZztcbiAgcm9vdFBoYXNlOiBib29sZWFuO1xuICBydW5uZXJDcmVkZW50aWFscz86IHN0cmluZztcbn1cblxuY29uc3QgTElOVVhfUExBVEZPUk0gPSBcImxpbnV4XCI7XG5jb25zdCBNQUNPU19QTEFURk9STSA9IFwiZGFyd2luXCI7XG5jb25zdCBMSU5VWF9SVU5USU1FX0RJUkVDVE9SWSA9IFwiL3J1blwiO1xuY29uc3QgTElOVVhfT19QQVRIID0gMG8xMDAwMDAwMDtcblxuaW50ZXJmYWNlIExpbnV4R3JvdXAge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHByaW1hcnk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBSb290U2VydmljZVNvY2tldCB7XG4gIHBhdGg6IHN0cmluZztcbiAgZ3JvdXBJZDogbnVtYmVyO1xuICBkZXZpY2U6IG51bWJlcjtcbiAgaW5vZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIExpbnV4U29ja2V0Q3JlZGVudGlhbHMgZXh0ZW5kcyBMaW51eFJ1bm5lckNyZWRlbnRpYWxzIHtcbiAgZmFsbGJhY2tHcm91cElkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJvcFN1ZG8ob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcbiAgaWYgKCFbTElOVVhfUExBVEZPUk0sIE1BQ09TX1BMQVRGT1JNXS5pbmNsdWRlcyhwbGF0Zm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgT1MgZm9yIGRyb3Atc3VkbyBzYWZldHkgc3RyYXRlZ3k6ICR7cGxhdGZvcm19YFxuICAgICk7XG4gIH1cblxuICBjb25zdCB7IHJvb3RQaGFzZSB9ID0gb3B0aW9ucztcbiAgaWYgKHJvb3RQaGFzZSkge1xuICAgIGF3YWl0IGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcnVubmVyQ3JlZGVudGlhbHMgPVxuICAgIHBsYXRmb3JtID09PSBMSU5VWF9QTEFURk9STVxuICAgICAgPyBKU09OLnN0cmluZ2lmeShjYXB0dXJlTGludXhSdW5uZXJDcmVkZW50aWFscygpKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgYXdhaXQgZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpO1xuICAvLyBgc3VkbyAtS2AgaW52YWxpZGF0ZXMgY2FjaGVkIGNyZWRlbnRpYWxzIGJ1dCBleGl0cyBub24temVybyB3aGVuIG5vIHRpY2tldFxuICAvLyBleGlzdHMgeWV0LiBJZ25vcmUgdGhhdCBmYWlsdXJlIHNvIGZyZXNoIHJ1bm5lcnMgZG9uJ3QgYmxvdyB1cC5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG5cbiAgY29uc3QgZXhlY0FyZ3MgPSBbLi4ucHJvY2Vzcy5leGVjQXJndl07XG4gIGNvbnN0IHNjcmlwdFBhdGggPSBwcm9jZXNzLmFyZ3ZbMV07XG4gIC8vIFJlLWVudGVyIHRoaXMgY29tbWFuZCB1bmRlciBzdWRvIHNvIHRoZSBwcml2aWxlZ2UtZHJvcHBpbmcgd29yayBoYXBwZW5zIGluIGFcbiAgLy8gc2luZ2xlIHBsYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIGhvc3QgcGxhdGZvcm0uXG4gIGF3YWl0IGV4ZWNDb21tYW5kKFwic3Vkb1wiLCBbXG4gICAgXCItblwiLFxuICAgIFwibm9kZVwiLFxuICAgIC4uLmV4ZWNBcmdzLFxuICAgIHNjcmlwdFBhdGgsXG4gICAgXCJkcm9wLXN1ZG9cIixcbiAgICBcIi0tcm9vdC1waGFzZVwiLFxuICAgIFwiLS11c2VyXCIsXG4gICAgb3B0aW9ucy51c2VyLFxuICAgIFwiLS1ncm91cFwiLFxuICAgIG9wdGlvbnMuZ3JvdXAsXG4gICAgLi4uKHJ1bm5lckNyZWRlbnRpYWxzID09PSB1bmRlZmluZWRcbiAgICAgID8gW11cbiAgICAgIDogW1wiLS1ydW5uZXItY3JlZGVudGlhbHNcIiwgcnVubmVyQ3JlZGVudGlhbHNdKSxcbiAgXSk7XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgc3VkbyB0aWNrZXQgYWdhaW47IGlnbm9yZSBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gIC8vIGFib3ZlIChzb21lIGVudmlyb25tZW50cyByZXR1cm4gYW4gZXJyb3Igd2hlbiBubyB0aW1lc3RhbXAgZXhpc3RzKS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG5cbiAgaWYgKHBsYXRmb3JtID09PSBMSU5VWF9QTEFURk9STSkge1xuICAgIGF3YWl0IHZlcmlmeVByaXZpbGVnZWRTb2NrZXRzUmVzdHJpY3RlZCgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBwcm9jZXNzLmVudi5QQVRIID0gXCIvdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpblwiO1xuXG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGxldCBvcmlnaW5hbExpbnV4R3JvdXBJZHM6IFNldDxudW1iZXI+IHwgdW5kZWZpbmVkO1xuICBsZXQgbGludXhTb2NrZXRDcmVkZW50aWFsczogTGludXhTb2NrZXRDcmVkZW50aWFscyB8IHVuZGVmaW5lZDtcblxuICBzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICBjYXNlIExJTlVYX1BMQVRGT1JNOiB7XG4gICAgICBpZiAob3B0aW9ucy5ydW5uZXJDcmVkZW50aWFscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkxpbnV4IGRyb3Atc3VkbyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgcnVubmVyIGNyZWRlbnRpYWxzLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBvcmlnaW5hbENyZWRlbnRpYWxzID0gcGFyc2VMaW51eFJ1bm5lckNyZWRlbnRpYWxzKFxuICAgICAgICBvcHRpb25zLnJ1bm5lckNyZWRlbnRpYWxzXG4gICAgICApO1xuICAgICAgY29uc3QgdXNlckdyb3VwcyA9IGF3YWl0IGdldExpbnV4R3JvdXBzKG9wdGlvbnMudXNlcik7XG4gICAgICBjb25zdCB1c2VySWQgPSBhd2FpdCBleGVjQ29tbWFuZChcImlkXCIsIFtcIi11XCIsIG9wdGlvbnMudXNlcl0sIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgbGludXhTb2NrZXRDcmVkZW50aWFscyA9IGluY2x1ZGVBY2NvdW50R3JvdXBzKFxuICAgICAgICBvcmlnaW5hbENyZWRlbnRpYWxzLFxuICAgICAgICBwYXJzZU51bWVyaWNJZCh1c2VySWQuc3Rkb3V0LnRyaW0oKSksXG4gICAgICAgIHVzZXJHcm91cHMubWFwKCh7IGlkIH0pID0+IGlkKVxuICAgICAgKTtcbiAgICAgIG9yaWdpbmFsTGludXhHcm91cElkcyA9IG5ldyBTZXQoW1xuICAgICAgICBsaW51eFNvY2tldENyZWRlbnRpYWxzLnByaW1hcnlHcm91cElkLFxuICAgICAgICAuLi5saW51eFNvY2tldENyZWRlbnRpYWxzLnN1cHBsZW1lbnRhcnlHcm91cElkcyxcbiAgICAgIF0pO1xuICAgICAgY29uc3QgZmFsbGJhY2tHcm91cCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLWdcIiwgXCJub2JvZHlcIl0sIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKGZhbGxiYWNrR3JvdXAuY29kZSA9PT0gMCkge1xuICAgICAgICBjb25zdCBmYWxsYmFja0dyb3VwSWQgPSBwYXJzZU51bWVyaWNJZChmYWxsYmFja0dyb3VwLnN0ZG91dC50cmltKCkpO1xuICAgICAgICBpZiAoZmFsbGJhY2tHcm91cElkICE9PSAwKSB7XG4gICAgICAgICAgb3JpZ2luYWxMaW51eEdyb3VwSWRzLmFkZChmYWxsYmFja0dyb3VwSWQpO1xuICAgICAgICAgIGxpbnV4U29ja2V0Q3JlZGVudGlhbHMuZmFsbGJhY2tHcm91cElkID0gZmFsbGJhY2tHcm91cElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cHNCeUlkID0gbmV3IE1hcCh1c2VyR3JvdXBzLm1hcCgoZ3JvdXApID0+IFtncm91cC5pZCwgZ3JvdXBdKSk7XG4gICAgICBjb25zdCBzZXJ2aWNlU29ja2V0cyA9IGF3YWl0IGZpbmRSb290U2VydmljZVNvY2tldHMoXG4gICAgICAgIExJTlVYX1JVTlRJTUVfRElSRUNUT1JZLFxuICAgICAgICBvcmlnaW5hbExpbnV4R3JvdXBJZHMsXG4gICAgICAgIGxpbnV4U29ja2V0Q3JlZGVudGlhbHNcbiAgICAgICk7XG4gICAgICBjb25zdCBncm91cHMgPSBuZXcgU2V0KFtvcHRpb25zLmdyb3VwXSk7XG4gICAgICBmb3IgKGNvbnN0IHNvY2tldCBvZiBzZXJ2aWNlU29ja2V0cykge1xuICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc0J5SWQuZ2V0KHNvY2tldC5ncm91cElkKTtcbiAgICAgICAgaWYgKGdyb3VwICYmICFncm91cC5wcmltYXJ5KSB7XG4gICAgICAgICAgZ3JvdXBzLmFkZChncm91cC5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHJlbW92ZVVzZXJGcm9tTGludXhHcm91cChvcHRpb25zLnVzZXIsIGdyb3VwKSkge1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHNvY2tldCBvZiBzZXJ2aWNlU29ja2V0cykge1xuICAgICAgICBpZiAoYXdhaXQgcmVzdHJpY3RSb290U2VydmljZVNvY2tldChzb2NrZXQpKSB7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIE1BQ09TX1BMQVRGT1JNOiB7XG4gICAgICBpZiAoYXdhaXQgaXNVc2VySW5Hcm91cChvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXApKSB7XG4gICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kKFwiZHNlZGl0Z3JvdXBcIiwgW1xuICAgICAgICAgIFwiLW9cIixcbiAgICAgICAgICBcImVkaXRcIixcbiAgICAgICAgICBcIi1kXCIsXG4gICAgICAgICAgb3B0aW9ucy51c2VyLFxuICAgICAgICAgIFwiLXRcIixcbiAgICAgICAgICBcInVzZXJcIixcbiAgICAgICAgICBvcHRpb25zLmdyb3VwLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFVzZWQgJ2RzZWRpdGdyb3VwIC1vIGVkaXQgLWQgJHtvcHRpb25zLnVzZXJ9IC10IHVzZXIgJHtvcHRpb25zLmdyb3VwfScgdG8gZHJvcCBzdWRvIHByaXZpbGVnZS5gXG4gICAgICAgICk7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7b3B0aW9ucy51c2VyfSBpcyBub3QgYSBtZW1iZXIgb2YgdGhlICR7b3B0aW9ucy5ncm91cH0gZ3JvdXAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuc3VwcG9ydGVkIE9TIGZvciBkcm9wLXN1ZG8gc2FmZXR5IHN0cmF0ZWd5OiAke3Byb2Nlc3MucGxhdGZvcm19YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0Qob3B0aW9ucy51c2VyKTtcbiAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBObyAke29wdGlvbnMudXNlcn0gZW50cmllcyBmb3VuZCBpbiAvZXRjL3N1ZG9lcnMuZCByZXF1aXJpbmcgY2hhbmdlcy5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHN1ZG9lcnNNZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKFxuICAgIFwiL2V0Yy9zdWRvZXJzXCIsXG4gICAgb3B0aW9ucy51c2VyXG4gICk7XG4gIGlmIChzdWRvZXJzTWVzc2FnZSkge1xuICAgIGNvbnNvbGUubG9nKHN1ZG9lcnNNZXNzYWdlKTtcbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBObyAke29wdGlvbnMudXNlcn0gZW50cmllcyBmb3VuZCBpbiAvZXRjL3N1ZG9lcnMgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBpZiAoIWNoYW5nZWQpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtvcHRpb25zLnVzZXJ9IGFscmVhZHkgbGFja3Mgc3VkbyBwcml2aWxlZ2VzLmApO1xuICB9XG5cbiAgY29uc3QgZ3JvdXBzQWZ0ZXIgPSBhd2FpdCBleGVjQ29tbWFuZChcImlkXCIsIFtcIi1HblwiLCBvcHRpb25zLnVzZXJdLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBHcm91cHMgZm9yICR7b3B0aW9ucy51c2VyfSBhZnRlciBjbGVhbnVwOiAke2dyb3Vwc0FmdGVyLnN0ZG91dC50cmltKCl9YFxuICApO1xuXG4gIGlmIChvcmlnaW5hbExpbnV4R3JvdXBJZHMpIHtcbiAgICBhd2FpdCB2ZXJpZnlQcml2aWxlZ2VkU29ja2V0c1Jlc3RyaWN0ZWQoXG4gICAgICBvcmlnaW5hbExpbnV4R3JvdXBJZHMsXG4gICAgICBsaW51eFNvY2tldENyZWRlbnRpYWxzXG4gICAgKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZW1vdmVVc2VyRnJvbUxpbnV4R3JvdXAoXG4gIHVzZXI6IHN0cmluZyxcbiAgZ3JvdXA6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghKGF3YWl0IGlzVXNlckluR3JvdXAodXNlciwgZ3JvdXApKSkge1xuICAgIGNvbnNvbGUubG9nKGAke3VzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtncm91cH0gZ3JvdXAuYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFt1c2VyLCBncm91cF0pO1xuICAgIGNvbnNvbGUubG9nKGBVc2VkICdkZWx1c2VyICR7dXNlcn0gJHtncm91cH0nIHRvIGRyb3AgZ3JvdXAgYWNjZXNzLmApO1xuICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIHVzZXIsIGdyb3VwXSk7XG4gICAgY29uc29sZS5sb2coYFVzZWQgJ2dwYXNzd2QgLWQgJHt1c2VyfSAke2dyb3VwfScgdG8gZHJvcCBncm91cCBhY2Nlc3MuYCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGludXhHcm91cHModXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxMaW51eEdyb3VwPj4ge1xuICBjb25zdCBbaWRzUmVzdWx0LCBuYW1lc1Jlc3VsdCwgcHJpbWFyeVJlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR1wiLCB1c2VyXSwgeyBjYXB0dXJlOiB0cnVlIH0pLFxuICAgIGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLUduXCIsIHVzZXJdLCB7IGNhcHR1cmU6IHRydWUgfSksXG4gICAgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItZ1wiLCB1c2VyXSwgeyBjYXB0dXJlOiB0cnVlIH0pLFxuICBdKTtcbiAgY29uc3QgaWRzID0gc3BsaXRGaWVsZHMoaWRzUmVzdWx0LnN0ZG91dCkubWFwKHBhcnNlTnVtZXJpY0lkKTtcbiAgY29uc3QgbmFtZXMgPSBzcGxpdEZpZWxkcyhuYW1lc1Jlc3VsdC5zdGRvdXQpO1xuICBjb25zdCBwcmltYXJ5SWQgPSBwYXJzZU51bWVyaWNJZChwcmltYXJ5UmVzdWx0LnN0ZG91dC50cmltKCkpO1xuXG4gIGlmIChpZHMubGVuZ3RoICE9PSBuYW1lcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCByZXNvbHZlIGdyb3VwIG5hbWVzIGZvciAke3VzZXJ9LmApO1xuICB9XG5cbiAgcmV0dXJuIGlkcy5tYXAoKGlkLCBpbmRleCkgPT4gKHtcbiAgICBpZCxcbiAgICBuYW1lOiBuYW1lc1tpbmRleF0sXG4gICAgcHJpbWFyeTogaWQgPT09IHByaW1hcnlJZCxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzcGxpdEZpZWxkcyh2YWx1ZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOdW1lcmljSWQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtZXJpYyBJRDogJHt2YWx1ZX1gKTtcbiAgfVxuICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRSb290U2VydmljZVNvY2tldHMoXG4gIGRpcmVjdG9yeTogc3RyaW5nLFxuICBncm91cElkczogU2V0PG51bWJlcj4sXG4gIGNyZWRlbnRpYWxzPzogTGludXhTb2NrZXRDcmVkZW50aWFscyxcbiAgaWdub3JlVW5yZWFkYWJsZSA9IGZhbHNlLFxuICBkaXNwbGF5RGlyZWN0b3J5ID0gZGlyZWN0b3J5XG4pOiBQcm9taXNlPEFycmF5PFJvb3RTZXJ2aWNlU29ja2V0Pj4ge1xuICBsZXQgZGlyZWN0b3J5SGFuZGxlO1xuICB0cnkge1xuICAgIGRpcmVjdG9yeUhhbmRsZSA9IGF3YWl0IGZzLm9wZW4oXG4gICAgICBkaXJlY3RvcnksXG4gICAgICBmc0NvbnN0YW50cy5PX1JET05MWSB8IGZzQ29uc3RhbnRzLk9fRElSRUNUT1JZIHwgZnNDb25zdGFudHMuT19OT0ZPTExPV1xuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgY29kZSA9IChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gXCJFTk9FTlRcIiB8fFxuICAgICAgKGlnbm9yZVVucmVhZGFibGUgJiYgKGNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgY29kZSA9PT0gXCJFUEVSTVwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGRpcmVjdG9yeURlc2NyaXB0b3JQYXRoID0gYC9wcm9jL3NlbGYvZmQvJHtkaXJlY3RvcnlIYW5kbGUuZmR9YDtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJlY3RvcnlEZXNjcmlwdG9yUGF0aCwge1xuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBzb2NrZXRzOiBBcnJheTxSb290U2VydmljZVNvY2tldD4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgZW50cnlQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeURlc2NyaXB0b3JQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlQYXRoID0gcGF0aC5qb2luKGRpc3BsYXlEaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgc29ja2V0cy5wdXNoKFxuICAgICAgICAgIC4uLihhd2FpdCBmaW5kUm9vdFNlcnZpY2VTb2NrZXRzKFxuICAgICAgICAgICAgZW50cnlQYXRoLFxuICAgICAgICAgICAgZ3JvdXBJZHMsXG4gICAgICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgICAgIGlnbm9yZVVucmVhZGFibGUsXG4gICAgICAgICAgICBkaXNwbGF5UGF0aFxuICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFlbnRyeS5pc1NvY2tldCgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3RhdHM7XG4gICAgICB0cnkge1xuICAgICAgICBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KGVudHJ5UGF0aCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncm91cFdyaXRhYmxlID1cbiAgICAgICAgKHN0YXRzLm1vZGUgJiAwbzAyMCkgIT09IDAgJiYgZ3JvdXBJZHMuaGFzKHN0YXRzLmdpZCk7XG4gICAgICBjb25zdCB3b3JsZFdyaXRhYmxlID0gKHN0YXRzLm1vZGUgJiAwbzAwMikgIT09IDA7XG4gICAgICBjb25zdCBhY2xXcml0YWJsZSA9XG4gICAgICAgICFncm91cFdyaXRhYmxlICYmXG4gICAgICAgICF3b3JsZFdyaXRhYmxlICYmXG4gICAgICAgIChzdGF0cy5tb2RlICYgMG8wMjApICE9PSAwICYmXG4gICAgICAgIHN0YXRzLmlzU29ja2V0KCkgJiZcbiAgICAgICAgc3RhdHMudWlkID09PSAwICYmXG4gICAgICAgIChhd2FpdCBoYXNXcml0YWJsZVNvY2tldEFjbChlbnRyeVBhdGgsIHN0YXRzLCBjcmVkZW50aWFscykpO1xuICAgICAgaWYgKFxuICAgICAgICBzdGF0cy5pc1NvY2tldCgpICYmXG4gICAgICAgIHN0YXRzLnVpZCA9PT0gMCAmJlxuICAgICAgICAoZ3JvdXBXcml0YWJsZSB8fCB3b3JsZFdyaXRhYmxlIHx8IGFjbFdyaXRhYmxlKVxuICAgICAgKSB7XG4gICAgICAgIHNvY2tldHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogZGlzcGxheVBhdGgsXG4gICAgICAgICAgZ3JvdXBJZDogc3RhdHMuZ2lkLFxuICAgICAgICAgIGRldmljZTogc3RhdHMuZGV2LFxuICAgICAgICAgIGlub2RlOiBzdGF0cy5pbm8sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2NrZXRzO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpcmVjdG9yeUhhbmRsZS5jbG9zZSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhc1dyaXRhYmxlU29ja2V0QWNsKFxuICBzb2NrZXRQYXRoOiBzdHJpbmcsXG4gIGV4cGVjdGVkU3RhdHM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZnMubHN0YXQ+PixcbiAgY3JlZGVudGlhbHM/OiBMaW51eFNvY2tldENyZWRlbnRpYWxzXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKCFjcmVkZW50aWFscykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3Moc29ja2V0UGF0aCwgZnNDb25zdGFudHMuV19PSyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgY29kZSA9IChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgICBpZiAoY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBjb2RlID09PSBcIkVQRVJNXCIgfHwgY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzb2NrZXRIYW5kbGUgPSBhd2FpdCBmcy5vcGVuKFxuICAgIHNvY2tldFBhdGgsXG4gICAgTElOVVhfT19QQVRIIHwgZnNDb25zdGFudHMuT19OT0ZPTExPV1xuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc29ja2V0SGFuZGxlLnN0YXQoKTtcbiAgICBpZiAoXG4gICAgICAhc3RhdHMuaXNTb2NrZXQoKSB8fFxuICAgICAgc3RhdHMudWlkICE9PSAwIHx8XG4gICAgICBzdGF0cy5kZXYgIT09IGV4cGVjdGVkU3RhdHMuZGV2IHx8XG4gICAgICBzdGF0cy5pbm8gIT09IGV4cGVjdGVkU3RhdHMuaW5vXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgcHJpdmlsZWdlZCBzZXJ2aWNlIHNvY2tldCBjaGFuZ2VkIGR1cmluZyBkaXNjb3ZlcnkuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWRlbnRpdHlHcm91cHMgPSBbXG4gICAgICB7XG4gICAgICAgIHByaW1hcnlHcm91cElkOiBjcmVkZW50aWFscy5wcmltYXJ5R3JvdXBJZCxcbiAgICAgICAgc3VwcGxlbWVudGFyeUdyb3VwSWRzOiBjcmVkZW50aWFscy5zdXBwbGVtZW50YXJ5R3JvdXBJZHMsXG4gICAgICB9LFxuICAgICAgLi4uKGNyZWRlbnRpYWxzLmZhbGxiYWNrR3JvdXBJZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByaW1hcnlHcm91cElkOiBjcmVkZW50aWFscy5mYWxsYmFja0dyb3VwSWQsXG4gICAgICAgICAgICAgIHN1cHBsZW1lbnRhcnlHcm91cElkczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGlkZW50aXR5IG9mIGlkZW50aXR5R3JvdXBzKSB7XG4gICAgICBjb25zdCBncm91cEFyZ3VtZW50ID1cbiAgICAgICAgaWRlbnRpdHkuc3VwcGxlbWVudGFyeUdyb3VwSWRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gXCItLWNsZWFyLWdyb3Vwc1wiXG4gICAgICAgICAgOiBgLS1ncm91cHM9JHtpZGVudGl0eS5zdXBwbGVtZW50YXJ5R3JvdXBJZHMuam9pbihcIixcIil9YDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFxuICAgICAgICBcIi91c3IvYmluL3NldHByaXZcIixcbiAgICAgICAgW1xuICAgICAgICAgIGAtLXJldWlkPSR7Y3JlZGVudGlhbHMudXNlcklkfWAsXG4gICAgICAgICAgYC0tcmVnaWQ9JHtpZGVudGl0eS5wcmltYXJ5R3JvdXBJZH1gLFxuICAgICAgICAgIGdyb3VwQXJndW1lbnQsXG4gICAgICAgICAgXCItLVwiLFxuICAgICAgICAgIFwiL3Vzci9iaW4vdGVzdFwiLFxuICAgICAgICAgIFwiLXdcIixcbiAgICAgICAgICBcIi9wcm9jL3NlbGYvZmQvM1wiLFxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICAgICAgICAgIGluaGVyaXRlZEZpbGVEZXNjcmlwdG9yOiBzb2NrZXRIYW5kbGUuZmQsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBpZiAocmVzdWx0LmNvZGUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0LmNvZGUgIT09IDEgfHwgcmVzdWx0LnN0ZGVyci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB2ZXJpZnkgYWNjZXNzIHRvIGEgcHJpdmlsZWdlZCBzZXJ2aWNlIHNvY2tldC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc29ja2V0SGFuZGxlLmNsb3NlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzdHJpY3RSb290U2VydmljZVNvY2tldChcbiAgc29ja2V0OiBSb290U2VydmljZVNvY2tldFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxldCBzb2NrZXRIYW5kbGU7XG4gIHRyeSB7XG4gICAgc29ja2V0SGFuZGxlID0gYXdhaXQgZnMub3BlbihcbiAgICAgIHNvY2tldC5wYXRoLFxuICAgICAgTElOVVhfT19QQVRIIHwgZnNDb25zdGFudHMuT19OT0ZPTExPV1xuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc29ja2V0SGFuZGxlLnN0YXQoKTtcbiAgICBpZiAoIXN0YXRzLmlzU29ja2V0KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzb2NrZXQucGF0aH0gdG8gYmUgYSBzb2NrZXQuYCk7XG4gICAgfVxuICAgIGlmIChzdGF0cy51aWQgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzb2NrZXQucGF0aH0gdG8gYmUgb3duZWQgYnkgcm9vdC5gKTtcbiAgICB9XG4gICAgaWYgKHN0YXRzLmRldiAhPT0gc29ja2V0LmRldmljZSB8fCBzdGF0cy5pbm8gIT09IHNvY2tldC5pbm9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3NvY2tldC5wYXRofSBjaGFuZ2VkIHdoaWxlIGRyb3BwaW5nIHByaXZpbGVnZXMuYCk7XG4gICAgfVxuICAgIGlmICgoc3RhdHMubW9kZSAmIDBvMDc3KSA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coYEFjY2VzcyB0byAke3NvY2tldC5wYXRofSBpcyBhbHJlYWR5IHJlc3RyaWN0ZWQuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgZnMuY2htb2QoYC9wcm9jL3NlbGYvZmQvJHtzb2NrZXRIYW5kbGUuZmR9YCwgc3RhdHMubW9kZSAmIDBvNzAwKTtcbiAgICBjb25zdCByZXN0cmljdGVkU3RhdHMgPSBhd2FpdCBzb2NrZXRIYW5kbGUuc3RhdCgpO1xuICAgIGlmICgocmVzdHJpY3RlZFN0YXRzLm1vZGUgJiAwbzA3NykgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlc3RyaWN0IGFjY2VzcyB0byAke3NvY2tldC5wYXRofS5gKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFJlc3RyaWN0ZWQgYWNjZXNzIHRvICR7c29ja2V0LnBhdGh9LmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHNvY2tldEhhbmRsZS5jbG9zZSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeVByaXZpbGVnZWRTb2NrZXRzUmVzdHJpY3RlZChcbiAgb3JpZ2luYWxHcm91cElkcz86IFNldDxudW1iZXI+LFxuICBjcmVkZW50aWFscz86IExpbnV4U29ja2V0Q3JlZGVudGlhbHNcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBncm91cElkcyA9XG4gICAgb3JpZ2luYWxHcm91cElkcyA/P1xuICAgIG5ldyBTZXQodHlwZW9mIHByb2Nlc3MuZ2V0Z3JvdXBzID09PSBcImZ1bmN0aW9uXCIgPyBwcm9jZXNzLmdldGdyb3VwcygpIDogW10pO1xuICBpZiAoIW9yaWdpbmFsR3JvdXBJZHMgJiYgdHlwZW9mIHByb2Nlc3MuZ2V0Z2lkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBncm91cElkcy5hZGQocHJvY2Vzcy5nZXRnaWQoKSk7XG4gIH1cblxuICBjb25zdCBzb2NrZXRzID0gYXdhaXQgZmluZFJvb3RTZXJ2aWNlU29ja2V0cyhcbiAgICBMSU5VWF9SVU5USU1FX0RJUkVDVE9SWSxcbiAgICBncm91cElkcyxcbiAgICBjcmVkZW50aWFscyxcbiAgICAhb3JpZ2luYWxHcm91cElkc1xuICApO1xuICBmb3IgKGNvbnN0IHNvY2tldCBvZiBzb2NrZXRzKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHByb2Nlc3MuZ2V0dWlkKCkgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZHJvcC1zdWRvIGRpZCBub3QgcmV2b2tlIGFjY2VzcyB0byAke3NvY2tldC5wYXRofS5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHNvY2tldC5wYXRoLCBmc0NvbnN0YW50cy5XX09LKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgY29kZSA9IChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgICBpZiAoY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBjb2RlID09PSBcIkVQRVJNXCIgfHwgY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRyb3Atc3VkbyBkaWQgbm90IHJldm9rZSBhY2Nlc3MgdG8gJHtzb2NrZXQucGF0aH0uYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZDogcGFzc3dvcmRsZXNzIHN1ZG8gbm90IGF2YWlsYWJsZS5cIik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNVc2VySW5Hcm91cCh1c2VyOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItbkdcIiwgdXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKTtcbiAgcmV0dXJuIGdyb3Vwcy5pbmNsdWRlcyhncm91cCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRFeGlzdHMoYmluYXJ5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJzaFwiLCBbXCItY1wiLCBgY29tbWFuZCAtdiAke2JpbmFyeX1gXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQuY29kZSA9PT0gMDtcbn1cblxuLyoqXG4gKiBTdHJpcHMgbm9uLWNvbW1lbnQgZW50cmllcyBncmFudGluZyBzdWRvIHRvIGB1c2VyYCBhY3Jvc3MgYC9ldGMvc3Vkb2Vycy5kYFxuICogZmlsZXMuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIC0gZW51bWVyYXRlIHJlZ3VsYXIgZmlsZXMgdW5kZXIgYC9ldGMvc3Vkb2Vycy5kYFxuICogICAtIHJlbW92ZSBsaW5lcyB3aG9zZSBmaXJzdCB0b2tlbiBtYXRjaGVzIHRoZSB0YXJnZXQgdXNlciB3aGlsZSBrZWVwaW5nXG4gKiAgICAgY29tbWVudHMvYmxhbmsgbGluZXMgaW50YWN0XG4gKiAgIC0gcmV3cml0ZSBmaWxlcyBpbi1wbGFjZSB3aXRoIG9yaWdpbmFsIG5ld2xpbmUgc3R5bGUgYW5kIHBlcm1pc3Npb25zXG4gKiAgIC0gcmVwb3J0IHdoaWNoIGZpbGVzIHdlcmUgY2hhbmdlZCBzbyBjYWxsZXJzIGNhbiBzdXJmYWNlIHVzZWZ1bCBsb2dzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0QodXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IHN1ZG9lcnNEaXIgPSBcIi9ldGMvc3Vkb2Vycy5kXCI7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoc3Vkb2Vyc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGVudHJpZXMgPSBkaXJFbnRyaWVzXG4gICAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSlcbiAgICAgIC5tYXAoKGRpcmVudCkgPT4gcGF0aC5qb2luKHN1ZG9lcnNEaXIsIGRpcmVudC5uYW1lKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKGVudHJ5UGF0aCwgdXNlcik7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGxldCBzdGF0cztcbiAgbGV0IG9yaWdpbmFsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBvcmlnaW5hbCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3bGluZSA9IG9yaWdpbmFsLmluY2x1ZGVzKFwiXFxyXFxuXCIpID8gXCJcXHJcXG5cIiA6IFwiXFxuXCI7XG4gIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9XG4gICAgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXG5cIikgfHwgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXHJcXG5cIik7XG4gIGNvbnN0IHJhd0xpbmVzID0gb3JpZ2luYWwuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKHJhd0xpbmVzLmxlbmd0aCA+IDAgJiYgcmF3TGluZXNbcmF3TGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByYXdMaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkTGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3TGluZXMpIHtcbiAgICBjb25zdCB0cmltbWVkTGVhZGluZyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IHRyaW1tZWRMZWFkaW5nLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gdXNlcikge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZWJ1aWx0ID0gZmlsdGVyZWRMaW5lcy5qb2luKG5ld2xpbmUpICsgKGVuZHNXaXRoTmV3bGluZSA/IG5ld2xpbmUgOiBcIlwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIHJlYnVpbHQsIFwidXRmOFwiKTtcbiAgICBhd2FpdCBmcy5jaG1vZChmaWxlUGF0aCwgc3RhdHMubW9kZSAmIDBvNzc3KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYFJlbW92ZWQgJHt1c2VyfSBlbnRyeSBmcm9tICR7ZmlsZVBhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY0NvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zLmNhcHR1cmUgPz8gZmFsc2U7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBjYXB0dXJlXG4gICAgICA/IG9wdGlvbnMuaW5oZXJpdGVkRmlsZURlc2NyaXB0b3IgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdXG4gICAgICAgIDogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIiwgb3B0aW9ucy5pbmhlcml0ZWRGaWxlRGVzY3JpcHRvcl1cbiAgICAgIDogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIGxldCBzdGRvdXQgPSBcIlwiO1xuICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRvdXQpIHtcbiAgICBjaGlsZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRlcnIpIHtcbiAgICBjaGlsZC5zdGRlcnIuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8RXhlY1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXhpdENvZGUgPSBjb2RlID8/IDA7XG4gICAgICBpZiAoZXhpdENvZGUgIT09IDAgJiYgIW9wdGlvbnMuaWdub3JlRmFpbHVyZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXCIgXCIpfSAoZXhpdCBjb2RlICR7ZXhpdENvZGV9KWBcbiAgICAgICAgKTtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuY29kZSA9IGV4aXRDb2RlO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5zdGRvdXQgPSBzdGRvdXQ7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZGVyciA9IHN0ZGVycjtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7IGNvZGU6IGV4aXRDb2RlLCBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBFeGVjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9yZXN0XCI7XG5cbmNvbnN0IFJldHJ5aW5nT2N0b2tpdCA9IE9jdG9raXQucGx1Z2luKHJldHJ5KTtcblxuZXhwb3J0IHR5cGUgV3JpdGVBY2Nlc3NDaGVjayA9XG4gIHwge1xuICAgICAgc3RhdHVzOiBcImFwcHJvdmVkXCI7XG4gICAgICBhY3Rvcjogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIjtcbiAgICAgIGFjdG9yOiBzdHJpbmc7XG4gICAgICByZWFzb246IHN0cmluZztcbiAgICB9O1xuXG50eXBlIEVuc3VyZVdyaXRlQWNjZXNzT3B0aW9ucyA9IHtcbiAgb2N0b2tpdD86IE9jdG9raXQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICBhY3Rvcj86IHN0cmluZztcbiAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdHJ1c3RlZCBHaXRIdWIgYm90IGFjdG9ycyBhcmUgYWxsb3dlZCB3aXRob3V0IGNoZWNraW5nXG4gICAqIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy4gT3RoZXIgYm90cyBtdXN0IHBhc3MgdGhlIHNhbWUgY2hlY2tzIGFzIGh1bWFuXG4gICAqIHVzZXJzLlxuICAgKi9cbiAgYWxsb3dCb3RBY3RvcnM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBHaXRIdWIgdXNlcm5hbWVzIG9yICcqJyB0byBhbGxvdyBhbGwgdXNlcnMuXG4gICAqIENhc2UtaW5zZW5zaXRpdmU7IGVtcHR5IHN0cmluZyBvciB1bmRlZmluZWQgZGlzYWJsZXMgdGhpcyBvdmVycmlkZS5cbiAgICovXG4gIGFsbG93VXNlcnM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIEdpdEh1YiBib3QgdXNlcm5hbWVzLiAnKicgaXMgbm90IHN1cHBvcnRlZC5cbiAgICogRW50cmllcyBtYXkgaW5jbHVkZSBvciBvbWl0IHRoZSB0cmFpbGluZyBbYm90XSBzdWZmaXguXG4gICAqL1xuICBhbGxvd0JvdFVzZXJzPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCB0aGUgR2l0SHViIGFjdG9yIHdoaWNoIHRyaWdnZXJlZCB0aGUgY3VycmVudCB3b3JrZmxvdyBoYXMgd3JpdGVcbiAqIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MoXG4gIG9wdGlvbnM6IEVuc3VyZVdyaXRlQWNjZXNzT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxXcml0ZUFjY2Vzc0NoZWNrPiB7XG4gIGNvbnN0IGFjdG9yID0gb3B0aW9ucy5hY3RvciA/PyBwcm9jZXNzLmVudi5HSVRIVUJfQUNUT1I7XG4gIGNvbnN0IHJlcG9zaXRvcnkgPSBvcHRpb25zLnJlcG9zaXRvcnkgPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlk7XG4gIGNvbnN0IGFsbG93Qm90QWN0b3JzID0gb3B0aW9ucy5hbGxvd0JvdEFjdG9ycyA/PyBmYWxzZTtcblxuICBpZiAoIWFjdG9yIHx8IGFjdG9yLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcjogYWN0b3IgPz8gXCI8dW5rbm93bj5cIixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfQUNUT1IgaXMgbm90IHNldDsgY2Fubm90IGRldGVybWluZSB0cmlnZ2VyaW5nIHVzZXIuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghcmVwb3NpdG9yeSB8fCByZXBvc2l0b3J5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfUkVQT1NJVE9SWSBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCByZXBvc2l0b3J5LlwiLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBbb3duZXIsIHJlcG9dID0gcmVwb3NpdG9yeS5zcGxpdChcIi9cIik7XG4gIGlmICghb3duZXIgfHwgIXJlcG8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYEdJVEhVQl9SRVBPU0lUT1JZIG11c3QgYmUgaW4gdGhlIGZvcm1hdCAnb3duZXIvcmVwbycsIHJlY2VpdmVkOiAnJHtyZXBvc2l0b3J5fScuYCxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2l0SHViLWJ1aWx0IHdvcmtmbG93cyBkbyBub3QgaGF2ZSBhIG1lYW5pbmdmdWwgY29sbGFib3JhdG9yIHBlcm1pc3Npb25cbiAgLy8gbGV2ZWwuIE9ubHkgdHJ1c3QgdGhlIGJ1aWx0LWluIGJvdCBhY3RvcnMgR2l0SHViIG93bnMuXG4gIGlmIChhbGxvd0JvdEFjdG9ycyAmJiBpc1RydXN0ZWRHaXRIdWJCb3RBY3RvcihhY3RvcikpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgYSB0cnVzdGVkIEdpdEh1YiBib3QgYWNjb3VudDsgc2tpcHBpbmcgZXhwbGljaXQgcGVybWlzc2lvbiBjaGVjay5gKTtcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgfVxuXG4gIGNvbnN0IGFsbG93ZWRCb3RBY3RvcnMgPSBwYXJzZUFsbG93ZWRCb3RBY3RvcnMob3B0aW9ucy5hbGxvd0JvdFVzZXJzID8/IFwiXCIpO1xuICBpZiAoYWxsb3dlZEJvdEFjdG9ycyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgYWN0b3IsXG4gICAgICByZWFzb246IGFsbG93ZWRCb3RBY3RvcnMubWVzc2FnZSxcbiAgICB9O1xuICB9XG4gIGlmIChpc0JvdEFjdG9yKGFjdG9yKSAmJiBhbGxvd2VkQm90QWN0b3JzLmhhcyhub3JtYWxpemVCb3RBY3RvcihhY3RvcikpKSB7XG4gICAgY29yZS5pbmZvKGBBY3RvciAnJHthY3Rvcn0nIGlzIGV4cGxpY2l0bHkgYWxsb3dlZCB2aWEgYWxsb3ctYm90LXVzZXJzLmApO1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgLy8gQWxsb3ctbGlzdCBvdmVycmlkZTogaWYgYWxsb3dVc2VycyBpcyAnKicgYWxsb3cgYWxsIHVzZXJzLiBJZiBpdCBpcyBhXG4gIC8vIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBhbGxvdyBsaXN0ZWQgdXNlcnMgKGNhc2UtaW5zZW5zaXRpdmUpIHdpdGhvdXQgY2hlY2tpbmdcbiAgLy8gY29sbGFib3JhdG9yIHBlcm1pc3Npb25zLlxuICBjb25zdCBhbGxvd1VzZXJzU3BlYyA9IChvcHRpb25zLmFsbG93VXNlcnMgPz8gXCJcIikudHJpbSgpO1xuICBpZiAoYWxsb3dVc2Vyc1NwZWMubGVuZ3RoID4gMCkge1xuICAgIGlmIChhbGxvd1VzZXJzU3BlYyA9PT0gXCIqXCIpIHtcbiAgICAgIGNvcmUuaW5mbyhcImFsbG93LXVzZXJzPScqJyBzcGVjaWZpZWQ7IGFsbG93aW5nIGFsbCB1c2VycyB0byBwcm9jZWVkLlwiKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICAgIH1cbiAgICBjb25zdCBhbGxvd2VkID0gbmV3IFNldChcbiAgICAgIGFsbG93VXNlcnNTcGVjXG4gICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKSxcbiAgICApO1xuICAgIGlmIChhbGxvd2VkLmhhcyhhY3Rvci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgY29yZS5pbmZvKGBBY3RvciAnJHthY3Rvcn0nIGlzIGV4cGxpY2l0bHkgYWxsb3dlZCB2aWEgYWxsb3ctdXNlcnMuYCk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gZ2V0VG9rZW5Gcm9tRW52KCk7XG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJBIEdpdEh1YiB0b2tlbiBpcyByZXF1aXJlZCB0byBjaGVjayBwZXJtaXNzaW9ucyAoc2V0IEdJVEhVQl9UT0tFTiBvciBHSF9UT0tFTikuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTD8udHJpbSgpO1xuICBjb25zdCBvY3Rva2l0ID1cbiAgICBvcHRpb25zLm9jdG9raXQgPz9cbiAgICBuZXcgUmV0cnlpbmdPY3Rva2l0KHtcbiAgICAgIGF1dGg6IHRva2VuLFxuICAgICAgLi4uKGJhc2VVcmwgPyB7IGJhc2VVcmwgfSA6IHt9KSxcbiAgICB9KTtcblxuICBjb3JlLmluZm8oYENoZWNraW5nIHdyaXRlIGFjY2VzcyBmb3IgYWN0b3IgJyR7YWN0b3J9JyBvbiAke293bmVyfS8ke3JlcG99YCk7XG5cbiAgbGV0IHBlcm1pc3Npb246IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9jdG9raXQucmVwb3MuZ2V0Q29sbGFib3JhdG9yUGVybWlzc2lvbkxldmVsKHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICAgIHVzZXJuYW1lOiBhY3RvcixcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uID0gcmVzcG9uc2UuZGF0YS5wZXJtaXNzaW9uID8/IFwibm9uZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWN0b3IsXG4gICAgICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgaXMgbm90IGEgY29sbGFib3JhdG9yIG9uICR7b3duZXJ9LyR7cmVwb307IHdyaXRlIGFjY2VzcyBpcyByZXF1aXJlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgIDogXCJGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciBhY3RvciBkdWUgdG8gdW5rbm93biBlcnJvci5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgJyR7YWN0b3J9JzogJHttZXNzYWdlfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBoYXMgcGVybWlzc2lvbiBsZXZlbCAnJHtwZXJtaXNzaW9ufScuYCk7XG5cbiAgaWYgKHBlcm1pc3Npb24gPT09IFwiYWRtaW5cIiB8fCBwZXJtaXNzaW9uID09PSBcIndyaXRlXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJtYWludGFpblwiKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgIGFjdG9yLFxuICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byAke293bmVyfS8ke3JlcG99LiBEZXRlY3RlZCBwZXJtaXNzaW9uOiAnJHtwZXJtaXNzaW9ufScuYCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tRW52KCk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOID8/IHByb2Nlc3MuZW52LkdIX1RPS0VOO1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHJpbSgpLmxlbmd0aCA+IDAgPyB0b2tlbiA6IFwiXCI7XG59XG5cbmNvbnN0IFRSVVNURURfR0lUSFVCX0JPVF9BQ1RPUlMgPSBuZXcgU2V0KFtcImdpdGh1Yi1hY3Rpb25zW2JvdF1cIl0pO1xuXG5mdW5jdGlvbiBpc1RydXN0ZWRHaXRIdWJCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0JvdEFjdG9yKGFjdG9yKSAmJiBUUlVTVEVEX0dJVEhVQl9CT1RfQUNUT1JTLmhhcyhub3JtYWxpemVCb3RBY3RvcihhY3RvcikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFsbG93ZWRCb3RBY3RvcnMoYWxsb3dCb3RVc2Vyczogc3RyaW5nKTogU2V0PHN0cmluZz4gfCBFcnJvciB7XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBhbGxvd0JvdFVzZXJzLnNwbGl0KFwiLFwiKSkge1xuICAgIGNvbnN0IGJvdCA9IGVudHJ5LnRyaW0oKTtcbiAgICBpZiAoYm90Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChib3QuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiYWxsb3ctYm90LXVzZXJzIGRvZXMgbm90IHN1cHBvcnQgJyonOyBsaXN0IHRydXN0ZWQgYm90IHVzZXJuYW1lcyBleHBsaWNpdGx5LlwiKTtcbiAgICB9XG4gICAgYWxsb3dlZC5hZGQobm9ybWFsaXplQm90QWN0b3IoYm90KSk7XG4gIH1cbiAgcmV0dXJuIGFsbG93ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQm90QWN0b3IoYWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYWN0b3IudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcIltib3RdXCIpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGFjdG9yLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBpc0JvdEFjdG9yKG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IGAke25vcm1hbGl6ZWR9W2JvdF1gO1xufVxuXG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDA0LFxuICApO1xufVxuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLXJlcXVlc3QuanNcbmFzeW5jIGZ1bmN0aW9uIGVycm9yUmVxdWVzdChzdGF0ZSwgb2N0b2tpdCwgZXJyb3IsIG9wdGlvbnMpIHtcbiAgaWYgKCFlcnJvci5yZXF1ZXN0IHx8ICFlcnJvci5yZXF1ZXN0LnJlcXVlc3QpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiAhc3RhdGUuZG9Ob3RSZXRyeS5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XG4gICAgY29uc3QgcmV0cmllcyA9IG9wdGlvbnMucmVxdWVzdC5yZXRyaWVzICE9IG51bGwgPyBvcHRpb25zLnJlcXVlc3QucmV0cmllcyA6IHN0YXRlLnJldHJpZXM7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IE1hdGgucG93KChvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCB8fCAwKSArIDEsIDIpO1xuICAgIHRocm93IG9jdG9raXQucmV0cnkucmV0cnlSZXF1ZXN0KGVycm9yLCByZXRyaWVzLCByZXRyeUFmdGVyKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dyYXAtcmVxdWVzdC5qc1xuaW1wb3J0IEJvdHRsZW5lY2sgZnJvbSBcImJvdHRsZW5lY2svbGlnaHQuanNcIjtcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiB3cmFwUmVxdWVzdChzdGF0ZSwgb2N0b2tpdCwgcmVxdWVzdCwgb3B0aW9ucykge1xuICBjb25zdCBsaW1pdGVyID0gbmV3IEJvdHRsZW5lY2soKTtcbiAgbGltaXRlci5vbihcImZhaWxlZFwiLCBmdW5jdGlvbihlcnJvciwgaW5mbykge1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyaWVzO1xuICAgIGNvbnN0IGFmdGVyID0gfn5lcnJvci5yZXF1ZXN0LnJlcXVlc3QucmV0cnlBZnRlcjtcbiAgICBvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCA9IGluZm8ucmV0cnlDb3VudCArIDE7XG4gICAgaWYgKG1heFJldHJpZXMgPiBpbmZvLnJldHJ5Q291bnQpIHtcbiAgICAgIHJldHVybiBhZnRlciAqIHN0YXRlLnJldHJ5QWZ0ZXJCYXNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxpbWl0ZXIuc2NoZWR1bGUoXG4gICAgcmVxdWVzdFdpdGhHcmFwaHFsRXJyb3JIYW5kbGluZy5iaW5kKG51bGwsIHN0YXRlLCBvY3Rva2l0LCByZXF1ZXN0KSxcbiAgICBvcHRpb25zXG4gICk7XG59XG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0V2l0aEdyYXBocWxFcnJvckhhbmRsaW5nKHN0YXRlLCBvY3Rva2l0LCByZXF1ZXN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdChyZXF1ZXN0LCBvcHRpb25zKTtcbiAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5lcnJvcnMgJiYgcmVzcG9uc2UuZGF0YS5lcnJvcnMubGVuZ3RoID4gMCAmJiAvU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgZXhlY3V0aW5nIHlvdXIgcXVlcnkvLnRlc3QoXG4gICAgcmVzcG9uc2UuZGF0YS5lcnJvcnNbMF0ubWVzc2FnZVxuICApKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlLmRhdGEuZXJyb3JzWzBdLm1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogb3B0aW9ucyxcbiAgICAgIHJlc3BvbnNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9yUmVxdWVzdChzdGF0ZSwgb2N0b2tpdCwgZXJyb3IsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiByZXRyeShvY3Rva2l0LCBvY3Rva2l0T3B0aW9ucykge1xuICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHJldHJ5QWZ0ZXJCYXNlVmFsdWU6IDFlMyxcbiAgICAgIGRvTm90UmV0cnk6IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQxMCwgNDIyLCA0NTFdLFxuICAgICAgcmV0cmllczogM1xuICAgIH0sXG4gICAgb2N0b2tpdE9wdGlvbnMucmV0cnlcbiAgKTtcbiAgaWYgKHN0YXRlLmVuYWJsZWQpIHtcbiAgICBvY3Rva2l0Lmhvb2suZXJyb3IoXCJyZXF1ZXN0XCIsIGVycm9yUmVxdWVzdC5iaW5kKG51bGwsIHN0YXRlLCBvY3Rva2l0KSk7XG4gICAgb2N0b2tpdC5ob29rLndyYXAoXCJyZXF1ZXN0XCIsIHdyYXBSZXF1ZXN0LmJpbmQobnVsbCwgc3RhdGUsIG9jdG9raXQpKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJldHJ5OiB7XG4gICAgICByZXRyeVJlcXVlc3Q6IChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcikgPT4ge1xuICAgICAgICBlcnJvci5yZXF1ZXN0LnJlcXVlc3QgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvci5yZXF1ZXN0LnJlcXVlc3QsIHtcbiAgICAgICAgICByZXRyaWVzLFxuICAgICAgICAgIHJldHJ5QWZ0ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5yZXRyeS5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydCB7XG4gIFZFUlNJT04sXG4gIHJldHJ5XG59O1xuIiwgImNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTtcbiAgLyoqXG4gICAqIGh0dHAgc3RhdHVzIGNvZGVcbiAgICovXG4gIHN0YXR1cztcbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IGxlYWQgdG8gdGhlIGVycm9yLlxuICAgKi9cbiAgcmVxdWVzdDtcbiAgLyoqXG4gICAqIFJlc3BvbnNlIG9iamVjdCBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gTnVtYmVyLnBhcnNlSW50KHN0YXR1c0NvZGUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odGhpcy5zdGF0dXMpKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IDA7XG4gICAgfVxuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZShcbiAgICAgICAgICAvKD88ISApIC4qJC8sXG4gICAgICAgICAgXCIgW1JFREFDVEVEXVwiXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0Q29weS51cmwgPSByZXF1ZXN0Q29weS51cmwucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIFJlcXVlc3RFcnJvclxufTtcbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gXCJvYmplY3RcIiAmJiBcInVzZXJBZ2VudFwiIGluIG5hdmlnYXRvcikge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGBOb2RlLmpzLyR7cHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigxKX0gKCR7cHJvY2Vzcy5wbGF0Zm9ybX07ICR7XG4gICAgICBwcm9jZXNzLmFyY2hcbiAgICB9KWA7XG4gIH1cblxuICByZXR1cm4gXCI8ZW52aXJvbm1lbnQgdW5kZXRlY3RhYmxlPlwiO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoc3RhdGUsIG5hbWUsIG1ldGhvZCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGZvciBiZWZvcmUgaG9vayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgIHJldHVybiBuYW1lLnJldmVyc2UoKS5yZWR1Y2UoKGNhbGxiYWNrLCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSwgbmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgICByZXR1cm4gbWV0aG9kKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5yZWR1Y2UoKG1ldGhvZCwgcmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQuaG9vay5iaW5kKG51bGwsIG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9KTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvb2soc3RhdGUsIGtpbmQsIG5hbWUsIGhvb2spIHtcbiAgY29uc3Qgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKChyZXN1bHRfKSA9PiB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUhvb2soc3RhdGUsIG5hbWUsIG1ldGhvZCkge1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBzdGF0ZS5yZWdpc3RyeVtuYW1lXVxuICAgIC5tYXAoKHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLm9yaWc7XG4gICAgfSlcbiAgICAuaW5kZXhPZihtZXRob2QpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL2xpYi9yZWdpc3Rlci5qc1wiO1xuaW1wb3J0IHsgYWRkSG9vayB9IGZyb20gXCIuL2xpYi9hZGQuanNcIjtcbmltcG9ydCB7IHJlbW92ZUhvb2sgfSBmcm9tIFwiLi9saWIvcmVtb3ZlLmpzXCI7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xuY29uc3QgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG5jb25zdCBiaW5kYWJsZSA9IGJpbmQuYmluZChiaW5kKTtcblxuZnVuY3Rpb24gYmluZEFwaShob29rLCBzdGF0ZSwgbmFtZSkge1xuICBjb25zdCByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goKGtpbmQpID0+IHtcbiAgICBjb25zdCBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gU2luZ3VsYXIoKSB7XG4gIGNvbnN0IHNpbmd1bGFySG9va05hbWUgPSBTeW1ib2woXCJTaW5ndWxhclwiKTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICBjb25zdCBzaW5ndWxhckhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgYmluZEFwaShzaW5ndWxhckhvb2ssIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgcmV0dXJuIHNpbmd1bGFySG9vaztcbn1cblxuZnVuY3Rpb24gQ29sbGVjdGlvbigpIHtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIGNvbnN0IGhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlKTtcbiAgYmluZEFwaShob29rLCBzdGF0ZSk7XG5cbiAgcmV0dXJuIGhvb2s7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2luZ3VsYXIsIENvbGxlY3Rpb24gfTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIHVzZXJBZ2VudCA9IGBvY3Rva2l0LWVuZHBvaW50LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gO1xudmFyIERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2xvd2VyY2FzZS1rZXlzLmpzXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5yZWR1Y2UoKG5ld09iaiwga2V5KSA9PiB7XG4gICAgbmV3T2JqW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBuZXdPYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9tZXJnZS1kZWVwLmpzXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKSBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgICAgZWxzZSByZXN1bHRba2V5XSA9IG1lcmdlRGVlcChkZWZhdWx0c1trZXldLCBvcHRpb25zW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3JlbW92ZS11bmRlZmluZWQtcHJvcGVydGllcy5qc1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL21lcmdlLmpzXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHsgbWV0aG9kLCB1cmwgfSA6IHsgdXJsOiBtZXRob2QgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJvdXRlKTtcbiAgfVxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLnVybCA9PT0gXCIvZ3JhcGhxbFwiKSB7XG4gICAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIoXG4gICAgICAgIChwcmV2aWV3KSA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldylcbiAgICAgICkuY29uY2F0KG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKTtcbiAgICB9XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSAobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgfHwgW10pLm1hcCgocHJldmlldykgPT4gcHJldmlldy5yZXBsYWNlKC8tcHJldmlldy8sIFwiXCIpKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvYWRkLXF1ZXJ5LXBhcmFtZXRlcnMuanNcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gL1xcPy8udGVzdCh1cmwpID8gXCImXCIgOiBcIj9cIjtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKTtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcCgobmFtZSkgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvZXh0cmFjdC11cmwtdmFyaWFibGUtbmFtZXMuanNcbnZhciB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tee319XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoLyg/Ol5cXFcrKXwoPzooPzwhXFxXKVxcVyskKS9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuZnVuY3Rpb24gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSB1cmwubWF0Y2godXJsVmFyaWFibGVSZWdleCk7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvb21pdC5qc1xuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgY29uc3QgcmVzdWx0ID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgIGlmIChrZXlzVG9PbWl0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3VybC10ZW1wbGF0ZS5qc1xuZnVuY3Rpb24gZW5jb2RlUmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyglWzAtOUEtRmEtZl17Mn0pL2cpLm1hcChmdW5jdGlvbihwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnQ7XG4gIH0pLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2b2lkIDAgJiYgdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sIHJlc3VsdCA9IFtdO1xuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIGlmIChtb2RpZmllciAmJiBtb2RpZmllciAhPT0gXCIqXCIpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcGFyc2VJbnQobW9kaWZpZXIsIDEwKSk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMiwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCI7XCIpIHtcbiAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIiAmJiAob3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXN1bHQucHVzaChcIlwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4cGFuZCh0ZW1wbGF0ZSwgY29udGV4dCkge1xuICB2YXIgb3BlcmF0b3JzID0gW1wiK1wiLCBcIiNcIiwgXCIuXCIsIFwiL1wiLCBcIjtcIiwgXCI/XCIsIFwiJlwiXTtcbiAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKFxuICAgIC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csXG4gICAgZnVuY3Rpb24oXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgICAgbGV0IG9wZXJhdG9yID0gXCJcIjtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7XG4gICAgICAgICAgdmFyIHRtcCA9IC8oW146XFwqXSopKD86OihcXGQrKXwoXFwqKSk/Ly5leGVjKHZhcmlhYmxlKTtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBcIixcIjtcbiAgICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVSZXNlcnZlZChsaXRlcmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGlmICh0ZW1wbGF0ZSA9PT0gXCIvXCIpIHtcbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFyc2UuanNcbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gIGxldCB1cmwgPSAob3B0aW9ucy51cmwgfHwgXCIvXCIpLnJlcGxhY2UoLzooW2Etel1cXHcrKS9nLCBcInskMX1cIik7XG4gIGxldCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgbGV0IGJvZHk7XG4gIGxldCBwYXJhbWV0ZXJzID0gb21pdChvcHRpb25zLCBbXG4gICAgXCJtZXRob2RcIixcbiAgICBcImJhc2VVcmxcIixcbiAgICBcInVybFwiLFxuICAgIFwiaGVhZGVyc1wiLFxuICAgIFwicmVxdWVzdFwiLFxuICAgIFwibWVkaWFUeXBlXCJcbiAgXSk7XG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuICBjb25zdCBvbWl0dGVkUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcigob3B0aW9uKSA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG4gIGlmICghaXNCaW5hcnlSZXF1ZXN0KSB7XG4gICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCkge1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChcbiAgICAgICAgKGZvcm1hdCkgPT4gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgL2FwcGxpY2F0aW9uXFwvdm5kKFxcLlxcdyspKFxcLnYzKT8oXFwuXFx3Kyk/KFxcK2pzb24pPyQvLFxuICAgICAgICAgIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWBcbiAgICAgICAgKVxuICAgICAgKS5qb2luKFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHVybC5lbmRzV2l0aChcIi9ncmFwaHFsXCIpKSB7XG4gICAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvKD88IVtcXHctXSlbXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuZXhwb3J0IHtcbiAgZW5kcG9pbnRcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyBlbmRwb2ludCB9IGZyb20gXCJAb2N0b2tpdC9lbmRwb2ludFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjkuMi40XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIGRlZmF1bHRzX2RlZmF1bHQgPSB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtcmVxdWVzdC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSBcImZhc3QtY29udGVudC10eXBlLXBhcnNlXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdC1lcnJvclwiO1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hXcmFwcGVyKHJlcXVlc3RPcHRpb25zKSB7XG4gIGNvbnN0IGZldGNoID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8uZmV0Y2ggfHwgZ2xvYmFsVGhpcy5mZXRjaDtcbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgY29uc3QgbG9nID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ubG9nIHx8IGNvbnNvbGU7XG4gIGNvbnN0IHBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSAhPT0gZmFsc2U7XG4gIGNvbnN0IGJvZHkgPSBpc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkgPyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA6IHJlcXVlc3RPcHRpb25zLmJvZHk7XG4gIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgbmFtZSxcbiAgICAgIFN0cmluZyh2YWx1ZSlcbiAgICBdKVxuICApO1xuICBsZXQgZmV0Y2hSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBmZXRjaFJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdE9wdGlvbnMudXJsLCB7XG4gICAgICBtZXRob2Q6IHJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICAgIGJvZHksXG4gICAgICByZWRpcmVjdDogcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucmVkaXJlY3QsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIHNpZ25hbDogcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8uc2lnbmFsLFxuICAgICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0aW5pdC1kdXBsZXguXG4gICAgICAuLi5yZXF1ZXN0T3B0aW9ucy5ib2R5ICYmIHsgZHVwbGV4OiBcImhhbGZcIiB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBcIlVua25vd24gRXJyb3JcIjtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSB7XG4gICAgICAgIGVycm9yLnN0YXR1cyA9IDUwMDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIlR5cGVFcnJvclwiICYmIFwiY2F1c2VcIiBpbiBlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvci5jYXVzZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0RXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgICByZXF1ZXN0RXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICB0aHJvdyByZXF1ZXN0RXJyb3I7XG4gIH1cbiAgY29uc3Qgc3RhdHVzID0gZmV0Y2hSZXNwb25zZS5zdGF0dXM7XG4gIGNvbnN0IHVybCA9IGZldGNoUmVzcG9uc2UudXJsO1xuICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZmV0Y2hSZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgcmVzcG9uc2VIZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgfVxuICBjb25zdCBvY3Rva2l0UmVzcG9uc2UgPSB7XG4gICAgdXJsLFxuICAgIHN0YXR1cyxcbiAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgZGF0YTogXCJcIlxuICB9O1xuICBpZiAoXCJkZXByZWNhdGlvblwiIGluIHJlc3BvbnNlSGVhZGVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZXNwb25zZUhlYWRlcnMubGluayAmJiByZXNwb25zZUhlYWRlcnMubGluay5tYXRjaCgvPChbXjw+XSspPjsgcmVsPVwiZGVwcmVjYXRpb25cIi8pO1xuICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICBsb2cud2FybihcbiAgICAgIGBbQG9jdG9raXQvcmVxdWVzdF0gXCIke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtyZXF1ZXN0T3B0aW9ucy51cmx9XCIgaXMgZGVwcmVjYXRlZC4gSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgb24gJHtyZXNwb25zZUhlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICApO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gIH1cbiAgaWYgKHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICBpZiAoc3RhdHVzIDwgNDAwKSB7XG4gICAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKGZldGNoUmVzcG9uc2Uuc3RhdHVzVGV4dCwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICBvY3Rva2l0UmVzcG9uc2UuZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShmZXRjaFJlc3BvbnNlKTtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKFwiTm90IG1vZGlmaWVkXCIsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICBvY3Rva2l0UmVzcG9uc2UuZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShmZXRjaFJlc3BvbnNlKTtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHRvRXJyb3JNZXNzYWdlKG9jdG9raXRSZXNwb25zZS5kYXRhKSwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBvY3Rva2l0UmVzcG9uc2UuZGF0YSA9IHBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSA/IGF3YWl0IGdldFJlc3BvbnNlRGF0YShmZXRjaFJlc3BvbnNlKSA6IGZldGNoUmVzcG9uc2UuYm9keTtcbiAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSkge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICBpZiAoIWNvbnRlbnRUeXBlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfVxuICBjb25zdCBtaW1ldHlwZSA9IHNhZmVQYXJzZShjb250ZW50VHlwZSk7XG4gIGlmIChpc0pTT05SZXNwb25zZShtaW1ldHlwZSkpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfSBlbHNlIGlmIChtaW1ldHlwZS50eXBlLnN0YXJ0c1dpdGgoXCJ0ZXh0L1wiKSB8fCBtaW1ldHlwZS5wYXJhbWV0ZXJzLmNoYXJzZXQ/LnRvTG93ZXJDYXNlKCkgPT09IFwidXRmLThcIikge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkuY2F0Y2goKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNKU09OUmVzcG9uc2UobWltZXR5cGUpIHtcbiAgcmV0dXJuIG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiIHx8IG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI7XG59XG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJVbmtub3duIGVycm9yXCI7XG4gIH1cbiAgaWYgKFwibWVzc2FnZVwiIGluIGRhdGEpIHtcbiAgICBjb25zdCBzdWZmaXggPSBcImRvY3VtZW50YXRpb25fdXJsXCIgaW4gZGF0YSA/IGAgLSAke2RhdGEuZG9jdW1lbnRhdGlvbl91cmx9YCA6IFwiXCI7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YS5lcnJvcnMpID8gYCR7ZGF0YS5tZXNzYWdlfTogJHtkYXRhLmVycm9ycy5tYXAoKHYpID0+IEpTT04uc3RyaW5naWZ5KHYpKS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YCA6IGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludCwgZGVmYXVsdHNfZGVmYXVsdCk7XG5leHBvcnQge1xuICByZXF1ZXN0XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0MiB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3IuanNcbmZ1bmN0aW9uIF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhkYXRhKSB7XG4gIHJldHVybiBgUmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZvbGxvd2luZyByZXNwb25zZSBlcnJvcnM6XG5gICsgZGF0YS5lcnJvcnMubWFwKChlKSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cbnZhciBHcmFwaHFsUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0MiwgaGVhZGVycywgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMocmVzcG9uc2UpKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0MjtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG4gIG5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7XG4gIGVycm9ycztcbiAgZGF0YTtcbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIixcbiAgXCJvcGVyYXRpb25OYW1lXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKHJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbmV4cG9ydCB7XG4gIEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsMiBhcyBncmFwaHFsLFxuICB3aXRoQ3VzdG9tUmVxdWVzdFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaXMtand0LmpzXG52YXIgYjY0dXJsID0gXCIoPzpbYS16QS1aMC05Xy1dKylcIjtcbnZhciBzZXAgPSBcIlxcXFwuXCI7XG52YXIgand0UkUgPSBuZXcgUmVnRXhwKGBeJHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JGApO1xudmFyIGlzSldUID0gand0UkUudGVzdC5iaW5kKGp3dFJFKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2F1dGguanNcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSBpc0pXVCh0b2tlbik7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gdG9rZW4uc3RhcnRzV2l0aChcInYxLlwiKSB8fCB0b2tlbi5zdGFydHNXaXRoKFwiZ2hzX1wiKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwiZ2h1X1wiKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuLFxuICAgIHRva2VuVHlwZVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1hdXRob3JpemF0aW9uLXByZWZpeC5qc1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cbiAgcmV0dXJuIGB0b2tlbiAke3Rva2VufWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9ob29rLmpzXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2UoXG4gICAgcm91dGUsXG4gICAgcGFyYW1ldGVyc1xuICApO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoMih0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCJcbiAgICApO1xuICB9XG4gIHRva2VuID0gdG9rZW4ucmVwbGFjZSgvXih0b2tlbnxiZWFyZXIpICsvaSwgXCJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGF1dGguYmluZChudWxsLCB0b2tlbiksIHtcbiAgICBob29rOiBob29rLmJpbmQobnVsbCwgdG9rZW4pXG4gIH0pO1xufTtcbmV4cG9ydCB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI2LjEuNlwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihsb2dnZXIgPSB7fSkge1xuICBpZiAodHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmRlYnVnID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIud2FybiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLndhcm4gPSBjb25zb2xlV2FybjtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmVycm9yID0gY29uc29sZUVycm9yO1xuICB9XG4gIHJldHVybiBsb2dnZXI7XG59XG5jb25zdCB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG5jbGFzcyBPY3Rva2l0IHtcbiAgc3RhdGljIFZFUlNJT04gPSBWRVJTSU9OO1xuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyBwbHVnaW5zID0gW107XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBzdGF0aWMgcGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgbmV3UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpXG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBIb29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiByZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IHdpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgLy8gYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdG9yXG4gIHJlcXVlc3Q7XG4gIGdyYXBocWw7XG4gIGxvZztcbiAgaG9vaztcbiAgLy8gVE9ETzogdHlwZSBgb2N0b2tpdC5hdXRoYCBiYXNlZCBvbiBwYXNzZWQgb3B0aW9ucy5hdXRoU3RyYXRlZ3lcbiAgYXV0aDtcbn1cbmV4cG9ydCB7XG4gIE9jdG9raXRcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXNwb25zZS5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXTtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7cmVzcG9uc2Uuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSBlcnJvci5yZXNwb25zZT8uaGVhZGVyc1tcIngtZ2l0aHViLXJlcXVlc3QtaWRcIl0gfHwgXCJVTktOT1dOXCI7XG4gICAgICBvY3Rva2l0LmxvZy5lcnJvcihcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtlcnJvci5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICByZXF1ZXN0TG9nXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePD5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9yb3V0ZS1zdGF0cy97YWN0b3JfdHlwZX0ve2FjdG9yX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvc3ViamVjdC1zdGF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvdXNlci1zdGF0cy97dXNlcl9pZH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQsXG4gIHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50c1xufTtcbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMTMuNS4wXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBFbmRwb2ludHNEZWZhdWx0c0FuZERlY29yYXRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5jb25zdCBFbmRwb2ludHM6IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZFJlcG9BY2Nlc3NUb1NlbGZIb3N0ZWRSdW5uZXJHcm91cEluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FwcHJvdmVcIixcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1ZhcmlhYmxlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNhYmxlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9lbmFibGVcIixcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL2dlbmVyYXRlLWppdGNvbmZpZ1wiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1VzYWdlUmVwb3J0T3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCIsXG4gICAgXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICAgIHVzYWdlTWV0cmljc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC91c2FnZVwiXSxcbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl0sXG4gIH0sXG4gIGhvc3RlZENvbXB1dGU6IHtcbiAgICBjcmVhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZU5ldHdvcmtDb25maWd1cmF0aW9uRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtTZXR0aW5nc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1zZXR0aW5ncy97bmV0d29ya19zZXR0aW5nc19pZH1cIixcbiAgICBdLFxuICAgIGxpc3ROZXR3b3JrQ29uZmlndXJhdGlvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIGFkZExhYmVsczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBhZGRTdWJJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxpc3RTdWJJc3N1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVMYWJlbDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdWJJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVcIixcbiAgICBdLFxuICAgIHJlcHJpb3JpdGl6ZVN1Yklzc3VlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlcy9wcmlvcml0eVwiLFxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdLFxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfSxcbiAgICBdLFxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl0sXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjYWRkLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUlzc3VlVHlwZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3M6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS97c2VjdXJpdHlfcHJvZHVjdH0ve2VuYWJsZW1lbnR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3MoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL29yZ3MjZW5hYmxlLW9yLWRpc2FibGUtYS1zZWN1cml0eS1mZWF0dXJlLWZvci1hbi1vcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIl0sXG4gICAgbGlzdEN1c3RvbVByb3BlcnRpZXNWYWx1ZXNGb3JSZXBvczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MucmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjcmVtb3ZlLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIixcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgcmV2b2tlT3JnUm9sZVVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZUlzc3VlVHlwZTogW1wiUFVUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICB1cGRhdGVNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByZW5hbWVkOiBbXG4gICAgICAgICAgXCJwYWNrYWdlc1wiLFxuICAgICAgICAgIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICB9LFxuICBwcml2YXRlUmVnaXN0cmllczoge1xuICAgIGNyZWF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgZGVsZXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0T3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3B1YmxpYy1rZXlcIl0sXG4gICAgbGlzdE9yZ1ByaXZhdGVSZWdpc3RyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIHVwZGF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuYWRkQ29sbGFib3JhdG9yKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNhZGQtcHJvamVjdC1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNjcmVhdGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjY3JlYXRlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hLXVzZXItcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYW4tb3JnYW5pemF0aW9uLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtcmVwb3NpdG9yeS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGUoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNkZWxldGUtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ2FyZDogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZGVsZXRlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZGVsZXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNkZWxldGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjZ2V0LWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENhcmQ6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2dldC1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENvbHVtbjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmdldENvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjZ2V0LWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0UGVybWlzc2lvbkZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2dldC1wcm9qZWN0LXBlcm1pc3Npb24tZm9yLWEtdXNlclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDYXJkczogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDYXJkcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2xpc3QtcHJvamVjdC1jYXJkc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2xsYWJvcmF0b3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNsaXN0LXByb2plY3QtY29sbGFib3JhdG9yc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2x1bW5zOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2x1bW5zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNsaXN0LXByb2plY3QtY29sdW1uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1vcmdhbml6YXRpb24tcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yUmVwbygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtcmVwb3NpdG9yeS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdEZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LXVzZXItcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ2FyZDogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfS9tb3Zlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubW92ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNtb3ZlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbW92ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNtb3ZlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5yZW1vdmVDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI3JlbW92ZS11c2VyLWFzLWEtY29sbGFib3JhdG9yXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI3VwZGF0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDYXJkOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI3VwZGF0ZS1hbi1leGlzdGluZy1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZpbGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGRlbGV0ZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvUnVsZXNldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXSB9LFxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCIsXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGVuYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCIsXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICBdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgIF0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXG4gICAgICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Quc2VhcmNoLmlzc3Vlc0FuZFB1bGxSZXF1ZXN0cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3NlYXJjaC9zZWFyY2gjc2VhcmNoLWlzc3Vlcy1hbmQtcHVsbC1yZXF1ZXN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdLFxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGNyZWF0ZVB1c2hQcm90ZWN0aW9uQnlwYXNzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9wdXNoLXByb3RlY3Rpb24tYnlwYXNzZXNcIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0U2Nhbkhpc3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3NjYW4taGlzdG9yeVwiXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RMb2NhdGlvbnNGb3JBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5hZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0xlZ2FjeTogW1xuICAgICAgXCJQVVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNjaGVjay10ZWFtLXBlcm1pc3Npb25zLWZvci1hLXByb2plY3QtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclJlcG9Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2xpc3QtdGVhbS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0xlZ2FjeTogW1xuICAgICAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMubGlzdFByb2plY3RzTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzLWxlZ2FjeVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLnJlbW92ZVByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkRFTEVURSAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW0tbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiLFxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5SWQ6IFtcIkdFVCAvdXNlci97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0U3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW5kcG9pbnRzO1xuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50T3B0aW9ucywgUmVxdWVzdFBhcmFtZXRlcnMsIFJvdXRlIH0gZnJvbSBcIkBvY3Rva2l0L3R5cGVzXCI7XG5pbXBvcnQgRU5EUE9JTlRTIGZyb20gXCIuL2dlbmVyYXRlZC9lbmRwb2ludHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9tZXRob2QtdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnREZWNvcmF0aW9ucyB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgcmVmYWN0b3JlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy5qcy9wdWxsLzYyMlxuLy8gdG8gb3B0aW1pc2UgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugb2YgT2N0b2tpdCBpbml0aWFsaXphdGlvbi5cbi8vXG4vLyBUaGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28ga2V5IGNoYW5nZXM6XG4vLyAxLiBQcmUtQ29tcHV0YXRpb246IFRoZSBlbmRwb2ludCBtZXRob2RzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhdCBtb2R1bGUgbG9hZFxuLy8gICAgdGltZSBpbnN0ZWFkIG9mIGVhY2ggaW52b2NhdGlvbiBvZiBgZW5kcG9pbnRzVG9NZXRob2RzKClgLlxuLy8gMi4gTGF6eSBpbml0aWFsaXphdGlvbiBhbmQgY2FjaGluZzogV2UgdXNlIGEgUHJveHkgZm9yIGVhY2ggc2NvcGUgdG8gb25seVxuLy8gICAgaW5pdGlhbGl6ZSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyByZWR1Y2VzIHJ1bnRpbWUgb3ZlcmhlYWRcbi8vICAgIGFzIHRoZSBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBkZWVwIG1lcmdpbmcgb2Ygb2JqZWN0cy4gVGhlIGluaXRpYWxpemVkXG4vLyAgICBtZXRob2RzIGFyZSB0aGVuIGNhY2hlZCBmb3IgZnV0dXJlIHVzZS5cblxuY29uc3QgZW5kcG9pbnRNZXRob2RzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0cyxcbiAgICApO1xuXG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbnR5cGUgUHJveHlUYXJnZXQgPSB7XG4gIG9jdG9raXQ6IE9jdG9raXQ7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IGFueT47XG59O1xuXG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSwgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0OiBQcm94eVRhcmdldCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZSk7XG4gIH0sXG4gIGdldCh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNhY2hlW21ldGhvZE5hbWVdKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcblxuICAgIGlmIChkZWNvcmF0aW9ucykge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBkZWNvcmF0ZShcbiAgICAgICAgb2N0b2tpdCxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICAgIGRlY29yYXRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogUmVzdEVuZHBvaW50TWV0aG9kcyB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9O1xuXG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdNZXRob2RzIGFzIFJlc3RFbmRwb2ludE1ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKFxuICBvY3Rva2l0OiBPY3Rva2l0LFxuICBzY29wZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRzOiBFbmRwb2ludE9wdGlvbnMsXG4gIGRlY29yYXRpb25zOiBFbmRwb2ludERlY29yYXRpb25zLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RXaXRoRGVmYXVsdHMgPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZGVmYXVsdHMpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyhcbiAgICAuLi5hcmdzOiBbUm91dGUsIFJlcXVlc3RQYXJhbWV0ZXJzP10gfCBbRW5kcG9pbnRPcHRpb25zXVxuICApIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGRlY29yYXRpb25zIHRoYW4gYC5tYXBUb0RhdGFgXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMsXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9uc1thbGlhc10gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZFR5cGVzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3BhcmFtZXRlcnMtYW5kLXJlc3BvbnNlLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGkgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRzVG9NZXRob2RzIH0gZnJvbSBcIi4vZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcIjtcblxuLy8gRXhwb3J0IHRoZSB0eXBlIGZvciBkb3duc3RyZWFtIHVzZXJzIGluIG9yZGVyIHRvIGZpeCBhIFR5cGVTY3JpcHQgZXJyb3Jcbi8vIFRoZSBpbmZlcnJlZCB0eXBlIG9mICdPY3Rva2l0JyBjYW5ub3QgYmUgbmFtZWQgd2l0aG91dCBhIHJlZmVyZW5jZSB0byAnLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC10eXBlcy90eXBlcy5qcycuIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LlxuZXhwb3J0IHR5cGUgeyBBcGkgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpW1wicmVzdFwiXSAmIEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbiIsICJjb25zdCBWRVJTSU9OID0gXCIyMS4xLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJleHBvcnQgeyBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgfTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSwgZW52LCBmaWxlKSB7XG4gICAgLy8gKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopIE1hdGNoZXMgbmVzdGVkIHF1b3RlcyB1bnRpbCB0aGUgZmlyc3Qgc3BhY2Ugb3V0c2lkZSBvZiBxdW90ZXNcbiAgICAvLyBbXlxccydcIl0rIG9yIE1hdGNoIGlmIG5vdCBhIHNwYWNlICcgb3IgXCJcbiAgICAvLyAoWydcIl0pKFteXFw1XSo/KVxcNSBvciBNYXRjaCBcInF1b3RlZCB0ZXh0XCIgd2l0aG91dCBxdW90ZXNcbiAgICAvLyBgXFwzYCBhbmQgYFxcNWAgYXJlIGEgYmFja3JlZmVyZW5jZSB0byB0aGUgcXVvdGUgc3R5bGUgKCcgb3IgXCIpIGNhcHR1cmVkXG4gICAgdmFyIG15UmVnZXhwID0gLyhbXlxccydcIl0oW15cXHMnXCJdKihbJ1wiXSkoW15cXDNdKj8pXFwzKStbXlxccydcIl0qKXxbXlxccydcIl0rfChbJ1wiXSkoW15cXDVdKj8pXFw1L2dpO1xuICAgIHZhciBteVN0cmluZyA9IHZhbHVlO1xuICAgIHZhciBteUFycmF5ID0gW107XG4gICAgaWYgKGVudikge1xuICAgICAgICBteUFycmF5LnB1c2goZW52KTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgbXlBcnJheS5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICB2YXIgbWF0Y2g7XG4gICAgZG8ge1xuICAgICAgICAvLyBFYWNoIGNhbGwgdG8gZXhlYyByZXR1cm5zIHRoZSBuZXh0IHJlZ2V4IG1hdGNoIGFzIGFuIGFycmF5XG4gICAgICAgIG1hdGNoID0gbXlSZWdleHAuZXhlYyhteVN0cmluZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSW5kZXggMSBpbiB0aGUgYXJyYXkgaXMgdGhlIGNhcHR1cmVkIGdyb3VwIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgLy8gSW5kZXggMCBpcyB0aGUgbWF0Y2hlZCB0ZXh0LCB3aGljaCB3ZSB1c2UgaWYgbm8gY2FwdHVyZWQgZ3JvdXAgZXhpc3RzXG4gICAgICAgICAgICBteUFycmF5LnB1c2goZmlyc3RTdHJpbmcobWF0Y2hbMV0sIG1hdGNoWzZdLCBtYXRjaFswXSkpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAobWF0Y2ggIT09IG51bGwpO1xuICAgIHJldHVybiBteUFycmF5O1xufVxuLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgc3RyaW5nXG4vLyAoZXZlbiBhbiBlbXB0eSBzdHJpbmcpXG5mdW5jdGlvbiBmaXJzdFN0cmluZygpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgU2FmZXR5U3RyYXRlZ3kgfSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuY29uc3QgTU9ERUxfUFJPVklERVIgPSBcImNvZGV4LWFjdGlvbi1yZXNwb25zZXMtcHJveHlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHJveHlDb25maWcoXG4gIGNvZGV4SG9tZTogc3RyaW5nLFxuICBwb3J0OiBudW1iZXIsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oY29kZXhIb21lLCBcImNvbmZpZy50b21sXCIpO1xuXG4gIGxldCBleGlzdGluZyA9IFwiXCI7XG4gIHRyeSB7XG4gICAgZXhpc3RpbmcgPSBhd2FpdCBmcy5yZWFkRmlsZShjb25maWdQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIGV4aXN0aW5nID0gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IGAjIEFkZGVkIGJ5IGNvZGV4LWFjdGlvbi5cbm1vZGVsX3Byb3ZpZGVyID0gXCIke01PREVMX1BST1ZJREVSfVwiXG5cblxuYDtcbiAgY29uc3QgdGFibGUgPSBgXG5cbiMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxuW21vZGVsX3Byb3ZpZGVycy4ke01PREVMX1BST1ZJREVSfV1cbm5hbWUgPSBcIkNvZGV4IEFjdGlvbiBSZXNwb25zZXMgUHJveHlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS92MVwiXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmA7XG5cbiAgLy8gUHJlcGVuZCBtb2RlbF9wcm92aWRlciBhdCB0aGUgdmVyeSB0b3AuXG4gIGxldCBvdXRwdXQgPSBgJHtoZWFkZXJ9JHtleGlzdGluZ30ke3RhYmxlfWA7XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICAvLyBXZSBrbm93IHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBDT0RFWF9IT01FIGRpcmVjdG9yeSwgYnV0IGl0IGlzIG93bmVkXG4gICAgLy8gYnkgYW5vdGhlciB1c2VyLCBzbyB3ZSBuZWVkIHRvIHVzZSBzdWRvIHRvIHdyaXRlIHRoZSBmaWxlLlxuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjb2RleC1jb25maWdcIikpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wQ29uZmlnUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcImNvbmZpZy50b21sXCIpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDb25maWdQYXRoLCBvdXRwdXQsIFwidXRmOFwiKTtcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJtdlwiLCB0ZW1wQ29uZmlnUGF0aCwgY29uZmlnUGF0aF0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNvbmZpZ1BhdGgsIG91dHB1dCwgXCJ1dGY4XCIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDRFQUFBQSxVQUFBO0FBR0EsUUFBTUMsa0JBQU4sY0FBNkIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BT2pDLFlBQVksVUFBVSxNQUFNLFNBQVM7QUFDbkMsY0FBTSxPQUFPO0FBRWIsY0FBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFDOUMsYUFBSyxPQUFPLEtBQUssWUFBWTtBQUM3QixhQUFLLE9BQU87QUFDWixhQUFLLFdBQVc7QUFDaEIsYUFBSyxjQUFjO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBS0EsUUFBTUMsd0JBQU4sY0FBbUNELGdCQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoRCxZQUFZLFNBQVM7QUFDbkIsY0FBTSxHQUFHLDZCQUE2QixPQUFPO0FBRTdDLGNBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQzlDLGFBQUssT0FBTyxLQUFLLFlBQVk7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFFQSxJQUFBRCxTQUFRLGlCQUFpQkM7QUFDekIsSUFBQUQsU0FBUSx1QkFBdUJFO0FBQUE7QUFBQTs7O0FDdEMvQjtBQUFBLCtFQUFBQyxVQUFBO0FBQUEsUUFBTSxFQUFFLHNCQUFBQyxzQkFBcUIsSUFBSTtBQUVqQyxRQUFNQyxZQUFOLE1BQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFVYixZQUFZLE1BQU0sYUFBYTtBQUM3QixhQUFLLGNBQWMsZUFBZTtBQUNsQyxh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O0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxN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O0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLElBQy9DO0FBRUEsYUFBUyxVQUFXO0FBQ2xCLFdBQUssU0FBUztBQUFBLElBQ2hCO0FBQ0EsWUFBUSxVQUFVLFFBQVEsU0FBVSxLQUFLO0FBRXZDLFlBQU0sSUFBSSxRQUFRLFNBQVMsR0FBRztBQUM5QixVQUFJLE1BQU07QUFDVixVQUFJLElBQUk7QUFBRyxVQUFJLElBQUk7QUFBRyxZQUFNLE1BQU0s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QSxTQUFBQSxTQUFBLFNBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxDQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFdBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLEtBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFlBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFdBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLGFBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLFlBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLEtBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE1BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLGVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLGVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFVBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxTQUFBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxTQUFBQSxTQUFBLE9BQUEsSUFBQSxFQUFBLElBQUE7SUFDRixHQTFEWSxVQUFBSixTQUFBLFlBQUFBLFNBQUEsVUFBTyxDQUFBLEVBQUE7QUE0RE4sSUFBQUEsU0FBQSxlQUFlO01BQzFCLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFB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QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxL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dmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQXJndW1lbnQiLCAiZXhwb3J0cyIsICJIZWxwIiwgImNtZCIsICJleHBvcnRzIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIk9wdGlvbiIsICJzdHIiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgInBhdGgiLCAiZnMiLCAicHJvY2VzcyIsICJBcmd1bWVudCIsICJDb21tYW5kZXJFcnJvciIsICJIZWxwIiwgIk9wdGlvbiIsICJDb21tYW5kIiwgImhvb2siLCAib3B0aW9uIiwgImV4cG9ydHMiLCAiQXJndW1lbnQiLCAiQ29tbWFuZCIsICJDb21tYW5kZXJFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJIZWxwIiwgIk9wdGlvbiIsICJleHBvcnRzIiwgIm9zIiwgIkNvbW1hbmQiLCAiZXhwb3J0cyIsICJmcyIsICJvcyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJzZWxmIiwgIm9wdGlvbnMiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAicGF0aCIsICJpZHgiLCAic3RyZWFtIiwgImVyciIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInN0cnVjdHVyZWRDbG9uZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGVyZm9ybWFuY2UiLCAicmVxdWVzdCIsICJpdGVyYXRvciIsICJraW5kIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImF0b2IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImVudHJ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJCbG9iIiwgImNodW5rIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBhdGgiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImVyciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInNlc3Npb24iLCAib25Db25uZWN0VGltZW91dCIsICJleHBvcnRzIiwgIkVSUk9SIiwgImV4cG9ydHMiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJlcnJvclJlcXVlc3QiLCAic29ja2V0IiwgInBhdGgiLCAiaGVhZGVycyIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJvcmlnaW4iLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJwb29sIiwgImRpc3BhdGNoZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiV2Vha1JlZiIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAibm9vcCIsICJzZWxmIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtb2NrRGlzcGF0Y2giLCAicGF0aCIsICJnZXRSZXNwb25zZURhdGEiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRSZXNwb25zZURhdGEiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlVSTCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJvcHRzIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXJyIiwgInJlcXVpcmVfZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInJlcXVpcmVfcmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgIndpbmRvdyIsICJhYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWVzdCIsICJnbG9iYWxUaGlzIiwgIml0ZXJhdG9yIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJIdHRwQ29kZXMiLCAiZXhwb3J0cyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJsb3dlcmNhc2VLZXlzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJ3cml0ZUZpbGUiLCAiZXhwb3J0cyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIl9hIiwgInBhdGgiLCAiZXhwb3J0cyIsICJvcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiRXhpdENvZGUiLCAiZXhwb3J0cyIsICJzZXRPdXRwdXQiLCAiaW5mbyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZSIsICJFdmVudHMiLCAiUHJvbWlzZSIsICJyZXRyeSIsICJHcm91cCIsICJCYXRjaGVyIiwgIkJvdHRsZW5lY2siLCAiYXJncyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJOdWxsT2JqZWN0IiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJjb21tYW5kZXIiLCAiZnMiLCAib3MiLCAicGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJvcyIsICJwcm9ncmFtIiwgInBhdGgiLCAicGF0aCIsICJmcyIsICJmc0NvbnN0YW50cyIsICJjb3JlIiwgInJlcXVlc3QiLCAiQm90dGxlbmVjayIsICJpbmZvIiwgIm5hbWUiLCAibWV0aG9kIiwgImhvb2siLCAiaG9vayIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiaXNQbGFpbk9iamVjdCIsICJ3aXRoRGVmYXVsdHMiLCAiVkVSU0lPTiIsICJ3aXRoRGVmYXVsdHMiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiaG9vayIsICJhdXRoIiwgIlZFUlNJT04iLCAicmVxdWVzdCIsICJwYXRoIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiZW5kcG9pbnQiLCAib3B0aW9ucyIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiT2N0b2tpdCIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAiZnMiLCAicGF0aCIsICJvcyIsICJwcm9ncmFtIiwgInNldE91dHB1dCIsICJzdGF0Il0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYm90dGxlbmVja0AyLjE5LjUvbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtY29udGVudC10eXBlLXBhcnNlQDIuMC4xL25vZGVfbW9kdWxlcy9mYXN0LWNvbnRlbnQtdHlwZS1wYXJzZS9pbmRleC5qcyIsICIuLi9zcmMvbWFpbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2VzbS5tanMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9yZWFkU2VydmVySW5mby50cyIsICIuLi9zcmMvcnVuQ29kZXhFeGVjLnRzIiwgIi4uL3NyYy9jaGVja091dHB1dC50cyIsICIuLi9zcmMvbGludXhDcmVkZW50aWFscy50cyIsICIuLi9zcmMvZHJvcFN1ZG8udHMiLCAiLi4vc3JjL2NoZWNrQWN0b3JQZXJtaXNzaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJldHJ5QDcuMi4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdC1lcnJvckA2LjEuOC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pdmVyc2FsLXVzZXItYWdlbnRANy4wLjMvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC11c2VyLWFnZW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlZ2lzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZW5kcG9pbnRAMTAuMS40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9lbmRwb2ludC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdEA5LjIuNC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZ3JhcGhxbEA4LjIuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrYXV0aC10b2tlbkA1LjEuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANS4zLjFfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1wYWdpbmF0ZS1yZXN0QDExLjYuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZy1hcmd2QDAuMy4yL25vZGVfbW9kdWxlcy9zdHJpbmctYXJndi9pbmRleC5qcyIsICIuLi9zcmMvd3JpdGVQcm94eUNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb21tYW5kZXJFcnJvciBjbGFzc1xuICovXG5jbGFzcyBDb21tYW5kZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIENvbW1hbmRlckVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSBzdWdnZXN0ZWQgZXhpdCBjb2RlIHdoaWNoIGNvdWxkIGJlIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuZXhpdENvZGUgPSBleGl0Q29kZTtcbiAgICB0aGlzLm5lc3RlZEVycm9yID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBDb21tYW5kZXJFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGV4cGxhbmF0aW9uIG9mIHdoeSBhcmd1bWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoMSwgJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLCBtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuIiwgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgQXJndW1lbnQge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBjb21tYW5kIGFyZ3VtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRlc2NyaXB0aW9uLlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgdGhpcy52YXJpYWRpYyA9IGZhbHNlO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKG5hbWVbMF0pIHtcbiAgICAgIGNhc2UgJzwnOiAvLyBlLmcuIDxyZXF1aXJlZD5cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdbJzogLy8gZS5nLiBbb3B0aW9uYWxdXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX25hbWUuZW5kc1dpdGgoJy4uLicpKSB7XG4gICAgICB0aGlzLnZhcmlhZGljID0gdHJ1ZTtcbiAgICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lLnNsaWNlKDAsIC0zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFyZ3VtZW50IG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfY29sbGVjdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcmV2aW91cy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gcHJldmlvdXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBjb21tYW5kIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgYXJndW1lbnQgdmFsdWUgdG8gYmUgb25lIG9mIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgcmVxdWlyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ1JlcXVpcmVkKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgb3B0aW9uYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ09wdGlvbmFsKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGl0cyBodW1hbiByZWFkYWJsZSBlcXVpdmFsZW50IGZvciBoZWxwIHVzYWdlLlxuICpcbiAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpIHtcbiAgY29uc3QgbmFtZU91dHB1dCA9IGFyZy5uYW1lKCkgKyAoYXJnLnZhcmlhZGljID09PSB0cnVlID8gJy4uLicgOiAnJyk7XG5cbiAgcmV0dXJuIGFyZy5yZXF1aXJlZCA/ICc8JyArIG5hbWVPdXRwdXQgKyAnPicgOiAnWycgKyBuYW1lT3V0cHV0ICsgJ10nO1xufVxuXG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLmh1bWFuUmVhZGFibGVBcmdOYW1lID0gaHVtYW5SZWFkYWJsZUFyZ05hbWU7XG4iLCAiY29uc3QgeyBodW1hblJlYWRhYmxlQXJnTmFtZSB9ID0gcmVxdWlyZSgnLi9hcmd1bWVudC5qcycpO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaW1wb3J0IHR5cGVzIGZvciBKU0RvYywgdXNlZCBieSBWaXN1YWwgU3R1ZGlvIENvZGUgSW50ZWxsaVNlbnNlIGFuZCBgbnBtIHJ1biB0eXBlc2NyaXB0LWNoZWNrSlNgXG4gKiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9qc2RvYy1zdXBwb3J0ZWQtdHlwZXMuaHRtbCNpbXBvcnQtdHlwZXNcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9hcmd1bWVudC5qc1wiKS5Bcmd1bWVudCB9IEFyZ3VtZW50XG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vY29tbWFuZC5qc1wiKS5Db21tYW5kIH0gQ29tbWFuZFxuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL29wdGlvbi5qc1wiKS5PcHRpb24gfSBPcHRpb25cbiAqL1xuXG4vLyBBbHRob3VnaCB0aGlzIGlzIGEgY2xhc3MsIG1ldGhvZHMgYXJlIHN0YXRpYyBpbiBzdHlsZSB0byBhbGxvdyBvdmVycmlkZSB1c2luZyBzdWJjbGFzcyBvciBqdXN0IGZ1bmN0aW9ucy5cbmNsYXNzIEhlbHAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1pbldpZHRoVG9XcmFwID0gNDA7XG4gICAgdGhpcy5zb3J0U3ViY29tbWFuZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnRPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5zaG93R2xvYmFsT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIHByZXBhcmVDb250ZXh0IGlzIGNhbGxlZCBieSBDb21tYW5kZXIgYWZ0ZXIgYXBwbHlpbmcgb3ZlcnJpZGVzIGZyb20gYENvbW1hbmQuY29uZmlndXJlSGVscCgpYFxuICAgKiBhbmQganVzdCBiZWZvcmUgY2FsbGluZyBgZm9ybWF0SGVscCgpYC5cbiAgICpcbiAgICogQ29tbWFuZGVyIGp1c3QgdXNlcyB0aGUgaGVscFdpZHRoIGFuZCB0aGUgcmVzdCBpcyBwcm92aWRlZCBmb3Igb3B0aW9uYWwgdXNlIGJ5IG1vcmUgY29tcGxleCBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I/OiBib29sZWFuLCBoZWxwV2lkdGg/OiBudW1iZXIsIG91dHB1dEhhc0NvbG9ycz86IGJvb2xlYW4gfX0gY29udGV4dE9wdGlvbnNcbiAgICovXG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oZWxwV2lkdGggPSB0aGlzLmhlbHBXaWR0aCA/PyBjb250ZXh0T3B0aW9ucy5oZWxwV2lkdGggPz8gODA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIHN1YmNvbW1hbmRzLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBjb21tYW5kLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtDb21tYW5kW119XG4gICAqL1xuXG4gIHZpc2libGVDb21tYW5kcyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlQ29tbWFuZHMgPSBjbWQuY29tbWFuZHMuZmlsdGVyKChjbWQpID0+ICFjbWQuX2hpZGRlbik7XG4gICAgY29uc3QgaGVscENvbW1hbmQgPSBjbWQuX2dldEhlbHBDb21tYW5kKCk7XG4gICAgaWYgKGhlbHBDb21tYW5kICYmICFoZWxwQ29tbWFuZC5faGlkZGVuKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMucHVzaChoZWxwQ29tbWFuZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRTdWJjb21tYW5kcykge1xuICAgICAgdmlzaWJsZUNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgICAgIHJldHVybiBhLm5hbWUoKS5sb2NhbGVDb21wYXJlKGIubmFtZSgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUNvbW1hbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgb3B0aW9ucyBmb3Igc29ydC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IGFcbiAgICogQHBhcmFtIHtPcHRpb259IGJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvbXBhcmVPcHRpb25zKGEsIGIpIHtcbiAgICBjb25zdCBnZXRTb3J0S2V5ID0gKG9wdGlvbikgPT4ge1xuICAgICAgLy8gV1lTSVdZRyBmb3Igb3JkZXIgZGlzcGxheWVkIGluIGhlbHAuIFNob3J0IHVzZWQgZm9yIGNvbXBhcmlzb24gaWYgcHJlc2VudC4gTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgbmVnYXRlZC5cbiAgICAgIHJldHVybiBvcHRpb24uc2hvcnRcbiAgICAgICAgPyBvcHRpb24uc2hvcnQucmVwbGFjZSgvXi0vLCAnJylcbiAgICAgICAgOiBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0U29ydEtleShhKS5sb2NhbGVDb21wYXJlKGdldFNvcnRLZXkoYikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBvcHRpb25zLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBvcHRpb24sIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlT3B0aW9ucyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGNtZC5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbik7XG4gICAgLy8gQnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgY29uc3QgaGVscE9wdGlvbiA9IGNtZC5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGlmIChoZWxwT3B0aW9uICYmICFoZWxwT3B0aW9uLmhpZGRlbikge1xuICAgICAgLy8gQXV0b21hdGljYWxseSBoaWRlIGNvbmZsaWN0aW5nIGZsYWdzLiBCaXQgZHViaW91cyBidXQgYSBoaXN0b3JpY2FsIGJlaGF2aW91ciB0aGF0IGlzIGNvbnZlbmllbnQgZm9yIHNpbmdsZS1jb21tYW5kIHByb2dyYW1zLlxuICAgICAgY29uc3QgcmVtb3ZlU2hvcnQgPSBoZWxwT3B0aW9uLnNob3J0ICYmIGNtZC5fZmluZE9wdGlvbihoZWxwT3B0aW9uLnNob3J0KTtcbiAgICAgIGNvbnN0IHJlbW92ZUxvbmcgPSBoZWxwT3B0aW9uLmxvbmcgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24ubG9uZyk7XG4gICAgICBpZiAoIXJlbW92ZVNob3J0ICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goaGVscE9wdGlvbik7IC8vIG5vIGNoYW5nZXMgbmVlZGVkXG4gICAgICB9IGVsc2UgaWYgKGhlbHBPcHRpb24ubG9uZyAmJiAhcmVtb3ZlTG9uZykge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5sb25nLCBoZWxwT3B0aW9uLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5zaG9ydCAmJiAhcmVtb3ZlU2hvcnQpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChcbiAgICAgICAgICBjbWQuY3JlYXRlT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgdmlzaWJsZU9wdGlvbnMuc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBnbG9iYWwgb3B0aW9ucy4gKE5vdCBpbmNsdWRpbmcgaGVscC4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtPcHRpb25bXX1cbiAgICovXG5cbiAgdmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKSB7XG4gICAgaWYgKCF0aGlzLnNob3dHbG9iYWxPcHRpb25zKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBnbG9iYWxPcHRpb25zID0gW107XG4gICAgZm9yIChcbiAgICAgIGxldCBhbmNlc3RvckNtZCA9IGNtZC5wYXJlbnQ7XG4gICAgICBhbmNlc3RvckNtZDtcbiAgICAgIGFuY2VzdG9yQ21kID0gYW5jZXN0b3JDbWQucGFyZW50XG4gICAgKSB7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGFuY2VzdG9yQ21kLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbixcbiAgICAgICk7XG4gICAgICBnbG9iYWxPcHRpb25zLnB1c2goLi4udmlzaWJsZU9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgZ2xvYmFsT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIGFyZ3VtZW50cyBpZiBhbnkgaGF2ZSBhIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7QXJndW1lbnRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUFyZ3VtZW50cyhjbWQpIHtcbiAgICAvLyBTaWRlIGVmZmVjdCEgQXBwbHkgdGhlIGxlZ2FjeSBkZXNjcmlwdGlvbnMgYmVmb3JlIHRoZSBhcmd1bWVudHMgYXJlIGRpc3BsYXllZC5cbiAgICBpZiAoY21kLl9hcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50KSA9PiB7XG4gICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uID1cbiAgICAgICAgICBhcmd1bWVudC5kZXNjcmlwdGlvbiB8fCBjbWQuX2FyZ3NEZXNjcmlwdGlvblthcmd1bWVudC5uYW1lKCldIHx8ICcnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBhcmd1bWVudHMgd2l0aCBhIGRlc2NyaXB0aW9uIHRoZW4gcmV0dXJuIGFsbCB0aGUgYXJndW1lbnRzLlxuICAgIGlmIChjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cy5maW5kKChhcmd1bWVudCkgPT4gYXJndW1lbnQuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHM7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kVGVybShjbWQpIHtcbiAgICAvLyBMZWdhY3kuIElnbm9yZXMgY3VzdG9tIHVzYWdlIHN0cmluZywgYW5kIG5lc3RlZCBjb21tYW5kcy5cbiAgICBjb25zdCBhcmdzID0gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHNcbiAgICAgIC5tYXAoKGFyZykgPT4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIGNtZC5fbmFtZSArXG4gICAgICAoY21kLl9hbGlhc2VzWzBdID8gJ3wnICsgY21kLl9hbGlhc2VzWzBdIDogJycpICtcbiAgICAgIChjbWQub3B0aW9ucy5sZW5ndGggPyAnIFtvcHRpb25zXScgOiAnJykgKyAvLyBzaW1wbGlzdGljIGNoZWNrIGZvciBub24taGVscCBvcHRpb25cbiAgICAgIChhcmdzID8gJyAnICsgYXJncyA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uVGVybShvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmZsYWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnRUZXJtKGFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50Lm5hbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgY29tbWFuZCB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKS5yZWR1Y2UoKG1heCwgY29tbWFuZCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShjb21tYW5kKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGdsb2JhbCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGFyZ3VtZW50IHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkucmVkdWNlKChtYXgsIGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnRUZXJtKGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHVzYWdlIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kVXNhZ2UoY21kKSB7XG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgY21kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAoY21kLl9hbGlhc2VzWzBdKSB7XG4gICAgICBjbWROYW1lID0gY21kTmFtZSArICd8JyArIGNtZC5fYWxpYXNlc1swXTtcbiAgICB9XG4gICAgbGV0IGFuY2VzdG9yQ21kTmFtZXMgPSAnJztcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGFuY2VzdG9yQ21kTmFtZXMgPSBhbmNlc3RvckNtZC5uYW1lKCkgKyAnICcgKyBhbmNlc3RvckNtZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JDbWROYW1lcyArIGNtZE5hbWUgKyAnICcgKyBjbWQudXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN1YmNvbW1hbmQgc3VtbWFyeSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKiAoRmFsbGJhY2sgdG8gZGVzY3JpcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuc3VtbWFyeSgpIHx8IGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHtvcHRpb24uYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZGVmYXVsdCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXIsXG4gICAgICAvLyBidXQgc2hvdyB0cnVlL2ZhbHNlIGZvciBib29sZWFuIG9wdGlvbiBhcyBtYXkgYmUgZm9yIGhhbmQtcm9sbGVkIGVudiBvciBjb25maWcgcHJvY2Vzc2luZy5cbiAgICAgIGNvbnN0IHNob3dEZWZhdWx0ID1cbiAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgIG9wdGlvbi5vcHRpb25hbCB8fFxuICAgICAgICAob3B0aW9uLmlzQm9vbGVhbigpICYmIHR5cGVvZiBvcHRpb24uZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgaWYgKHNob3dEZWZhdWx0KSB7XG4gICAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAgIGBkZWZhdWx0OiAke29wdGlvbi5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShvcHRpb24uZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwcmVzZXQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgYXJlIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlclxuICAgIGlmIChvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgcHJlc2V0OiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbi5wcmVzZXRBcmcpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmVudlZhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgZW52OiAke29wdGlvbi5lbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChvcHRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbi5kZXNjcmlwdGlvbn0gJHtleHRyYURlc2NyaXB0aW9ufWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFEZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCkge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuICAgIGlmIChhcmd1bWVudC5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHthcmd1bWVudC5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICBgZGVmYXVsdDogJHthcmd1bWVudC5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShhcmd1bWVudC5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZXh0cmFJbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dHJhRGVzY3JpcHRpb24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAoYXJndW1lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke2FyZ3VtZW50LmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXJndW1lbnQuZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgbGlzdCBvZiBpdGVtcywgZ2l2ZW4gYSBoZWFkaW5nIGFuZCBhbiBhcnJheSBvZiBmb3JtYXR0ZWQgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGl0ZW1zXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHN0cmluZ1tdXG4gICAqL1xuICBmb3JtYXRJdGVtTGlzdChoZWFkaW5nLCBpdGVtcywgaGVscGVyKSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIFtoZWxwZXIuc3R5bGVUaXRsZShoZWFkaW5nKSwgLi4uaXRlbXMsICcnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cCBpdGVtcyBieSB0aGVpciBoZWxwIGdyb3VwIGhlYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZFtdIHwgT3B0aW9uW119IHVuc29ydGVkSXRlbXNcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdmlzaWJsZUl0ZW1zXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEdyb3VwXG4gICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBDb21tYW5kW10gfCBPcHRpb25bXT59XG4gICAqL1xuICBncm91cEl0ZW1zKHVuc29ydGVkSXRlbXMsIHZpc2libGVJdGVtcywgZ2V0R3JvdXApIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgLy8gQWRkIGdyb3VwcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHVuc29ydGVkSXRlbXMuXG4gICAgdW5zb3J0ZWRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgIH0pO1xuICAgIC8vIEFkZCBpdGVtcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHZpc2libGVJdGVtcy5cbiAgICB2aXNpYmxlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRHcm91cChpdGVtKTtcbiAgICAgIGlmICghcmVzdWx0Lmhhcyhncm91cCkpIHtcbiAgICAgICAgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmdldChncm91cCkucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBidWlsdC1pbiBoZWxwIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGZvcm1hdEhlbHAoY21kLCBoZWxwZXIpIHtcbiAgICBjb25zdCB0ZXJtV2lkdGggPSBoZWxwZXIucGFkV2lkdGgoY21kLCBoZWxwZXIpO1xuICAgIGNvbnN0IGhlbHBXaWR0aCA9IGhlbHBlci5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuXG4gICAgZnVuY3Rpb24gY2FsbEZvcm1hdEl0ZW0odGVybSwgZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBoZWxwZXIuZm9ybWF0SXRlbSh0ZXJtLCB0ZXJtV2lkdGgsIGRlc2NyaXB0aW9uLCBoZWxwZXIpO1xuICAgIH1cblxuICAgIC8vIFVzYWdlXG4gICAgbGV0IG91dHB1dCA9IFtcbiAgICAgIGAke2hlbHBlci5zdHlsZVRpdGxlKCdVc2FnZTonKX0gJHtoZWxwZXIuc3R5bGVVc2FnZShoZWxwZXIuY29tbWFuZFVzYWdlKGNtZCkpfWAsXG4gICAgICAnJyxcbiAgICBdO1xuXG4gICAgLy8gRGVzY3JpcHRpb25cbiAgICBjb25zdCBjb21tYW5kRGVzY3JpcHRpb24gPSBoZWxwZXIuY29tbWFuZERlc2NyaXB0aW9uKGNtZCk7XG4gICAgaWYgKGNvbW1hbmREZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFtcbiAgICAgICAgaGVscGVyLmJveFdyYXAoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKGNvbW1hbmREZXNjcmlwdGlvbiksXG4gICAgICAgICAgaGVscFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICAnJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIEFyZ3VtZW50c1xuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkubWFwKChhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKGhlbHBlci5hcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSksXG4gICAgICApO1xuICAgIH0pO1xuICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICB0aGlzLmZvcm1hdEl0ZW1MaXN0KCdBcmd1bWVudHM6JywgYXJndW1lbnRMaXN0LCBoZWxwZXIpLFxuICAgICk7XG5cbiAgICAvLyBPcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLm9wdGlvbnMsXG4gICAgICBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKSxcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5oZWxwR3JvdXBIZWFkaW5nID8/ICdPcHRpb25zOicsXG4gICAgKTtcbiAgICBvcHRpb25Hcm91cHMuZm9yRWFjaCgob3B0aW9ucywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBvcHRpb25MaXN0LCBoZWxwZXIpKTtcbiAgICB9KTtcblxuICAgIGlmIChoZWxwZXIuc2hvd0dsb2JhbE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGdsb2JhbE9wdGlvbkxpc3QgPSBoZWxwZXJcbiAgICAgICAgLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZClcbiAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSxcbiAgICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0dsb2JhbCBPcHRpb25zOicsIGdsb2JhbE9wdGlvbkxpc3QsIGhlbHBlciksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbW1hbmRzXG4gICAgY29uc3QgY29tbWFuZEdyb3VwcyA9IHRoaXMuZ3JvdXBJdGVtcyhcbiAgICAgIGNtZC5jb21tYW5kcyxcbiAgICAgIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKSxcbiAgICAgIChzdWIpID0+IHN1Yi5oZWxwR3JvdXAoKSB8fCAnQ29tbWFuZHM6JyxcbiAgICApO1xuICAgIGNvbW1hbmRHcm91cHMuZm9yRWFjaCgoY29tbWFuZHMsIGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBjb21tYW5kTGlzdCA9IGNvbW1hbmRzLm1hcCgoc3ViKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kVGVybShoZWxwZXIuc3ViY29tbWFuZFRlcm0oc3ViKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKGhlbHBlci5zdWJjb21tYW5kRGVzY3JpcHRpb24oc3ViKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQodGhpcy5mb3JtYXRJdGVtTGlzdChncm91cCwgY29tbWFuZExpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGlzcGxheSB3aWR0aCBvZiBzdHJpbmcsIGlnbm9yaW5nIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gVXNlZCBpbiBwYWRkaW5nIGFuZCB3cmFwcGluZyBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3BsYXlXaWR0aChzdHIpIHtcbiAgICByZXR1cm4gc3RyaXBDb2xvcihzdHIpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSB0aGUgdGl0bGUgZm9yIGRpc3BsYXlpbmcgaW4gdGhlIGhlbHAuIENhbGxlZCB3aXRoICdVc2FnZTonLCAnT3B0aW9uczonLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0eWxlVGl0bGUoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0eWxlVXNhZ2Uoc3RyKSB7XG4gICAgLy8gVXNhZ2UgaGFzIGxvdHMgb2YgcGFydHMgdGhlIHVzZXIgbWlnaHQgbGlrZSB0byBjb2xvciBzZXBhcmF0ZWx5ISBBc3N1bWUgZGVmYXVsdCB1c2FnZSBzdHJpbmcgd2hpY2ggaXMgZm9ybWVkIGxpa2U6XG4gICAgLy8gICAgY29tbWFuZCBzdWJjb21tYW5kIFtvcHRpb25zXSBbY29tbWFuZF0gPGZvbz4gW2Jhcl1cbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLm1hcCgod29yZCkgPT4ge1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tvcHRpb25zXScpIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbY29tbWFuZF0nKSByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVDb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25EZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZU9wdGlvblRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kVGVybShzdHIpIHtcbiAgICAvLyBUaGlzIGlzIHZlcnkgbGlrZSB1c2FnZSB3aXRoIGxvdHMgb2YgcGFydHMhIEFzc3VtZSBkZWZhdWx0IHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBzdWJjb21tYW5kIFtvcHRpb25zXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVTdWJjb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQXJndW1lbnRUZXJtKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25UZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVDb21tYW5kVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcGFkIHdpZHRoIGZyb20gdGhlIG1heGltdW0gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIHBhZFdpZHRoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgaGVscGVyLmxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBtYW51YWxseSB3cmFwcGVkIGFuZCBpbmRlbnRlZCBzdHJpbmdzIGJ5IGNoZWNraW5nIGZvciBsaW5lIGJyZWFrIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwcmVmb3JtYXR0ZWQoc3RyKSB7XG4gICAgcmV0dXJuIC9cXG5bXlxcU1xcclxcbl0vLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIFwiaXRlbVwiLCB3aGljaCBjb25zaXN0cyBvZiBhIHRlcm0gYW5kIGRlc2NyaXB0aW9uLiBQYWQgdGhlIHRlcm0gYW5kIHdyYXAgdGhlIGRlc2NyaXB0aW9uLCBpbmRlbnRpbmcgdGhlIGZvbGxvd2luZyBsaW5lcy5cbiAgICpcbiAgICogU28gXCJUVFRcIiwgNSwgXCJEREQgRERERCBERCBERERcIiBtaWdodCBiZSBmb3JtYXR0ZWQgZm9yIHRoaXMuaGVscFdpZHRoPTE3IGxpa2Ugc286XG4gICAqICAgVFRUICBEREQgRERERFxuICAgKiAgICAgICAgREQgREREXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0ZXJtV2lkdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcikge1xuICAgIGNvbnN0IGl0ZW1JbmRlbnQgPSAyO1xuICAgIGNvbnN0IGl0ZW1JbmRlbnRTdHIgPSAnICcucmVwZWF0KGl0ZW1JbmRlbnQpO1xuICAgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBpdGVtSW5kZW50U3RyICsgdGVybTtcblxuICAgIC8vIFBhZCB0aGUgdGVybSBvdXQgdG8gYSBjb25zaXN0ZW50IHdpZHRoLCBzbyBkZXNjcmlwdGlvbnMgYXJlIGFsaWduZWQuXG4gICAgY29uc3QgcGFkZGVkVGVybSA9IHRlcm0ucGFkRW5kKFxuICAgICAgdGVybVdpZHRoICsgdGVybS5sZW5ndGggLSBoZWxwZXIuZGlzcGxheVdpZHRoKHRlcm0pLFxuICAgICk7XG5cbiAgICAvLyBGb3JtYXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgIGNvbnN0IHNwYWNlcldpZHRoID0gMjsgLy8gYmV0d2VlbiB0ZXJtIGFuZCBkZXNjcmlwdGlvblxuICAgIGNvbnN0IGhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IDgwOyAvLyBpbiBjYXNlIHByZXBhcmVDb250ZXh0KCkgd2FzIG5vdCBjYWxsZWRcbiAgICBjb25zdCByZW1haW5pbmdXaWR0aCA9IGhlbHBXaWR0aCAtIHRlcm1XaWR0aCAtIHNwYWNlcldpZHRoIC0gaXRlbUluZGVudDtcbiAgICBsZXQgZm9ybWF0dGVkRGVzY3JpcHRpb247XG4gICAgaWYgKFxuICAgICAgcmVtYWluaW5nV2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwIHx8XG4gICAgICBoZWxwZXIucHJlZm9ybWF0dGVkKGRlc2NyaXB0aW9uKVxuICAgICkge1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd3JhcHBlZERlc2NyaXB0aW9uID0gaGVscGVyLmJveFdyYXAoZGVzY3JpcHRpb24sIHJlbWFpbmluZ1dpZHRoKTtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uID0gd3JhcHBlZERlc2NyaXB0aW9uLnJlcGxhY2UoXG4gICAgICAgIC9cXG4vZyxcbiAgICAgICAgJ1xcbicgKyAnICcucmVwZWF0KHRlcm1XaWR0aCArIHNwYWNlcldpZHRoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IGFuZCBvdmVyYWxsIGluZGVudC5cbiAgICByZXR1cm4gKFxuICAgICAgaXRlbUluZGVudFN0ciArXG4gICAgICBwYWRkZWRUZXJtICtcbiAgICAgICcgJy5yZXBlYXQoc3BhY2VyV2lkdGgpICtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBgXFxuJHtpdGVtSW5kZW50U3RyfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIGEgc3RyaW5nIGF0IHdoaXRlc3BhY2UsIHByZXNlcnZpbmcgZXhpc3RpbmcgbGluZSBicmVha3MuXG4gICAqIFdyYXBwaW5nIGlzIHNraXBwZWQgaWYgdGhlIHdpZHRoIGlzIGxlc3MgdGhhbiBgbWluV2lkdGhUb1dyYXBgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYm94V3JhcChzdHIsIHdpZHRoKSB7XG4gICAgaWYgKHdpZHRoIDwgdGhpcy5taW5XaWR0aFRvV3JhcCkgcmV0dXJuIHN0cjtcblxuICAgIGNvbnN0IHJhd0xpbmVzID0gc3RyLnNwbGl0KC9cXHJcXG58XFxuLyk7XG4gICAgLy8gc3BsaXQgdXAgdGV4dCBieSB3aGl0ZXNwYWNlXG4gICAgY29uc3QgY2h1bmtQYXR0ZXJuID0gL1tcXHNdKlteXFxzXSsvZztcbiAgICBjb25zdCB3cmFwcGVkTGluZXMgPSBbXTtcbiAgICByYXdMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBsaW5lLm1hdGNoKGNodW5rUGF0dGVybik7XG4gICAgICBpZiAoY2h1bmtzID09PSBudWxsKSB7XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3VtQ2h1bmtzID0gW2NodW5rcy5zaGlmdCgpXTtcbiAgICAgIGxldCBzdW1XaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKHN1bUNodW5rc1swXSk7XG4gICAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoY2h1bmspO1xuICAgICAgICAvLyBBY2N1bXVsYXRlIGNodW5rcyB3aGlsZSB0aGV5IGZpdCBpbnRvIHdpZHRoLlxuICAgICAgICBpZiAoc3VtV2lkdGggKyB2aXNpYmxlV2lkdGggPD0gd2lkdGgpIHtcbiAgICAgICAgICBzdW1DaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgc3VtV2lkdGggKz0gdmlzaWJsZVdpZHRoO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuXG4gICAgICAgIGNvbnN0IG5leHRDaHVuayA9IGNodW5rLnRyaW1TdGFydCgpOyAvLyB0cmltIHNwYWNlIGF0IGxpbmUgYnJlYWtcbiAgICAgICAgc3VtQ2h1bmtzID0gW25leHRDaHVua107XG4gICAgICAgIHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgobmV4dENodW5rKTtcbiAgICAgIH0pO1xuICAgICAgd3JhcHBlZExpbmVzLnB1c2goc3VtQ2h1bmtzLmpvaW4oJycpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3cmFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcCBzdHlsZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUgc3RyaW5nLiBJbiBwYXJ0aWN1bGFyLCBTR1IgKFNlbGVjdCBHcmFwaGljIFJlbmRpdGlvbikgY29kZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwYWNrYWdlXG4gKi9cblxuZnVuY3Rpb24gc3RyaXBDb2xvcihzdHIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgY29uc3Qgc2dyUGF0dGVybiA9IC9cXHgxYlxcW1xcZCooO1xcZCopKm0vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHNnclBhdHRlcm4sICcnKTtcbn1cblxuZXhwb3J0cy5IZWxwID0gSGVscDtcbmV4cG9ydHMuc3RyaXBDb2xvciA9IHN0cmlwQ29sb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBPcHRpb24ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgT3B0aW9uYCB3aXRoIHRoZSBnaXZlbiBgZmxhZ3NgIGFuZCBgZGVzY3JpcHRpb25gLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcblxuICAgIHRoaXMucmVxdWlyZWQgPSBmbGFncy5pbmNsdWRlcygnPCcpOyAvLyBBIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICB0aGlzLm9wdGlvbmFsID0gZmxhZ3MuaW5jbHVkZXMoJ1snKTsgLy8gQSB2YWx1ZSBpcyBvcHRpb25hbCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIC8vIHZhcmlhZGljIHRlc3QgaWdub3JlcyA8dmFsdWUsLi4uPiBldCBhbCB3aGljaCBtaWdodCBiZSB1c2VkIHRvIGRlc2NyaWJlIGN1c3RvbSBzcGxpdHRpbmcgb2Ygc2luZ2xlIGFyZ3VtZW50XG4gICAgdGhpcy52YXJpYWRpYyA9IC9cXHdcXC5cXC5cXC5bPlxcXV0kLy50ZXN0KGZsYWdzKTsgLy8gVGhlIG9wdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSB2YWx1ZXMuXG4gICAgdGhpcy5tYW5kYXRvcnkgPSBmYWxzZTsgLy8gVGhlIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0IG11c3QgYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS5cbiAgICBjb25zdCBvcHRpb25GbGFncyA9IHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpO1xuICAgIHRoaXMuc2hvcnQgPSBvcHRpb25GbGFncy5zaG9ydEZsYWc7IC8vIE1heSBiZSBhIHNob3J0IGZsYWcsIHVuZGVmaW5lZCwgb3IgZXZlbiBhIGxvbmcgZmxhZyAoaWYgb3B0aW9uIGhhcyB0d28gbG9uZyBmbGFncykuXG4gICAgdGhpcy5sb25nID0gb3B0aW9uRmxhZ3MubG9uZ0ZsYWc7XG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sb25nKSB7XG4gICAgICB0aGlzLm5lZ2F0ZSA9IHRoaXMubG9uZy5zdGFydHNXaXRoKCctLW5vLScpO1xuICAgIH1cbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJlc2V0QXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZW52VmFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25mbGljdHNXaXRoID0gW107XG4gICAgdGhpcy5pbXBsaWVkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIG9wdGlvbiBhZGRlZCB0byBjb21tYW5kXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGRlZmF1bHQodmFsdWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUHJlc2V0IHRvIHVzZSB3aGVuIG9wdGlvbiB1c2VkIHdpdGhvdXQgb3B0aW9uLWFyZ3VtZW50LCBlc3BlY2lhbGx5IG9wdGlvbmFsIGJ1dCBhbHNvIGJvb2xlYW4gYW5kIG5lZ2F0ZWQuXG4gICAqIFRoZSBjdXN0b20gcHJvY2Vzc2luZyAocGFyc2VBcmcpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1jb2xvcicpLmRlZmF1bHQoJ0dSRVlTQ0FMRScpLnByZXNldCgnUkdCJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tZG9uYXRlIFthbW91bnRdJykucHJlc2V0KCcyMCcpLmFyZ1BhcnNlcihwYXJzZUZsb2F0KTtcbiAgICpcbiAgICogQHBhcmFtIHsqfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBwcmVzZXQoYXJnKSB7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSBhcmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9wdGlvbiBuYW1lKHMpIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGlzIG9wdGlvbi5cbiAgICogQW4gZXJyb3Igd2lsbCBiZSBkaXNwbGF5ZWQgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgZm91bmQgZHVyaW5nIHBhcnNpbmcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBPcHRpb24oJy0tcmdiJykuY29uZmxpY3RzKCdjbXlrJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tanMnKS5jb25mbGljdHMoWyd0cycsICdqc3gnXSk7XG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbmFtZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjb25mbGljdHMobmFtZXMpIHtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSB0aGlzLmNvbmZsaWN0c1dpdGguY29uY2F0KG5hbWVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGltcGxpZWQgb3B0aW9uIHZhbHVlcyBmb3Igd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgYW5kIHRoZSBpbXBsaWVkIG9wdGlvbnMgYXJlIG5vdC5cbiAgICpcbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgbm90IGNhbGxlZCBvbiB0aGUgaW1wbGllZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9nJywgJ3dyaXRlIGxvZ2dpbmcgaW5mb3JtYXRpb24gdG8gZmlsZScpKVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cmFjZScsICdsb2cgZXh0cmEgZGV0YWlscycpLmltcGxpZXMoeyBsb2c6ICd0cmFjZS50eHQnIH0pKTtcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGltcGxpZWRPcHRpb25WYWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaW1wbGllcyhpbXBsaWVkT3B0aW9uVmFsdWVzKSB7XG4gICAgbGV0IG5ld0ltcGxpZWQgPSBpbXBsaWVkT3B0aW9uVmFsdWVzO1xuICAgIGlmICh0eXBlb2YgaW1wbGllZE9wdGlvblZhbHVlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHN0cmluZyBpcyBub3QgZG9jdW1lbnRlZCwgYnV0IGVhc3kgbWlzdGFrZSBhbmQgd2UgY2FuIGRvIHdoYXQgdXNlciBwcm9iYWJseSBpbnRlbmRlZC5cbiAgICAgIG5ld0ltcGxpZWQgPSB7IFtpbXBsaWVkT3B0aW9uVmFsdWVzXTogdHJ1ZSB9O1xuICAgIH1cbiAgICB0aGlzLmltcGxpZWQgPSBPYmplY3QuYXNzaWduKHRoaXMuaW1wbGllZCB8fCB7fSwgbmV3SW1wbGllZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNoZWNrIGZvciBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBpZiB3aGVuIHByb2Nlc3NlZCB0aGUgY3VycmVudCBvcHRpb24gdmFsdWUgaXNcbiAgICogdW5kZWZpbmVkLCBvciB0aGUgc291cmNlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGlzICdkZWZhdWx0JyBvciAnY29uZmlnJyBvciAnZW52Jy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBlbnYobmFtZSkge1xuICAgIHRoaXMuZW52VmFyID0gbmFtZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBvcHRpb24gYXJndW1lbnRzIGludG8gb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGFyZ1BhcnNlcihmbikge1xuICAgIHRoaXMucGFyc2VBcmcgPSBmbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgbWFuZGF0b3J5IGFuZCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYW5kYXRvcnk9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBtYWtlT3B0aW9uTWFuZGF0b3J5KG1hbmRhdG9yeSA9IHRydWUpIHtcbiAgICB0aGlzLm1hbmRhdG9yeSA9ICEhbWFuZGF0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgb3B0aW9uIGluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGU9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBoaWRlSGVscChoaWRlID0gdHJ1ZSkge1xuICAgIHRoaXMuaGlkZGVuID0gISFoaWRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IG9wdGlvbiB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvbmcucmVwbGFjZSgvXi0tLywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gb3B0aW9uIG5hbWUsIGluIGEgY2FtZWxjYXNlIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkXG4gICAqIGFzIGFuIG9iamVjdCBhdHRyaWJ1dGUga2V5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKHRoaXMubmVnYXRlKSB7XG4gICAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpLnJlcGxhY2UoL15uby0vLCAnJykpO1xuICAgIH1cbiAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaGVscEdyb3VwKGhlYWRpbmcpIHtcbiAgICB0aGlzLmhlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGBhcmdgIG1hdGNoZXMgdGhlIHNob3J0IG9yIGxvbmcgZmxhZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBpcyhhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5zaG9ydCA9PT0gYXJnIHx8IHRoaXMubG9uZyA9PT0gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGEgYm9vbGVhbiBvcHRpb24uXG4gICAqXG4gICAqIE9wdGlvbnMgYXJlIG9uZSBvZiBib29sZWFuLCBuZWdhdGVkLCByZXF1aXJlZCBhcmd1bWVudCwgb3Igb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzQm9vbGVhbigpIHtcbiAgICByZXR1cm4gIXRoaXMucmVxdWlyZWQgJiYgIXRoaXMub3B0aW9uYWwgJiYgIXRoaXMubmVnYXRlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0byBtYWtlIGl0IGVhc2llciB0byB3b3JrIHdpdGggZHVhbCBvcHRpb25zLCB3aXRob3V0IGNoYW5naW5nIHRoZSBleGlzdGluZ1xuICogaW1wbGVtZW50YXRpb24uIFdlIHN1cHBvcnQgc2VwYXJhdGUgZHVhbCBvcHRpb25zIGZvciBzZXBhcmF0ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgb3B0aW9ucyxcbiAqIGxpa2UgYC0tYnVpbGRgIGFuZCBgLS1uby1idWlsZGAsIHdoaWNoIHNoYXJlIGEgc2luZ2xlIG9wdGlvbiB2YWx1ZS4gVGhpcyB3b3JrcyBuaWNlbHkgZm9yIHNvbWVcbiAqIHVzZSBjYXNlcywgYnV0IGlzIHRyaWNreSBmb3Igb3RoZXJzIHdoZXJlIHdlIHdhbnQgc2VwYXJhdGUgYmVoYXZpb3VycyBkZXNwaXRlXG4gKiB0aGUgc2luZ2xlIHNoYXJlZCBvcHRpb24gdmFsdWUuXG4gKi9cbmNsYXNzIER1YWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9uW119IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBvc2l0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmR1YWxPcHRpb25zID0gbmV3IFNldCgpO1xuICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5zZXQob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSwgb3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzLnBvc2l0aXZlT3B0aW9ucy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLmR1YWxPcHRpb25zLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpZCB0aGUgdmFsdWUgY29tZSBmcm9tIHRoZSBvcHRpb24sIGFuZCBub3QgZnJvbSBwb3NzaWJsZSBtYXRjaGluZyBkdWFsIG9wdGlvbj9cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdmFsdWVGcm9tT3B0aW9uKHZhbHVlLCBvcHRpb24pIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIGlmICghdGhpcy5kdWFsT3B0aW9ucy5oYXMob3B0aW9uS2V5KSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBVc2UgdGhlIHZhbHVlIHRvIGRlZHVjZSBpZiAocHJvYmFibHkpIGNhbWUgZnJvbSB0aGUgb3B0aW9uLlxuICAgIGNvbnN0IHByZXNldCA9IHRoaXMubmVnYXRpdmVPcHRpb25zLmdldChvcHRpb25LZXkpLnByZXNldEFyZztcbiAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gcHJlc2V0ICE9PSB1bmRlZmluZWQgPyBwcmVzZXQgOiBmYWxzZTtcbiAgICByZXR1cm4gb3B0aW9uLm5lZ2F0ZSA9PT0gKG5lZ2F0aXZlVmFsdWUgPT09IHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIGZyb20ga2ViYWItY2FzZSB0byBjYW1lbENhc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJy0nKS5yZWR1Y2UoKHN0ciwgd29yZCkgPT4ge1xuICAgIHJldHVybiBzdHIgKyB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgc2hvcnQgYW5kIGxvbmcgZmxhZyBvdXQgb2Ygc29tZXRoaW5nIGxpa2UgJy1tLC0tbWl4ZWQgPHZhbHVlPidcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpIHtcbiAgbGV0IHNob3J0RmxhZztcbiAgbGV0IGxvbmdGbGFnO1xuICAvLyBzaG9ydCBmbGFnLCBzaW5nbGUgZGFzaCBhbmQgc2luZ2xlIGNoYXJhY3RlclxuICBjb25zdCBzaG9ydEZsYWdFeHAgPSAvXi1bXi1dJC87XG4gIC8vIGxvbmcgZmxhZywgZG91YmxlIGRhc2ggYW5kIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcbiAgY29uc3QgbG9uZ0ZsYWdFeHAgPSAvXi0tW14tXS87XG5cbiAgY29uc3QgZmxhZ1BhcnRzID0gZmxhZ3Muc3BsaXQoL1sgfCxdKy8pLmNvbmNhdCgnZ3VhcmQnKTtcbiAgLy8gTm9ybWFsIGlzIHNob3J0IGFuZC9vciBsb25nLlxuICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIGlmIChsb25nRmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIExvbmcgdGhlbiBzaG9ydC4gUmFyZWx5IHVzZWQgYnV0IGZpbmUuXG4gIGlmICghc2hvcnRGbGFnICYmIHNob3J0RmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpXG4gICAgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIEFsbG93IHR3byBsb25nIGZsYWdzLCBsaWtlICctLXdzLCAtLXdvcmtzcGFjZSdcbiAgLy8gVGhpcyBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBoYXZlIGEgc2hvcnRpc2ggb3B0aW9uIGZsYWcuXG4gIGlmICghc2hvcnRGbGFnICYmIGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkge1xuICAgIHNob3J0RmxhZyA9IGxvbmdGbGFnO1xuICAgIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5wcm9jZXNzZWQgZmxhZy4gRmFpbCBub2lzaWx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZS5cbiAgaWYgKGZsYWdQYXJ0c1swXS5zdGFydHNXaXRoKCctJykpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZEZsYWcgPSBmbGFnUGFydHNbMF07XG4gICAgY29uc3QgYmFzZUVycm9yID0gYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvICcke3Vuc3VwcG9ydGVkRmxhZ30nIGluIG9wdGlvbiBmbGFncyAnJHtmbGFnc30nYDtcbiAgICBpZiAoL14tW14tXVteLV0vLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7YmFzZUVycm9yfVxuLSBhIHNob3J0IGZsYWcgaXMgYSBzaW5nbGUgZGFzaCBhbmQgYSBzaW5nbGUgY2hhcmFjdGVyXG4gIC0gZWl0aGVyIHVzZSBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBhIHNob3J0IGZsYWcpXG4gIC0gb3IgdXNlIGEgZG91YmxlIGRhc2ggZm9yIGEgbG9uZyBvcHRpb24gKGFuZCBjYW4gaGF2ZSB0d28sIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJylgLFxuICAgICAgKTtcbiAgICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IHNob3J0IGZsYWdzYCk7XG4gICAgaWYgKGxvbmdGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IGxvbmcgZmxhZ3NgKTtcblxuICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHVucmVjb2duaXNlZCBmbGFnIGZvcm1hdGApO1xuICB9XG4gIGlmIChzaG9ydEZsYWcgPT09IHVuZGVmaW5lZCAmJiBsb25nRmxhZyA9PT0gdW5kZWZpbmVkKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBvcHRpb24gY3JlYXRpb24gZmFpbGVkIGR1ZSB0byBubyBmbGFncyBmb3VuZCBpbiAnJHtmbGFnc30nLmAsXG4gICAgKTtcblxuICByZXR1cm4geyBzaG9ydEZsYWcsIGxvbmdGbGFnIH07XG59XG5cbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5EdWFsT3B0aW9ucyA9IER1YWxPcHRpb25zO1xuIiwgImNvbnN0IG1heERpc3RhbmNlID0gMztcblxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGEsIGIpIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGFtZXJhdVx1MjAxM0xldmVuc2h0ZWluX2Rpc3RhbmNlXG4gIC8vIENhbGN1bGF0aW5nIG9wdGltYWwgc3RyaW5nIGFsaWdubWVudCBkaXN0YW5jZSwgbm8gc3Vic3RyaW5nIGlzIGVkaXRlZCBtb3JlIHRoYW4gb25jZS5cbiAgLy8gKFNpbXBsZSBpbXBsZW1lbnRhdGlvbi4pXG5cbiAgLy8gUXVpY2sgZWFybHkgZXhpdCwgcmV0dXJuIHdvcnN0IGNhc2UuXG4gIGlmIChNYXRoLmFicyhhLmxlbmd0aCAtIGIubGVuZ3RoKSA+IG1heERpc3RhbmNlKVxuICAgIHJldHVybiBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG4gIC8vIGRpc3RhbmNlIGJldHdlZW4gcHJlZml4IHN1YnN0cmluZ3Mgb2YgYSBhbmQgYlxuICBjb25zdCBkID0gW107XG5cbiAgLy8gcHVyZSBkZWxldGlvbnMgdHVybiBhIGludG8gZW1wdHkgc3RyaW5nXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICBkW2ldID0gW2ldO1xuICB9XG4gIC8vIHB1cmUgaW5zZXJ0aW9ucyB0dXJuIGVtcHR5IHN0cmluZyBpbnRvIGJcbiAgZm9yIChsZXQgaiA9IDA7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGRbMF1bal0gPSBqO1xuICB9XG5cbiAgLy8gZmlsbCBtYXRyaXhcbiAgZm9yIChsZXQgaiA9IDE7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb3N0ID0gMTtcbiAgICAgIGlmIChhW2kgLSAxXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgICAgY29zdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3N0ID0gMTtcbiAgICAgIH1cbiAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgZFtpIC0gMV1bal0gKyAxLCAvLyBkZWxldGlvblxuICAgICAgICBkW2ldW2ogLSAxXSArIDEsIC8vIGluc2VydGlvblxuICAgICAgICBkW2kgLSAxXVtqIC0gMV0gKyBjb3N0LCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBkW2ldW2pdID0gTWF0aC5taW4oZFtpXVtqXSwgZFtpIC0gMl1baiAtIDJdICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRbYS5sZW5ndGhdW2IubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBGaW5kIGNsb3NlIG1hdGNoZXMsIHJlc3RyaWN0ZWQgdG8gc2FtZSBudW1iZXIgb2YgZWRpdHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gc3VnZ2VzdFNpbWlsYXIod29yZCwgY2FuZGlkYXRlcykge1xuICBpZiAoIWNhbmRpZGF0ZXMgfHwgY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgLy8gcmVtb3ZlIHBvc3NpYmxlIGR1cGxpY2F0ZXNcbiAgY2FuZGlkYXRlcyA9IEFycmF5LmZyb20obmV3IFNldChjYW5kaWRhdGVzKSk7XG5cbiAgY29uc3Qgc2VhcmNoaW5nT3B0aW9ucyA9IHdvcmQuc3RhcnRzV2l0aCgnLS0nKTtcbiAgaWYgKHNlYXJjaGluZ09wdGlvbnMpIHtcbiAgICB3b3JkID0gd29yZC5zbGljZSgyKTtcbiAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnNsaWNlKDIpKTtcbiAgfVxuXG4gIGxldCBzaW1pbGFyID0gW107XG4gIGxldCBiZXN0RGlzdGFuY2UgPSBtYXhEaXN0YW5jZTtcbiAgY29uc3QgbWluU2ltaWxhcml0eSA9IDAuNDtcbiAgY2FuZGlkYXRlcy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoY2FuZGlkYXRlLmxlbmd0aCA8PSAxKSByZXR1cm47IC8vIG5vIG9uZSBjaGFyYWN0ZXIgZ3Vlc3Nlc1xuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBlZGl0RGlzdGFuY2Uod29yZCwgY2FuZGlkYXRlKTtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCh3b3JkLmxlbmd0aCwgY2FuZGlkYXRlLmxlbmd0aCk7XG4gICAgY29uc3Qgc2ltaWxhcml0eSA9IChsZW5ndGggLSBkaXN0YW5jZSkgLyBsZW5ndGg7XG4gICAgaWYgKHNpbWlsYXJpdHkgPiBtaW5TaW1pbGFyaXR5KSB7XG4gICAgICBpZiAoZGlzdGFuY2UgPCBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgLy8gYmV0dGVyIGVkaXQgZGlzdGFuY2UsIHRocm93IGF3YXkgcHJldmlvdXMgd29yc2UgbWF0Y2hlc1xuICAgICAgICBiZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgc2ltaWxhciA9IFtjYW5kaWRhdGVdO1xuICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA9PT0gYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIHNpbWlsYXIucHVzaChjYW5kaWRhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgc2ltaWxhci5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHNpbWlsYXIgPSBzaW1pbGFyLm1hcCgoY2FuZGlkYXRlKSA9PiBgLS0ke2NhbmRpZGF0ZX1gKTtcbiAgfVxuXG4gIGlmIChzaW1pbGFyLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gb25lIG9mICR7c2ltaWxhci5qb2luKCcsICcpfT8pYDtcbiAgfVxuICBpZiAoc2ltaWxhci5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gJHtzaW1pbGFyWzBdfT8pYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydHMuc3VnZ2VzdFNpbWlsYXIgPSBzdWdnZXN0U2ltaWxhcjtcbiIsICJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ25vZGU6cGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdub2RlOmZzJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpwcm9jZXNzJyk7XG5cbmNvbnN0IHsgQXJndW1lbnQsIGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAsIHN0cmlwQ29sb3IgfSA9IHJlcXVpcmUoJy4vaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24sIER1YWxPcHRpb25zIH0gPSByZXF1aXJlKCcuL29wdGlvbi5qcycpO1xuY29uc3QgeyBzdWdnZXN0U2ltaWxhciB9ID0gcmVxdWlyZSgnLi9zdWdnZXN0U2ltaWxhcicpO1xuXG5jbGFzcyBDb21tYW5kIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYENvbW1hbmRgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7Q29tbWFuZFtdfSAqL1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICAvKiogQHR5cGUge09wdGlvbltdfSAqL1xuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7QXJndW1lbnRbXX0gKi9cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgPSBbXTtcbiAgICB0aGlzLl9hcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzOyAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmFyZ3MgPSBbXTsgLy8gY2xpIGFyZ3Mgd2l0aCBvcHRpb25zIHJlbW92ZWRcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTsgLy8gbGlrZSAuYXJncyBidXQgYWZ0ZXIgY3VzdG9tIHByb2Nlc3NpbmcgYW5kIGNvbGxlY3RpbmcgdmFyaWFkaWNcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl9uYW1lID0gbmFtZSB8fCAnJztcbiAgICB0aGlzLl9vcHRpb25WYWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7fTsgLy8gZGVmYXVsdCwgZW52LCBjbGkgZXRjXG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IG51bGw7XG4gICAgdGhpcy5fZXhlY3V0YWJsZUhhbmRsZXIgPSBmYWxzZTtcbiAgICB0aGlzLl9leGVjdXRhYmxlRmlsZSA9IG51bGw7IC8vIGN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlXG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IG51bGw7IC8vIGN1c3RvbSBzZWFyY2ggZGlyZWN0b3J5IGZvciBzdWJjb21tYW5kc1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IG51bGw7XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9hbGlhc2VzID0gW107XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMuX3N1bW1hcnkgPSAnJztcbiAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7IC8vIGxlZ2FjeVxuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fbGlmZUN5Y2xlSG9va3MgPSB7fTsgLy8gYSBoYXNoIG9mIGFycmF5c1xuICAgIC8qKiBAdHlwZSB7KGJvb2xlYW4gfCBzdHJpbmcpfSAqL1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9IHRydWU7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IG51bGw7IC8vIHVzZWQgaW4gc2F2ZS9yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZVxuXG4gICAgLy8gc2VlIGNvbmZpZ3VyZU91dHB1dCgpIGZvciBkb2NzXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIHdyaXRlT3V0OiAoc3RyKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZShzdHIpLFxuICAgICAgd3JpdGVFcnI6IChzdHIpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKHN0ciksXG4gICAgICBvdXRwdXRFcnJvcjogKHN0ciwgd3JpdGUpID0+IHdyaXRlKHN0ciksXG4gICAgICBnZXRPdXRIZWxwV2lkdGg6ICgpID0+XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmlzVFRZID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IHVuZGVmaW5lZCxcbiAgICAgIGdldEVyckhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIuaXNUVFkgPyBwcm9jZXNzLnN0ZGVyci5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0T3V0SGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZG91dC5pc1RUWSAmJiBwcm9jZXNzLnN0ZG91dC5oYXNDb2xvcnM/LigpKSxcbiAgICAgIGdldEVyckhhc0NvbG9yczogKCkgPT5cbiAgICAgICAgdXNlQ29sb3IoKSA/PyAocHJvY2Vzcy5zdGRlcnIuaXNUVFkgJiYgcHJvY2Vzcy5zdGRlcnIuaGFzQ29sb3JzPy4oKSksXG4gICAgICBzdHJpcENvbG9yOiAoc3RyKSA9PiBzdHJpcENvbG9yKHN0ciksXG4gICAgfTtcblxuICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7KE9wdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpfSAqL1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIExhenkgY3JlYXRlZCBvbiBkZW1hbmQuIE1heSBiZSBudWxsIGlmIGhlbHAgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIHVuZGVjaWRlZCB3aGV0aGVyIHRydWUgb3IgZmFsc2UgeWV0LCBub3QgaW5oZXJpdGVkXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyBsYXp5IGluaXRpYWxpc2VkLCBpbmhlcml0ZWRcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSB1bmRlZmluZWQ7IC8vIHNvZnQgaW5pdGlhbGlzZWQgd2hlbiBhZGRlZCB0byBwYXJlbnRcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gdW5kZWZpbmVkO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHNldHRpbmdzIHRoYXQgYXJlIHVzZWZ1bCB0byBoYXZlIGluIGNvbW1vbiBhY3Jvc3Mgcm9vdCBjb21tYW5kIGFuZCBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSB3aGVuIGFkZGluZyBhIGNvbW1hbmQgdXNpbmcgYC5jb21tYW5kKClgIHNvIHN1YmNvbW1hbmRzIGluaGVyaXQgcGFyZW50IHNldHRpbmdzLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBzb3VyY2VDb21tYW5kXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29weUluaGVyaXRlZFNldHRpbmdzKHNvdXJjZUNvbW1hbmQpIHtcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5fb3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gc291cmNlQ29tbWFuZC5faGVscE9wdGlvbjtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IHNvdXJjZUNvbW1hbmQuX2hlbHBDb21tYW5kO1xuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5faGVscENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gc291cmNlQ29tbWFuZC5fZXhpdENhbGxiYWNrO1xuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9IHNvdXJjZUNvbW1hbmQuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcztcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPVxuICAgICAgc291cmNlQ29tbWFuZC5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gc291cmNlQ29tbWFuZC5fYWxsb3dFeGNlc3NBcmd1bWVudHM7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBzb3VyY2VDb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucztcbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93SGVscEFmdGVyRXJyb3I7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gc291cmNlQ29tbWFuZC5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgZm9yIChsZXQgY29tbWFuZCA9IHRoaXM7IGNvbW1hbmQ7IGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudCkge1xuICAgICAgcmVzdWx0LnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGEgY29tbWFuZC5cbiAgICpcbiAgICogVGhlcmUgYXJlIHR3byBzdHlsZXMgb2YgY29tbWFuZDogcGF5IGF0dGVudGlvbiB0byB3aGVyZSB0byBwdXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIGFjdGlvbiBoYW5kbGVyIChkZXNjcmlwdGlvbiBpcyBzdXBwbGllZCBzZXBhcmF0ZWx5IHRvIGAuY29tbWFuZGApXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnY2xvbmUgPHNvdXJjZT4gW2Rlc3RpbmF0aW9uXScpXG4gICAqICAgLmRlc2NyaXB0aW9uKCdjbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5JylcbiAgICogICAuYWN0aW9uKChzb3VyY2UsIGRlc3RpbmF0aW9uKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZygnY2xvbmUgY29tbWFuZCBjYWxsZWQnKTtcbiAgICogICB9KTtcbiAgICpcbiAgICogLy8gQ29tbWFuZCBpbXBsZW1lbnRlZCB1c2luZyBzZXBhcmF0ZSBleGVjdXRhYmxlIGZpbGUgKGRlc2NyaXB0aW9uIGlzIHNlY29uZCBwYXJhbWV0ZXIgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdzdGFydCA8c2VydmljZT4nLCAnc3RhcnQgbmFtZWQgc2VydmljZScpXG4gICAqICAgLmNvbW1hbmQoJ3N0b3AgW3NlcnZpY2VdJywgJ3N0b3AgbmFtZWQgc2VydmljZSwgb3IgYWxsIGlmIG5vIG5hbWUgc3VwcGxpZWQnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVBbmRBcmdzIC0gY29tbWFuZCBuYW1lIGFuZCBhcmd1bWVudHMsIGFyZ3MgYXJlIGA8cmVxdWlyZWQ+YCBvciBgW29wdGlvbmFsXWAgYW5kIGxhc3QgbWF5IGFsc28gYmUgYHZhcmlhZGljLi4uYFxuICAgKiBAcGFyYW0geyhvYmplY3QgfCBzdHJpbmcpfSBbYWN0aW9uT3B0c09yRXhlY0Rlc2NdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgYWN0aW9uKSwgb3IgZGVzY3JpcHRpb24gKGZvciBleGVjdXRhYmxlKVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2V4ZWNPcHRzXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IHJldHVybnMgbmV3IGNvbW1hbmQgZm9yIGFjdGlvbiBoYW5kbGVyLCBvciBgdGhpc2AgZm9yIGV4ZWN1dGFibGUgY29tbWFuZFxuICAgKi9cblxuICBjb21tYW5kKG5hbWVBbmRBcmdzLCBhY3Rpb25PcHRzT3JFeGVjRGVzYywgZXhlY09wdHMpIHtcbiAgICBsZXQgZGVzYyA9IGFjdGlvbk9wdHNPckV4ZWNEZXNjO1xuICAgIGxldCBvcHRzID0gZXhlY09wdHM7XG4gICAgaWYgKHR5cGVvZiBkZXNjID09PSAnb2JqZWN0JyAmJiBkZXNjICE9PSBudWxsKSB7XG4gICAgICBvcHRzID0gZGVzYztcbiAgICAgIGRlc2MgPSBudWxsO1xuICAgIH1cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBbLCBuYW1lLCBhcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG5cbiAgICBjb25zdCBjbWQgPSB0aGlzLmNyZWF0ZUNvbW1hbmQobmFtZSk7XG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIGNtZC5kZXNjcmlwdGlvbihkZXNjKTtcbiAgICAgIGNtZC5fZXhlY3V0YWJsZUhhbmRsZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBjbWQuX2hpZGRlbiA9ICEhKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKTsgLy8gbm9IZWxwIGlzIGRlcHJlY2F0ZWQgb2xkIG5hbWUgZm9yIGhpZGRlblxuICAgIGNtZC5fZXhlY3V0YWJsZUZpbGUgPSBvcHRzLmV4ZWN1dGFibGVGaWxlIHx8IG51bGw7IC8vIEN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlIGZpbGUsIHNldCBtaXNzaW5nIHRvIG51bGwgdG8gbWF0Y2ggY29uc3RydWN0b3JcbiAgICBpZiAoYXJncykgY21kLmFyZ3VtZW50cyhhcmdzKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuY29weUluaGVyaXRlZFNldHRpbmdzKHRoaXMpO1xuXG4gICAgaWYgKGRlc2MpIHJldHVybiB0aGlzO1xuICAgIHJldHVybiBjbWQ7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGNvbW1hbmQuIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlQ29tbWFuZCB0byBjdXN0b21pc2Ugc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gbmV3IGNvbW1hbmRcbiAgICovXG5cbiAgY3JlYXRlQ29tbWFuZChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBDb21tYW5kKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCxcbiAgICogb3IgYnkgb3ZlcnJpZGluZyBIZWxwIHByb3BlcnRpZXMgdXNpbmcgY29uZmlndXJlSGVscCgpLlxuICAgKlxuICAgKiBAcmV0dXJuIHtIZWxwfVxuICAgKi9cblxuICBjcmVhdGVIZWxwKCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBIZWxwKCksIHRoaXMuY29uZmlndXJlSGVscCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGN1c3RvbWlzZSB0aGUgaGVscCBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCksXG4gICAqIG9yIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCgpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVIZWxwKGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5faGVscENvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGFuZCBzdGRlcnIuIFlvdSBjYW4gY3VzdG9taXNlIHRoaXMgZm9yIHNwZWNpYWxcbiAgICogYXBwbGljYXRpb25zLiBZb3UgY2FuIGFsc28gY3VzdG9taXNlIHRoZSBkaXNwbGF5IG9mIGVycm9ycyBieSBvdmVycmlkaW5nIG91dHB1dEVycm9yLlxuICAgKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFyZSBhbGwgZnVuY3Rpb25zOlxuICAgKlxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiwgZGVmYXVsdHMgdG8gc3Rkb3V0IGFuZCBzdGRlcnJcbiAgICogICAgIHdyaXRlT3V0KHN0cilcbiAgICogICAgIHdyaXRlRXJyKHN0cilcbiAgICogICAgIC8vIGNoYW5nZSBob3cgb3V0cHV0IGJlaW5nIHdyaXR0ZW4gZm9yIGVycm9ycywgZGVmYXVsdHMgdG8gd3JpdGVFcnJcbiAgICogICAgIG91dHB1dEVycm9yKHN0ciwgd3JpdGUpIC8vIHVzZWQgZm9yIGRpc3BsYXlpbmcgZXJyb3JzIGFuZCBub3QgdXNlZCBmb3IgZGlzcGxheWluZyBoZWxwXG4gICAqICAgICAvLyBzcGVjaWZ5IHdpZHRoIGZvciB3cmFwcGluZyBoZWxwXG4gICAqICAgICBnZXRPdXRIZWxwV2lkdGgoKVxuICAgKiAgICAgZ2V0RXJySGVscFdpZHRoKClcbiAgICogICAgIC8vIGNvbG9yIHN1cHBvcnQsIGN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBIZWxwXG4gICAqICAgICBnZXRPdXRIYXNDb2xvcnMoKVxuICAgKiAgICAgZ2V0RXJySGFzQ29sb3JzKClcbiAgICogICAgIHN0cmlwQ29sb3IoKSAvLyB1c2VkIHRvIHJlbW92ZSBBTlNJIGVzY2FwZSBjb2RlcyBpZiBvdXRwdXQgZG9lcyBub3QgaGF2ZSBjb2xvcnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtjb25maWd1cmF0aW9uXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHsoQ29tbWFuZCB8IG9iamVjdCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgY29uZmlndXJlT3V0cHV0KGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi50aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLFxuICAgICAgLi4uY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGhlbHAgb3IgYSBjdXN0b20gbWVzc2FnZSBhZnRlciBhbiBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW2Rpc3BsYXlIZWxwXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dIZWxwQWZ0ZXJFcnJvcihkaXNwbGF5SGVscCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlIZWxwICE9PSAnc3RyaW5nJykgZGlzcGxheUhlbHAgPSAhIWRpc3BsYXlIZWxwO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGRpc3BsYXlIZWxwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgc3VnZ2VzdGlvbiBvZiBzaW1pbGFyIGNvbW1hbmRzIGZvciB1bmtub3duIGNvbW1hbmRzLCBvciBvcHRpb25zIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3BsYXlTdWdnZXN0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcihkaXNwbGF5U3VnZ2VzdGlvbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSAhIWRpc3BsYXlTdWdnZXN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHByZXBhcmVkIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kIHdoaWNoIGluaGVyaXRzIHNldHRpbmdzIGZyb20gaXRzIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWQgLSBuZXcgc3ViY29tbWFuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRDb21tYW5kKGNtZCwgb3B0cykge1xuICAgIGlmICghY21kLl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgcGFzc2VkIHRvIC5hZGRDb21tYW5kKCkgbXVzdCBoYXZlIGEgbmFtZVxuLSBzcGVjaWZ5IHRoZSBuYW1lIGluIENvbW1hbmQgY29uc3RydWN0b3Igb3IgdXNpbmcgLm5hbWUoKWApO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbikgY21kLl9oaWRkZW4gPSB0cnVlOyAvLyBtb2RpZnlpbmcgcGFzc2VkIGNvbW1hbmQgZHVlIHRvIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uXG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBhcmd1bWVudC5cbiAgICpcbiAgICogU2VlIC5hcmd1bWVudCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBhcmd1bWVudCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBhcmd1bWVudC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVBcmd1bWVudCB0byByZXR1cm4gYSBjdXN0b20gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fSBuZXcgYXJndW1lbnRcbiAgICovXG5cbiAgY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnPGlucHV0LWZpbGU+Jyk7XG4gICAqIHByb2dyYW0uYXJndW1lbnQoJ1tvdXRwdXQtZmlsZV0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gYXJndW1lbnQgcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gdGhpcy5jcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgaWYgKHR5cGVvZiBwYXJzZUFyZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihwYXJzZUFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQocGFyc2VBcmcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEFyZ3VtZW50KGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgbXVsdGlwbGUgYXQgb25jZSAod2l0aG91dCBkZXNjcmlwdGlvbnMpLlxuICAgKlxuICAgKiBTZWUgYWxzbyAuYXJndW1lbnQoKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudHMoJzxjbWQ+IFtlbnZdJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYXJndW1lbnRzKG5hbWVzKSB7XG4gICAgbmFtZXNcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgvICsvKVxuICAgICAgLmZvckVhY2goKGRldGFpbCkgPT4ge1xuICAgICAgICB0aGlzLmFyZ3VtZW50KGRldGFpbCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgYSBwcmVwYXJlZCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRBcmd1bWVudChhcmd1bWVudCkge1xuICAgIGNvbnN0IHByZXZpb3VzQXJndW1lbnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuc2xpY2UoLTEpWzBdO1xuICAgIGlmIChwcmV2aW91c0FyZ3VtZW50Py52YXJpYWRpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgb25seSB0aGUgbGFzdCBhcmd1bWVudCBjYW4gYmUgdmFyaWFkaWMgJyR7cHJldmlvdXNBcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhcmd1bWVudC5yZXF1aXJlZCAmJlxuICAgICAgYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFyZ3VtZW50LnBhcnNlQXJnID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGEgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXF1aXJlZCBhcmd1bWVudCBpcyBuZXZlciB1c2VkOiAnJHthcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMucHVzaChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9taXNlIG9yIG92ZXJyaWRlIGRlZmF1bHQgaGVscCBjb21tYW5kLiBCeSBkZWZhdWx0IGEgaGVscCBjb21tYW5kIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgaWYgeW91ciBjb21tYW5kIGhhcyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCgnaGVscCBbY21kXScpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJywgJ3Nob3cgaGVscCcpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKGZhbHNlKTsgLy8gc3VwcHJlc3MgZGVmYXVsdCBoZWxwIGNvbW1hbmRcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCh0cnVlKTsgLy8gYWRkIGhlbHAgY29tbWFuZCBldmVuIGlmIG5vIHN1YmNvbW1hbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IGVuYWJsZU9yTmFtZUFuZEFyZ3MgLSBlbmFibGUgd2l0aCBjdXN0b20gbmFtZSBhbmQvb3IgYXJndW1lbnRzLCBvciBib29sZWFuIHRvIG92ZXJyaWRlIHdoZXRoZXIgYWRkZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl0gLSBjdXN0b20gZGVzY3JpcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBDb21tYW5kKGVuYWJsZU9yTmFtZUFuZEFyZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBlbmFibGVPck5hbWVBbmRBcmdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSBlbmFibGVPck5hbWVBbmRBcmdzO1xuICAgICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgJiYgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCkge1xuICAgICAgICAvLyBtYWtlIHRoZSBjb21tYW5kIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKHRoaXMuX2dldEhlbHBDb21tYW5kKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUFuZEFyZ3MgPSBlbmFibGVPck5hbWVBbmRBcmdzID8/ICdoZWxwIFtjb21tYW5kXSc7XG4gICAgY29uc3QgWywgaGVscE5hbWUsIGhlbHBBcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG4gICAgY29uc3QgaGVscERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCc7XG5cbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChoZWxwTmFtZSk7XG4gICAgaGVscENvbW1hbmQuaGVscE9wdGlvbihmYWxzZSk7XG4gICAgaWYgKGhlbHBBcmdzKSBoZWxwQ29tbWFuZC5hcmd1bWVudHMoaGVscEFyZ3MpO1xuICAgIGlmIChoZWxwRGVzY3JpcHRpb24pIGhlbHBDb21tYW5kLmRlc2NyaXB0aW9uKGhlbHBEZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByZXBhcmVkIGN1c3RvbSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7KENvbW1hbmR8c3RyaW5nfGJvb2xlYW4pfSBoZWxwQ29tbWFuZCAtIGN1c3RvbSBoZWxwIGNvbW1hbmQsIG9yIGRlcHJlY2F0ZWQgZW5hYmxlT3JOYW1lQW5kQXJncyBhcyBmb3IgYC5oZWxwQ29tbWFuZCgpYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlcHJlY2F0ZWREZXNjcmlwdGlvbl0gLSBkZXByZWNhdGVkIGN1c3RvbSBkZXNjcmlwdGlvbiB1c2VkIHdpdGggY3VzdG9tIG5hbWUgb25seVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pIHtcbiAgICAvLyBJZiBub3QgcGFzc2VkIGFuIG9iamVjdCwgY2FsbCB0aHJvdWdoIHRvIGhlbHBDb21tYW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBhcyBhZGRIZWxwQ29tbWFuZCB3YXMgb3JpZ2luYWxseSB1c2VkIGxpa2UgaGVscENvbW1hbmQgaXMgbm93LlxuICAgIGlmICh0eXBlb2YgaGVscENvbW1hbmQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGhlbHBDb21tYW5kKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEByZXR1cm4geyhDb21tYW5kfG51bGwpfVxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBDb21tYW5kKCkge1xuICAgIGNvbnN0IGhhc0ltcGxpY2l0SGVscENvbW1hbmQgPVxuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA/P1xuICAgICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAgICF0aGlzLl9maW5kQ29tbWFuZCgnaGVscCcpKTtcblxuICAgIGlmIChoYXNJbXBsaWNpdEhlbHBDb21tYW5kKSB7XG4gICAgICBpZiAodGhpcy5faGVscENvbW1hbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhlbHBDb21tYW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gdXNlIGRlZmF1bHQgbmFtZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9oZWxwQ29tbWFuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGhvb2sgZm9yIGxpZmUgY3ljbGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaG9vayhldmVudCwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydwcmVTdWJjb21tYW5kJywgJ3ByZUFjdGlvbicsICdwb3N0QWN0aW9uJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBldmVudCBwYXNzZWQgdG8gaG9vayA6ICcke2V2ZW50fScuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgY2FsbGluZyBwcm9jZXNzLmV4aXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl0gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYSBDb21tYW5kZXJFcnJvciwgZGVmYXVsdHMgdG8gdGhyb3dpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGV4aXRPdmVycmlkZShmbikge1xuICAgIGlmIChmbikge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gZm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGNhbGxiYWNrIGZyb20gc3Bhd24gZXZlbnRzLCBub3QgdXNlZnVsIHRvIHRocm93LlxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHByb2Nlc3MuZXhpdCwgYW5kIF9leGl0Q2FsbGJhY2sgaWYgZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIGV4aXQgY29kZSBmb3IgdXNpbmcgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqIEByZXR1cm4gbmV2ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5fZXhpdENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sobmV3IENvbW1hbmRlckVycm9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSk7XG4gICAgICAvLyBFeHBlY3RpbmcgdGhpcyBsaW5lIGlzIG5vdCByZWFjaGVkLlxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGBmbmAgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3NlcnZlJylcbiAgICogICAuZGVzY3JpcHRpb24oJ3N0YXJ0IHNlcnZpY2UnKVxuICAgKiAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAqICAgICAgLy8gZG8gd29yayBoZXJlXG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhY3Rpb24oZm4pIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChhcmdzKSA9PiB7XG4gICAgICAvLyBUaGUgLmFjdGlvbiBjYWxsYmFjayB0YWtlcyBhbiBleHRyYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGNvbW1hbmQgb3Igb3B0aW9ucy5cbiAgICAgIGNvbnN0IGV4cGVjdGVkQXJnc0NvdW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSBhcmdzLnNsaWNlKDAsIGV4cGVjdGVkQXJnc0NvdW50KTtcbiAgICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSBcIm9wdGlvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzLm9wdHMoKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbkFyZ3MucHVzaCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFjdGlvbkFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IGxpc3RlbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBvcHRpb24uXG4gICAqXG4gICAqIFNlZSAub3B0aW9uKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIG9wdGlvbiwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBvcHRpb24uIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlT3B0aW9uIHRvIHJldHVybiBhIGN1c3RvbSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259IG5ldyBvcHRpb25cbiAgICovXG5cbiAgY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBwYXJzZUFyZ3MgdG8gY2F0Y2ggJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLlxuICAgKlxuICAgKiBAcGFyYW0geyhPcHRpb24gfCBBcmd1bWVudCl9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBwcmV2aW91c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaW52YWxpZEFyZ3VtZW50TWVzc2FnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2FsbFBhcnNlQXJnKHRhcmdldCwgdmFsdWUsIHByZXZpb3VzLCBpbnZhbGlkQXJndW1lbnRNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0YXJnZXQucGFyc2VBcmcodmFsdWUsIHByZXZpb3VzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtpbnZhbGlkQXJndW1lbnRNZXNzYWdlfSAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBleGl0Q29kZTogZXJyLmV4aXRDb2RlLCBjb2RlOiBlcnIuY29kZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIG9wdGlvbiBmbGFnIGNvbmZsaWN0cy5cbiAgICogUmVnaXN0ZXIgb3B0aW9uIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID1cbiAgICAgIChvcHRpb24uc2hvcnQgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24uc2hvcnQpKSB8fFxuICAgICAgKG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpKTtcbiAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmxhZyA9XG4gICAgICAgIG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpXG4gICAgICAgICAgPyBvcHRpb24ubG9uZ1xuICAgICAgICAgIDogb3B0aW9uLnNob3J0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyR7dGhpcy5fbmFtZSAmJiBgIHRvIGNvbW1hbmQgJyR7dGhpcy5fbmFtZX0nYH0gZHVlIHRvIGNvbmZsaWN0aW5nIGZsYWcgJyR7bWF0Y2hpbmdGbGFnfSdcbi0gIGFscmVhZHkgdXNlZCBieSBvcHRpb24gJyR7bWF0Y2hpbmdPcHRpb24uZmxhZ3N9J2ApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cChvcHRpb24pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGNvbW1hbmQgbmFtZSBhbmQgYWxpYXMgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29tbWFuZHMuXG4gICAqIFJlZ2lzdGVyIGNvbW1hbmQgaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3RlckNvbW1hbmQoY29tbWFuZCkge1xuICAgIGNvbnN0IGtub3duQnkgPSAoY21kKSA9PiB7XG4gICAgICByZXR1cm4gW2NtZC5uYW1lKCldLmNvbmNhdChjbWQuYWxpYXNlcygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxyZWFkeVVzZWQgPSBrbm93bkJ5KGNvbW1hbmQpLmZpbmQoKG5hbWUpID0+XG4gICAgICB0aGlzLl9maW5kQ29tbWFuZChuYW1lKSxcbiAgICApO1xuICAgIGlmIChhbHJlYWR5VXNlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBrbm93bkJ5KHRoaXMuX2ZpbmRDb21tYW5kKGFscmVhZHlVc2VkKSkuam9pbignfCcpO1xuICAgICAgY29uc3QgbmV3Q21kID0ga25vd25CeShjb21tYW5kKS5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGNvbW1hbmQgJyR7bmV3Q21kfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoY29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24ob3B0aW9uKTtcblxuICAgIGNvbnN0IG9uYW1lID0gb3B0aW9uLm5hbWUoKTtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIHN0b3JlIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgLy8gLS1uby1mb28gaXMgc3BlY2lhbCBhbmQgZGVmYXVsdHMgZm9vIHRvIHRydWUsIHVubGVzcyBhIC0tZm9vIG9wdGlvbiBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgIGNvbnN0IHBvc2l0aXZlTG9uZ0ZsYWcgPSBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS1uby0vLCAnLS0nKTtcbiAgICAgIGlmICghdGhpcy5fZmluZE9wdGlvbihwb3NpdGl2ZUxvbmdGbGFnKSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb24uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgb3B0aW9uLmRlZmF1bHRWYWx1ZSwgJ2RlZmF1bHQnKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGVyIGZvciBjbGkgYW5kIGVudiBzdXBwbGllZCB2YWx1ZXNcbiAgICBjb25zdCBoYW5kbGVPcHRpb25WYWx1ZSA9ICh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsIHZhbHVlU291cmNlKSA9PiB7XG4gICAgICAvLyB2YWwgaXMgbnVsbCBmb3Igb3B0aW9uYWwgb3B0aW9uIHVzZWQgd2l0aG91dCBhbiBvcHRpb25hbC1hcmd1bWVudC5cbiAgICAgIC8vIHZhbCBpcyB1bmRlZmluZWQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgb3B0aW9uLlxuICAgICAgaWYgKHZhbCA9PSBudWxsICYmIG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBvcHRpb24ucHJlc2V0QXJnO1xuICAgICAgfVxuXG4gICAgICAvLyBjdXN0b20gcHJvY2Vzc2luZ1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG5hbWUpO1xuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24ucGFyc2VBcmcpIHtcbiAgICAgICAgdmFsID0gdGhpcy5fY2FsbFBhcnNlQXJnKG9wdGlvbiwgdmFsLCBvbGRWYWx1ZSwgaW52YWxpZFZhbHVlTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24udmFyaWFkaWMpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLl9jb2xsZWN0VmFsdWUodmFsLCBvbGRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbGwtaW4gYXBwcm9wcmlhdGUgbWlzc2luZyB2YWx1ZXMuIExvbmcgd2luZGVkIGJ1dCBlYXN5IHRvIGZvbGxvdy5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICAgIHZhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5pc0Jvb2xlYW4oKSB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICB2YWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9ICcnOyAvLyBub3Qgbm9ybWFsLCBwYXJzZUFyZyBtaWdodCBoYXZlIGZhaWxlZCBvciBiZSBhIG1vY2sgZnVuY3Rpb24gZm9yIHRlc3RpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgdmFsLCB2YWx1ZVNvdXJjZSk7XG4gICAgfTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCAnJHt2YWx9JyBpcyBpbnZhbGlkLmA7XG4gICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdjbGknKTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb24uZW52VmFyKSB7XG4gICAgICB0aGlzLm9uKCdvcHRpb25FbnY6JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyB2YWx1ZSAnJHt2YWx9JyBmcm9tIGVudiAnJHtvcHRpb24uZW52VmFyfScgaXMgaW52YWxpZC5gO1xuICAgICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdlbnYnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIHNoYXJlZCBieSAub3B0aW9uKCkgYW5kIC5yZXF1aXJlZE9wdGlvbigpXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29wdGlvbkV4KGNvbmZpZywgZmxhZ3MsIGRlc2NyaXB0aW9uLCBmbiwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ29iamVjdCcgJiYgZmxhZ3MgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RvIGFkZCBhbiBPcHRpb24gb2JqZWN0IHVzZSBhZGRPcHRpb24oKSBpbnN0ZWFkIG9mIG9wdGlvbigpIG9yIHJlcXVpcmVkT3B0aW9uKCknLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICBvcHRpb24ubWFrZU9wdGlvbk1hbmRhdG9yeSghIWNvbmZpZy5tYW5kYXRvcnkpO1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2UgaWYgKGZuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBkZXByZWNhdGVkXG4gICAgICBjb25zdCByZWdleCA9IGZuO1xuICAgICAgZm4gPSAodmFsLCBkZWYpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIG0gPyBtWzBdIDogZGVmO1xuICAgICAgfTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvcHRpb24gd2l0aCBgZmxhZ3NgLCBgZGVzY3JpcHRpb25gLCBhbmQgb3B0aW9uYWwgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiBvciBgZGVmYXVsdFZhbHVlYCBvciBib3RoLlxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS4gQSByZXF1aXJlZFxuICAgKiBvcHRpb24tYXJndW1lbnQgaXMgaW5kaWNhdGVkIGJ5IGA8PmAgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCBieSBgW11gLlxuICAgKlxuICAgKiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLCBhbmQgc2VlIGFsc28gYWRkT3B0aW9uKCkgYW5kIHJlcXVpcmVkT3B0aW9uKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAgIC5vcHRpb24oJy1wLCAtLXBlcHBlcicsICdhZGQgcGVwcGVyJylcbiAgICogICAgIC5vcHRpb24oJy0tcHQsIC0tcGl6emEtdHlwZSA8VFlQRT4nLCAndHlwZSBvZiBwaXp6YScpIC8vIHJlcXVpcmVkIG9wdGlvbi1hcmd1bWVudFxuICAgKiAgICAgLm9wdGlvbignLWMsIC0tY2hlZXNlIFtDSEVFU0VdJywgJ2FkZCBleHRyYSBjaGVlc2UnLCAnbW96emFyZWxsYScpIC8vIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCB3aXRoIGRlZmF1bHRcbiAgICogICAgIC5vcHRpb24oJy10LCAtLXRpcCA8VkFMVUU+JywgJ2FkZCB0aXAgdG8gcHVyY2hhc2UgY29zdCcsIHBhcnNlRmxvYXQpIC8vIGN1c3RvbSBwYXJzZSBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBvcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KHt9LCBmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHJlcXVpcmVkIG9wdGlvbiB3aGljaCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLiBUaGlzIHVzdWFsbHkgbWVhbnNcbiAgICogdGhlIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAoT3RoZXJ3aXNlIHRoZSBzYW1lIGFzIC5vcHRpb24oKS4pXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICByZXF1aXJlZE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoXG4gICAgICB7IG1hbmRhdG9yeTogdHJ1ZSB9LFxuICAgICAgZmxhZ3MsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHBhcnNlQXJnLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWx0ZXIgcGFyc2luZyBvZiBzaG9ydCBmbGFncyB3aXRoIG9wdGlvbmFsIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIGAub3B0aW9uKCctZiwtLWZsYWcgW3ZhbHVlXScpOlxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSh0cnVlKTsgIC8vIGAtZjgwYCBpcyB0cmVhdGVkIGxpa2UgYC0tZmxhZz04MGAsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGZhbHNlKSAvLyBgLWZiYCBpcyB0cmVhdGVkIGxpa2UgYC1mIC1iYFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb21iaW5lXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBhbiBvcHRpb25hbCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGFmdGVyIHRoZSBmbGFnLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShjb21iaW5lID0gdHJ1ZSkge1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9ICEhY29tYmluZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1bmtub3duIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dVbmtub3duXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93VW5rbm93bk9wdGlvbihhbGxvd1Vua25vd24gPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gISFhbGxvd1Vua25vd247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgZXhjZXNzIGNvbW1hbmQtYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFBhc3MgZmFsc2UgdG8gbWFrZSBleGNlc3MgYXJndW1lbnRzIGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0V4Y2Vzc10gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIGV4Y2VzcyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dFeGNlc3NBcmd1bWVudHMoYWxsb3dFeGNlc3MgPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSAhIWFsbG93RXhjZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwb3NpdGlvbmFsIG9wdGlvbnMuIFBvc2l0aW9uYWwgbWVhbnMgZ2xvYmFsIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZWZvcmUgc3ViY29tbWFuZHMgd2hpY2ggbGV0c1xuICAgKiBzdWJjb21tYW5kcyByZXVzZSB0aGUgc2FtZSBvcHRpb24gbmFtZXMsIGFuZCBhbHNvIGVuYWJsZXMgc3ViY29tbWFuZHMgdG8gdHVybiBvbiBwYXNzVGhyb3VnaE9wdGlvbnMuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgZ2xvYmFsIG9wdGlvbnMgbWF5IGFwcGVhciBhbnl3aGVyZSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwb3NpdGlvbmFsXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKHBvc2l0aW9uYWwgPSB0cnVlKSB7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSAhIXBvc2l0aW9uYWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyB0aHJvdWdoIG9wdGlvbnMgdGhhdCBjb21lIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzIHJhdGhlciB0aGFuIHRyZWF0IHRoZW0gYXMgY29tbWFuZC1vcHRpb25zLFxuICAgKiBzbyBhY3R1YWwgY29tbWFuZC1vcHRpb25zIGNvbWUgYmVmb3JlIGNvbW1hbmQtYXJndW1lbnRzLiBUdXJuaW5nIHRoaXMgb24gZm9yIGEgc3ViY29tbWFuZCByZXF1aXJlc1xuICAgKiBwb3NpdGlvbmFsIG9wdGlvbnMgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgb24gdGhlIHByb2dyYW0gKHBhcmVudCBjb21tYW5kcykuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgb3B0aW9ucyBtYXkgYXBwZWFyIGJlZm9yZSBvciBhZnRlciBjb21tYW5kLWFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcGFzc1Rocm91Z2hdIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcGFzc1Rocm91Z2hPcHRpb25zKHBhc3NUaHJvdWdoID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyA9ICEhcGFzc1Rocm91Z2g7XG4gICAgdGhpcy5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucGFyZW50ICYmXG4gICAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgJiZcbiAgICAgICF0aGlzLnBhcmVudC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhc3NUaHJvdWdoT3B0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgJyR7dGhpcy5fbmFtZX0nIHdpdGhvdXQgdHVybmluZyBvbiBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyBmb3IgcGFyZW50IGNvbW1hbmQocylgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBzdG9yZSBvcHRpb24gdmFsdWVzIGFzIHByb3BlcnRpZXMgb24gY29tbWFuZCBvYmplY3QsXG4gICAqIG9yIHN0b3JlIHNlcGFyYXRlbHkgKHNwZWNpZnkgZmFsc2UpLiBJbiBib3RoIGNhc2VzIHRoZSBvcHRpb24gdmFsdWVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAub3B0cygpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZUFzUHJvcGVydGllcz10cnVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKHN0b3JlQXNQcm9wZXJ0aWVzID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBhZGRpbmcgb3B0aW9ucycpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fb3B0aW9uVmFsdWVzKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBzZXR0aW5nIG9wdGlvbiB2YWx1ZXMnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gISFzdG9yZUFzUHJvcGVydGllcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7b2JqZWN0fSB2YWx1ZVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZShrZXkpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZSBhbmQgd2hlcmUgdGhlIHZhbHVlIGNhbWUgZnJvbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIGV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdC9jb25maWcvZW52L2NsaS9pbXBsaWVkXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgc291cmNlKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wdGlvblZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldID0gc291cmNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuIFNlZSBhbHNvIC5vcHRzV2l0aEdsb2JhbHMoKS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2VXaXRoR2xvYmFscyhrZXkpIHtcbiAgICAvLyBnbG9iYWwgb3ZlcndyaXRlcyBsb2NhbCwgbGlrZSBvcHRzV2l0aEdsb2JhbHNcbiAgICBsZXQgc291cmNlO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGlmIChjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNvdXJjZSA9IGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgYXJndW1lbnRzIGZyb20gaW1wbGllZCBvciBleHBsaWNpdCBhcmd1bWVudHMuXG4gICAqIFNpZGUtZWZmZWN0czogc2V0IF9zY3JpcHRQYXRoIGlmIGFyZ3MgaW5jbHVkZWQgc2NyaXB0LiBVc2VkIGZvciBkZWZhdWx0IHByb2dyYW0gbmFtZSwgYW5kIHN1YmNvbW1hbmQgc2VhcmNoZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgaWYgKGFyZ3YgIT09IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheShhcmd2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdCBwYXJhbWV0ZXIgdG8gcGFyc2UgbXVzdCBiZSBhcnJheSBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcGFyc2VPcHRpb25zID0gcGFyc2VPcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gYXV0by1kZXRlY3QgYXJndW1lbnQgY29udmVudGlvbnMgaWYgbm90aGluZyBzdXBwbGllZFxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQgJiYgcGFyc2VPcHRpb25zLmZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudmVyc2lvbnM/LmVsZWN0cm9uKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2VsZWN0cm9uJztcbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIG5vZGUgc3BlY2lmaWMgb3B0aW9ucyBmb3Igc2NlbmFyaW9zIHdoZXJlIHVzZXIgQ0xJIGFyZ3MgZm9sbG93IGV4ZWN1dGFibGUgd2l0aG91dCBzY3JpcHRuYW1lXG4gICAgICBjb25zdCBleGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3YgPz8gW107XG4gICAgICBpZiAoXG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctZScpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLWV2YWwnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLXAnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1wcmludCcpXG4gICAgICApIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZXZhbCc7IC8vIGludGVybmFsIHVzYWdlLCBub3QgZG9jdW1lbnRlZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgdG8gdXNpbmcgcHJvY2Vzcy5hcmd2XG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgICB9XG4gICAgdGhpcy5yYXdBcmdzID0gYXJndi5zbGljZSgpO1xuXG4gICAgLy8gZXh0cmFjdCB0aGUgdXNlciBhcmdzIGFuZCBzY3JpcHRQYXRoXG4gICAgbGV0IHVzZXJBcmdzO1xuICAgIHN3aXRjaCAocGFyc2VPcHRpb25zLmZyb20pIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWxlY3Ryb24nOlxuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGRlZmF1bHRBcHAgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICBpZiAocHJvY2Vzcy5kZWZhdWx0QXBwKSB7XG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZhbCc6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHVuZXhwZWN0ZWQgcGFyc2Ugb3B0aW9uIHsgZnJvbTogJyR7cGFyc2VPcHRpb25zLmZyb219JyB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGRlZmF1bHQgbmFtZSBmb3IgcHJvZ3JhbSBmcm9tIGFyZ3VtZW50cy5cbiAgICBpZiAoIXRoaXMuX25hbWUgJiYgdGhpcy5fc2NyaXB0UGF0aClcbiAgICAgIHRoaXMubmFtZUZyb21GaWxlbmFtZSh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZSB8fCAncHJvZ3JhbSc7XG5cbiAgICByZXR1cm4gdXNlckFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogVXNlIHBhcnNlQXN5bmMgaW5zdGVhZCBvZiBwYXJzZSBpZiBhbnkgb2YgeW91ciBhY3Rpb24gaGFuZGxlcnMgYXJlIGFzeW5jLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ucGFyc2UoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBwcm9ncmFtLnBhcnNlKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl0gLSBvcHRpb25hbCwgZGVmYXVsdHMgdG8gcHJvY2Vzcy5hcmd2XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXSAtIG9wdGlvbmFsbHkgc3BlY2lmeSBzdHlsZSBvZiBvcHRpb25zIHdpdGggZnJvbTogbm9kZS91c2VyL2VsZWN0cm9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyc2VPcHRpb25zLmZyb21dIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBwYXJzZShhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyc2VPcHRpb25zLmZyb20gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG5cbiAgYXN5bmMgcGFyc2VBc3luYyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIGF3YWl0IHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfcHJlcGFyZUZvclBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zYXZlZFN0YXRlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnNhdmVTdGF0ZUJlZm9yZVBhcnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdG9yZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHRoZSBmaXJzdCB0aW1lIHBhcnNlIGlzIGNhbGxlZCB0byBzYXZlIHN0YXRlIGFuZCBhbGxvdyBhIHJlc3RvcmUgYmVmb3JlIHN1YnNlcXVlbnQgY2FsbHMgdG8gcGFyc2UuXG4gICAqIE5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IGF2YWlsYWJsZSBmb3Igc3ViY2xhc3NlcyB0byBzYXZlIHRoZWlyIGN1c3RvbSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgaW4gYSBsYXp5IHdheS4gT25seSBjb21tYW5kcyB1c2VkIGluIHBhcnNpbmcgY2hhaW4gd2lsbCBoYXZlIHN0YXRlIHNhdmVkLlxuICAgKi9cbiAgc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKSB7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IHtcbiAgICAgIC8vIG5hbWUgaXMgc3RhYmxlIGlmIHN1cHBsaWVkIGJ5IGF1dGhvciwgYnV0IG1heSBiZSB1bnNwZWNpZmllZCBmb3Igcm9vdCBjb21tYW5kIGFuZCBkZWR1Y2VkIGR1cmluZyBwYXJzaW5nXG4gICAgICBfbmFtZTogdGhpcy5fbmFtZSxcbiAgICAgIC8vIG9wdGlvbiB2YWx1ZXMgYmVmb3JlIHBhcnNlIGhhdmUgZGVmYXVsdCB2YWx1ZXMgKGluY2x1ZGluZyBmYWxzZSBmb3IgbmVnYXRlZCBvcHRpb25zKVxuICAgICAgLy8gc2hhbGxvdyBjbG9uZXNcbiAgICAgIF9vcHRpb25WYWx1ZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVzIH0sXG4gICAgICBfb3B0aW9uVmFsdWVTb3VyY2VzOiB7IC4uLnRoaXMuX29wdGlvblZhbHVlU291cmNlcyB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBzdGF0ZSBiZWZvcmUgcGFyc2UgZm9yIGNhbGxzIGFmdGVyIHRoZSBmaXJzdC5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgcmVzdG9yZWQuXG4gICAqL1xuICByZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGNhbGwgcGFyc2UgYWdhaW4gd2hlbiBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgaXMgdHJ1ZS5cbi0gZWl0aGVyIG1ha2UgYSBuZXcgQ29tbWFuZCBmb3IgZWFjaCBjYWxsIHRvIHBhcnNlLCBvciBzdG9wIHN0b3Jpbmcgb3B0aW9ucyBhcyBwcm9wZXJ0aWVzYCk7XG5cbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcmVwYXJlVXNlckFyZ3NcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fc2F2ZWRTdGF0ZS5fbmFtZTtcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZVxuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHsgLi4udGhpcy5fc2F2ZWRTdGF0ZS5fb3B0aW9uVmFsdWVzIH07XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZVNvdXJjZXMgfTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wYXJzZUNvbW1hbmRcbiAgICB0aGlzLmFyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcm9jZXNzQXJndW1lbnRzXG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gW107XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgaWYgZXhwZWN0ZWQgZXhlY3V0YWJsZSBpcyBtaXNzaW5nLiBBZGQgbG90cyBvZiBoZWxwIGZvciBhdXRob3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRmlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhlY3V0YWJsZURpclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViY29tbWFuZE5hbWVcbiAgICovXG4gIF9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKGV4ZWN1dGFibGVGaWxlLCBleGVjdXRhYmxlRGlyLCBzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGV4ZWN1dGFibGVGaWxlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhlY3V0YWJsZURpck1lc3NhZ2UgPSBleGVjdXRhYmxlRGlyXG4gICAgICA/IGBzZWFyY2hlZCBmb3IgbG9jYWwgc3ViY29tbWFuZCByZWxhdGl2ZSB0byBkaXJlY3RvcnkgJyR7ZXhlY3V0YWJsZURpcn0nYFxuICAgICAgOiAnbm8gZGlyZWN0b3J5IGZvciBzZWFyY2ggZm9yIGxvY2FsIHN1YmNvbW1hbmQsIHVzZSAuZXhlY3V0YWJsZURpcigpIHRvIHN1cHBseSBhIGN1c3RvbSBkaXJlY3RvcnknO1xuICAgIGNvbnN0IGV4ZWN1dGFibGVNaXNzaW5nID0gYCcke2V4ZWN1dGFibGVGaWxlfScgZG9lcyBub3QgZXhpc3RcbiAtIGlmICcke3N1YmNvbW1hbmROYW1lfScgaXMgbm90IG1lYW50IHRvIGJlIGFuIGV4ZWN1dGFibGUgY29tbWFuZCwgcmVtb3ZlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBmcm9tICcuY29tbWFuZCgpJyBhbmQgdXNlICcuZGVzY3JpcHRpb24oKScgaW5zdGVhZFxuIC0gaWYgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSBuYW1lIGlzIG5vdCBzdWl0YWJsZSwgdXNlIHRoZSBleGVjdXRhYmxlRmlsZSBvcHRpb24gdG8gc3VwcGx5IGEgY3VzdG9tIG5hbWUgb3IgcGF0aFxuIC0gJHtleGVjdXRhYmxlRGlyTWVzc2FnZX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihleGVjdXRhYmxlTWlzc2luZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHN1Yi1jb21tYW5kIGV4ZWN1dGFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGVjdXRlU3ViQ29tbWFuZChzdWJjb21tYW5kLCBhcmdzKSB7XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoKTtcbiAgICBsZXQgbGF1bmNoV2l0aE5vZGUgPSBmYWxzZTsgLy8gVXNlIG5vZGUgZm9yIHNvdXJjZSB0YXJnZXRzIHNvIGRvIG5vdCBuZWVkIHRvIGdldCBwZXJtaXNzaW9ucyBjb3JyZWN0LCBhbmQgb24gV2luZG93cy5cbiAgICBjb25zdCBzb3VyY2VFeHQgPSBbJy5qcycsICcudHMnLCAnLnRzeCcsICcubWpzJywgJy5janMnXTtcblxuICAgIGZ1bmN0aW9uIGZpbmRGaWxlKGJhc2VEaXIsIGJhc2VOYW1lKSB7XG4gICAgICAvLyBMb29rIGZvciBzcGVjaWZpZWQgZmlsZVxuICAgICAgY29uc3QgbG9jYWxCaW4gPSBwYXRoLnJlc29sdmUoYmFzZURpciwgYmFzZU5hbWUpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobG9jYWxCaW4pKSByZXR1cm4gbG9jYWxCaW47XG5cbiAgICAgIC8vIFN0b3AgbG9va2luZyBpZiBjYW5kaWRhdGUgYWxyZWFkeSBoYXMgYW4gZXhwZWN0ZWQgZXh0ZW5zaW9uLlxuICAgICAgaWYgKHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoYmFzZU5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gVHJ5IGFsbCB0aGUgZXh0ZW5zaW9ucy5cbiAgICAgIGNvbnN0IGZvdW5kRXh0ID0gc291cmNlRXh0LmZpbmQoKGV4dCkgPT5cbiAgICAgICAgZnMuZXhpc3RzU3luYyhgJHtsb2NhbEJpbn0ke2V4dH1gKSxcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRFeHQpIHJldHVybiBgJHtsb2NhbEJpbn0ke2ZvdW5kRXh0fWA7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTm90IGNoZWNraW5nIGZvciBoZWxwIGZpcnN0LiBVbmxpa2VseSB0byBoYXZlIG1hbmRhdG9yeSBhbmQgZXhlY3V0YWJsZSwgYW5kIGNhbid0IHJvYnVzdGx5IHRlc3QgZm9yIGhlbHAgZmxhZ3MgaW4gZXh0ZXJuYWwgY29tbWFuZC5cbiAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKTtcblxuICAgIC8vIGV4ZWN1dGFibGVGaWxlIGFuZCBleGVjdXRhYmxlRGlyIG1pZ2h0IGJlIGZ1bGwgcGF0aCwgb3IganVzdCBhIG5hbWVcbiAgICBsZXQgZXhlY3V0YWJsZUZpbGUgPVxuICAgICAgc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgfHwgYCR7dGhpcy5fbmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWA7XG4gICAgbGV0IGV4ZWN1dGFibGVEaXIgPSB0aGlzLl9leGVjdXRhYmxlRGlyIHx8ICcnO1xuICAgIGlmICh0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICBsZXQgcmVzb2x2ZWRTY3JpcHRQYXRoOyAvLyByZXNvbHZlIHBvc3NpYmxlIHN5bWxpbmsgZm9yIGluc3RhbGxlZCBucG0gYmluYXJ5XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSBmcy5yZWFscGF0aFN5bmModGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gdGhpcy5fc2NyaXB0UGF0aDtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguZGlybmFtZShyZXNvbHZlZFNjcmlwdFBhdGgpLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb29rIGZvciBhIGxvY2FsIGZpbGUgaW4gcHJlZmVyZW5jZSB0byBhIGNvbW1hbmQgaW4gUEFUSC5cbiAgICBpZiAoZXhlY3V0YWJsZURpcikge1xuICAgICAgbGV0IGxvY2FsRmlsZSA9IGZpbmRGaWxlKGV4ZWN1dGFibGVEaXIsIGV4ZWN1dGFibGVGaWxlKTtcblxuICAgICAgLy8gTGVnYWN5IHNlYXJjaCB1c2luZyBwcmVmaXggb2Ygc2NyaXB0IG5hbWUgaW5zdGVhZCBvZiBjb21tYW5kIG5hbWVcbiAgICAgIGlmICghbG9jYWxGaWxlICYmICFzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSAmJiB0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeU5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGgsXG4gICAgICAgICAgcGF0aC5leHRuYW1lKHRoaXMuX3NjcmlwdFBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobGVnYWN5TmFtZSAhPT0gdGhpcy5fbmFtZSkge1xuICAgICAgICAgIGxvY2FsRmlsZSA9IGZpbmRGaWxlKFxuICAgICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICAgIGAke2xlZ2FjeU5hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVGaWxlID0gbG9jYWxGaWxlIHx8IGV4ZWN1dGFibGVGaWxlO1xuICAgIH1cblxuICAgIGxhdW5jaFdpdGhOb2RlID0gc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShleGVjdXRhYmxlRmlsZSkpO1xuXG4gICAgbGV0IHByb2M7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgIGlmIChsYXVuY2hXaXRoTm9kZSkge1xuICAgICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcblxuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuYXJndlswXSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihleGVjdXRhYmxlRmlsZSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICBleGVjdXRhYmxlRmlsZSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICk7XG4gICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jLmtpbGxlZCkge1xuICAgICAgLy8gdGVzdGluZyBtYWlubHkgdG8gYXZvaWQgbGVhayB3YXJuaW5ncyBkdXJpbmcgdW5pdCB0ZXN0cyB3aXRoIG1vY2tlZCBzcGF3blxuICAgICAgY29uc3Qgc2lnbmFscyA9IFsnU0lHVVNSMScsICdTSUdVU1IyJywgJ1NJR1RFUk0nLCAnU0lHSU5UJywgJ1NJR0hVUCddO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICBpZiAocHJvYy5raWxsZWQgPT09IGZhbHNlICYmIHByb2MuZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgYmVjYXVzZSBzaWduYWxzIG5vdCB0eXBlZCB0byBrbm93biBzdHJpbmdzXG4gICAgICAgICAgICBwcm9jLmtpbGwoc2lnbmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCB0ZXJtaW5hdGUgcHJvY2VzcyB3aGVuIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVzLlxuICAgIGNvbnN0IGV4aXRDYWxsYmFjayA9IHRoaXMuX2V4aXRDYWxsYmFjaztcbiAgICBwcm9jLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICBjb2RlID0gY29kZSA/PyAxOyAvLyBjb2RlIGlzIG51bGwgaWYgc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsXG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGl0Q2FsbGJhY2soXG4gICAgICAgICAgbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgICAnKGNsb3NlKScsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUFDQ0VTJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2V4ZWN1dGFibGVGaWxlfScgbm90IGV4ZWN1dGFibGVgKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAxLFxuICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgJyhlcnJvciknLFxuICAgICAgICApO1xuICAgICAgICB3cmFwcGVkRXJyb3IubmVzdGVkRXJyb3IgPSBlcnI7XG4gICAgICAgIGV4aXRDYWxsYmFjayh3cmFwcGVkRXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcHJvY2Vzc1xuICAgIHRoaXMucnVubmluZ0NvbW1hbmQgPSBwcm9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaFN1YmNvbW1hbmQoY29tbWFuZE5hbWUsIG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKGNvbW1hbmROYW1lKTtcbiAgICBpZiAoIXN1YkNvbW1hbmQpIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuXG4gICAgc3ViQ29tbWFuZC5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKFxuICAgICAgcHJvbWlzZUNoYWluLFxuICAgICAgc3ViQ29tbWFuZCxcbiAgICAgICdwcmVTdWJjb21tYW5kJyxcbiAgICApO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT4ge1xuICAgICAgaWYgKHN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGVTdWJDb21tYW5kKHN1YkNvbW1hbmQsIG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3ViQ29tbWFuZC5fcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBoZWxwIGRpcmVjdGx5IGlmIHBvc3NpYmxlLCBvciBkaXNwYXRjaCBpZiBuZWNlc3NhcnkuXG4gICAqIGUuZy4gaGVscCBmb29cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoSGVscENvbW1hbmQoc3ViY29tbWFuZE5hbWUpIHtcbiAgICBpZiAoIXN1YmNvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLmhlbHAoKTtcbiAgICB9XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKHN1YmNvbW1hbmROYW1lKTtcbiAgICBpZiAoc3ViQ29tbWFuZCAmJiAhc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgIHN1YkNvbW1hbmQuaGVscCgpO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIHBhcnNpbmcgdGhlIGhlbHAgZmxhZyB0byBpbnZva2UgdGhlIGhlbHAuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChcbiAgICAgIHN1YmNvbW1hbmROYW1lLFxuICAgICAgW10sXG4gICAgICBbdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nID8/IHRoaXMuX2dldEhlbHBPcHRpb24oKT8uc2hvcnQgPz8gJy0taGVscCddLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhpcy5hcmdzIGFnYWluc3QgZXhwZWN0ZWQgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpIHtcbiAgICAvLyB0b28gZmV3XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZywgaSkgPT4ge1xuICAgICAgaWYgKGFyZy5yZXF1aXJlZCAmJiB0aGlzLmFyZ3NbaV0gPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1pc3NpbmdBcmd1bWVudChhcmcubmFtZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyB0b28gbWFueVxuICAgIGlmIChcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHNbdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCAtIDFdLnZhcmlhZGljXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmFyZ3MubGVuZ3RoID4gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fZXhjZXNzQXJndW1lbnRzKHRoaXMuYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhpcy5hcmdzIHVzaW5nIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyBhbmQgc2F2ZSBhcyB0aGlzLnByb2Nlc3NlZEFyZ3MhXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcm9jZXNzQXJndW1lbnRzKCkge1xuICAgIGNvbnN0IG15UGFyc2VBcmcgPSAoYXJndW1lbnQsIHZhbHVlLCBwcmV2aW91cykgPT4ge1xuICAgICAgLy8gRXh0cmEgcHJvY2Vzc2luZyBmb3IgbmljZSBlcnJvciBtZXNzYWdlIG9uIHBhcnNpbmcgZmFpbHVyZS5cbiAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIGFyZ3VtZW50LnBhcnNlQXJnKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IGNvbW1hbmQtYXJndW1lbnQgdmFsdWUgJyR7dmFsdWV9JyBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAnJHthcmd1bWVudC5uYW1lKCl9Jy5gO1xuICAgICAgICBwYXJzZWRWYWx1ZSA9IHRoaXMuX2NhbGxQYXJzZUFyZyhcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgICBpbnZhbGlkVmFsdWVNZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlO1xuICAgIH07XG5cbiAgICB0aGlzLl9jaGVja051bWJlck9mQXJndW1lbnRzKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRBcmdzID0gW107XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGRlY2xhcmVkQXJnLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGRlY2xhcmVkQXJnLnZhcmlhZGljKSB7XG4gICAgICAgIC8vIENvbGxlY3QgdG9nZXRoZXIgcmVtYWluaW5nIGFyZ3VtZW50cyBmb3IgcGFzc2luZyB0b2dldGhlciBhcyBhbiBhcnJheS5cbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5hcmdzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVkdWNlKChwcm9jZXNzZWQsIHYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHYsIHByb2Nlc3NlZCk7XG4gICAgICAgICAgICB9LCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3NbaW5kZXhdO1xuICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICB2YWx1ZSA9IG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHZhbHVlLCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWRBcmdzW2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IHByb2Nlc3NlZEFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogT25jZSB3ZSBoYXZlIGEgcHJvbWlzZSB3ZSBjaGFpbiwgYnV0IGNhbGwgc3luY2hyb25vdXNseSB1bnRpbCB0aGVuLlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsKHByb21pc2UsIGZuKSB7XG4gICAgLy8gdGhlbmFibGVcbiAgICBpZiAocHJvbWlzZT8udGhlbiAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgYSBwcm9taXNlLCBjaGFpbiBjYWxsYmFja1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoKSA9PiBmbigpKTtcbiAgICB9XG4gICAgLy8gY2FsbGJhY2sgbWlnaHQgcmV0dXJuIGEgcHJvbWlzZVxuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZSwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBjb25zdCBob29rcyA9IFtdO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbHRlcigoY21kKSA9PiBjbWQuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2goKGhvb2tlZENvbW1hbmQpID0+IHtcbiAgICAgICAgaG9va2VkQ29tbWFuZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgaG9va3MucHVzaCh7IGhvb2tlZENvbW1hbmQsIGNhbGxiYWNrIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIGlmIChldmVudCA9PT0gJ3Bvc3RBY3Rpb24nKSB7XG4gICAgICBob29rcy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgaG9va3MuZm9yRWFjaCgoaG9va0RldGFpbCkgPT4ge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fY2hhaW5PckNhbGwocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBob29rRGV0YWlsLmNhbGxiYWNrKGhvb2tEZXRhaWwuaG9va2VkQ29tbWFuZCwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHN1YkNvbW1hbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKHByb21pc2UsIHN1YkNvbW1hbmQsIGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IHByb21pc2U7XG4gICAgaWYgKHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaG9vayh0aGlzLCBzdWJDb21tYW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFyZ3VtZW50cyBpbiBjb250ZXh0IG9mIHRoaXMgY29tbWFuZC5cbiAgICogUmV0dXJucyBhY3Rpb24gcmVzdWx0LCBpbiBjYXNlIGl0IGlzIGEgcHJvbWlzZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VPcHRpb25zKHVua25vd24pO1xuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0VudigpOyAvLyBhZnRlciBjbGksIHNvIHBhcnNlQXJnIG5vdCBjYWxsZWQgb24gYm90aCBjbGkgYW5kIGVudlxuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0ltcGxpZWQoKTtcbiAgICBvcGVyYW5kcyA9IG9wZXJhbmRzLmNvbmNhdChwYXJzZWQub3BlcmFuZHMpO1xuICAgIHVua25vd24gPSBwYXJzZWQudW5rbm93bjtcbiAgICB0aGlzLmFyZ3MgPSBvcGVyYW5kcy5jb25jYXQodW5rbm93bik7XG5cbiAgICBpZiAob3BlcmFuZHMgJiYgdGhpcy5fZmluZENvbW1hbmQob3BlcmFuZHNbMF0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKG9wZXJhbmRzWzBdLCBvcGVyYW5kcy5zbGljZSgxKSwgdW5rbm93bik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgIG9wZXJhbmRzWzBdID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoSGVscENvbW1hbmQob3BlcmFuZHNbMV0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQodW5rbm93bik7IC8vIFJ1biB0aGUgaGVscCBmb3IgZGVmYXVsdCBjb21tYW5kIGZyb20gcGFyZW50IHJhdGhlciB0aGFuIHBhc3NpbmcgdG8gZGVmYXVsdCBjb21tYW5kXG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICAgIG9wZXJhbmRzLFxuICAgICAgICB1bmtub3duLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgIHRoaXMuYXJncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAhdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lXG4gICAgKSB7XG4gICAgICAvLyBwcm9iYWJseSBtaXNzaW5nIHN1YmNvbW1hbmQgYW5kIG5vIGhhbmRsZXIsIHVzZXIgbmVlZHMgaGVscCAoYW5kIGV4aXQpXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQocGFyc2VkLnVua25vd24pO1xuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gV2UgZG8gbm90IGFsd2F5cyBjYWxsIHRoaXMgY2hlY2sgdG8gYXZvaWQgbWFza2luZyBhIFwiYmV0dGVyXCIgZXJyb3IsIGxpa2UgdW5rbm93biBjb21tYW5kLlxuICAgIGNvbnN0IGNoZWNrRm9yVW5rbm93bk9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAocGFyc2VkLnVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVua25vd25PcHRpb24ocGFyc2VkLnVua25vd25bMF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjb21tYW5kRXZlbnQgPSBgY29tbWFuZDoke3RoaXMubmFtZSgpfWA7XG4gICAgaWYgKHRoaXMuX2FjdGlvbkhhbmRsZXIpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcblxuICAgICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZUNoYWluLCAncHJlQWN0aW9uJyk7XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+XG4gICAgICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIodGhpcy5wcm9jZXNzZWRBcmdzKSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwb3N0QWN0aW9uJyk7XG4gICAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXJlbnQ/Lmxpc3RlbmVyQ291bnQoY29tbWFuZEV2ZW50KSkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgfSBlbHNlIGlmIChvcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZCgnKicpKSB7XG4gICAgICAgIC8vIGxlZ2FjeSBkZWZhdWx0IGNvbW1hbmRcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZCgnKicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ2NvbW1hbmQ6KicpKSB7XG4gICAgICAgIC8vIHNraXAgb3B0aW9uIGNoZWNrLCBlbWl0IGV2ZW50IGZvciBwb3NzaWJsZSBtaXNzcGVsbGluZyBzdWdnZXN0aW9uXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDoqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVua25vd25Db21tYW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAvLyBUaGlzIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzIGFuZCBub3RoaW5nIGhvb2tlZCB1cCBhdCB0aGlzIGxldmVsLCBzbyBkaXNwbGF5IGhlbHAgKGFuZCBleGl0KS5cbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICAvLyBmYWxsIHRocm91Z2ggZm9yIGNhbGxlciB0byBoYW5kbGUgYWZ0ZXIgY2FsbGluZyAucGFyc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG1hdGNoaW5nIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBfZmluZENvbW1hbmQobmFtZSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5maW5kKFxuICAgICAgKGNtZCkgPT4gY21kLl9uYW1lID09PSBuYW1lIHx8IGNtZC5fYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb24gbWF0Y2hpbmcgYGFyZ2AgaWYgYW55LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2ZpbmRPcHRpb24oYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5pcyhhcmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBtYW5kYXRvcnkgb3B0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWx1ZS5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5vcHRpb25zLmZvckVhY2goKGFuT3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhbk9wdGlvbi5tYW5kYXRvcnkgJiZcbiAgICAgICAgICBjbWQuZ2V0T3B0aW9uVmFsdWUoYW5PcHRpb24uYXR0cmlidXRlTmFtZSgpKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNtZC5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUoYW5PcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlciBpbiB0aGlzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkgIT09ICdkZWZhdWx0JztcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmNvbmZsaWN0c1dpdGgubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgb3B0aW9uc1dpdGhDb25mbGljdGluZy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbmZsaWN0aW5nQW5kRGVmaW5lZCA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maW5kKChkZWZpbmVkKSA9PlxuICAgICAgICBvcHRpb24uY29uZmxpY3RzV2l0aC5pbmNsdWRlcyhkZWZpbmVkLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nQW5kRGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nQW5kRGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5fY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIG9wdGlvbnMgZnJvbSBgYXJndmAgcmVtb3Zpbmcga25vd24gb3B0aW9ucyxcbiAgICogYW5kIHJldHVybiBhcmd2IHNwbGl0IGludG8gb3BlcmFuZHMgYW5kIHVua25vd24gYXJndW1lbnRzLlxuICAgKlxuICAgKiBTaWRlIGVmZmVjdHM6IG1vZGlmaWVzIGNvbW1hbmQgYnkgc3RvcmluZyBvcHRpb25zLiBEb2VzIG5vdCByZXNldCBzdGF0ZSBpZiBjYWxsZWQgYWdhaW4uXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgYXJndiA9PiBvcGVyYW5kcywgdW5rbm93blxuICAgKiAgICAgLS1rbm93biBra2sgb3AgPT4gW29wXSwgW11cbiAgICogICAgIG9wIC0ta25vd24ga2trID0+IFtvcF0sIFtdXG4gICAqICAgICBzdWIgLS11bmtub3duIHV1dSBvcCA9PiBbc3ViXSwgWy0tdW5rbm93biB1dXUgb3BdXG4gICAqICAgICBzdWIgLS0gLS11bmtub3duIHV1dSBvcCA9PiBbc3ViIC0tdW5rbm93biB1dXUgb3BdLCBbXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gICAqIEByZXR1cm4ge3tvcGVyYW5kczogc3RyaW5nW10sIHVua25vd246IHN0cmluZ1tdfX1cbiAgICovXG5cbiAgcGFyc2VPcHRpb25zKGFyZ3MpIHtcbiAgICBjb25zdCBvcGVyYW5kcyA9IFtdOyAvLyBvcGVyYW5kcywgbm90IG9wdGlvbnMgb3IgdmFsdWVzXG4gICAgY29uc3QgdW5rbm93biA9IFtdOyAvLyBmaXJzdCB1bmtub3duIG9wdGlvbiBhbmQgcmVtYWluaW5nIHVua25vd24gYXJnc1xuICAgIGxldCBkZXN0ID0gb3BlcmFuZHM7XG5cbiAgICBmdW5jdGlvbiBtYXliZU9wdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBhcmcubGVuZ3RoID4gMSAmJiBhcmdbMF0gPT09ICctJztcbiAgICB9XG5cbiAgICBjb25zdCBuZWdhdGl2ZU51bWJlckFyZyA9IChhcmcpID0+IHtcbiAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBub3QgYSBuZWdhdGl2ZSBudW1iZXJcbiAgICAgIGlmICghL14tXFxkKlxcLj9cXGQrKGVbKy1dP1xcZCspPyQvLnRlc3QoYXJnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gbmVnYXRpdmUgbnVtYmVyIGlzIG9rIHVubGVzcyBkaWdpdCB1c2VkIGFzIGFuIG9wdGlvbiBpbiBjb21tYW5kIGhpZXJhcmNoeVxuICAgICAgcmV0dXJuICF0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuc29tZSgoY21kKSA9PlxuICAgICAgICBjbWQub3B0aW9uc1xuICAgICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnNob3J0KVxuICAgICAgICAgIC5zb21lKChzaG9ydCkgPT4gL14tXFxkJC8udGVzdChzaG9ydCkpLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcGFyc2Ugb3B0aW9uc1xuICAgIGxldCBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG4gICAgbGV0IGFjdGl2ZUdyb3VwID0gbnVsbDsgLy8gd29ya2luZyB0aHJvdWdoIGdyb3VwIG9mIHNob3J0IG9wdGlvbnMsIGxpa2UgLWFiY1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoIHx8IGFjdGl2ZUdyb3VwKSB7XG4gICAgICBjb25zdCBhcmcgPSBhY3RpdmVHcm91cCA/PyBhcmdzW2krK107XG4gICAgICBhY3RpdmVHcm91cCA9IG51bGw7XG5cbiAgICAgIC8vIGxpdGVyYWxcbiAgICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgICAgaWYgKGRlc3QgPT09IHVua25vd24pIGRlc3QucHVzaChhcmcpO1xuICAgICAgICBkZXN0LnB1c2goLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uICYmXG4gICAgICAgICghbWF5YmVPcHRpb24oYXJnKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7YWN0aXZlVmFyaWFkaWNPcHRpb24ubmFtZSgpfWAsIGFyZyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBudWxsO1xuXG4gICAgICBpZiAobWF5YmVPcHRpb24oYXJnKSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZyk7XG4gICAgICAgIC8vIHJlY29nbmlzZWQgb3B0aW9uLCBjYWxsIGxpc3RlbmVyIHRvIGFzc2lnbiB2YWx1ZSB3aXRoIHBvc3NpYmxlIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLm9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIC8vIGhpc3RvcmljYWwgYmVoYXZpb3VyIGlzIG9wdGlvbmFsIHZhbHVlIGlzIGZvbGxvd2luZyBhcmcgdW5sZXNzIGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpIDwgYXJncy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKCFtYXliZU9wdGlvbihhcmdzW2ldKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmdzW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gZmxhZ1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG9wdGlvbi52YXJpYWRpYyA/IG9wdGlvbiA6IG51bGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3IgY29tYm8gb3B0aW9ucyBmb2xsb3dpbmcgc2luZ2xlIGRhc2gsIGVhdCBmaXJzdCBvbmUgaWYga25vd24uXG4gICAgICBpZiAoYXJnLmxlbmd0aCA+IDIgJiYgYXJnWzBdID09PSAnLScgJiYgYXJnWzFdICE9PSAnLScpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihgLSR7YXJnWzFdfWApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAob3B0aW9uLm9wdGlvbmFsICYmIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiB3aXRoIHZhbHVlIGZvbGxvd2luZyBpbiBzYW1lIGFyZ3VtZW50XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBvcHRpb25cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcHJvY2Vzc2VkIG9wdGlvbiBhbmQga2VlcCBwcm9jZXNzaW5nIGdyb3VwXG4gICAgICAgICAgICBhY3RpdmVHcm91cCA9IGAtJHthcmcuc2xpY2UoMil9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3Iga25vd24gbG9uZyBmbGFnIHdpdGggdmFsdWUsIGxpa2UgLS1mb289YmFyXG4gICAgICBpZiAoL14tLVtePV0rPS8udGVzdChhcmcpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJnLmluZGV4T2YoJz0nKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihhcmcuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgICAgaWYgKG9wdGlvbiAmJiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhIHJlY29nbmlzZWQgb3B0aW9uIGJ5IHRoaXMgY29tbWFuZC5cbiAgICAgIC8vIE1pZ2h0IGJlIGEgY29tbWFuZC1hcmd1bWVudCwgb3Igc3ViY29tbWFuZCBvcHRpb24sIG9yIHVua25vd24gb3B0aW9uLCBvciBoZWxwIGNvbW1hbmQgb3Igb3B0aW9uLlxuXG4gICAgICAvLyBBbiB1bmtub3duIG9wdGlvbiBtZWFucyBmdXJ0aGVyIGFyZ3VtZW50cyBhbHNvIGNsYXNzaWZpZWQgYXMgdW5rbm93biBzbyBjYW4gYmUgcmVwcm9jZXNzZWQgYnkgc3ViY29tbWFuZHMuXG4gICAgICAvLyBBIG5lZ2F0aXZlIG51bWJlciBpbiBhIGxlYWYgY29tbWFuZCBpcyBub3QgYW4gdW5rbm93biBvcHRpb24uXG4gICAgICBpZiAoXG4gICAgICAgIGRlc3QgPT09IG9wZXJhbmRzICYmXG4gICAgICAgIG1heWJlT3B0aW9uKGFyZykgJiZcbiAgICAgICAgISh0aGlzLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCAmJiBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIGRlc3QgPSB1bmtub3duO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwb3NpdGlvbmFsT3B0aW9ucywgc3RvcCBwcm9jZXNzaW5nIG91ciBvcHRpb25zIGF0IHN1YmNvbW1hbmQuXG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyB8fCB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMpICYmXG4gICAgICAgIG9wZXJhbmRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB1bmtub3duLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZChhcmcpKSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChhcmcpO1xuICAgICAgICAgIHVua25vd24ucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpICYmXG4gICAgICAgICAgYXJnID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNpbmcgcGFzc1Rocm91Z2hPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3B0aW9ucyBhdCBmaXJzdCBjb21tYW5kLWFyZ3VtZW50LlxuICAgICAgaWYgKHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykge1xuICAgICAgICBkZXN0LnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBhcmdcbiAgICAgIGRlc3QucHVzaChhcmcpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG9wZXJhbmRzLCB1bmtub3duIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGxvY2FsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW91ciBzbyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aGVuIHN0aWxsIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgY29uc3QgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm9wdGlvbnNbaV0uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAga2V5ID09PSB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA/IHRoaXMuX3ZlcnNpb24gOiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIG1lcmdlZCBsb2NhbCBhbmQgZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzV2l0aEdsb2JhbHMoKSB7XG4gICAgLy8gZ2xvYmFscyBvdmVyd3JpdGUgbG9jYWxzXG4gICAgcmV0dXJuIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5yZWR1Y2UoXG4gICAgICAoY29tYmluZWRPcHRpb25zLCBjbWQpID0+IE9iamVjdC5hc3NpZ24oY29tYmluZWRPcHRpb25zLCBjbWQub3B0cygpKSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBlcnJvciBtZXNzYWdlIGFuZCBleGl0IChvciBjYWxsIGV4aXRPdmVycmlkZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXJyb3JPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Vycm9yT3B0aW9ucy5jb2RlXSAtIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZXJyb3JPcHRpb25zLmV4aXRDb2RlXSAtIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICovXG4gIGVycm9yKG1lc3NhZ2UsIGVycm9yT3B0aW9ucykge1xuICAgIC8vIG91dHB1dCBoYW5kbGluZ1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ub3V0cHV0RXJyb3IoXG4gICAgICBgJHttZXNzYWdlfVxcbmAsXG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyLFxuICAgICk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKGAke3RoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcn1cXG5gKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcikge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycignXFxuJyk7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBleGl0IGhhbmRsaW5nXG4gICAgY29uc3QgY29uZmlnID0gZXJyb3JPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGV4aXRDb2RlID0gY29uZmlnLmV4aXRDb2RlIHx8IDE7XG4gICAgY29uc3QgY29kZSA9IGNvbmZpZy5jb2RlIHx8ICdjb21tYW5kZXIuZXJyb3InO1xuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBvcHRpb24gcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlmIG9wdGlvbiBkb2VzXG4gICAqIG5vdCBoYXZlIGEgdmFsdWUgZnJvbSBjbGkgb3IgY2xpZW50IGNvZGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zRW52KCkge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24uZW52VmFyICYmIG9wdGlvbi5lbnZWYXIgaW4gcHJvY2Vzcy5lbnYpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgLy8gUHJpb3JpdHkgY2hlY2suIERvIG5vdCBvdmVyd3JpdGUgY2xpIG9yIG9wdGlvbnMgZnJvbSB1bmtub3duIHNvdXJjZSAoY2xpZW50LWNvZGUpLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBbJ2RlZmF1bHQnLCAnY29uZmlnJywgJ2VudiddLmluY2x1ZGVzKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiBjYW4gdGFrZSBhIHZhbHVlXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvcHRpb25hbCBhbHdheXMgdGFrZXMgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gLCBwcm9jZXNzLmVudltvcHRpb24uZW52VmFyXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW5cbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9ubHkgY2FyZSB0aGF0IGVudlZhciBkZWZpbmVkIGFuZCBub3QgdGhlIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IGltcGxpZWQgb3B0aW9uIHZhbHVlcywgaWYgb3B0aW9uIGlzIHVuZGVmaW5lZCBvciBkZWZhdWx0IHZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0ltcGxpZWQoKSB7XG4gICAgY29uc3QgZHVhbEhlbHBlciA9IG5ldyBEdWFsT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IGhhc0N1c3RvbU9wdGlvblZhbHVlID0gKG9wdGlvbktleSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIVsnZGVmYXVsdCcsICdpbXBsaWVkJ10uaW5jbHVkZXModGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMub3B0aW9uc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24uaW1wbGllZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgaGFzQ3VzdG9tT3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgJiZcbiAgICAgICAgICBkdWFsSGVscGVyLnZhbHVlRnJvbU9wdGlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uLmltcGxpZWQpXG4gICAgICAgICAgLmZpbHRlcigoaW1wbGllZEtleSkgPT4gIWhhc0N1c3RvbU9wdGlvblZhbHVlKGltcGxpZWRLZXkpKVxuICAgICAgICAgIC5mb3JFYWNoKChpbXBsaWVkS2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICAgICAgaW1wbGllZEtleSxcbiAgICAgICAgICAgICAgb3B0aW9uLmltcGxpZWRbaW1wbGllZEtleV0sXG4gICAgICAgICAgICAgICdpbXBsaWVkJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcmd1bWVudCBgbmFtZWAgaXMgbWlzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ0FyZ3VtZW50KG5hbWUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICcke25hbWV9J2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgYXJndW1lbnQgbWlzc2luZ2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIub3B0aW9uTWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIGFuZCBpcyBhIG1hbmRhdG9yeSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHJlcXVpcmVkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBub3Qgc3BlY2lmaWVkYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBjb25mbGljdGluZ09wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdPcHRpb24pIHtcbiAgICAvLyBUaGUgY2FsbGluZyBjb2RlIGRvZXMgbm90IGtub3cgd2hldGhlciBhIG5lZ2F0ZWQgb3B0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGhlXG4gICAgLy8gdmFsdWUsIHNvIGRvIHNvbWUgd29yayB0byB0YWtlIGFuIGVkdWNhdGVkIGd1ZXNzLlxuICAgIGNvbnN0IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpO1xuICAgICAgY29uc3QgbmVnYXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgY29uc3QgcG9zaXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gIXRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgbmVnYXRpdmVPcHRpb24gJiZcbiAgICAgICAgKChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25WYWx1ZSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9PT0gbmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmVnYXRpdmVPcHRpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gcG9zaXRpdmVPcHRpb24gfHwgb3B0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBiZXN0T3B0aW9uID0gZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUob3B0aW9uKTtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IGJlc3RPcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgICAgcmV0dXJuIGBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtiZXN0T3B0aW9uLmVudlZhcn0nYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgb3B0aW9uICcke2Jlc3RPcHRpb24uZmxhZ3N9J2A7XG4gICAgfTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKG9wdGlvbil9IGNhbm5vdCBiZSB1c2VkIHdpdGggJHtnZXRFcnJvck1lc3NhZ2UoY29uZmxpY3RpbmdPcHRpb24pfWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuY29uZmxpY3RpbmdPcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gb3B0aW9uIGBmbGFnYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bk9wdGlvbihmbGFnKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbikgcmV0dXJuO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAoZmxhZy5zdGFydHNXaXRoKCctLScpICYmIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgLy8gTG9vcGluZyB0byBwaWNrIHVwIHRoZSBnbG9iYWwgb3B0aW9ucyB0b29cbiAgICAgIGxldCBjYW5kaWRhdGVGbGFncyA9IFtdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1vcmVGbGFncyA9IGNvbW1hbmRcbiAgICAgICAgICAuY3JlYXRlSGVscCgpXG4gICAgICAgICAgLnZpc2libGVPcHRpb25zKGNvbW1hbmQpXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubG9uZylcbiAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5sb25nKTtcbiAgICAgICAgY2FuZGlkYXRlRmxhZ3MgPSBjYW5kaWRhdGVGbGFncy5jb25jYXQobW9yZUZsYWdzKTtcbiAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50O1xuICAgICAgfSB3aGlsZSAoY29tbWFuZCAmJiAhY29tbWFuZC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMpO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKGZsYWcsIGNhbmRpZGF0ZUZsYWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIG9wdGlvbiAnJHtmbGFnfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNlc3MgYXJndW1lbnRzLCBtb3JlIHRoYW4gZXhwZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJlY2VpdmVkQXJnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhjZXNzQXJndW1lbnRzKHJlY2VpdmVkQXJncykge1xuICAgIGlmICh0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgIGNvbnN0IHMgPSBleHBlY3RlZCA9PT0gMSA/ICcnIDogJ3MnO1xuICAgIGNvbnN0IGZvclN1YmNvbW1hbmQgPSB0aGlzLnBhcmVudCA/IGAgZm9yICcke3RoaXMubmFtZSgpfSdgIDogJyc7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdG9vIG1hbnkgYXJndW1lbnRzJHtmb3JTdWJjb21tYW5kfS4gRXhwZWN0ZWQgJHtleHBlY3RlZH0gYXJndW1lbnQke3N9IGJ1dCBnb3QgJHtyZWNlaXZlZEFyZ3MubGVuZ3RofS5gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmV4Y2Vzc0FyZ3VtZW50cycgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duQ29tbWFuZCgpIHtcbiAgICBjb25zdCB1bmtub3duTmFtZSA9IHRoaXMuYXJnc1swXTtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgY29uc3QgY2FuZGlkYXRlTmFtZXMgPSBbXTtcbiAgICAgIHRoaXMuY3JlYXRlSGVscCgpXG4gICAgICAgIC52aXNpYmxlQ29tbWFuZHModGhpcylcbiAgICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQubmFtZSgpKTtcbiAgICAgICAgICAvLyBqdXN0IHZpc2libGUgYWxpYXNcbiAgICAgICAgICBpZiAoY29tbWFuZC5hbGlhcygpKSBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQuYWxpYXMoKSk7XG4gICAgICAgIH0pO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKHVua25vd25OYW1lLCBjYW5kaWRhdGVOYW1lcyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBjb21tYW5kICcke3Vua25vd25OYW1lfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duQ29tbWFuZCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgcHJvZ3JhbSB2ZXJzaW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdXRvLXJlZ2lzdGVycyB0aGUgXCItViwgLS12ZXJzaW9uXCIgb3B0aW9uIHdoaWNoIHdpbGwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLlxuICAgKlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBmbGFncyBhbmQgZGVzY3JpcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHRoaXMgfCBzdHJpbmcgfCB1bmRlZmluZWQpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHZlcnNpb24gc3RyaW5nIGlmIG5vIGFyZ3VtZW50c1xuICAgKi9cblxuICB2ZXJzaW9uKHN0ciwgZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgICB0aGlzLl92ZXJzaW9uID0gc3RyO1xuICAgIGZsYWdzID0gZmxhZ3MgfHwgJy1WLCAtLXZlcnNpb24nO1xuICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJ291dHB1dCB0aGUgdmVyc2lvbiBudW1iZXInO1xuICAgIGNvbnN0IHZlcnNpb25PcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID0gdmVyc2lvbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24odmVyc2lvbk9wdGlvbik7XG5cbiAgICB0aGlzLm9uKCdvcHRpb246JyArIHZlcnNpb25PcHRpb24ubmFtZSgpLCAoKSA9PiB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KGAke3N0cn1cXG5gKTtcbiAgICAgIHRoaXMuX2V4aXQoMCwgJ2NvbW1hbmRlci52ZXJzaW9uJywgc3RyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzRGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBkZXNjcmlwdGlvbihzdHIsIGFyZ3NEZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCAmJiBhcmdzRGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHN0cjtcbiAgICBpZiAoYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSBhcmdzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3VtbWFyeS4gVXNlZCB3aGVuIGxpc3RlZCBhcyBzdWJjb21tYW5kIG9mIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBzdW1tYXJ5KHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3N1bW1hcnk7XG4gICAgdGhpcy5fc3VtbWFyeSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gYWxpYXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBZb3UgbWF5IGNhbGwgbW9yZSB0aGFuIG9uY2UgdG8gYWRkIG11bHRpcGxlIGFsaWFzZXMuIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhcyhhbGlhcykge1xuICAgIGlmIChhbGlhcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlc1swXTsgLy8ganVzdCByZXR1cm4gZmlyc3QsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdLl9leGVjdXRhYmxlSGFuZGxlclxuICAgICkge1xuICAgICAgLy8gYXNzdW1lIGFkZGluZyBhbGlhcyBmb3IgbGFzdCBhZGRlZCBleGVjdXRhYmxlIHN1YmNvbW1hbmQsIHJhdGhlciB0aGFuIHRoaXNcbiAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgaWYgKGFsaWFzID09PSBjb21tYW5kLl9uYW1lKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbWFuZCBhbGlhcyBjYW4ndCBiZSB0aGUgc2FtZSBhcyBpdHMgbmFtZVwiKTtcbiAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmQgPSB0aGlzLnBhcmVudD8uX2ZpbmRDb21tYW5kKGFsaWFzKTtcbiAgICBpZiAobWF0Y2hpbmdDb21tYW5kKSB7XG4gICAgICAvLyBjLmYuIF9yZWdpc3RlckNvbW1hbmRcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ21kID0gW21hdGNoaW5nQ29tbWFuZC5uYW1lKCldXG4gICAgICAgIC5jb25jYXQobWF0Y2hpbmdDb21tYW5kLmFsaWFzZXMoKSlcbiAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgYWxpYXMgJyR7YWxpYXN9JyB0byBjb21tYW5kICcke3RoaXMubmFtZSgpfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbW1hbmQuX2FsaWFzZXMucHVzaChhbGlhcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFsaWFzZXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FsaWFzZXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmdbXXxDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgLy8gR2V0dGVyIGZvciB0aGUgYXJyYXkgb2YgYWxpYXNlcyBpcyB0aGUgbWFpbiByZWFzb24gZm9yIGhhdmluZyBhbGlhc2VzKCkgaW4gYWRkaXRpb24gdG8gYWxpYXMoKS5cbiAgICBpZiAoYWxpYXNlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlcztcblxuICAgIGFsaWFzZXMuZm9yRWFjaCgoYWxpYXMpID0+IHRoaXMuYWxpYXMoYWxpYXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgLyBnZXQgdGhlIGNvbW1hbmQgdXNhZ2UgYHN0cmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICB1c2FnZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl91c2FnZSkgcmV0dXJuIHRoaXMuX3VzYWdlO1xuXG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLm1hcCgoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gW11cbiAgICAgICAgLmNvbmNhdChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoIHx8IHRoaXMuX2hlbHBPcHRpb24gIT09IG51bGwgPyAnW29wdGlvbnNdJyA6IFtdLFxuICAgICAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoID8gJ1tjb21tYW5kXScgOiBbXSxcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID8gYXJncyA6IFtdLFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXNhZ2UgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIG5hbWUoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB0aGlzLl9uYW1lID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZyBmb3IgdGhpcyBzdWJjb21tYW5kIGluIHBhcmVudCBjb21tYW5kJ3MgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cblxuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID8/ICcnO1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGRlZmF1bHQgaGVscCBncm91cCBoZWFkaW5nIGZvciBzdWJjb21tYW5kcyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBzdWJjb21tYW5kIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uY29tbWFuZHNHcm91cCgnRGV2ZWxvcG1lbnQgQ29tbWFuZHM6KTtcbiAgICogcHJvZ3JhbS5jb21tYW5kKCd3YXRjaCcpLi4uXG4gICAqIHByb2dyYW0uY29tbWFuZCgnbGludCcpLi4uXG4gICAqIC4uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgY29tbWFuZHNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPz8gJyc7XG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIG9wdGlvbnMgYWRkZWQgdG8gdGhpcyBjb21tYW5kLlxuICAgKiAoVGhpcyBkb2VzIG5vdCBvdmVycmlkZSBhIGdyb3VwIHNldCBkaXJlY3RseSBvbiB0aGUgb3B0aW9uIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAub3B0aW9uc0dyb3VwKCdEZXZlbG9wbWVudCBPcHRpb25zOicpXG4gICAqICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnb3V0cHV0IGV4dHJhIGRlYnVnZ2luZycpXG4gICAqICAgLm9wdGlvbignLXAsIC0tcHJvZmlsZScsICdvdXRwdXQgcHJvZmlsaW5nIGluZm9ybWF0aW9uJylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJucyB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG4gIG9wdGlvbnNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0T3B0aW9uR3JvdXAob3B0aW9uKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCAmJiAhb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcpXG4gICAgICBvcHRpb24uaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0Q29tbWFuZEdyb3VwKGNtZCkge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwICYmICFjbWQuaGVscEdyb3VwKCkpXG4gICAgICBjbWQuaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmcm9tIHNjcmlwdCBmaWxlbmFtZSwgc3VjaCBhcyBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAqIG9yIHJlcXVpcmUubWFpbi5maWxlbmFtZSwgb3IgX19maWxlbmFtZS5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSBhbmQgcHVibGljIGFsdGhvdWdoIG5vdCBkb2N1bWVudGVkIGluIFJFQURNRS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ubmFtZUZyb21GaWxlbmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybiB7Q29tbWFuZH1cbiAgICovXG5cbiAgbmFtZUZyb21GaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHRoaXMuX25hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lLCBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGRpcmVjdG9yeSBmb3Igc2VhcmNoaW5nIGZvciBleGVjdXRhYmxlIHN1YmNvbW1hbmRzIG9mIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKF9fZGlybmFtZSk7XG4gICAqIC8vIG9yXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcignc3ViY29tbWFuZHMnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfG51bGx8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGV4ZWN1dGFibGVEaXIocGF0aCkge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9leGVjdXRhYmxlRGlyO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVEaXIgPSBwYXRoO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBwcm9ncmFtIGhlbHAgZG9jdW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cmFwIGZvciBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBoZWxwSW5mb3JtYXRpb24oY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb25zdCBoZWxwZXIgPSB0aGlzLmNyZWF0ZUhlbHAoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucyk7XG4gICAgaGVscGVyLnByZXBhcmVDb250ZXh0KHtcbiAgICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgICAgaGVscFdpZHRoOiBjb250ZXh0LmhlbHBXaWR0aCxcbiAgICAgIG91dHB1dEhhc0NvbG9yczogY29udGV4dC5oYXNDb2xvcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdGV4dCA9IGhlbHBlci5mb3JtYXRIZWxwKHRoaXMsIGhlbHBlcik7XG4gICAgaWYgKGNvbnRleHQuaGFzQ29sb3JzKSByZXR1cm4gdGV4dDtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIEhlbHBDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGhlbHBXaWR0aFxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGhhc0NvbG9yc1xuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB3cml0ZSAtIGluY2x1ZGVzIHN0cmlwQ29sb3IgaWYgbmVlZGVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtIZWxwQ29udGV4dH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGVycm9yID0gISFjb250ZXh0T3B0aW9ucy5lcnJvcjtcbiAgICBsZXQgYmFzZVdyaXRlO1xuICAgIGxldCBoYXNDb2xvcnM7XG4gICAgbGV0IGhlbHBXaWR0aDtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhlbHBXaWR0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlV3JpdGUgPSAoc3RyKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KHN0cik7XG4gICAgICBoYXNDb2xvcnMgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhhc0NvbG9ycygpO1xuICAgICAgaGVscFdpZHRoID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRPdXRIZWxwV2lkdGgoKTtcbiAgICB9XG4gICAgY29uc3Qgd3JpdGUgPSAoc3RyKSA9PiB7XG4gICAgICBpZiAoIWhhc0NvbG9ycykgc3RyID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHN0cik7XG4gICAgICByZXR1cm4gYmFzZVdyaXRlKHN0cik7XG4gICAgfTtcbiAgICByZXR1cm4geyBlcnJvciwgd3JpdGUsIGhhc0NvbG9ycywgaGVscFdpZHRoIH07XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH0gfCBGdW5jdGlvbn0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKi9cblxuICBvdXRwdXRIZWxwKGNvbnRleHRPcHRpb25zKSB7XG4gICAgbGV0IGRlcHJlY2F0ZWRDYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIGNvbnRleHRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZXByZWNhdGVkQ2FsbGJhY2sgPSBjb250ZXh0T3B0aW9ucztcbiAgICAgIGNvbnRleHRPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dENvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICAvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqL1xuICAgIGNvbnN0IGV2ZW50Q29udGV4dCA9IHtcbiAgICAgIGVycm9yOiBvdXRwdXRDb250ZXh0LmVycm9yLFxuICAgICAgd3JpdGU6IG91dHB1dENvbnRleHQud3JpdGUsXG4gICAgICBjb21tYW5kOiB0aGlzLFxuICAgIH07XG5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiBjb21tYW5kLmVtaXQoJ2JlZm9yZUFsbEhlbHAnLCBldmVudENvbnRleHQpKTtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZUhlbHAnLCBldmVudENvbnRleHQpO1xuXG4gICAgbGV0IGhlbHBJbmZvcm1hdGlvbiA9IHRoaXMuaGVscEluZm9ybWF0aW9uKHsgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IgfSk7XG4gICAgaWYgKGRlcHJlY2F0ZWRDYWxsYmFjaykge1xuICAgICAgaGVscEluZm9ybWF0aW9uID0gZGVwcmVjYXRlZENhbGxiYWNrKGhlbHBJbmZvcm1hdGlvbik7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBoZWxwSW5mb3JtYXRpb24gIT09ICdzdHJpbmcnICYmXG4gICAgICAgICFCdWZmZXIuaXNCdWZmZXIoaGVscEluZm9ybWF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3V0cHV0SGVscCBjYWxsYmFjayBtdXN0IHJldHVybiBhIHN0cmluZyBvciBhIEJ1ZmZlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRDb250ZXh0LndyaXRlKGhlbHBJbmZvcm1hdGlvbik7XG5cbiAgICBpZiAodGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nKSB7XG4gICAgICB0aGlzLmVtaXQodGhpcy5fZ2V0SGVscE9wdGlvbigpLmxvbmcpOyAvLyBkZXByZWNhdGVkXG4gICAgfVxuICAgIHRoaXMuZW1pdCgnYWZ0ZXJIZWxwJywgZXZlbnRDb250ZXh0KTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY29tbWFuZCkgPT5cbiAgICAgIGNvbW1hbmQuZW1pdCgnYWZ0ZXJBbGxIZWxwJywgZXZlbnRDb250ZXh0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gcGFzcyBpbiBmbGFncyBhbmQgYSBkZXNjcmlwdGlvbiB0byBjdXN0b21pc2UgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBQYXNzIGluIGZhbHNlIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oJy0/LCAtLWhlbHAnICdzaG93IGhlbHAnKTsgLy8gY3VzdG9taXNlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbihmYWxzZSk7IC8vIGRpc2FibGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgYm9vbGVhbil9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBoZWxwT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIC8vIFN1cHBvcnQgZW5hYmxpbmcvZGlzYWJsaW5nIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKGZsYWdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSBudWxsKSB0aGlzLl9oZWxwT3B0aW9uID0gdW5kZWZpbmVkOyAvLyByZWVuYWJsZVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKSB7XG4gICAgICAgICAgLy8gbWFrZSB0aGUgb3B0aW9uIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9oZWxwT3B0aW9uID0gbnVsbDsgLy8gZGlzYWJsZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9taXNlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbi5cbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oXG4gICAgICBmbGFncyA/PyAnLWgsIC0taGVscCcsXG4gICAgICBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJyxcbiAgICApO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGZsYWdzIHx8IGRlc2NyaXB0aW9uKSB0aGlzLl9pbml0T3B0aW9uR3JvdXAodGhpcy5faGVscE9wdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIG9wdGlvbi5cbiAgICogUmV0dXJucyBudWxsIGlmIGhhcyBiZWVuIGRpc2FibGVkIHdpdGggLmhlbHBPcHRpb24oZmFsc2UpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7KE9wdGlvbiB8IG51bGwpfSB0aGUgaGVscCBvcHRpb25cbiAgICogQHBhY2thZ2VcbiAgICovXG4gIF9nZXRIZWxwT3B0aW9uKCkge1xuICAgIC8vIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uIG9uIGRlbWFuZC5cbiAgICBpZiAodGhpcy5faGVscE9wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhlbHBPcHRpb24odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGVscE9wdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwbHkgeW91ciBvd24gb3B0aW9uIHRvIHVzZSBmb3IgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIGhlbHBPcHRpb24oKSB0byBjdXN0b21pc2UgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRIZWxwT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBvcHRpb247XG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIGhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLm91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpO1xuICAgIGxldCBleGl0Q29kZSA9IE51bWJlcihwcm9jZXNzLmV4aXRDb2RlID8/IDApOyAvLyBwcm9jZXNzLmV4aXRDb2RlIGRvZXMgYWxsb3cgYSBzdHJpbmcgb3IgYW4gaW50ZWdlciwgYnV0IHdlIHByZWZlciBqdXN0IGEgbnVtYmVyXG4gICAgaWYgKFxuICAgICAgZXhpdENvZGUgPT09IDAgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zICYmXG4gICAgICB0eXBlb2YgY29udGV4dE9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zLmVycm9yXG4gICAgKSB7XG4gICAgICBleGl0Q29kZSA9IDE7XG4gICAgfVxuICAgIC8vIG1lc3NhZ2U6IGRvIG5vdCBoYXZlIGFsbCBkaXNwbGF5ZWQgdGV4dCBhdmFpbGFibGUgc28gb25seSBwYXNzaW5nIHBsYWNlaG9sZGVyLlxuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsICdjb21tYW5kZXIuaGVscCcsICcob3V0cHV0SGVscCknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAvLyBEbyBhIGxpdHRsZSB0eXBpbmcgdG8gY29vcmRpbmF0ZSBlbWl0IGFuZCBsaXN0ZW5lciBmb3IgdGhlIGhlbHAgdGV4dCBldmVudHMuXG4gICAqIEB0eXBlZGVmIEhlbHBUZXh0RXZlbnRDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBZGQgYWRkaXRpb25hbCB0ZXh0IHRvIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBQb3NpdGlvbiBpcyAnYmVmb3JlJyBvciAnYWZ0ZXInIHRvIGFmZmVjdCBqdXN0IHRoaXMgY29tbWFuZCxcbiAgICogYW5kICdiZWZvcmVBbGwnIG9yICdhZnRlckFsbCcgdG8gYWZmZWN0IHRoaXMgY29tbWFuZCBhbmQgYWxsIGl0cyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uIC0gYmVmb3JlIG9yIGFmdGVyIGJ1aWx0LWluIGhlbHBcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgRnVuY3Rpb24pfSB0ZXh0IC0gc3RyaW5nIHRvIGFkZCwgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZEhlbHBUZXh0KHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgY29uc3QgYWxsb3dlZFZhbHVlcyA9IFsnYmVmb3JlQWxsJywgJ2JlZm9yZScsICdhZnRlcicsICdhZnRlckFsbCddO1xuICAgIGlmICghYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyhwb3NpdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3IgcG9zaXRpb24gdG8gYWRkSGVscFRleHQuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IGhlbHBFdmVudCA9IGAke3Bvc2l0aW9ufUhlbHBgO1xuICAgIHRoaXMub24oaGVscEV2ZW50LCAoLyoqIEB0eXBlIHtIZWxwVGV4dEV2ZW50Q29udGV4dH0gKi8gY29udGV4dCkgPT4ge1xuICAgICAgbGV0IGhlbHBTdHI7XG4gICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQoeyBlcnJvcjogY29udGV4dC5lcnJvciwgY29tbWFuZDogY29udGV4dC5jb21tYW5kIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQ7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgZmFsc3kgdmFsdWUgd2hlbiBub3RoaW5nIHRvIG91dHB1dC5cbiAgICAgIGlmIChoZWxwU3RyKSB7XG4gICAgICAgIGNvbnRleHQud3JpdGUoYCR7aGVscFN0cn1cXG5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBoZWxwIGZsYWdzIHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIC0gYXJyYXkgb2Ygb3B0aW9ucyB0byBzZWFyY2ggZm9yIGhlbHAgZmxhZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX291dHB1dEhlbHBJZlJlcXVlc3RlZChhcmdzKSB7XG4gICAgY29uc3QgaGVscE9wdGlvbiA9IHRoaXMuX2dldEhlbHBPcHRpb24oKTtcbiAgICBjb25zdCBoZWxwUmVxdWVzdGVkID0gaGVscE9wdGlvbiAmJiBhcmdzLmZpbmQoKGFyZykgPT4gaGVscE9wdGlvbi5pcyhhcmcpKTtcbiAgICBpZiAoaGVscFJlcXVlc3RlZCkge1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKCk7XG4gICAgICAvLyAoRG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuKVxuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLmhlbHBEaXNwbGF5ZWQnLCAnKG91dHB1dEhlbHApJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2NhbiBhcmd1bWVudHMgYW5kIGluY3JlbWVudCBwb3J0IG51bWJlciBmb3IgaW5zcGVjdCBjYWxscyAodG8gYXZvaWQgY29uZmxpY3RzIHdoZW4gc3Bhd25pbmcgbmV3IGNvbW1hbmQpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBhcnJheSBvZiBhcmd1bWVudHMgZnJvbSBub2RlLmV4ZWNBcmd2XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KGFyZ3MpIHtcbiAgLy8gVGVzdGluZyBmb3IgdGhlc2Ugb3B0aW9uczpcbiAgLy8gIC0taW5zcGVjdFs9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtYnJrWz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1wb3J0PVtob3N0Ol1wb3J0XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aCgnLS1pbnNwZWN0JykpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGxldCBkZWJ1Z09wdGlvbjtcbiAgICBsZXQgZGVidWdIb3N0ID0gJzEyNy4wLjAuMSc7XG4gICAgbGV0IGRlYnVnUG9ydCA9ICc5MjI5JztcbiAgICBsZXQgbWF0Y2g7XG4gICAgaWYgKChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJyayk/KSQvKSkgIT09IG51bGwpIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBpZiAoL15cXGQrJC8udGVzdChtYXRjaFszXSkpIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9MTIzNFxuICAgICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFszXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdFxuICAgICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKyk6KFxcZCspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0OjEyMzRcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzRdO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z09wdGlvbiAmJiBkZWJ1Z1BvcnQgIT09ICcwJykge1xuICAgICAgcmV0dXJuIGAke2RlYnVnT3B0aW9ufT0ke2RlYnVnSG9zdH06JHtwYXJzZUludChkZWJ1Z1BvcnQpICsgMX1gO1xuICAgIH1cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAqIEBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbG9yKCkge1xuICAvLyBUZXN0IGZvciBjb21tb24gY29udmVudGlvbnMuXG4gIC8vIE5COiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3VyIGlzIGluIGNvbWJpbmF0aW9uIHdpdGggaG93IGF1dGhvciBhZGRzIGNvbG9yISBGb3IgZXhhbXBsZTpcbiAgLy8gICAtIHdlIGRvIG5vdCB0ZXN0IE5PREVfRElTQUJMRV9DT0xPUlMsIGJ1dCB1dGlsOnN0eWxldGV4dCBkb2VzXG4gIC8vICAgLSB3ZSBkbyB0ZXN0IE5PX0NPTE9SLCBidXQgQ2hhbGsgZG9lcyBub3RcbiAgLy9cbiAgLy8gUmVmZXJlbmNlczpcbiAgLy8gaHR0cHM6Ly9uby1jb2xvci5vcmdcbiAgLy8gaHR0cHM6Ly9iaXhlbnNlLmNvbS9jbGljb2xvcnMvXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzBhMDAyMTdhNWY2N2VmNGEyMjM4NGNmYzgwZWI2ZGQ5YTkxN2ZkYzEvbGliL2ludGVybmFsL3R0eS5qcyNMMTA5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9zdXBwb3J0cy1jb2xvci9ibG9iL2MyMTQzMTRhMTRiY2IxNzRiMTJiMzAxNGIyYjBhOGRlMzc1MDI5YWUvaW5kZXguanMjTDMzXG4gIC8vIChodHRwczovL2ZvcmNlLWNvbG9yLm9yZyByZWNlbnQgd2ViIHBhZ2UgZnJvbSAyMDIzLCBkb2VzIG5vdCBtYXRjaCBtYWpvciBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9ucylcblxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJzAnIHx8XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZSdcbiAgKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SIHx8IHByb2Nlc3MuZW52LkNMSUNPTE9SX0ZPUkNFICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLnVzZUNvbG9yID0gdXNlQ29sb3I7IC8vIGV4cG9ydGluZyBmb3IgdGVzdHNcbiIsICJjb25zdCB7IEFyZ3VtZW50IH0gPSByZXF1aXJlKCcuL2xpYi9hcmd1bWVudC5qcycpO1xuY29uc3QgeyBDb21tYW5kIH0gPSByZXF1aXJlKCcuL2xpYi9jb21tYW5kLmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9saWIvZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCB9ID0gcmVxdWlyZSgnLi9saWIvaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24gfSA9IHJlcXVpcmUoJy4vbGliL29wdGlvbi5qcycpO1xuXG5leHBvcnRzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5leHBvcnRzLmNyZWF0ZUNvbW1hbmQgPSAobmFtZSkgPT4gbmV3IENvbW1hbmQobmFtZSk7XG5leHBvcnRzLmNyZWF0ZU9wdGlvbiA9IChmbGFncywgZGVzY3JpcHRpb24pID0+IG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbmV4cG9ydHMuY3JlYXRlQXJndW1lbnQgPSAobmFtZSwgZGVzY3JpcHRpb24pID0+IG5ldyBBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG5cbi8qKlxuICogRXhwb3NlIGNsYXNzZXNcbiAqL1xuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG5leHBvcnRzLkludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7IC8vIERlcHJlY2F0ZWRcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrSGVhZGVyc0xpc3Q6IFN5bWJvbCgnaGVhZGVycyBsaXN0JyksXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dDogU3ltYm9sKCdkZWZhdWx0IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dDogU3ltYm9sKCdtYXgga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCB0aHJlc2hvbGQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZTogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZTogU3ltYm9sKCdrZWVwIGFsaXZlJyksXG4gIGtIZWFkZXJzVGltZW91dDogU3ltYm9sKCdoZWFkZXJzIHRpbWVvdXQnKSxcbiAga0JvZHlUaW1lb3V0OiBTeW1ib2woJ2JvZHkgdGltZW91dCcpLFxuICBrU2VydmVyTmFtZTogU3ltYm9sKCdzZXJ2ZXIgbmFtZScpLFxuICBrTG9jYWxBZGRyZXNzOiBTeW1ib2woJ2xvY2FsIGFkZHJlc3MnKSxcbiAga0hvc3Q6IFN5bWJvbCgnaG9zdCcpLFxuICBrTm9SZWY6IFN5bWJvbCgnbm8gcmVmJyksXG4gIGtCb2R5VXNlZDogU3ltYm9sKCd1c2VkJyksXG4gIGtSdW5uaW5nOiBTeW1ib2woJ3J1bm5pbmcnKSxcbiAga0Jsb2NraW5nOiBTeW1ib2woJ2Jsb2NraW5nJyksXG4gIGtQZW5kaW5nOiBTeW1ib2woJ3BlbmRpbmcnKSxcbiAga1NpemU6IFN5bWJvbCgnc2l6ZScpLFxuICBrQnVzeTogU3ltYm9sKCdidXN5JyksXG4gIGtRdWV1ZWQ6IFN5bWJvbCgncXVldWVkJyksXG4gIGtGcmVlOiBTeW1ib2woJ2ZyZWUnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKSxcbiAga0Nsb3NlZDogU3ltYm9sKCdjbG9zZWQnKSxcbiAga05lZWREcmFpbjogU3ltYm9sKCduZWVkIGRyYWluJyksXG4gIGtSZXNldDogU3ltYm9sKCdyZXNldCcpLFxuICBrRGVzdHJveWVkOiBTeW1ib2wuZm9yKCdub2RlanMuc3RyZWFtLmRlc3Ryb3llZCcpLFxuICBrTWF4SGVhZGVyc1NpemU6IFN5bWJvbCgnbWF4IGhlYWRlcnMgc2l6ZScpLFxuICBrUnVubmluZ0lkeDogU3ltYm9sKCdydW5uaW5nIGluZGV4JyksXG4gIGtQZW5kaW5nSWR4OiBTeW1ib2woJ3BlbmRpbmcgaW5kZXgnKSxcbiAga0Vycm9yOiBTeW1ib2woJ2Vycm9yJyksXG4gIGtDbGllbnRzOiBTeW1ib2woJ2NsaWVudHMnKSxcbiAga0NsaWVudDogU3ltYm9sKCdjbGllbnQnKSxcbiAga1BhcnNlcjogU3ltYm9sKCdwYXJzZXInKSxcbiAga09uRGVzdHJveWVkOiBTeW1ib2woJ2Rlc3Ryb3kgY2FsbGJhY2tzJyksXG4gIGtQaXBlbGluaW5nOiBTeW1ib2woJ3BpcGVsaW5pbmcnKSxcbiAga1NvY2tldDogU3ltYm9sKCdzb2NrZXQnKSxcbiAga0hvc3RIZWFkZXI6IFN5bWJvbCgnaG9zdCBoZWFkZXInKSxcbiAga0Nvbm5lY3RvcjogU3ltYm9sKCdjb25uZWN0b3InKSxcbiAga1N0cmljdENvbnRlbnRMZW5ndGg6IFN5bWJvbCgnc3RyaWN0IGNvbnRlbnQgbGVuZ3RoJyksXG4gIGtNYXhSZWRpcmVjdGlvbnM6IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJyksXG4gIGtNYXhSZXF1ZXN0czogU3ltYm9sKCdtYXhSZXF1ZXN0c1BlckNsaWVudCcpLFxuICBrUHJveHk6IFN5bWJvbCgncHJveHkgYWdlbnQgb3B0aW9ucycpLFxuICBrQ291bnRlcjogU3ltYm9sKCdzb2NrZXQgcmVxdWVzdCBjb3VudGVyJyksXG4gIGtJbnRlcmNlcHRvcnM6IFN5bWJvbCgnZGlzcGF0Y2ggaW50ZXJjZXB0b3JzJyksXG4gIGtNYXhSZXNwb25zZVNpemU6IFN5bWJvbCgnbWF4IHJlc3BvbnNlIHNpemUnKSxcbiAga0hUVFAyU2Vzc2lvbjogU3ltYm9sKCdodHRwMlNlc3Npb24nKSxcbiAga0hUVFAyU2Vzc2lvblN0YXRlOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbiBzdGF0ZScpLFxuICBrSFRUUDJCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDIgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDEgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDJDb3B5SGVhZGVyczogU3ltYm9sKCdodHRwMiBjb3B5IGhlYWRlcnMnKSxcbiAga0hUVFBDb25uVmVyc2lvbjogU3ltYm9sKCdodHRwIGNvbm5lY3Rpb24gdmVyc2lvbicpLFxuICBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5OiBTeW1ib2woJ3JldHJ5IGFnZW50IGRlZmF1bHQgcmV0cnknKSxcbiAga0NvbnN0cnVjdDogU3ltYm9sKCdjb25zdHJ1Y3RhYmxlJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+fSAqL1xuY29uc3QgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgPSB7fVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnNcbmNvbnN0IHdlbGxrbm93bkhlYWRlck5hbWVzID0gW1xuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAnQWNjZXB0LVJhbmdlcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kJyxcbiAgJ0FnZScsXG4gICdBbGxvdycsXG4gICdBbHQtU3ZjJyxcbiAgJ0FsdC1Vc2VkJyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDbGVhci1TaXRlLURhdGEnLFxuICAnQ29ubmVjdGlvbicsXG4gICdDb250ZW50LURpc3Bvc2l0aW9uJyxcbiAgJ0NvbnRlbnQtRW5jb2RpbmcnLFxuICAnQ29udGVudC1MYW5ndWFnZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdDb250ZW50LUxvY2F0aW9uJyxcbiAgJ0NvbnRlbnQtUmFuZ2UnLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknLFxuICAnQ29udGVudC1UeXBlJyxcbiAgJ0Nvb2tpZScsXG4gICdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3knLFxuICAnRGF0ZScsXG4gICdEZXZpY2UtTWVtb3J5JyxcbiAgJ0Rvd25saW5rJyxcbiAgJ0VDVCcsXG4gICdFVGFnJyxcbiAgJ0V4cGVjdCcsXG4gICdFeHBlY3QtQ1QnLFxuICAnRXhwaXJlcycsXG4gICdGb3J3YXJkZWQnLFxuICAnRnJvbScsXG4gICdIb3N0JyxcbiAgJ0lmLU1hdGNoJyxcbiAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAnSWYtUmFuZ2UnLFxuICAnSWYtVW5tb2RpZmllZC1TaW5jZScsXG4gICdLZWVwLUFsaXZlJyxcbiAgJ0xhc3QtTW9kaWZpZWQnLFxuICAnTGluaycsXG4gICdMb2NhdGlvbicsXG4gICdNYXgtRm9yd2FyZHMnLFxuICAnT3JpZ2luJyxcbiAgJ1Blcm1pc3Npb25zLVBvbGljeScsXG4gICdQcmFnbWEnLFxuICAnUHJveHktQXV0aGVudGljYXRlJyxcbiAgJ1Byb3h5LUF1dGhvcml6YXRpb24nLFxuICAnUlRUJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmVmZXJyZXItUG9saWN5JyxcbiAgJ1JlZnJlc2gnLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VjLVdlYlNvY2tldC1BY2NlcHQnLFxuICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyxcbiAgJ1NlYy1XZWJTb2NrZXQtS2V5JyxcbiAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnLFxuICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJyxcbiAgJ1NlcnZlcicsXG4gICdTZXJ2ZXItVGltaW5nJyxcbiAgJ1NlcnZpY2UtV29ya2VyLUFsbG93ZWQnLFxuICAnU2VydmljZS1Xb3JrZXItTmF2aWdhdGlvbi1QcmVsb2FkJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU291cmNlTWFwJyxcbiAgJ1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHknLFxuICAnU3VwcG9ydHMtTG9hZGluZy1Nb2RlJyxcbiAgJ1RFJyxcbiAgJ1RpbWluZy1BbGxvdy1PcmlnaW4nLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnLFxuICAnVXNlci1BZ2VudCcsXG4gICdWYXJ5JyxcbiAgJ1ZpYScsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICAnWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCcsXG4gICdYLUZyYW1lLU9wdGlvbnMnLFxuICAnWC1QZXJtaXR0ZWQtQ3Jvc3MtRG9tYWluLVBvbGljaWVzJyxcbiAgJ1gtUG93ZXJlZC1CeScsXG4gICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgJ1gtWFNTLVByb3RlY3Rpb24nXG5dXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgd2VsbGtub3duSGVhZGVyTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgY29uc3Qga2V5ID0gd2VsbGtub3duSGVhZGVyTmFtZXNbaV1cbiAgY29uc3QgbG93ZXJDYXNlZEtleSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV0gPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtsb3dlckNhc2VkS2V5XSA9XG4gICAgbG93ZXJDYXNlZEtleVxufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCwgbnVsbClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrRGVzdHJveWVkLCBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKVxuY29uc3QgeyBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5jb25zdCBbbm9kZU1ham9yLCBub2RlTWlub3JdID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJykubWFwKHYgPT4gTnVtYmVyKHYpKVxuXG5mdW5jdGlvbiBub3AgKCkge31cblxuZnVuY3Rpb24gaXNTdHJlYW0gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nXG59XG5cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlLWZldGNoL2ZldGNoLWJsb2IvYmxvYi84YWI1ODdkMzQwODBkZTk0MTQwYjU0ZjA3MTY4NDUxZTdkMGI2NTVlL2luZGV4LmpzI0wyMjktTDI0MSAoTUlUIExpY2Vuc2UpXG5mdW5jdGlvbiBpc0Jsb2JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChCbG9iICYmIG9iamVjdCBpbnN0YW5jZW9mIEJsb2IpIHx8IChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvXihCbG9ifEZpbGUpJC8udGVzdChvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSlcbiAgKVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgIU51bWJlci5pc0Zpbml0ZShwYXJzZUludCh1cmwucG9ydCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBwb3J0IG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGggIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGg6IHRoZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRobmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aG5hbWU6IHRoZSBwYXRobmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwuaG9zdG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIGhvc3RuYW1lOiB0aGUgaG9zdG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwub3JpZ2luICE9IG51bGwgJiYgdHlwZW9mIHVybC5vcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIG9yaWdpbjogdGhlIG9yaWdpbiBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHVybC5wb3J0ICE9IG51bGxcbiAgICAgID8gdXJsLnBvcnRcbiAgICAgIDogKHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MClcbiAgICBsZXQgb3JpZ2luID0gdXJsLm9yaWdpbiAhPSBudWxsXG4gICAgICA/IHVybC5vcmlnaW5cbiAgICAgIDogYCR7dXJsLnByb3RvY29sfS8vJHt1cmwuaG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgbGV0IHBhdGggPSB1cmwucGF0aCAhPSBudWxsXG4gICAgICA/IHVybC5wYXRoXG4gICAgICA6IGAke3VybC5wYXRobmFtZSB8fCAnJ30ke3VybC5zZWFyY2ggfHwgJyd9YFxuXG4gICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBvcmlnaW4gPSBvcmlnaW4uc3Vic3RyaW5nKDAsIG9yaWdpbi5sZW5ndGggLSAxKVxuICAgIH1cblxuICAgIGlmIChwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICB9XG4gICAgLy8gbmV3IFVSTChwYXRoLCBvcmlnaW4pIGlzIHVuc2FmZSB3aGVuIGBwYXRoYCBjb250YWlucyBhbiBhYnNvbHV0ZSBVUkxcbiAgICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvVVJMOlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJlbGF0aXZlIFVSTCwgc2Vjb25kIHBhcmFtIGlzIHJlcXVpcmVkLCBhbmQgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNlIFVSTC5cbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gYWJzb2x1dGUgVVJMLCBhIGdpdmVuIHNlY29uZCBwYXJhbSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgdXJsID0gbmV3IFVSTChvcmlnaW4gKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZU9yaWdpbiAodXJsKSB7XG4gIHVybCA9IHBhcnNlVVJMKHVybClcblxuICBpZiAodXJsLnBhdGhuYW1lICE9PSAnLycgfHwgdXJsLnNlYXJjaCB8fCB1cmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBnZXRIb3N0bmFtZSAoaG9zdCkge1xuICBpZiAoaG9zdFswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIHJldHVybiBob3N0LnN1YnN0cmluZygxLCBpZHgpXG4gIH1cblxuICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJzonKVxuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGhvc3RcblxuICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMCwgaWR4KVxufVxuXG4vLyBJUCBhZGRyZXNzZXMgYXJlIG5vdCB2YWxpZCBzZXJ2ZXIgbmFtZXMgcGVyIFJGQzYwNjZcbi8vID4gQ3VycmVudGx5LCB0aGUgb25seSBzZXJ2ZXIgbmFtZXMgc3VwcG9ydGVkIGFyZSBETlMgaG9zdG5hbWVzXG5mdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lIChob3N0KSB7XG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGhvc3QsICdzdHJpbmcnKVxuXG4gIGNvbnN0IHNlcnZlcm5hbWUgPSBnZXRIb3N0bmFtZShob3N0KVxuICBpZiAobmV0LmlzSVAoc2VydmVybmFtZSkpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHJldHVybiBzZXJ2ZXJuYW1lXG59XG5cbmZ1bmN0aW9uIGRlZXBDbG9uZSAob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJylcbn1cblxuZnVuY3Rpb24gaXNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiAodHlwZW9mIG9ialtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSlcbn1cblxuZnVuY3Rpb24gYm9keUxlbmd0aCAoYm9keSkge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDBcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgIGNvbnN0IHN0YXRlID0gYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5vYmplY3RNb2RlID09PSBmYWxzZSAmJiBzdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhdGUubGVuZ3RoKVxuICAgICAgPyBzdGF0ZS5sZW5ndGhcbiAgICAgIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplICE9IG51bGwgPyBib2R5LnNpemUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0Rlc3Ryb3llZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhc3RyZWFtIHx8ICEhKHN0cmVhbS5kZXN0cm95ZWQgfHwgc3RyZWFtW2tEZXN0cm95ZWRdKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlQWJvcnRlZCAoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gaXNEZXN0cm95ZWQoc3RyZWFtKSAmJiBzdGF0ZSAmJiAhc3RhdGUuZW5kRW1pdHRlZFxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKChzdHJlYW0sIGVycikgPT4ge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIH0sIHN0cmVhbSwgZXJyKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5kZXN0cm95ZWQgIT09IHRydWUpIHtcbiAgICBzdHJlYW1ba0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cblxuY29uc3QgS0VFUEFMSVZFX1RJTUVPVVRfRVhQUiA9IC90aW1lb3V0PShcXGQrKS9cbmZ1bmN0aW9uIHBhcnNlS2VlcEFsaXZlVGltZW91dCAodmFsKSB7XG4gIGNvbnN0IG0gPSB2YWwudG9TdHJpbmcoKS5tYXRjaChLRUVQQUxJVkVfVElNRU9VVF9FWFBSKVxuICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0sIDEwKSAqIDEwMDAgOiBudWxsXG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgaGVhZGVyIG5hbWUgYW5kIHJldHVybnMgaXRzIGxvd2VyY2FzZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSB2YWx1ZSBIZWFkZXIgbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaGVhZGVyTmFtZVRvU3RyaW5nICh2YWx1ZSkge1xuICByZXR1cm4gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbdmFsdWVdIHx8IHZhbHVlLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzIChoZWFkZXJzLCBvYmogPSB7fSkge1xuICAvLyBGb3IgSDIgc3VwcG9ydFxuICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVycykpIHJldHVybiBoZWFkZXJzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICBsZXQgdmFsID0gb2JqW2tleV1cblxuICAgIGlmICghdmFsKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzW2kgKyAxXSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFsID0gW3ZhbF1cbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICAgIHZhbC5wdXNoKGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JykpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmICgnY29udGVudC1sZW5ndGgnIGluIG9iaiAmJiAnY29udGVudC1kaXNwb3NpdGlvbicgaW4gb2JqKSB7XG4gICAgb2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gPSBCdWZmZXIuZnJvbShvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmF3SGVhZGVycyAoaGVhZGVycykge1xuICBjb25zdCByZXQgPSBbXVxuICBsZXQgaGFzQ29udGVudExlbmd0aCA9IGZhbHNlXG4gIGxldCBjb250ZW50RGlzcG9zaXRpb25JZHggPSAtMVxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdLnRvU3RyaW5nKClcbiAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXS50b1N0cmluZygndXRmOCcpXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgKGtleSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgICAgaGFzQ29udGVudExlbmd0aCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE5ICYmIChrZXkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nKSkge1xuICAgICAgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gcmV0LnB1c2goa2V5LCB2YWwpIC0gMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Rpc3R1cmJlZFxuICAgICAgPyBzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdIC8vIFRPRE8gKGZpeCk6IFdoeSBpcyBib2R5W2tCb2R5VXNlZF0gbmVlZGVkP1xuICAgICAgOiBib2R5W2tCb2R5VXNlZF0gfHxcbiAgICAgICAgYm9keS5yZWFkYWJsZURpZFJlYWQgfHxcbiAgICAgICAgKGJvZHkuX3JlYWRhYmxlU3RhdGUgJiYgYm9keS5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCkgfHxcbiAgICAgICAgaXNSZWFkYWJsZUFib3J0ZWQoYm9keSlcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNFcnJvcmVkXG4gICAgICA/IHN0cmVhbS5pc0Vycm9yZWQoYm9keSlcbiAgICAgIDogL3N0YXRlOiAnZXJyb3JlZCcvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc1JlYWRhYmxlXG4gICAgICA/IHN0cmVhbS5pc1JlYWRhYmxlKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ3JlYWRhYmxlJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gZ2V0U29ja2V0SW5mbyAoc29ja2V0KSB7XG4gIHJldHVybiB7XG4gICAgbG9jYWxBZGRyZXNzOiBzb2NrZXQubG9jYWxBZGRyZXNzLFxuICAgIGxvY2FsUG9ydDogc29ja2V0LmxvY2FsUG9ydCxcbiAgICByZW1vdGVBZGRyZXNzOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICByZW1vdGVQb3J0OiBzb2NrZXQucmVtb3RlUG9ydCxcbiAgICByZW1vdGVGYW1pbHk6IHNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgdGltZW91dDogc29ja2V0LnRpbWVvdXQsXG4gICAgYnl0ZXNXcml0dGVuOiBzb2NrZXQuYnl0ZXNXcml0dGVuLFxuICAgIGJ5dGVzUmVhZDogc29ja2V0LmJ5dGVzUmVhZFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29udmVydEl0ZXJhYmxlVG9CdWZmZXIgKGl0ZXJhYmxlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCBCdWZmZXIuaXNCdWZmZXIoY2h1bmspID8gY2h1bmsgOiBCdWZmZXIuZnJvbShjaHVuaylcbiAgfVxufVxuXG5sZXQgUmVhZGFibGVTdHJlYW1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnJvbSAoaXRlcmFibGUpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBpZiAoUmVhZGFibGVTdHJlYW0uZnJvbSkge1xuICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbS5mcm9tKGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyKGl0ZXJhYmxlKSlcbiAgfVxuXG4gIGxldCBpdGVyYXRvclxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidWYgPSBCdWZmZXIuaXNCdWZmZXIodmFsdWUpID8gdmFsdWUgOiBCdWZmZXIuZnJvbSh2YWx1ZSlcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfVxuICAgIH0sXG4gICAgMFxuICApXG59XG5cbi8vIFRoZSBjaHVuayBzaG91bGQgYmUgYSBGb3JtRGF0YSBpbnN0YW5jZSBhbmQgY29udGFpbnNcbi8vIGFsbCB0aGUgcmVxdWlyZWQgbWV0aG9kcy5cbmZ1bmN0aW9uIGlzRm9ybURhdGFMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QuYXBwZW5kID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5kZWxldGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0QWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5oYXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LnNldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnXG4gIClcbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHNpZ25hbCkge1xuICBpZiAoIXNpZ25hbCkgeyByZXR1cm4gfVxuICBpZiAodHlwZW9mIHNpZ25hbC50aHJvd0lmQWJvcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpXG4gIH0gZWxzZSB7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAvLyBET01FeGNlcHRpb24gbm90IGF2YWlsYWJsZSA8IHYxNy4wLjBcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpXG4gICAgICBlcnIubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gISFTdHJpbmcucHJvdG90eXBlLnRvV2VsbEZvcm1lZFxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuZnVuY3Rpb24gdG9VU1ZTdHJpbmcgKHZhbCkge1xuICBpZiAoaGFzVG9XZWxsRm9ybWVkKSB7XG4gICAgcmV0dXJuIGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpXG4gIH0gZWxzZSBpZiAobm9kZVV0aWwudG9VU1ZTdHJpbmcpIHtcbiAgICByZXR1cm4gbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxuICB9XG5cbiAgcmV0dXJuIGAke3ZhbH1gXG59XG5cbi8vIFBhcnNlZCBhY2NvcmRpbmdseSB0byBSRkMgOTExMFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAjZmllbGQuY29udGVudC1yYW5nZVxuZnVuY3Rpb24gcGFyc2VSYW5nZUhlYWRlciAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlID09IG51bGwgfHwgcmFuZ2UgPT09ICcnKSByZXR1cm4geyBzdGFydDogMCwgZW5kOiBudWxsLCBzaXplOiBudWxsIH1cblxuICBjb25zdCBtID0gcmFuZ2UgPyByYW5nZS5tYXRjaCgvXmJ5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKyk/JC8pIDogbnVsbFxuICByZXR1cm4gbVxuICAgID8ge1xuICAgICAgICBzdGFydDogcGFyc2VJbnQobVsxXSksXG4gICAgICAgIGVuZDogbVsyXSA/IHBhcnNlSW50KG1bMl0pIDogbnVsbCxcbiAgICAgICAgc2l6ZTogbVszXSA/IHBhcnNlSW50KG1bM10pIDogbnVsbFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuXG5jb25zdCBrRW51bWVyYWJsZVByb3BlcnR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxua0VudW1lcmFibGVQcm9wZXJ0eS5lbnVtZXJhYmxlID0gdHJ1ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNSZWFkYWJsZUFib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgcGFyc2VSYXdIZWFkZXJzLFxuICBwYXJzZUhlYWRlcnMsXG4gIHBhcnNlS2VlcEFsaXZlVGltZW91dCxcbiAgZGVzdHJveSxcbiAgYm9keUxlbmd0aCxcbiAgZGVlcENsb25lLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQnVmZmVyLFxuICB2YWxpZGF0ZUhhbmRsZXIsXG4gIGdldFNvY2tldEluZm8sXG4gIGlzRm9ybURhdGFMaWtlLFxuICBidWlsZFVSTCxcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIGFkZEFib3J0TGlzdGVuZXIsXG4gIHBhcnNlUmFuZ2VIZWFkZXIsXG4gIG5vZGVNYWpvcixcbiAgbm9kZU1pbm9yLFxuICBub2RlSGFzQXV0b1NlbGVjdEZhbWlseTogbm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDEzKSxcbiAgc2FmZUhUVFBNZXRob2RzOiBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQ29weXJpZ2h0IEJyaWFuIFdoaXRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21zY2RleC9zdHJlYW1zZWFyY2hcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuICogSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAqIEJhc2VkIGhlYXZpbHkgb24gdGhlIFN0cmVhbWluZyBCb3llci1Nb29yZS1Ib3JzcG9vbCBDKysgaW1wbGVtZW50YXRpb25cbiAqIGJ5IEhvbmdsaSBMYWkgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb29CYXJXaWRnZXQvYm95ZXItbW9vcmUtaG9yc3Bvb2xcbiAqL1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuZnVuY3Rpb24gU0JNSCAobmVlZGxlKSB7XG4gIGlmICh0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJykge1xuICAgIG5lZWRsZSA9IEJ1ZmZlci5mcm9tKG5lZWRsZSlcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKG5lZWRsZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbmVlZGxlIGhhcyB0byBiZSBhIFN0cmluZyBvciBhIEJ1ZmZlci4nKVxuICB9XG5cbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuXG4gIGlmIChuZWVkbGVMZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGJlIGFuIGVtcHR5IFN0cmluZy9CdWZmZXIuJylcbiAgfVxuXG4gIGlmIChuZWVkbGVMZW5ndGggPiAyNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGhhdmUgYSBsZW5ndGggYmlnZ2VyIHRoYW4gMjU2LicpXG4gIH1cblxuICB0aGlzLm1heE1hdGNoZXMgPSBJbmZpbml0eVxuICB0aGlzLm1hdGNoZXMgPSAwXG5cbiAgdGhpcy5fb2NjID0gbmV3IEFycmF5KDI1NilcbiAgICAuZmlsbChuZWVkbGVMZW5ndGgpIC8vIEluaXRpYWxpemUgb2NjdXJyZW5jZSB0YWJsZS5cbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLl9uZWVkbGUgPSBuZWVkbGVcbiAgdGhpcy5fYnVmcG9zID0gMFxuXG4gIHRoaXMuX2xvb2tiZWhpbmQgPSBCdWZmZXIuYWxsb2MobmVlZGxlTGVuZ3RoKVxuXG4gIC8vIFBvcHVsYXRlIG9jY3VycmVuY2UgdGFibGUgd2l0aCBhbmFseXNpcyBvZiB0aGUgbmVlZGxlLFxuICAvLyBpZ25vcmluZyBsYXN0IGxldHRlci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWVkbGVMZW5ndGggLSAxOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICB0aGlzLl9vY2NbbmVlZGxlW2ldXSA9IG5lZWRsZUxlbmd0aCAtIDEgLSBpXG4gIH1cbn1cbmluaGVyaXRzKFNCTUgsIEV2ZW50RW1pdHRlcilcblxuU0JNSC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5tYXRjaGVzID0gMFxuICB0aGlzLl9idWZwb3MgPSAwXG59XG5cblNCTUgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIHBvcykge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCAnYmluYXJ5JylcbiAgfVxuICBjb25zdCBjaGxlbiA9IGNodW5rLmxlbmd0aFxuICB0aGlzLl9idWZwb3MgPSBwb3MgfHwgMFxuICBsZXQgclxuICB3aGlsZSAociAhPT0gY2hsZW4gJiYgdGhpcy5tYXRjaGVzIDwgdGhpcy5tYXhNYXRjaGVzKSB7IHIgPSB0aGlzLl9zYm1oX2ZlZWQoY2h1bmspIH1cbiAgcmV0dXJuIHJcbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfZmVlZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG4gIGNvbnN0IG5lZWRsZSA9IHRoaXMuX25lZWRsZVxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG4gIGNvbnN0IGxhc3ROZWVkbGVDaGFyID0gbmVlZGxlW25lZWRsZUxlbmd0aCAtIDFdXG5cbiAgLy8gUG9zaXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIGBkYXRhYFxuICAvLyAgICAgICAgICAgcG9zID09IDMgcG9pbnRzIHRvIGRhdGFbM11cbiAgLy8gTmVnYXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIHRoZSBsb29rYmVoaW5kIGJ1ZmZlclxuICAvLyAgICAgICAgICAgcG9zID09IC0yIHBvaW50cyB0byBsb29rYmVoaW5kW2xvb2tiZWhpbmRfc2l6ZSAtIDJdXG4gIGxldCBwb3MgPSAtdGhpcy5fbG9va2JlaGluZF9zaXplXG4gIGxldCBjaFxuXG4gIGlmIChwb3MgPCAwKSB7XG4gICAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm90IGVtcHR5LiBQZXJmb3JtIEJveWVyLU1vb3JlLUhvcnNwb29sXG4gICAgLy8gc2VhcmNoIHdpdGggY2hhcmFjdGVyIGxvb2t1cCBjb2RlIHRoYXQgY29uc2lkZXJzIGJvdGggdGhlXG4gICAgLy8gbG9va2JlaGluZCBidWZmZXIgYW5kIHRoZSBjdXJyZW50IHJvdW5kJ3MgaGF5c3RhY2sgZGF0YS5cbiAgICAvL1xuICAgIC8vIExvb3AgdW50aWxcbiAgICAvLyAgIHRoZXJlIGlzIGEgbWF0Y2guXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHdlJ3ZlIG1vdmVkIHBhc3QgdGhlIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgdGhlXG4gICAgLy8gICBsb29rYmVoaW5kIGJ1ZmZlci4gSW4gdGhpcyBjYXNlIHdlIHN3aXRjaCB0byB0aGVcbiAgICAvLyAgIG9wdGltaXplZCBsb29wLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB0aGUgY2hhcmFjdGVyIHRvIGxvb2sgYXQgbGllcyBvdXRzaWRlIHRoZSBoYXlzdGFjay5cbiAgICB3aGlsZSAocG9zIDwgMCAmJiBwb3MgPD0gbGVuIC0gbmVlZGxlTGVuZ3RoKSB7XG4gICAgICBjaCA9IHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgbmVlZGxlTGVuZ3RoIC0gMSlcblxuICAgICAgaWYgKFxuICAgICAgICBjaCA9PT0gbGFzdE5lZWRsZUNoYXIgJiZcbiAgICAgICAgdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBuZWVkbGVMZW5ndGggLSAxKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICAgICAgKyt0aGlzLm1hdGNoZXNcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSlcblxuICAgICAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIHBvcyArPSB0aGlzLl9vY2NbY2hdXG4gICAgfVxuXG4gICAgLy8gTm8gbWF0Y2guXG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgLy8gVGhlcmUncyB0b28gZmV3IGRhdGEgZm9yIEJveWVyLU1vb3JlLUhvcnNwb29sIHRvIHJ1bixcbiAgICAgIC8vIHNvIGxldCdzIHVzZSBhIGRpZmZlcmVudCBhbGdvcml0aG0gdG8gc2tpcCBhcyBtdWNoIGFzXG4gICAgICAvLyB3ZSBjYW4uXG4gICAgICAvLyBGb3J3YXJkIHBvcyB1bnRpbFxuICAgICAgLy8gICB0aGUgdHJhaWxpbmcgcGFydCBvZiBsb29rYmVoaW5kICsgZGF0YVxuICAgICAgLy8gICBsb29rcyBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5lZWRsZVxuICAgICAgLy8gb3IgdW50aWxcbiAgICAgIC8vICAgcG9zID09IDBcbiAgICAgIHdoaWxlIChwb3MgPCAwICYmICF0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIGxlbiAtIHBvcykpIHsgKytwb3MgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gRGlzY2FyZCBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1dCBvZmYgcGFydCBvZiB0aGUgbG9va2JlaGluZCBidWZmZXIgdGhhdCBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmQgdGhlIGVudGlyZSBoYXlzdGFja1xuICAgICAgLy8gaW50byBpdC5cbiAgICAgIGNvbnN0IGJ5dGVzVG9DdXRPZmYgPSB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NcbiAgICAgIGlmIChieXRlc1RvQ3V0T2ZmID4gMCkge1xuICAgICAgICAvLyBUaGUgY3V0IG9mZiBkYXRhIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvb2tiZWhpbmQuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmLFxuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLSBieXRlc1RvQ3V0T2ZmKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC09IGJ5dGVzVG9DdXRPZmZcblxuICAgICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArPSBsZW5cblxuICAgICAgdGhpcy5fYnVmcG9zID0gbGVuXG4gICAgICByZXR1cm4gbGVuXG4gICAgfVxuICB9XG5cbiAgcG9zICs9IChwb3MgPj0gMCkgKiB0aGlzLl9idWZwb3NcblxuICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3cgZW1wdHkuIFdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGVcbiAgLy8gbmVlZGxlIGlzIGluIHRoZSBoYXlzdGFjay5cbiAgaWYgKGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcykgIT09IC0xKSB7XG4gICAgcG9zID0gZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKVxuICAgICsrdGhpcy5tYXRjaGVzXG4gICAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MpIH0gZWxzZSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUpIH1cblxuICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIHBvcyA9IGxlbiAtIG5lZWRsZUxlbmd0aFxuICB9XG5cbiAgLy8gVGhlcmUgd2FzIG5vIG1hdGNoLiBJZiB0aGVyZSdzIHRyYWlsaW5nIGhheXN0YWNrIGRhdGEgdGhhdCB3ZSBjYW5ub3RcbiAgLy8gbWF0Y2ggeWV0IHVzaW5nIHRoZSBCb3llci1Nb29yZS1Ib3JzcG9vbCBhbGdvcml0aG0gKGJlY2F1c2UgdGhlIHRyYWlsaW5nXG4gIC8vIGRhdGEgaXMgbGVzcyB0aGFuIHRoZSBuZWVkbGUgc2l6ZSkgdGhlbiBtYXRjaCB1c2luZyBhIG1vZGlmaWVkXG4gIC8vIGFsZ29yaXRobSB0aGF0IHN0YXJ0cyBtYXRjaGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiB0aGUgZW5kLlxuICAvLyBXaGF0ZXZlciB0cmFpbGluZyBkYXRhIGlzIGxlZnQgYWZ0ZXIgcnVubmluZyB0aGlzIGFsZ29yaXRobSBpcyBhZGRlZCB0b1xuICAvLyB0aGUgbG9va2JlaGluZCBidWZmZXIuXG4gIHdoaWxlIChcbiAgICBwb3MgPCBsZW4gJiZcbiAgICAoXG4gICAgICBkYXRhW3Bvc10gIT09IG5lZWRsZVswXSB8fFxuICAgICAgKFxuICAgICAgICAoQnVmZmVyLmNvbXBhcmUoXG4gICAgICAgICAgZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIGxlbiAtIHBvcyksXG4gICAgICAgICAgbmVlZGxlLnN1YmFycmF5KDAsIGxlbiAtIHBvcylcbiAgICAgICAgKSAhPT0gMClcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgICsrcG9zXG4gIH1cbiAgaWYgKHBvcyA8IGxlbikge1xuICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBwb3MsIHBvcyArIChsZW4gLSBwb3MpKVxuICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IGxlbiAtIHBvc1xuICB9XG5cbiAgLy8gRXZlcnl0aGluZyB1bnRpbCBwb3MgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBuZWVkbGUgZGF0YS5cbiAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zIDwgbGVuID8gcG9zIDogbGVuKSB9XG5cbiAgdGhpcy5fYnVmcG9zID0gbGVuXG4gIHJldHVybiBsZW5cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbG9va3VwX2NoYXIgPSBmdW5jdGlvbiAoZGF0YSwgcG9zKSB7XG4gIHJldHVybiAocG9zIDwgMClcbiAgICA/IHRoaXMuX2xvb2tiZWhpbmRbdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXVxuICAgIDogZGF0YVtwb3NdXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX21lbWNtcCA9IGZ1bmN0aW9uIChkYXRhLCBwb3MsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgaSkgIT09IHRoaXMuX25lZWRsZVtpXSkgeyByZXR1cm4gZmFsc2UgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0JNSFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuUmVhZGFibGVcblxuZnVuY3Rpb24gUGFydFN0cmVhbSAob3B0cykge1xuICBSZWFkYWJsZVN0cmVhbS5jYWxsKHRoaXMsIG9wdHMpXG59XG5pbmhlcml0cyhQYXJ0U3RyZWFtLCBSZWFkYWJsZVN0cmVhbSlcblxuUGFydFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge31cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0U3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IEJfRENSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuXFxyXFxuJylcbmNvbnN0IFJFX0NSTEYgPSAvXFxyXFxuL2dcbmNvbnN0IFJFX0hEUiA9IC9eKFteOl0rKTpbIFxcdF0/KFtcXHgwMC1cXHhGRl0rKT8kLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuZnVuY3Rpb24gSGVhZGVyUGFyc2VyIChjZmcpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcylcblxuICBjZmcgPSBjZmcgfHwge31cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5ucmVhZCA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heEhlYWRlclBhaXJzID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyUGFpcnMnLCAyMDAwKVxuICB0aGlzLm1heEhlYWRlclNpemUgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJTaXplJywgODAgKiAxMDI0KVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuc3MgPSBuZXcgU3RyZWFtU2VhcmNoKEJfRENSTEYpXG4gIHRoaXMuc3Mub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGlmIChkYXRhICYmICFzZWxmLm1heGVkKSB7XG4gICAgICBpZiAoc2VsZi5ucmVhZCArIGVuZCAtIHN0YXJ0ID49IHNlbGYubWF4SGVhZGVyU2l6ZSkge1xuICAgICAgICBlbmQgPSBzZWxmLm1heEhlYWRlclNpemUgLSBzZWxmLm5yZWFkICsgc3RhcnRcbiAgICAgICAgc2VsZi5ucmVhZCA9IHNlbGYubWF4SGVhZGVyU2l6ZVxuICAgICAgICBzZWxmLm1heGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHsgc2VsZi5ucmVhZCArPSAoZW5kIC0gc3RhcnQpIH1cblxuICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5Jywgc3RhcnQsIGVuZClcbiAgICB9XG4gICAgaWYgKGlzTWF0Y2gpIHsgc2VsZi5fZmluaXNoKCkgfVxuICB9KVxufVxuaW5oZXJpdHMoSGVhZGVyUGFyc2VyLCBFdmVudEVtaXR0ZXIpXG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnNzLnB1c2goZGF0YSlcbiAgaWYgKHRoaXMuZmluaXNoZWQpIHsgcmV0dXJuIHIgfVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuc3MucmVzZXQoKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJ1ZmZlcikgeyB0aGlzLl9wYXJzZUhlYWRlcigpIH1cbiAgdGhpcy5zcy5tYXRjaGVzID0gdGhpcy5zcy5tYXhNYXRjaGVzXG4gIGNvbnN0IGhlYWRlciA9IHRoaXMuaGVhZGVyXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmZpbmlzaGVkID0gdHJ1ZVxuICB0aGlzLm5yZWFkID0gdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fcGFyc2VIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGxpbmVzID0gdGhpcy5idWZmZXIuc3BsaXQoUkVfQ1JMRilcbiAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoXG4gIGxldCBtLCBoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPT09IDApIHsgY29udGludWUgfVxuICAgIGlmIChsaW5lc1tpXVswXSA9PT0gJ1xcdCcgfHwgbGluZXNbaV1bMF0gPT09ICcgJykge1xuICAgICAgLy8gZm9sZGVkIGhlYWRlciBjb250ZW50XG4gICAgICAvLyBSRkMyODIyIHNheXMgdG8ganVzdCByZW1vdmUgdGhlIENSTEYgYW5kIG5vdCB0aGUgd2hpdGVzcGFjZSBmb2xsb3dpbmdcbiAgICAgIC8vIGl0LCBzbyB3ZSBmb2xsb3cgdGhlIFJGQyBhbmQgaW5jbHVkZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIC4uLlxuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJbaF1bdGhpcy5oZWFkZXJbaF0ubGVuZ3RoIC0gMV0gKz0gbGluZXNbaV1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwb3NDb2xvbiA9IGxpbmVzW2ldLmluZGV4T2YoJzonKVxuICAgIGlmIChcbiAgICAgIHBvc0NvbG9uID09PSAtMSB8fFxuICAgICAgcG9zQ29sb24gPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBtID0gUkVfSERSLmV4ZWMobGluZXNbaV0pXG4gICAgaCA9IG1bMV0udG9Mb3dlckNhc2UoKVxuICAgIHRoaXMuaGVhZGVyW2hdID0gdGhpcy5oZWFkZXJbaF0gfHwgW11cbiAgICB0aGlzLmhlYWRlcltoXS5wdXNoKChtWzJdIHx8ICcnKSlcbiAgICBpZiAoKyt0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyBicmVhayB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIZWFkZXJQYXJzZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgUGFydFN0cmVhbSA9IHJlcXVpcmUoJy4vUGFydFN0cmVhbScpXG5jb25zdCBIZWFkZXJQYXJzZXIgPSByZXF1aXJlKCcuL0hlYWRlclBhcnNlcicpXG5cbmNvbnN0IERBU0ggPSA0NVxuY29uc3QgQl9PTkVEQVNIID0gQnVmZmVyLmZyb20oJy0nKVxuY29uc3QgQl9DUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcbicpXG5jb25zdCBFTVBUWV9GTiA9IGZ1bmN0aW9uICgpIHt9XG5cbmZ1bmN0aW9uIERpY2VyIChjZmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERpY2VyKSkgeyByZXR1cm4gbmV3IERpY2VyKGNmZykgfVxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIGNmZylcblxuICBpZiAoIWNmZyB8fCAoIWNmZy5oZWFkZXJGaXJzdCAmJiB0eXBlb2YgY2ZnLmJvdW5kYXJ5ICE9PSAnc3RyaW5nJykpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQm91bmRhcnkgcmVxdWlyZWQnKSB9XG5cbiAgaWYgKHR5cGVvZiBjZmcuYm91bmRhcnkgPT09ICdzdHJpbmcnKSB7IHRoaXMuc2V0Qm91bmRhcnkoY2ZnLmJvdW5kYXJ5KSB9IGVsc2UgeyB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkIH1cblxuICB0aGlzLl9oZWFkZXJGaXJzdCA9IGNmZy5oZWFkZXJGaXJzdFxuXG4gIHRoaXMuX2Rhc2hlcyA9IDBcbiAgdGhpcy5fcGFydHMgPSAwXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gIHRoaXMuX2lzUHJlYW1ibGUgPSB0cnVlXG4gIHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2VcbiAgdGhpcy5fZmlyc3RXcml0ZSA9IHRydWVcbiAgdGhpcy5faW5IZWFkZXIgPSB0cnVlXG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gIHRoaXMuX3BhcnRPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcucGFydEh3bSB9XG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcblxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9ocGFyc2VyID0gbmV3IEhlYWRlclBhcnNlcihjZmcpXG4gIHRoaXMuX2hwYXJzZXIub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICBzZWxmLl9pbkhlYWRlciA9IGZhbHNlXG4gICAgc2VsZi5fcGFydC5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG4gIH0pXG59XG5pbmhlcml0cyhEaWNlciwgV3JpdGFibGVTdHJlYW0pXG5cbkRpY2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldiA9PT0gJ2ZpbmlzaCcgJiYgIXRoaXMuX3JlYWxGaW5pc2gpIHtcbiAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgIGlmIChzZWxmLl9wYXJ0ICYmICFzZWxmLl9pZ25vcmVEYXRhKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IChzZWxmLl9pc1ByZWFtYmxlID8gJ1ByZWFtYmxlJyA6ICdQYXJ0JylcbiAgICAgICAgICBzZWxmLl9wYXJ0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKHR5cGUgKyAnIHRlcm1pbmF0ZWQgZWFybHkgZHVlIHRvIHVuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgICAgc2VsZi5fcGFydC5wdXNoKG51bGwpXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0gZWxzZSB7IFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICAvLyBpZ25vcmUgdW5leHBlY3RlZCBkYXRhIChlLmcuIGV4dHJhIHRyYWlsZXIgZGF0YSBhZnRlciBmaW5pc2hlZClcbiAgaWYgKCF0aGlzLl9ocGFyc2VyICYmICF0aGlzLl9icGFyc2VyKSB7IHJldHVybiBjYigpIH1cblxuICBpZiAodGhpcy5faGVhZGVyRmlyc3QgJiYgdGhpcy5faXNQcmVhbWJsZSkge1xuICAgIGlmICghdGhpcy5fcGFydCkge1xuICAgICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydCkgfSBlbHNlIHsgdGhpcy5faWdub3JlKCkgfVxuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEpXG4gICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGRhdGEubGVuZ3RoKSB7IGRhdGEgPSBkYXRhLnNsaWNlKHIpIH0gZWxzZSB7IHJldHVybiBjYigpIH1cbiAgfVxuXG4gIC8vIGFsbG93cyBmb3IgXCJlYXNpZXJcIiB0ZXN0aW5nXG4gIGlmICh0aGlzLl9maXJzdFdyaXRlKSB7XG4gICAgdGhpcy5fYnBhcnNlci5wdXNoKEJfQ1JMRilcbiAgICB0aGlzLl9maXJzdFdyaXRlID0gZmFsc2VcbiAgfVxuXG4gIHRoaXMuX2JwYXJzZXIucHVzaChkYXRhKVxuXG4gIGlmICh0aGlzLl9wYXVzZSkgeyB0aGlzLl9jYiA9IGNiIH0gZWxzZSB7IGNiKCkgfVxufVxuXG5EaWNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZFxuICB0aGlzLl9ocGFyc2VyID0gdW5kZWZpbmVkXG59XG5cbkRpY2VyLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIChib3VuZGFyeSkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9icGFyc2VyID0gbmV3IFN0cmVhbVNlYXJjaCgnXFxyXFxuLS0nICsgYm91bmRhcnkpXG4gIHRoaXMuX2JwYXJzZXIub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHNlbGYuX29uaW5mbyhpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKVxuICB9KVxufVxuXG5EaWNlci5wcm90b3R5cGUuX2lnbm9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3BhcnQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gdHJ1ZVxuICAgIHRoaXMuX3BhcnQub24oJ2Vycm9yJywgRU1QVFlfRk4pXG4gICAgLy8gd2UgbXVzdCBwZXJmb3JtIHNvbWUga2luZCBvZiByZWFkIG9uIHRoZSBzdHJlYW0gZXZlbiB0aG91Z2ggd2UgYXJlXG4gICAgLy8gaWdub3JpbmcgdGhlIGRhdGEsIG90aGVyd2lzZSBub2RlJ3MgUmVhZGFibGUgc3RyZWFtIHdpbGwgbm90IGVtaXQgJ2VuZCdcbiAgICAvLyBhZnRlciBwdXNoaW5nIG51bGwgdG8gdGhlIHN0cmVhbVxuICAgIHRoaXMuX3BhcnQucmVzdW1lKClcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX29uaW5mbyA9IGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gIGxldCBidWY7IGNvbnN0IHNlbGYgPSB0aGlzOyBsZXQgaSA9IDA7IGxldCByOyBsZXQgc2hvdWxkV3JpdGVNb3JlID0gdHJ1ZVxuXG4gIGlmICghdGhpcy5fcGFydCAmJiB0aGlzLl9qdXN0TWF0Y2hlZCAmJiBkYXRhKSB7XG4gICAgd2hpbGUgKHRoaXMuX2Rhc2hlcyA8IDIgJiYgKHN0YXJ0ICsgaSkgPCBlbmQpIHtcbiAgICAgIGlmIChkYXRhW3N0YXJ0ICsgaV0gPT09IERBU0gpIHtcbiAgICAgICAgKytpXG4gICAgICAgICsrdGhpcy5fZGFzaGVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fZGFzaGVzKSB7IGJ1ZiA9IEJfT05FREFTSCB9XG4gICAgICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcyA9PT0gMikge1xuICAgICAgaWYgKChzdGFydCArIGkpIDwgZW5kICYmIHRoaXMubGlzdGVuZXJDb3VudCgndHJhaWxlcicpICE9PSAwKSB7IHRoaXMuZW1pdCgndHJhaWxlcicsIGRhdGEuc2xpY2Uoc3RhcnQgKyBpLCBlbmQpKSB9XG4gICAgICB0aGlzLnJlc2V0KClcbiAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICAgICAgLy8gbm8gbW9yZSBwYXJ0cyB3aWxsIGJlIGFkZGVkXG4gICAgICBpZiAoc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcykgeyByZXR1cm4gfVxuICB9XG4gIGlmICh0aGlzLl9qdXN0TWF0Y2hlZCkgeyB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlIH1cbiAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgIHRoaXMuX3BhcnQuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc1ByZWFtYmxlICE9PSB0cnVlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncGFydCcpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3BhcnQnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pZ25vcmUoKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faW5IZWFkZXIgPSB0cnVlIH1cbiAgfVxuICBpZiAoZGF0YSAmJiBzdGFydCA8IGVuZCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlIHx8ICF0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goYnVmKSB9XG4gICAgICBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghc2hvdWxkV3JpdGVNb3JlKSB7IHRoaXMuX3BhdXNlID0gdHJ1ZSB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyB0aGlzLl9ocGFyc2VyLnB1c2goYnVmKSB9XG4gICAgICByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZW5kKSB7IHRoaXMuX29uaW5mbyhmYWxzZSwgZGF0YSwgc3RhcnQgKyByLCBlbmQpIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzTWF0Y2gpIHtcbiAgICB0aGlzLl9ocGFyc2VyLnJlc2V0KClcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pc1ByZWFtYmxlID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydCAhPT0gZW5kKSB7XG4gICAgICAgICsrdGhpcy5fcGFydHNcbiAgICAgICAgdGhpcy5fcGFydC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICgtLXNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fZmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcGFydC5wdXNoKG51bGwpXG4gICAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICAgIHRoaXMuX2p1c3RNYXRjaGVkID0gdHJ1ZVxuICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3VucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fcGF1c2UpIHsgcmV0dXJuIH1cblxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIGlmICh0aGlzLl9jYikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2JcbiAgICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpY2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3QtcHJvcGVydHktbmV3bGluZSAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuL2RlY29kZVRleHQnKVxuXG5jb25zdCBSRV9FTkNPREVEID0gLyVbYS1mQS1GMC05XVthLWZBLUYwLTldL2dcblxuY29uc3QgRW5jb2RlZExvb2t1cCA9IHtcbiAgJyUwMCc6ICdcXHgwMCcsICclMDEnOiAnXFx4MDEnLCAnJTAyJzogJ1xceDAyJywgJyUwMyc6ICdcXHgwMycsICclMDQnOiAnXFx4MDQnLFxuICAnJTA1JzogJ1xceDA1JywgJyUwNic6ICdcXHgwNicsICclMDcnOiAnXFx4MDcnLCAnJTA4JzogJ1xceDA4JywgJyUwOSc6ICdcXHgwOScsXG4gICclMGEnOiAnXFx4MGEnLCAnJTBBJzogJ1xceDBhJywgJyUwYic6ICdcXHgwYicsICclMEInOiAnXFx4MGInLCAnJTBjJzogJ1xceDBjJyxcbiAgJyUwQyc6ICdcXHgwYycsICclMGQnOiAnXFx4MGQnLCAnJTBEJzogJ1xceDBkJywgJyUwZSc6ICdcXHgwZScsICclMEUnOiAnXFx4MGUnLFxuICAnJTBmJzogJ1xceDBmJywgJyUwRic6ICdcXHgwZicsICclMTAnOiAnXFx4MTAnLCAnJTExJzogJ1xceDExJywgJyUxMic6ICdcXHgxMicsXG4gICclMTMnOiAnXFx4MTMnLCAnJTE0JzogJ1xceDE0JywgJyUxNSc6ICdcXHgxNScsICclMTYnOiAnXFx4MTYnLCAnJTE3JzogJ1xceDE3JyxcbiAgJyUxOCc6ICdcXHgxOCcsICclMTknOiAnXFx4MTknLCAnJTFhJzogJ1xceDFhJywgJyUxQSc6ICdcXHgxYScsICclMWInOiAnXFx4MWInLFxuICAnJTFCJzogJ1xceDFiJywgJyUxYyc6ICdcXHgxYycsICclMUMnOiAnXFx4MWMnLCAnJTFkJzogJ1xceDFkJywgJyUxRCc6ICdcXHgxZCcsXG4gICclMWUnOiAnXFx4MWUnLCAnJTFFJzogJ1xceDFlJywgJyUxZic6ICdcXHgxZicsICclMUYnOiAnXFx4MWYnLCAnJTIwJzogJ1xceDIwJyxcbiAgJyUyMSc6ICdcXHgyMScsICclMjInOiAnXFx4MjInLCAnJTIzJzogJ1xceDIzJywgJyUyNCc6ICdcXHgyNCcsICclMjUnOiAnXFx4MjUnLFxuICAnJTI2JzogJ1xceDI2JywgJyUyNyc6ICdcXHgyNycsICclMjgnOiAnXFx4MjgnLCAnJTI5JzogJ1xceDI5JywgJyUyYSc6ICdcXHgyYScsXG4gICclMkEnOiAnXFx4MmEnLCAnJTJiJzogJ1xceDJiJywgJyUyQic6ICdcXHgyYicsICclMmMnOiAnXFx4MmMnLCAnJTJDJzogJ1xceDJjJyxcbiAgJyUyZCc6ICdcXHgyZCcsICclMkQnOiAnXFx4MmQnLCAnJTJlJzogJ1xceDJlJywgJyUyRSc6ICdcXHgyZScsICclMmYnOiAnXFx4MmYnLFxuICAnJTJGJzogJ1xceDJmJywgJyUzMCc6ICdcXHgzMCcsICclMzEnOiAnXFx4MzEnLCAnJTMyJzogJ1xceDMyJywgJyUzMyc6ICdcXHgzMycsXG4gICclMzQnOiAnXFx4MzQnLCAnJTM1JzogJ1xceDM1JywgJyUzNic6ICdcXHgzNicsICclMzcnOiAnXFx4MzcnLCAnJTM4JzogJ1xceDM4JyxcbiAgJyUzOSc6ICdcXHgzOScsICclM2EnOiAnXFx4M2EnLCAnJTNBJzogJ1xceDNhJywgJyUzYic6ICdcXHgzYicsICclM0InOiAnXFx4M2InLFxuICAnJTNjJzogJ1xceDNjJywgJyUzQyc6ICdcXHgzYycsICclM2QnOiAnXFx4M2QnLCAnJTNEJzogJ1xceDNkJywgJyUzZSc6ICdcXHgzZScsXG4gICclM0UnOiAnXFx4M2UnLCAnJTNmJzogJ1xceDNmJywgJyUzRic6ICdcXHgzZicsICclNDAnOiAnXFx4NDAnLCAnJTQxJzogJ1xceDQxJyxcbiAgJyU0Mic6ICdcXHg0MicsICclNDMnOiAnXFx4NDMnLCAnJTQ0JzogJ1xceDQ0JywgJyU0NSc6ICdcXHg0NScsICclNDYnOiAnXFx4NDYnLFxuICAnJTQ3JzogJ1xceDQ3JywgJyU0OCc6ICdcXHg0OCcsICclNDknOiAnXFx4NDknLCAnJTRhJzogJ1xceDRhJywgJyU0QSc6ICdcXHg0YScsXG4gICclNGInOiAnXFx4NGInLCAnJTRCJzogJ1xceDRiJywgJyU0Yyc6ICdcXHg0YycsICclNEMnOiAnXFx4NGMnLCAnJTRkJzogJ1xceDRkJyxcbiAgJyU0RCc6ICdcXHg0ZCcsICclNGUnOiAnXFx4NGUnLCAnJTRFJzogJ1xceDRlJywgJyU0Zic6ICdcXHg0ZicsICclNEYnOiAnXFx4NGYnLFxuICAnJTUwJzogJ1xceDUwJywgJyU1MSc6ICdcXHg1MScsICclNTInOiAnXFx4NTInLCAnJTUzJzogJ1xceDUzJywgJyU1NCc6ICdcXHg1NCcsXG4gICclNTUnOiAnXFx4NTUnLCAnJTU2JzogJ1xceDU2JywgJyU1Nyc6ICdcXHg1NycsICclNTgnOiAnXFx4NTgnLCAnJTU5JzogJ1xceDU5JyxcbiAgJyU1YSc6ICdcXHg1YScsICclNUEnOiAnXFx4NWEnLCAnJTViJzogJ1xceDViJywgJyU1Qic6ICdcXHg1YicsICclNWMnOiAnXFx4NWMnLFxuICAnJTVDJzogJ1xceDVjJywgJyU1ZCc6ICdcXHg1ZCcsICclNUQnOiAnXFx4NWQnLCAnJTVlJzogJ1xceDVlJywgJyU1RSc6ICdcXHg1ZScsXG4gICclNWYnOiAnXFx4NWYnLCAnJTVGJzogJ1xceDVmJywgJyU2MCc6ICdcXHg2MCcsICclNjEnOiAnXFx4NjEnLCAnJTYyJzogJ1xceDYyJyxcbiAgJyU2Myc6ICdcXHg2MycsICclNjQnOiAnXFx4NjQnLCAnJTY1JzogJ1xceDY1JywgJyU2Nic6ICdcXHg2NicsICclNjcnOiAnXFx4NjcnLFxuICAnJTY4JzogJ1xceDY4JywgJyU2OSc6ICdcXHg2OScsICclNmEnOiAnXFx4NmEnLCAnJTZBJzogJ1xceDZhJywgJyU2Yic6ICdcXHg2YicsXG4gICclNkInOiAnXFx4NmInLCAnJTZjJzogJ1xceDZjJywgJyU2Qyc6ICdcXHg2YycsICclNmQnOiAnXFx4NmQnLCAnJTZEJzogJ1xceDZkJyxcbiAgJyU2ZSc6ICdcXHg2ZScsICclNkUnOiAnXFx4NmUnLCAnJTZmJzogJ1xceDZmJywgJyU2Ric6ICdcXHg2ZicsICclNzAnOiAnXFx4NzAnLFxuICAnJTcxJzogJ1xceDcxJywgJyU3Mic6ICdcXHg3MicsICclNzMnOiAnXFx4NzMnLCAnJTc0JzogJ1xceDc0JywgJyU3NSc6ICdcXHg3NScsXG4gICclNzYnOiAnXFx4NzYnLCAnJTc3JzogJ1xceDc3JywgJyU3OCc6ICdcXHg3OCcsICclNzknOiAnXFx4NzknLCAnJTdhJzogJ1xceDdhJyxcbiAgJyU3QSc6ICdcXHg3YScsICclN2InOiAnXFx4N2InLCAnJTdCJzogJ1xceDdiJywgJyU3Yyc6ICdcXHg3YycsICclN0MnOiAnXFx4N2MnLFxuICAnJTdkJzogJ1xceDdkJywgJyU3RCc6ICdcXHg3ZCcsICclN2UnOiAnXFx4N2UnLCAnJTdFJzogJ1xceDdlJywgJyU3Zic6ICdcXHg3ZicsXG4gICclN0YnOiAnXFx4N2YnLCAnJTgwJzogJ1xceDgwJywgJyU4MSc6ICdcXHg4MScsICclODInOiAnXFx4ODInLCAnJTgzJzogJ1xceDgzJyxcbiAgJyU4NCc6ICdcXHg4NCcsICclODUnOiAnXFx4ODUnLCAnJTg2JzogJ1xceDg2JywgJyU4Nyc6ICdcXHg4NycsICclODgnOiAnXFx4ODgnLFxuICAnJTg5JzogJ1xceDg5JywgJyU4YSc6ICdcXHg4YScsICclOEEnOiAnXFx4OGEnLCAnJThiJzogJ1xceDhiJywgJyU4Qic6ICdcXHg4YicsXG4gICclOGMnOiAnXFx4OGMnLCAnJThDJzogJ1xceDhjJywgJyU4ZCc6ICdcXHg4ZCcsICclOEQnOiAnXFx4OGQnLCAnJThlJzogJ1xceDhlJyxcbiAgJyU4RSc6ICdcXHg4ZScsICclOGYnOiAnXFx4OGYnLCAnJThGJzogJ1xceDhmJywgJyU5MCc6ICdcXHg5MCcsICclOTEnOiAnXFx4OTEnLFxuICAnJTkyJzogJ1xceDkyJywgJyU5Myc6ICdcXHg5MycsICclOTQnOiAnXFx4OTQnLCAnJTk1JzogJ1xceDk1JywgJyU5Nic6ICdcXHg5NicsXG4gICclOTcnOiAnXFx4OTcnLCAnJTk4JzogJ1xceDk4JywgJyU5OSc6ICdcXHg5OScsICclOWEnOiAnXFx4OWEnLCAnJTlBJzogJ1xceDlhJyxcbiAgJyU5Yic6ICdcXHg5YicsICclOUInOiAnXFx4OWInLCAnJTljJzogJ1xceDljJywgJyU5Qyc6ICdcXHg5YycsICclOWQnOiAnXFx4OWQnLFxuICAnJTlEJzogJ1xceDlkJywgJyU5ZSc6ICdcXHg5ZScsICclOUUnOiAnXFx4OWUnLCAnJTlmJzogJ1xceDlmJywgJyU5Ric6ICdcXHg5ZicsXG4gICclYTAnOiAnXFx4YTAnLCAnJUEwJzogJ1xceGEwJywgJyVhMSc6ICdcXHhhMScsICclQTEnOiAnXFx4YTEnLCAnJWEyJzogJ1xceGEyJyxcbiAgJyVBMic6ICdcXHhhMicsICclYTMnOiAnXFx4YTMnLCAnJUEzJzogJ1xceGEzJywgJyVhNCc6ICdcXHhhNCcsICclQTQnOiAnXFx4YTQnLFxuICAnJWE1JzogJ1xceGE1JywgJyVBNSc6ICdcXHhhNScsICclYTYnOiAnXFx4YTYnLCAnJUE2JzogJ1xceGE2JywgJyVhNyc6ICdcXHhhNycsXG4gICclQTcnOiAnXFx4YTcnLCAnJWE4JzogJ1xceGE4JywgJyVBOCc6ICdcXHhhOCcsICclYTknOiAnXFx4YTknLCAnJUE5JzogJ1xceGE5JyxcbiAgJyVhYSc6ICdcXHhhYScsICclQWEnOiAnXFx4YWEnLCAnJWFBJzogJ1xceGFhJywgJyVBQSc6ICdcXHhhYScsICclYWInOiAnXFx4YWInLFxuICAnJUFiJzogJ1xceGFiJywgJyVhQic6ICdcXHhhYicsICclQUInOiAnXFx4YWInLCAnJWFjJzogJ1xceGFjJywgJyVBYyc6ICdcXHhhYycsXG4gICclYUMnOiAnXFx4YWMnLCAnJUFDJzogJ1xceGFjJywgJyVhZCc6ICdcXHhhZCcsICclQWQnOiAnXFx4YWQnLCAnJWFEJzogJ1xceGFkJyxcbiAgJyVBRCc6ICdcXHhhZCcsICclYWUnOiAnXFx4YWUnLCAnJUFlJzogJ1xceGFlJywgJyVhRSc6ICdcXHhhZScsICclQUUnOiAnXFx4YWUnLFxuICAnJWFmJzogJ1xceGFmJywgJyVBZic6ICdcXHhhZicsICclYUYnOiAnXFx4YWYnLCAnJUFGJzogJ1xceGFmJywgJyViMCc6ICdcXHhiMCcsXG4gICclQjAnOiAnXFx4YjAnLCAnJWIxJzogJ1xceGIxJywgJyVCMSc6ICdcXHhiMScsICclYjInOiAnXFx4YjInLCAnJUIyJzogJ1xceGIyJyxcbiAgJyViMyc6ICdcXHhiMycsICclQjMnOiAnXFx4YjMnLCAnJWI0JzogJ1xceGI0JywgJyVCNCc6ICdcXHhiNCcsICclYjUnOiAnXFx4YjUnLFxuICAnJUI1JzogJ1xceGI1JywgJyViNic6ICdcXHhiNicsICclQjYnOiAnXFx4YjYnLCAnJWI3JzogJ1xceGI3JywgJyVCNyc6ICdcXHhiNycsXG4gICclYjgnOiAnXFx4YjgnLCAnJUI4JzogJ1xceGI4JywgJyViOSc6ICdcXHhiOScsICclQjknOiAnXFx4YjknLCAnJWJhJzogJ1xceGJhJyxcbiAgJyVCYSc6ICdcXHhiYScsICclYkEnOiAnXFx4YmEnLCAnJUJBJzogJ1xceGJhJywgJyViYic6ICdcXHhiYicsICclQmInOiAnXFx4YmInLFxuICAnJWJCJzogJ1xceGJiJywgJyVCQic6ICdcXHhiYicsICclYmMnOiAnXFx4YmMnLCAnJUJjJzogJ1xceGJjJywgJyViQyc6ICdcXHhiYycsXG4gICclQkMnOiAnXFx4YmMnLCAnJWJkJzogJ1xceGJkJywgJyVCZCc6ICdcXHhiZCcsICclYkQnOiAnXFx4YmQnLCAnJUJEJzogJ1xceGJkJyxcbiAgJyViZSc6ICdcXHhiZScsICclQmUnOiAnXFx4YmUnLCAnJWJFJzogJ1xceGJlJywgJyVCRSc6ICdcXHhiZScsICclYmYnOiAnXFx4YmYnLFxuICAnJUJmJzogJ1xceGJmJywgJyViRic6ICdcXHhiZicsICclQkYnOiAnXFx4YmYnLCAnJWMwJzogJ1xceGMwJywgJyVDMCc6ICdcXHhjMCcsXG4gICclYzEnOiAnXFx4YzEnLCAnJUMxJzogJ1xceGMxJywgJyVjMic6ICdcXHhjMicsICclQzInOiAnXFx4YzInLCAnJWMzJzogJ1xceGMzJyxcbiAgJyVDMyc6ICdcXHhjMycsICclYzQnOiAnXFx4YzQnLCAnJUM0JzogJ1xceGM0JywgJyVjNSc6ICdcXHhjNScsICclQzUnOiAnXFx4YzUnLFxuICAnJWM2JzogJ1xceGM2JywgJyVDNic6ICdcXHhjNicsICclYzcnOiAnXFx4YzcnLCAnJUM3JzogJ1xceGM3JywgJyVjOCc6ICdcXHhjOCcsXG4gICclQzgnOiAnXFx4YzgnLCAnJWM5JzogJ1xceGM5JywgJyVDOSc6ICdcXHhjOScsICclY2EnOiAnXFx4Y2EnLCAnJUNhJzogJ1xceGNhJyxcbiAgJyVjQSc6ICdcXHhjYScsICclQ0EnOiAnXFx4Y2EnLCAnJWNiJzogJ1xceGNiJywgJyVDYic6ICdcXHhjYicsICclY0InOiAnXFx4Y2InLFxuICAnJUNCJzogJ1xceGNiJywgJyVjYyc6ICdcXHhjYycsICclQ2MnOiAnXFx4Y2MnLCAnJWNDJzogJ1xceGNjJywgJyVDQyc6ICdcXHhjYycsXG4gICclY2QnOiAnXFx4Y2QnLCAnJUNkJzogJ1xceGNkJywgJyVjRCc6ICdcXHhjZCcsICclQ0QnOiAnXFx4Y2QnLCAnJWNlJzogJ1xceGNlJyxcbiAgJyVDZSc6ICdcXHhjZScsICclY0UnOiAnXFx4Y2UnLCAnJUNFJzogJ1xceGNlJywgJyVjZic6ICdcXHhjZicsICclQ2YnOiAnXFx4Y2YnLFxuICAnJWNGJzogJ1xceGNmJywgJyVDRic6ICdcXHhjZicsICclZDAnOiAnXFx4ZDAnLCAnJUQwJzogJ1xceGQwJywgJyVkMSc6ICdcXHhkMScsXG4gICclRDEnOiAnXFx4ZDEnLCAnJWQyJzogJ1xceGQyJywgJyVEMic6ICdcXHhkMicsICclZDMnOiAnXFx4ZDMnLCAnJUQzJzogJ1xceGQzJyxcbiAgJyVkNCc6ICdcXHhkNCcsICclRDQnOiAnXFx4ZDQnLCAnJWQ1JzogJ1xceGQ1JywgJyVENSc6ICdcXHhkNScsICclZDYnOiAnXFx4ZDYnLFxuICAnJUQ2JzogJ1xceGQ2JywgJyVkNyc6ICdcXHhkNycsICclRDcnOiAnXFx4ZDcnLCAnJWQ4JzogJ1xceGQ4JywgJyVEOCc6ICdcXHhkOCcsXG4gICclZDknOiAnXFx4ZDknLCAnJUQ5JzogJ1xceGQ5JywgJyVkYSc6ICdcXHhkYScsICclRGEnOiAnXFx4ZGEnLCAnJWRBJzogJ1xceGRhJyxcbiAgJyVEQSc6ICdcXHhkYScsICclZGInOiAnXFx4ZGInLCAnJURiJzogJ1xceGRiJywgJyVkQic6ICdcXHhkYicsICclREInOiAnXFx4ZGInLFxuICAnJWRjJzogJ1xceGRjJywgJyVEYyc6ICdcXHhkYycsICclZEMnOiAnXFx4ZGMnLCAnJURDJzogJ1xceGRjJywgJyVkZCc6ICdcXHhkZCcsXG4gICclRGQnOiAnXFx4ZGQnLCAnJWREJzogJ1xceGRkJywgJyVERCc6ICdcXHhkZCcsICclZGUnOiAnXFx4ZGUnLCAnJURlJzogJ1xceGRlJyxcbiAgJyVkRSc6ICdcXHhkZScsICclREUnOiAnXFx4ZGUnLCAnJWRmJzogJ1xceGRmJywgJyVEZic6ICdcXHhkZicsICclZEYnOiAnXFx4ZGYnLFxuICAnJURGJzogJ1xceGRmJywgJyVlMCc6ICdcXHhlMCcsICclRTAnOiAnXFx4ZTAnLCAnJWUxJzogJ1xceGUxJywgJyVFMSc6ICdcXHhlMScsXG4gICclZTInOiAnXFx4ZTInLCAnJUUyJzogJ1xceGUyJywgJyVlMyc6ICdcXHhlMycsICclRTMnOiAnXFx4ZTMnLCAnJWU0JzogJ1xceGU0JyxcbiAgJyVFNCc6ICdcXHhlNCcsICclZTUnOiAnXFx4ZTUnLCAnJUU1JzogJ1xceGU1JywgJyVlNic6ICdcXHhlNicsICclRTYnOiAnXFx4ZTYnLFxuICAnJWU3JzogJ1xceGU3JywgJyVFNyc6ICdcXHhlNycsICclZTgnOiAnXFx4ZTgnLCAnJUU4JzogJ1xceGU4JywgJyVlOSc6ICdcXHhlOScsXG4gICclRTknOiAnXFx4ZTknLCAnJWVhJzogJ1xceGVhJywgJyVFYSc6ICdcXHhlYScsICclZUEnOiAnXFx4ZWEnLCAnJUVBJzogJ1xceGVhJyxcbiAgJyVlYic6ICdcXHhlYicsICclRWInOiAnXFx4ZWInLCAnJWVCJzogJ1xceGViJywgJyVFQic6ICdcXHhlYicsICclZWMnOiAnXFx4ZWMnLFxuICAnJUVjJzogJ1xceGVjJywgJyVlQyc6ICdcXHhlYycsICclRUMnOiAnXFx4ZWMnLCAnJWVkJzogJ1xceGVkJywgJyVFZCc6ICdcXHhlZCcsXG4gICclZUQnOiAnXFx4ZWQnLCAnJUVEJzogJ1xceGVkJywgJyVlZSc6ICdcXHhlZScsICclRWUnOiAnXFx4ZWUnLCAnJWVFJzogJ1xceGVlJyxcbiAgJyVFRSc6ICdcXHhlZScsICclZWYnOiAnXFx4ZWYnLCAnJUVmJzogJ1xceGVmJywgJyVlRic6ICdcXHhlZicsICclRUYnOiAnXFx4ZWYnLFxuICAnJWYwJzogJ1xceGYwJywgJyVGMCc6ICdcXHhmMCcsICclZjEnOiAnXFx4ZjEnLCAnJUYxJzogJ1xceGYxJywgJyVmMic6ICdcXHhmMicsXG4gICclRjInOiAnXFx4ZjInLCAnJWYzJzogJ1xceGYzJywgJyVGMyc6ICdcXHhmMycsICclZjQnOiAnXFx4ZjQnLCAnJUY0JzogJ1xceGY0JyxcbiAgJyVmNSc6ICdcXHhmNScsICclRjUnOiAnXFx4ZjUnLCAnJWY2JzogJ1xceGY2JywgJyVGNic6ICdcXHhmNicsICclZjcnOiAnXFx4ZjcnLFxuICAnJUY3JzogJ1xceGY3JywgJyVmOCc6ICdcXHhmOCcsICclRjgnOiAnXFx4ZjgnLCAnJWY5JzogJ1xceGY5JywgJyVGOSc6ICdcXHhmOScsXG4gICclZmEnOiAnXFx4ZmEnLCAnJUZhJzogJ1xceGZhJywgJyVmQSc6ICdcXHhmYScsICclRkEnOiAnXFx4ZmEnLCAnJWZiJzogJ1xceGZiJyxcbiAgJyVGYic6ICdcXHhmYicsICclZkInOiAnXFx4ZmInLCAnJUZCJzogJ1xceGZiJywgJyVmYyc6ICdcXHhmYycsICclRmMnOiAnXFx4ZmMnLFxuICAnJWZDJzogJ1xceGZjJywgJyVGQyc6ICdcXHhmYycsICclZmQnOiAnXFx4ZmQnLCAnJUZkJzogJ1xceGZkJywgJyVmRCc6ICdcXHhmZCcsXG4gICclRkQnOiAnXFx4ZmQnLCAnJWZlJzogJ1xceGZlJywgJyVGZSc6ICdcXHhmZScsICclZkUnOiAnXFx4ZmUnLCAnJUZFJzogJ1xceGZlJyxcbiAgJyVmZic6ICdcXHhmZicsICclRmYnOiAnXFx4ZmYnLCAnJWZGJzogJ1xceGZmJywgJyVGRic6ICdcXHhmZidcbn1cblxuZnVuY3Rpb24gZW5jb2RlZFJlcGxhY2VyIChtYXRjaCkge1xuICByZXR1cm4gRW5jb2RlZExvb2t1cFttYXRjaF1cbn1cblxuY29uc3QgU1RBVEVfS0VZID0gMFxuY29uc3QgU1RBVEVfVkFMVUUgPSAxXG5jb25zdCBTVEFURV9DSEFSU0VUID0gMlxuY29uc3QgU1RBVEVfTEFORyA9IDNcblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMgKHN0cikge1xuICBjb25zdCByZXMgPSBbXVxuICBsZXQgc3RhdGUgPSBTVEFURV9LRVlcbiAgbGV0IGNoYXJzZXQgPSAnJ1xuICBsZXQgaW5xdW90ZSA9IGZhbHNlXG4gIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gIGxldCBwID0gMFxuICBsZXQgdG1wID0gJydcbiAgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldXG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJyAmJiBpbnF1b3RlKSB7XG4gICAgICBpZiAoZXNjYXBpbmcpIHsgZXNjYXBpbmcgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgaWYgKGlucXVvdGUpIHtcbiAgICAgICAgICBpbnF1b3RlID0gZmFsc2VcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICB9IGVsc2UgeyBpbnF1b3RlID0gdHJ1ZSB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgeyBlc2NhcGluZyA9IGZhbHNlIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVzY2FwaW5nICYmIGlucXVvdGUpIHsgdG1wICs9ICdcXFxcJyB9XG4gICAgICBlc2NhcGluZyA9IGZhbHNlXG4gICAgICBpZiAoKHN0YXRlID09PSBTVEFURV9DSEFSU0VUIHx8IHN0YXRlID09PSBTVEFURV9MQU5HKSAmJiBjaGFyID09PSBcIidcIikge1xuICAgICAgICBpZiAoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQpIHtcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0xBTkdcbiAgICAgICAgICBjaGFyc2V0ID0gdG1wLnN1YnN0cmluZygxKVxuICAgICAgICB9IGVsc2UgeyBzdGF0ZSA9IFNUQVRFX1ZBTFVFIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFNUQVRFX0tFWSAmJlxuICAgICAgICAoY2hhciA9PT0gJyonIHx8IGNoYXIgPT09ICc9JykgJiZcbiAgICAgICAgcmVzLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZSA9IGNoYXIgPT09ICcqJ1xuICAgICAgICAgID8gU1RBVEVfQ0hBUlNFVFxuICAgICAgICAgIDogU1RBVEVfVkFMVUVcbiAgICAgICAgcmVzW3BdID0gW3RtcCwgdW5kZWZpbmVkXVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiBjaGFyID09PSAnOycpIHtcbiAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgaWYgKGNoYXJzZXQpIHtcbiAgICAgICAgICBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgICAgICAgICAnYmluYXJ5JyxcbiAgICAgICAgICAgICAgY2hhcnNldClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhcnNldCA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkgeyByZXNbcF0gPSB0bXAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgKytwXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIChjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcpKSB7IGNvbnRpbnVlIH1cbiAgICB9XG4gICAgdG1wICs9IGNoYXJcbiAgfVxuICBpZiAoY2hhcnNldCAmJiB0bXAubGVuZ3RoKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgJ2JpbmFyeScsXG4gICAgICBjaGFyc2V0KVxuICB9IGVsc2UgaWYgKHRtcCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICB9XG5cbiAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRtcCkgeyByZXNbcF0gPSB0bXAgfVxuICB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuXG4gIHJldHVybiByZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVBhcmFtc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2VuYW1lIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHsgcmV0dXJuICcnIH1cbiAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBzd2l0Y2ggKHBhdGguY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAweDJGOiAvLyAnLydcbiAgICAgIGNhc2UgMHg1QzogLy8gJ1xcJ1xuICAgICAgICBwYXRoID0gcGF0aC5zbGljZShpICsgMSlcbiAgICAgICAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSRV9QTFVTID0gL1xcKy9nXG5cbmNvbnN0IEhFWCA9IFtcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMFxuXVxuXG5mdW5jdGlvbiBEZWNvZGVyICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cbkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAvLyBSZXBsYWNlICcrJyB3aXRoICcgJyBiZWZvcmUgZGVjb2RpbmdcbiAgc3RyID0gc3RyLnJlcGxhY2UoUkVfUExVUywgJyAnKVxuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSAwOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgZm9yICg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUhFWFtzdHIuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgICAgcmVzICs9ICclJyArIHRoaXMuYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIC0taSAvLyByZXRyeSBjaGFyYWN0ZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVmZmVyICs9IHN0cltpXVxuICAgICAgICArK3BcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHRoaXMuYnVmZmVyLCAxNikpXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnJScpIHtcbiAgICAgIGlmIChpID4gcCkge1xuICAgICAgICByZXMgKz0gc3RyLnN1YnN0cmluZyhwLCBpKVxuICAgICAgICBwID0gaVxuICAgICAgfVxuICAgICAgdGhpcy5idWZmZXIgPSAnJ1xuICAgICAgKytwXG4gICAgfVxuICB9XG4gIGlmIChwIDwgbGVuICYmIHRoaXMuYnVmZmVyID09PSB1bmRlZmluZWQpIHsgcmVzICs9IHN0ci5zdWJzdHJpbmcocCkgfVxuICByZXR1cm4gcmVzXG59XG5EZWNvZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWNvZGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERlY29kZXIgPSByZXF1aXJlKCcuLi91dGlscy9EZWNvZGVyJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5cblVybEVuY29kZWQuZGV0ZWN0ID0gL15hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pXG5mdW5jdGlvbiBVcmxFbmNvZGVkIChib3ksIGNmZykge1xuICBjb25zdCBsaW1pdHMgPSBjZmcubGltaXRzXG4gIGNvbnN0IHBhcnNlZENvblR5cGUgPSBjZmcucGFyc2VkQ29uVHlwZVxuICB0aGlzLmJveSA9IGJveVxuXG4gIHRoaXMuZmllbGRTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZFNpemUnLCAxICogMTAyNCAqIDEwMjQpXG4gIHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGROYW1lU2l6ZScsIDEwMClcbiAgdGhpcy5maWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuXG4gIGxldCBjaGFyc2V0XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXJzZWRDb25UeXBlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkQ29uVHlwZVtpXSkgJiZcbiAgICAgICAgUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBjaGFyc2V0ID0gcGFyc2VkQ29uVHlwZVtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChjaGFyc2V0ID09PSB1bmRlZmluZWQpIHsgY2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4JyB9XG5cbiAgdGhpcy5kZWNvZGVyID0gbmV3IERlY29kZXIoKVxuICB0aGlzLmNoYXJzZXQgPSBjaGFyc2V0XG4gIHRoaXMuX2ZpZWxkcyA9IDBcbiAgdGhpcy5fc3RhdGUgPSAna2V5J1xuICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gIHRoaXMuX2tleSA9ICcnXG4gIHRoaXMuX3ZhbCA9ICcnXG4gIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGNiKSB7XG4gIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHtcbiAgICBpZiAoIXRoaXMuYm95LmhpdEZpZWxkc0xpbWl0KSB7XG4gICAgICB0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICB9XG4gICAgcmV0dXJuIGNiKClcbiAgfVxuXG4gIGxldCBpZHhlcTsgbGV0IGlkeGFtcDsgbGV0IGk7IGxldCBwID0gMDsgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcblxuICB3aGlsZSAocCA8IGxlbikge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScpIHtcbiAgICAgIGlkeGVxID0gaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDNELyogPSAqLykge1xuICAgICAgICAgIGlkeGVxID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc0tleSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc0tleSB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhlcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIGFzc2lnbm1lbnRcbiAgICAgICAgaWYgKGlkeGVxID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGVxKSkgfVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICd2YWwnXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl92YWwgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhlcSArIDFcbiAgICAgIH0gZWxzZSBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggbm8gYXNzaWdubWVudFxuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBsZXQga2V5OyBjb25zdCBrZXlUcnVuYyA9IHRoaXMuX2tleVRydW5jXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IGtleSA9ICh0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpKSB9IGVsc2UgeyBrZXkgPSB0aGlzLl9rZXkgfVxuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBpZiAoa2V5Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dChrZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBrZXlUcnVuYyxcbiAgICAgICAgICAgIGZhbHNlKVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX2J5dGVzS2V5ID0gdGhpcy5fa2V5Lmxlbmd0aCkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX2tleVRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzVmFsID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNWYWwgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSB9XG4gICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYylcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAna2V5J1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fdmFsID09PSAnJyAmJiB0aGlzLmZpZWxkU2l6ZUxpbWl0ID09PSAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX2J5dGVzVmFsID0gdGhpcy5fdmFsLmxlbmd0aCkgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYigpXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYm95Ll9kb25lKSB7IHJldHVybiB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5JyAmJiB0aGlzLl9rZXkubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgJycsXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIGZhbHNlKVxuICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlID09PSAndmFsJykge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICB0aGlzLl92YWxUcnVuYylcbiAgfVxuICB0aGlzLmJveS5fZG9uZSA9IHRydWVcbiAgdGhpcy5ib3kuZW1pdCgnZmluaXNoJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBVcmxFbmNvZGVkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCwgcmVjZWl2ZU1lc3NhZ2VPblBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdQT1NUJ11cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IFsxMDEsIDIwNCwgMjA1LCAzMDRdXG5cbmNvbnN0IHJlZGlyZWN0U3RhdHVzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuY29uc3QgcmVkaXJlY3RTdGF0dXNTZXQgPSBuZXcgU2V0KHJlZGlyZWN0U3RhdHVzKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYmxvY2stYmFkLXBvcnRcbmNvbnN0IGJhZFBvcnRzID0gW1xuICAnMScsICc3JywgJzknLCAnMTEnLCAnMTMnLCAnMTUnLCAnMTcnLCAnMTknLCAnMjAnLCAnMjEnLCAnMjInLCAnMjMnLCAnMjUnLCAnMzcnLCAnNDInLCAnNDMnLCAnNTMnLCAnNjknLCAnNzcnLCAnNzknLFxuICAnODcnLCAnOTUnLCAnMTAxJywgJzEwMicsICcxMDMnLCAnMTA0JywgJzEwOScsICcxMTAnLCAnMTExJywgJzExMycsICcxMTUnLCAnMTE3JywgJzExOScsICcxMjMnLCAnMTM1JywgJzEzNycsXG4gICcxMzknLCAnMTQzJywgJzE2MScsICcxNzknLCAnMzg5JywgJzQyNycsICc0NjUnLCAnNTEyJywgJzUxMycsICc1MTQnLCAnNTE1JywgJzUyNicsICc1MzAnLCAnNTMxJywgJzUzMicsXG4gICc1NDAnLCAnNTQ4JywgJzU1NCcsICc1NTYnLCAnNTYzJywgJzU4NycsICc2MDEnLCAnNjM2JywgJzk4OScsICc5OTAnLCAnOTkzJywgJzk5NScsICcxNzE5JywgJzE3MjAnLCAnMTcyMycsXG4gICcyMDQ5JywgJzM2NTknLCAnNDA0NScsICc1MDYwJywgJzUwNjEnLCAnNjAwMCcsICc2NTY2JywgJzY2NjUnLCAnNjY2NicsICc2NjY3JywgJzY2NjgnLCAnNjY2OScsICc2Njk3JyxcbiAgJzEwMDgwJ1xuXVxuXG5jb25zdCBiYWRQb3J0c1NldCA9IG5ldyBTZXQoYmFkUG9ydHMpXG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuY29uc3QgcmVmZXJyZXJQb2xpY3kgPSBbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl1cbmNvbnN0IHJlZmVycmVyUG9saWN5U2V0ID0gbmV3IFNldChyZWZlcnJlclBvbGljeSlcblxuY29uc3QgcmVxdWVzdFJlZGlyZWN0ID0gWydmb2xsb3cnLCAnbWFudWFsJywgJ2Vycm9yJ11cblxuY29uc3Qgc2FmZU1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxuY29uc3Qgc2FmZU1ldGhvZHNTZXQgPSBuZXcgU2V0KHNhZmVNZXRob2RzKVxuXG5jb25zdCByZXF1ZXN0TW9kZSA9IFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ11cblxuY29uc3QgcmVxdWVzdENyZWRlbnRpYWxzID0gWydvbWl0JywgJ3NhbWUtb3JpZ2luJywgJ2luY2x1ZGUnXVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSBbXG4gICdkZWZhdWx0JyxcbiAgJ25vLXN0b3JlJyxcbiAgJ3JlbG9hZCcsXG4gICduby1jYWNoZScsXG4gICdmb3JjZS1jYWNoZScsXG4gICdvbmx5LWlmLWNhY2hlZCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuY29uc3QgcmVxdWVzdEJvZHlIZWFkZXIgPSBbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2VudW1kZWYtcmVxdWVzdGR1cGxleFxuY29uc3QgcmVxdWVzdER1cGxleCA9IFtcbiAgJ2hhbGYnXG5dXG5cbi8vIGh0dHA6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZvcmJpZGRlbi1tZXRob2RcbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnVFJBQ0UnLCAnVFJBQ0snXVxuY29uc3QgZm9yYmlkZGVuTWV0aG9kc1NldCA9IG5ldyBTZXQoZm9yYmlkZGVuTWV0aG9kcylcblxuY29uc3Qgc3VicmVzb3VyY2UgPSBbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXVxuY29uc3Qgc3VicmVzb3VyY2VTZXQgPSBuZXcgU2V0KHN1YnJlc291cmNlKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0RPTUV4Y2VwdGlvbiddfSAqL1xuY29uc3QgRE9NRXhjZXB0aW9uID0gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPz8gKCgpID0+IHtcbiAgLy8gRE9NRXhjZXB0aW9uIHdhcyBvbmx5IG1hZGUgYSBnbG9iYWwgaW4gTm9kZSB2MTcuMC4wLFxuICAvLyBidXQgZmV0Y2ggc3VwcG9ydHMgPj0gdjE2LjguXG4gIHRyeSB7XG4gICAgYXRvYignficpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXJyKS5jb25zdHJ1Y3RvclxuICB9XG59KSgpXG5cbmxldCBjaGFubmVsXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snc3RydWN0dXJlZENsb25lJ119ICovXG5jb25zdCBzdHJ1Y3R1cmVkQ2xvbmUgPVxuICBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSA/P1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iMjdhZTI0ZGNjNDI1MWJhZDcyNmQ5ZDg0YmFmNjc4ZDFmNzA3ZmVkL2xpYi9pbnRlcm5hbC9zdHJ1Y3R1cmVkX2Nsb25lLmpzXG4gIC8vIHN0cnVjdHVyZWRDbG9uZSB3YXMgYWRkZWQgaW4gdjE3LjAuMCwgYnV0IGZldGNoIHN1cHBvcnRzIHYxNi44XG4gIGZ1bmN0aW9uIHN0cnVjdHVyZWRDbG9uZSAodmFsdWUsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyBhcmd1bWVudCcpXG4gICAgfVxuXG4gICAgaWYgKCFjaGFubmVsKSB7XG4gICAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgICB9XG4gICAgY2hhbm5lbC5wb3J0MS51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0Mi51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh2YWx1ZSwgb3B0aW9ucz8udHJhbnNmZXIpXG4gICAgcmV0dXJuIHJlY2VpdmVNZXNzYWdlT25Qb3J0KGNoYW5uZWwucG9ydDIpLm1lc3NhZ2VcbiAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRE9NRXhjZXB0aW9uLFxuICBzdHJ1Y3R1cmVkQ2xvbmUsXG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2VcdTIwMTlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBcdTAwQTcgOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5XG4gIC8vIGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyIG9uIGFjdHVhbFJlc3BvbnNlLlxuXG4gIC8vIDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeSBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlclxuICAvLyAxLiBMZXQgcG9saWN5LXRva2VucyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuIGBSZWZlcnJlci1Qb2xpY3lgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IGFjdHVhbFJlc3BvbnNlXG4gIC8vIDIuIExldCBwb2xpY3kgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gaW4gcG9saWN5LXRva2VucywgaWYgdG9rZW4gaXMgYSByZWZlcnJlciBwb2xpY3kgYW5kIHRva2VuIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCBwb2xpY3kgdG8gdG9rZW4uXG4gIC8vIDQuIFJldHVybiBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeUhlYWRlciA9IChoZWFkZXJzTGlzdC5nZXQoJ3JlZmVycmVyLXBvbGljeScpID8/ICcnKS5zcGxpdCgnLCcpXG5cbiAgLy8gTm90ZTogQXMgdGhlIHJlZmVycmVyLXBvbGljeSBjYW4gY29udGFpbiBtdWx0aXBsZSBwb2xpY2llc1xuICAvLyBzZXBhcmF0ZWQgYnkgY29tbWEsIHdlIG5lZWQgdG8gbG9vcCB0aHJvdWdoIGFsbCBvZiB0aGVtXG4gIC8vIGFuZCBwaWNrIHRoZSBmaXJzdCB2YWxpZCBvbmUuXG4gIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVycmVyLVBvbGljeSNzcGVjaWZ5X2FfZmFsbGJhY2tfcG9saWN5XG4gIGxldCBwb2xpY3kgPSAnJ1xuICBpZiAocG9saWN5SGVhZGVyLmxlbmd0aCA+IDApIHtcbiAgICAvLyBUaGUgcmlnaHQtbW9zdCBwb2xpY3kgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAvLyBUaGUgbGVmdC1tb3N0IHBvbGljeSBpcyB0aGUgZmFsbGJhY2suXG4gICAgZm9yIChsZXQgaSA9IHBvbGljeUhlYWRlci5sZW5ndGg7IGkgIT09IDA7IGktLSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBwb2xpY3lIZWFkZXJbaSAtIDFdLnRyaW0oKVxuICAgICAgaWYgKHJlZmVycmVyUG9saWN5VG9rZW5zLmhhcyh0b2tlbikpIHtcbiAgICAgICAgcG9saWN5ID0gdG9rZW5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAyLiBJZiBwb2xpY3kgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byBwb2xpY3kuXG4gIGlmIChwb2xpY3kgIT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5LWNoZWNrXG5mdW5jdGlvbiBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnYWxsb3dlZCdcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtY29ycy1jaGVja1xuZnVuY3Rpb24gY29yc0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXRhby1jaGVja1xuZnVuY3Rpb24gVEFPQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmV0Y2hNZXRhZGF0YSAoaHR0cFJlcXVlc3QpIHtcbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1kZXN0LWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtbW9kZS1oZWFkZXJcblxuICAvLyAgMS4gQXNzZXJ0OiByXHUyMDE5cyB1cmwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwuXG4gIC8vICBUT0RPXG5cbiAgLy8gIDIuIExldCBoZWFkZXIgYmUgYSBTdHJ1Y3R1cmVkIEhlYWRlciB3aG9zZSB2YWx1ZSBpcyBhIHRva2VuLlxuICBsZXQgaGVhZGVyID0gbnVsbFxuXG4gIC8vICAzLiBTZXQgaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byByXHUyMDE5cyBtb2RlLlxuICBoZWFkZXIgPSBodHRwUmVxdWVzdC5tb2RlXG5cbiAgLy8gIDQuIFNldCBhIHN0cnVjdHVyZWQgZmllbGQgdmFsdWUgYFNlYy1GZXRjaC1Nb2RlYC9oZWFkZXIgaW4gclx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnc2VjLWZldGNoLW1vZGUnLCBoZWFkZXIpXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1zaXRlLWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtdXNlci1oZWFkZXJcbiAgLy8gIFRPRE9cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcGVuZC1hLXJlcXVlc3Qtb3JpZ2luLWhlYWRlclxuZnVuY3Rpb24gYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgc2VyaWFsaXplZE9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIGJ5dGUtc2VyaWFsaXppbmcgYSByZXF1ZXN0IG9yaWdpbiB3aXRoIHJlcXVlc3QuXG4gIGxldCBzZXJpYWxpemVkT3JpZ2luID0gcmVxdWVzdC5vcmlnaW5cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIGlmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBuZWl0aGVyIGBHRVRgIG5vciBgSEVBRGAsIHRoZW46XG4gIH0gZWxzZSBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAvLyAxLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5OlxuICAgIHN3aXRjaCAocmVxdWVzdC5yZWZlcnJlclBvbGljeSkge1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXInOlxuICAgICAgICAvLyBTZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgYSB0dXBsZSBvcmlnaW4sIGl0cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgXCJodHRwc1wiLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKHJlcXVlc3Qub3JpZ2luICYmIHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3Qub3JpZ2luKSAmJiAhdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0LCByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICAvLyAyLiBBcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7KCkgPT4gdW5rbm93bltdfSBpdGVyYXRvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7J2tleSd8J3ZhbHVlJ3wna2V5K3ZhbHVlJ30ga2luZFxuICovXG5mdW5jdGlvbiBtYWtlSXRlcmF0b3IgKGl0ZXJhdG9yLCBuYW1lLCBraW5kKSB7XG4gIGNvbnN0IG9iamVjdCA9IHtcbiAgICBpbmRleDogMCxcbiAgICBraW5kLFxuICAgIHRhcmdldDogaXRlcmF0b3JcbiAgfVxuXG4gIGNvbnN0IGkgPSB7XG4gICAgbmV4dCAoKSB7XG4gICAgICAvLyAxLiBMZXQgaW50ZXJmYWNlIGJlIHRoZSBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGV4aXN0cy5cblxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cblxuICAgICAgLy8gMy4gTGV0IG9iamVjdCBiZSA/IFRvT2JqZWN0KHRoaXNWYWx1ZSkuXG5cbiAgICAgIC8vIDQuIElmIG9iamVjdCBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbiBwZXJmb3JtIGEgc2VjdXJpdHlcbiAgICAgIC8vICAgIGNoZWNrLCBwYXNzaW5nOlxuXG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCB7IGluZGV4LCBraW5kLCB0YXJnZXQgfSA9IG9iamVjdFxuICAgICAgY29uc3QgdmFsdWVzID0gdGFyZ2V0KClcblxuICAgICAgLy8gOS4gTGV0IGxlbiBiZSB0aGUgbGVuZ3RoIG9mIHZhbHVlcy5cbiAgICAgIGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGhcblxuICAgICAgLy8gMTAuIElmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBsZW4sIHRoZW4gcmV0dXJuXG4gICAgICAvLyAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpLlxuICAgICAgaWYgKGluZGV4ID49IGxlbikge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH1cbiAgICAgIH1cblxuICAgICAgLy8gMTEuIExldCBwYWlyIGJlIHRoZSBlbnRyeSBpbiB2YWx1ZXMgYXQgaW5kZXggaW5kZXguXG4gICAgICBjb25zdCBwYWlyID0gdmFsdWVzW2luZGV4XVxuXG4gICAgICAvLyAxMi4gU2V0IG9iamVjdFx1MjAxOXMgaW5kZXggdG8gaW5kZXggKyAxLlxuICAgICAgb2JqZWN0LmluZGV4ID0gaW5kZXggKyAxXG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdGhlIGl0ZXJhdG9yIHJlc3VsdCBmb3IgcGFpciBhbmQga2luZC5cbiAgICAgIHJldHVybiBpdGVyYXRvclJlc3VsdChwYWlyLCBraW5kKVxuICAgIH0sXG4gICAgLy8gVGhlIGNsYXNzIHN0cmluZyBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGZvciBhIGdpdmVuIGludGVyZmFjZSBpcyB0aGVcbiAgICAvLyByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyB0aGUgaWRlbnRpZmllciBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgc3RyaW5nIFwiIEl0ZXJhdG9yXCIuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IGAke25hbWV9IEl0ZXJhdG9yYFxuICB9XG5cbiAgLy8gVGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgc2xvdCBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IG11c3QgYmUgJUl0ZXJhdG9yUHJvdG90eXBlJS5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGksIGVzSXRlcmF0b3JQcm90b3R5cGUpXG4gIC8vIGVzSXRlcmF0b3JQcm90b3R5cGUgbmVlZHMgdG8gYmUgdGhlIHByb3RvdHlwZSBvZiBpXG4gIC8vIHdoaWNoIGlzIHRoZSBwcm90b3R5cGUgb2YgYW4gZW1wdHkgb2JqZWN0LiBZZXMsIGl0J3MgY29uZnVzaW5nLlxuICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBpKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2l0ZXJhdG9yLXJlc3VsdFxuZnVuY3Rpb24gaXRlcmF0b3JSZXN1bHQgKHBhaXIsIGtpbmQpIHtcbiAgbGV0IHJlc3VsdFxuXG4gIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXknOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyBrZXkuXG4gICAgICByZXN1bHQgPSBwYWlyWzBdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMgdmFsdWUuXG4gICAgICByZXN1bHQgPSBwYWlyWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICdrZXkrdmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDQuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgIC8vIDYuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMFwiLCBrZXkpLlxuICAgICAgLy8gNy4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIxXCIsIHZhbHVlKS5cbiAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgIHJlc3VsdCA9IHBhaXJcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocmVzdWx0LCBmYWxzZSkuXG4gIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LWZ1bGx5LXJlYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZnVsbHlSZWFkQm9keSAoYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpIHtcbiAgLy8gMS4gSWYgdGFza0Rlc3RpbmF0aW9uIGlzIG51bGwsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0b1xuICAvLyAgICB0aGUgcmVzdWx0IG9mIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuXG4gIC8vIDIuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzIGJlIHRvIHF1ZXVlIGFcbiAgLy8gICAgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMsIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSBwcm9jZXNzQm9keVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGJlIHRvIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlFcnJvcixcbiAgLy8gICAgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IGVycm9yU3RlcHMgPSBwcm9jZXNzQm9keUVycm9yXG5cbiAgLy8gNC4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZm9yIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHMgd2l0aCB0aGF0XG4gIC8vICAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuLlxuICBsZXQgcmVhZGVyXG5cbiAgdHJ5IHtcbiAgICByZWFkZXIgPSBib2R5LnN0cmVhbS5nZXRSZWFkZXIoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNS4gUmVhZCBhbGwgYnl0ZXMgZnJvbSByZWFkZXIsIGdpdmVuIHN1Y2Nlc3NTdGVwcyBhbmQgZXJyb3JTdGVwcy5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKVxuICAgIHN1Y2Nlc3NTdGVwcyhyZXN1bHQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtSZWFkYWJsZVN0cmVhbX0gKi9cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2UgKHN0cmVhbSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmNvbnN0IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIID0gNjU1MzVcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWRlY29kZVxuICogQHBhcmFtIHtudW1iZXJbXXxVaW50OEFycmF5fSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBUbyBpc29tb3JwaGljIGRlY29kZSBhIGJ5dGUgc2VxdWVuY2UgaW5wdXQsIHJldHVybiBhIHN0cmluZyB3aG9zZSBjb2RlIHBvaW50XG4gIC8vICAgIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgbGVuZ3RoIGFuZCB3aG9zZSBjb2RlIHBvaW50cyBoYXZlIHRoZSBzYW1lIHZhbHVlc1xuICAvLyAgICBhcyB0aGUgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBieXRlcywgaW4gdGhlIHNhbWUgb3JkZXIuXG5cbiAgaWYgKGlucHV0Lmxlbmd0aCA8IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uaW5wdXQpXG4gIH1cblxuICByZXR1cm4gaW5wdXQucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1cnJlbnQpLCAnJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjxVaW50OEFycmF5Pn0gY29udHJvbGxlclxuICovXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUNsb3NlIChjb250cm9sbGVyKSB7XG4gIHRyeSB7XG4gICAgY29udHJvbGxlci5jbG9zZSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRPRE86IGFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoaXMgZXJyb3Igb2NjdXJzLlxuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvbnRyb2xsZXIgaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1lbmNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRW5jb2RlIChpbnB1dCkge1xuICAvLyAxLiBBc3NlcnQ6IGlucHV0IGNvbnRhaW5zIG5vIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiBVKzAwRkYuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChpKSA8PSAweEZGKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIGEgYnl0ZSBzZXF1ZW5jZSB3aG9zZSBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXRcdTIwMTlzIGNvZGVcbiAgLy8gICAgcG9pbnQgbGVuZ3RoIGFuZCB3aG9zZSBieXRlcyBoYXZlIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgLy8gICAgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBjb2RlIHBvaW50cywgaW4gdGhlIHNhbWUgb3JkZXJcbiAgcmV0dXJuIGlucHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbWRlZmF1bHRyZWFkZXItcmVhZC1hbGwtYnl0ZXNcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZC1sb29wXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcn0gcmVhZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxCeXRlcyAocmVhZGVyKSB7XG4gIGNvbnN0IGJ5dGVzID0gW11cbiAgbGV0IGJ5dGVMZW5ndGggPSAwXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlOiBjaHVuayB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIDEuIENhbGwgc3VjY2Vzc1N0ZXBzIHdpdGggYnl0ZXMuXG4gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChieXRlcywgYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjaHVuayBpcyBub3QgYSBVaW50OEFycmF5IG9iamVjdCwgY2FsbCBmYWlsdXJlU3RlcHNcbiAgICAvLyAgICB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlY2VpdmVkIG5vbi1VaW50OEFycmF5IGNodW5rJylcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgdGhlIGJ5dGVzIHJlcHJlc2VudGVkIGJ5IGNodW5rIHRvIGJ5dGVzLlxuICAgIGJ5dGVzLnB1c2goY2h1bmspXG4gICAgYnl0ZUxlbmd0aCArPSBjaHVuay5sZW5ndGhcblxuICAgIC8vIDMuIFJlYWQtbG9vcCBnaXZlbiByZWFkZXIsIGJ5dGVzLCBzdWNjZXNzU3RlcHMsIGFuZCBmYWlsdXJlU3RlcHMuXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNpcy1sb2NhbFxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0xvY2FsICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgcHJvdG9jb2wgPT09ICdibG9iOicgfHwgcHJvdG9jb2wgPT09ICdkYXRhOidcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxIYXNIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnaHR0cHM6JylcbiAgfVxuXG4gIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1zY2hlbWVcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNIdHRwSHR0cHNTY2hlbWUgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEZldGNoIHN1cHBvcnRzIG5vZGUgPj0gMTYuOC4wLCBidXQgT2JqZWN0Lmhhc093biB3YXMgYWRkZWQgaW4gdjE2LjkuMC5cbiAqL1xuY29uc3QgaGFzT3duID0gT2JqZWN0Lmhhc093biB8fCAoKGRpY3QsIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpY3QsIGtleSkpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Fib3J0ZWQsXG4gIGlzQ2FuY2VsbGVkLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgdG9VU1ZTdHJpbmcsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICBUQU9DaGVjayxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHJlcXVlc3RCYWRQb3J0LFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgcmVzcG9uc2VVUkwsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIGlzQmxvYkxpa2UsXG4gIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSxcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaGFzT3duLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgYnl0ZXNNYXRjaCxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIGlzb21vcnBoaWNEZWNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybEhhc0h0dHBzU2NoZW1lLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgcmVhZEFsbEJ5dGVzLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmQsXG4gIHBhcnNlTWV0YWRhdGFcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtHdWFyZDogU3ltYm9sKCdndWFyZCcpLFxuICBrUmVhbG06IFN5bWJvbCgncmVhbG0nKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIFx1MjIxMjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyBcdTIyMTIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICtcdTIyMUUsIG9yIFx1MjIxMlx1MjIxRSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIFx1MjIxMjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHggXHUyMjY1IDJeYml0TGVuZ3RoIFx1MjIxMiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IFx1MjIxMiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSBcdTAwRDcgci5cbiAgaWYgKG4gPCAwKSB7XG4gICAgcmV0dXJuIC0xICogclxuICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gci5cbiAgcmV0dXJuIHJcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1zZXF1ZW5jZVxud2ViaWRsLnNlcXVlbmNlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShWKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBtZXRob2QgYmUgPyBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuXG4gICAgLyoqIEB0eXBlIHtHZW5lcmF0b3J9ICovXG4gICAgY29uc3QgbWV0aG9kID0gVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cblxuICAgIC8vIDMuIElmIG1ldGhvZCBpcyB1bmRlZmluZWQsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIG1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2YgbWV0aG9kLm5leHQgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhbiBpdGVyYXRvci4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLXNlcXVlbmNlLWZyb20taXRlcmFibGVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gbWV0aG9kLm5leHQoKVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBzZXEucHVzaChjb252ZXJ0ZXIodmFsdWUpKVxuICAgIH1cblxuICAgIHJldHVybiBzZXFcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXRvLXJlY29yZFxud2ViaWRsLnJlY29yZENvbnZlcnRlciA9IGZ1bmN0aW9uIChrZXlDb252ZXJ0ZXIsIHZhbHVlQ29udmVydGVyKSB7XG4gIHJldHVybiAoTykgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoTykgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlY29yZCcsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShPKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIE9iamVjdC5rZXlzIG9ubHkgcmV0dXJucyBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhPKVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLlxuICAgIGNvbnN0IGtleXMgPSBSZWZsZWN0Lm93bktleXMoTylcblxuICAgIC8vIDQuIEZvciBlYWNoIGtleSBvZiBrZXlzLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkpXG5cbiAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOlxuICAgICAgaWYgKGRlc2M/LmVudW1lcmFibGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbndlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gKFYsIG9wdHMgPSB7fSkgPT4ge1xuICAgIGlmIChvcHRzLnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgaSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBpLm5hbWUsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke1Z9IHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnkpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghaGFzT3duKGRpY3Rpb25hcnksIGtleSkpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBNaXNzaW5nIHJlcXVpcmVkIGtleSBcIiR7a2V5fVwiLmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWx1ZSA9IGRpY3Rpb25hcnlba2V5XVxuICAgICAgY29uc3QgaGFzRGVmYXVsdCA9IGhhc093bihvcHRpb25zLCAnZGVmYXVsdFZhbHVlJylcblxuICAgICAgLy8gT25seSB1c2UgZGVmYXVsdFZhbHVlIGlmIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmRcbiAgICAgIC8vIGEgZGVmYXVsdFZhbHVlIG9wdGlvbnMgd2FzIHByb3ZpZGVkLlxuICAgICAgaWYgKGhhc0RlZmF1bHQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/PyBkZWZhdWx0VmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoVilcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBWIGlzIG51bGwgYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlXG4gIC8vICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0xlZ2FjeU51bGxUb0VtcHR5U3RyaW5nXVxuICAvLyAgICBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW4gcmV0dXJuIHRoZSBET01TdHJpbmcgdmFsdWVcbiAgLy8gICAgdGhhdCByZXByZXNlbnRzIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGlmIChWID09PSBudWxsICYmIG9wdHMubGVnYWN5TnVsbFRvRW1wdHlTdHJpbmcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDIuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIGlmICh0eXBlb2YgViA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlIHN5bWJvbCB0byBzdHJpbmcuJylcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgSURMIERPTVN0cmluZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlXG4gIC8vICAgIHNhbWUgc2VxdWVuY2Ugb2YgY29kZSB1bml0cyBhcyB0aGUgb25lIHRoZVxuICAvLyAgICBFQ01BU2NyaXB0IFN0cmluZyB2YWx1ZSB4IHJlcHJlc2VudHMuXG4gIHJldHVybiBTdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1CeXRlU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgLy8gTm90ZTogRE9NU3RyaW5nIGNvbnZlcnRlciBwZXJmb3JtID8gVG9TdHJpbmcoVilcbiAgY29uc3QgeCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxuXG4gIC8vIDIuIElmIHRoZSB2YWx1ZSBvZiBhbnkgZWxlbWVudCBvZiB4IGlzIGdyZWF0ZXIgdGhhblxuICAvLyAgICAyNTUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB4Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICh4LmNoYXJDb2RlQXQoaW5kZXgpID4gMjU1KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgdG8gYSBCeXRlU3RyaW5nIGJlY2F1c2UgdGhlIGNoYXJhY3RlciBhdCAnICtcbiAgICAgICAgYGluZGV4ICR7aW5kZXh9IGhhcyBhIHZhbHVlIG9mICR7eC5jaGFyQ29kZUF0KGluZGV4KX0gd2hpY2ggaXMgZ3JlYXRlciB0aGFuIDI1NS5gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGFuIElETCBCeXRlU3RyaW5nIHZhbHVlIHdob3NlIGxlbmd0aCBpcyB0aGVcbiAgLy8gICAgbGVuZ3RoIG9mIHgsIGFuZCB3aGVyZSB0aGUgdmFsdWUgb2YgZWFjaCBlbGVtZW50IGlzXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtVVNWU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcgPSB0b1VTVlN0cmluZ1xuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWJvb2xlYW5cbndlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSB0aGUgcmVzdWx0IG9mIGNvbXB1dGluZyBUb0Jvb2xlYW4oVikuXG4gIGNvbnN0IHggPSBCb29sZWFuKFYpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgYm9vbGVhbiB2YWx1ZSB0aGF0IGlzIHRoZSBvbmUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIHRydXRoIHZhbHVlIGFzIHRoZSBFQ01BU2NyaXB0IEJvb2xlYW4gdmFsdWUgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1hbnlcbndlYmlkbC5jb252ZXJ0ZXJzLmFueSA9IGZ1bmN0aW9uIChWKSB7XG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJzaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICdzaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDMyLCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDMyLCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1zaG9ydFxud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAxNiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAxNiwgJ3Vuc2lnbmVkJywgb3B0cylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2lkbC1BcnJheUJ1ZmZlclxud2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFuXG4gIC8vICAgIFtbQXJyYXlCdWZmZXJEYXRhXV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLWFycmF5YnVmZmVyLWluc3RhbmNlc1xuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtc2hhcmVkYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1Z9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogWydBcnJheUJ1ZmZlciddXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbC5cblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBBcnJheUJ1ZmZlciB2YWx1ZSB0aGF0IGlzIGFcbiAgLy8gICAgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5ID0gZnVuY3Rpb24gKFYsIFQsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBMZXQgVCBiZSB0aGUgSURMIHR5cGUgViBpcyBiZWluZyBjb252ZXJ0ZWQgdG8uXG5cbiAgLy8gMi4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW1R5cGVkQXJyYXlOYW1lXV0gaW50ZXJuYWwgc2xvdCB3aXRoIGEgdmFsdWVcbiAgLy8gICAgZXF1YWwgdG8gVFx1MjAxOXMgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzVHlwZWRBcnJheShWKSB8fFxuICAgIFYuY29uc3RydWN0b3IubmFtZSAhPT0gVC5uYW1lXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1QubmFtZX1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbVC5uYW1lXVxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIGFycmF5IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSBJREwgdmFsdWUgb2YgdHlwZSBUIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3ID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbRGF0YVZpZXddXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHwgIXR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdEYXRhVmlldycsXG4gICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhIERhdGFWaWV3LidcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpcyB0cnVlLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgRGF0YVZpZXcgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNCdWZmZXJTb3VyY2VcbndlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgaWYgKHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIoViwgb3B0cylcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcoViwgb3B0cylcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYSBCdWZmZXJTb3VyY2UuYClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXVxuKVxuXG53ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwucmVjb3JkQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWJpZGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNuXHUyMDE5dCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRhXHUyMDE5cyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbmNsYXNzIEZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgY29uc3RydWN0b3IgKGZpbGVCaXRzLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGaWxlIGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgZmlsZUJpdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10oZmlsZUJpdHMpXG4gICAgZmlsZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZU5hbWUpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyhvcHRpb25zKVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG4gICAgLy8gTm90ZTogQmxvYiBoYW5kbGVzIHRoaXMgZm9yIHVzXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIGxldCB0ID0gb3B0aW9ucy50eXBlXG4gICAgbGV0IGRcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICBzdWJzdGVwOiB7XG4gICAgICBpZiAodCkge1xuICAgICAgICB0ID0gcGFyc2VNSU1FVHlwZSh0KVxuXG4gICAgICAgIGlmICh0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICB0ID0gJydcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgICAgICAgYnJlYWsgc3Vic3RlcFxuICAgICAgICB9XG5cbiAgICAgICAgdCA9IHNlcmlhbGl6ZUFNaW1lVHlwZSh0KS50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG5cbiAgICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgICAgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgc3VwZXIocHJvY2Vzc0Jsb2JQYXJ0cyhmaWxlQml0cywgb3B0aW9ucyksIHsgdHlwZTogdCB9KVxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIG5hbWU6IG4sXG4gICAgICBsYXN0TW9kaWZpZWQ6IGQsXG4gICAgICB0eXBlOiB0XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxufVxuXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdE1vZGlmaWVkOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihCbG9iKVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iUGFydCA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHxcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgICApIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgb3B0cylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIG9wdHMpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnRcbilcblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2Rmbi1GaWxlUHJvcGVydHlCYWdcbndlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xhc3RNb2RpZmllZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2VuZGluZ3MnLFxuICAgIGNvbnZlcnRlcjogKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh2YWx1ZSlcbiAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKVxuXG4gICAgICBpZiAodmFsdWUgIT09ICduYXRpdmUnKSB7XG4gICAgICAgIHZhbHVlID0gJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogJ3RyYW5zcGFyZW50J1xuICB9XG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI3Byb2Nlc3MtYmxvYi1wYXJ0c1xuICogQHBhcmFtIHsoTm9kZUpTLlR5cGVkQXJyYXl8QmxvYnxzdHJpbmcpW119IHBhcnRzXG4gKiBAcGFyYW0ge3sgdHlwZTogc3RyaW5nLCBlbmRpbmdzOiBzdHJpbmcgfX0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQmxvYlBhcnRzIChwYXJ0cywgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLlR5cGVkQXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGVsZW1lbnQgaW4gcGFydHM6XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJ0cykge1xuICAgIC8vIDEuIElmIGVsZW1lbnQgaXMgYSBVU1ZTdHJpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOlxuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBzIGJlIGVsZW1lbnQuXG4gICAgICBsZXQgcyA9IGVsZW1lbnRcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuZGluZ3MgbWVtYmVyIG9mIG9wdGlvbnMgaXMgXCJuYXRpdmVcIiwgc2V0IHNcbiAgICAgIC8vICAgIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBsaW5lIGVuZGluZ3MgdG8gbmF0aXZlXG4gICAgICAvLyAgICBvZiBlbGVtZW50LlxuICAgICAgaWYgKG9wdGlvbnMuZW5kaW5ncyA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgcyA9IGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZShzKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBVVEYtOCBlbmNvZGluZyBzIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbmNvZGVyLmVuY29kZShzKSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihlbGVtZW50KSB8fFxuICAgICAgdHlwZXMuaXNUeXBlZEFycmF5KGVsZW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyAyLiBJZiBlbGVtZW50IGlzIGEgQnVmZmVyU291cmNlLCBnZXQgYSBjb3B5IG9mIHRoZVxuICAgICAgLy8gICAgYnl0ZXMgaGVsZCBieSB0aGUgYnVmZmVyIHNvdXJjZSwgYW5kIGFwcGVuZCB0aG9zZVxuICAgICAgLy8gICAgYnl0ZXMgdG8gYnl0ZXMuXG4gICAgICBpZiAoIWVsZW1lbnQuYnVmZmVyKSB7IC8vIEFycmF5QnVmZmVyXG4gICAgICAgIGJ5dGVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoZWxlbWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShlbGVtZW50KSkge1xuICAgICAgLy8gMy4gSWYgZWxlbWVudCBpcyBhIEJsb2IsIGFwcGVuZCB0aGUgYnl0ZXMgaXQgcmVwcmVzZW50c1xuICAgICAgLy8gICAgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGJ5dGVzLlxuICByZXR1cm4gYnl0ZXNcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNjb252ZXJ0LWxpbmUtZW5kaW5ncy10by1uYXRpdmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZSAocykge1xuICAvLyAxLiBMZXQgbmF0aXZlIGxpbmUgZW5kaW5nIGJlIGJlIHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgbGV0IG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxuJ1xuXG4gIC8vIDIuIElmIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtXHUyMDE5cyBjb252ZW50aW9ucyBhcmUgdG9cbiAgLy8gICAgcmVwcmVzZW50IG5ld2xpbmVzIGFzIGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWRcbiAgLy8gICAgc2VxdWVuY2UsIHNldCBuYXRpdmUgbGluZSBlbmRpbmcgdG8gdGhlIGNvZGUgcG9pbnRcbiAgLy8gICAgVSswMDBEIENSIGZvbGxvd2VkIGJ5IHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcclxcbidcbiAgfVxuXG4gIHJldHVybiBzLnJlcGxhY2UoL1xccj9cXG4vZywgbmF0aXZlTGluZUVuZGluZylcbn1cblxuLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBtb3ZlZCB0byAuL3V0aWwuanMsIHNvbWUgdG9vbHMgKHN1Y2ggYXNcbi8vIHJvbGx1cCkgd2lsbCB3YXJuIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE2MjlcbmZ1bmN0aW9uIGlzRmlsZUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIChOYXRpdmVGaWxlICYmIG9iamVjdCBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRmlsZSB8fCAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgbWFrZUl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5cbi8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jZm9ybWRhdGFcbmNsYXNzIEZvcm1EYXRhIHtcbiAgY29uc3RydWN0b3IgKGZvcm0pIHtcbiAgICBpZiAoZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgICBwcmVmaXg6ICdGb3JtRGF0YSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICAgIHR5cGVzOiBbJ3VuZGVmaW5lZCddXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRlXSA9IFtdXG4gIH1cblxuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmFwcGVuZCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBkZWxldGUobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZW1vdmUgYWxsIGVudHJpZXMgd2hvc2UgbmFtZVxuICAgIC8vIGlzIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHRoaXNba1N0YXRlXS5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgfVxuXG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGZyb21cbiAgICAvLyB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1baWR4XS52YWx1ZVxuICB9XG5cbiAgZ2V0QWxsIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0QWxsJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgaGFzKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYW4gZW50cnlcbiAgICAvLyB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSkgIT09IC0xXG4gIH1cblxuICBzZXQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLnNldCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0JyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIFRoZSBzZXQobmFtZSwgdmFsdWUpIGFuZCBzZXQobmFtZSwgYmxvYlZhbHVlLCBmaWxlbmFtZSkgbWV0aG9kIHN0ZXBzXG4gICAgLy8gYXJlOlxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gdG9VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5J1xuICAgIClcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAndmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBGb3JtRGF0YSkgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxufVxuXG5Gb3JtRGF0YS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEZvcm1EYXRhLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZvcm1EYXRhLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRm9ybURhdGEnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjY3JlYXRlLWFuLWVudHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8QmxvYn0gdmFsdWVcbiAqIEBwYXJhbSB7P3N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIG1ha2VFbnRyeSAobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSB7XG4gIC8vIDEuIFNldCBuYW1lIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBuYW1lIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICAvLyBcIlRvIGNvbnZlcnQgYSBzdHJpbmcgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcsIHJlcGxhY2UgYW55IHN1cnJvZ2F0ZXNcbiAgLy8gIHdpdGggVStGRkZELlwiXG4gIC8vIHNlZTogaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxOC54L2RvY3MvYXBpL2J1ZmZlci5odG1sI2J1ZnRvc3RyaW5nZW5jb2Rpbmctc3RhcnQtZW5kXG4gIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKS50b1N0cmluZygndXRmOCcpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgYSBzdHJpbmcsIHRoZW4gc2V0IHZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZ1xuICAvLyAgICB2YWx1ZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IEJ1ZmZlci5mcm9tKHZhbHVlKS50b1N0cmluZygndXRmOCcpXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gSWYgdmFsdWUgaXMgbm90IGEgRmlsZSBvYmplY3QsIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgdmFsdWUgaXMgXCJibG9iXCJcbiAgICBpZiAoIWlzRmlsZUxpa2UodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgQmxvYlxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIGZpbGVuYW1lIGlzIGdpdmVuLCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIGlzIGZpbGVuYW1lLlxuICAgIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiogQHR5cGUge0ZpbGVQcm9wZXJ0eUJhZ30gKi9cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkXG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gKE5hdGl2ZUZpbGUgJiYgdmFsdWUgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVuZGljaUZpbGVcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBhbiBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgYW5kIHdob3NlIHZhbHVlIGlzIHZhbHVlLlxuICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGb3JtRGF0YSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IHJhbmRvbVxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHlpbml0LWV4dHJhY3RcbmZ1bmN0aW9uIGV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbS5cbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoXG4gICAgICAgICAgdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgPyB0ZXh0RW5jb2Rlci5lbmNvZGUoc291cmNlKSA6IHNvdXJjZVxuICAgICAgICApXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlcikpXG4gICAgICB9LFxuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN0XHUyMDE5cyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3RcdTIwMTlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZVx1MjAxOXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCBcdTAwQUIgb3V0MSwgb3V0MiBcdTAwQkIgYmUgdGhlIHJlc3VsdCBvZiB0ZWVpbmcgYm9keVx1MjAxOXMgc3RyZWFtLlxuICBjb25zdCBbb3V0MSwgb3V0Ml0gPSBib2R5LnN0cmVhbS50ZWUoKVxuICBjb25zdCBvdXQyQ2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUob3V0MiwgeyB0cmFuc2ZlcjogW291dDJdIH0pXG4gIC8vIFRoaXMsIGZvciB3aGF0ZXZlciByZWFzb25zLCB1bnJlZnMgb3V0MkNsb25lIHdoaWNoIGFsbG93c1xuICAvLyB0aGUgcHJvY2VzcyB0byBleGl0IGJ5IGl0c2VsZi5cbiAgY29uc3QgWywgZmluYWxDbG9uZV0gPSBvdXQyQ2xvbmUudGVlKClcblxuICAvLyAyLiBTZXQgYm9keVx1MjAxOXMgc3RyZWFtIHRvIG91dDEuXG4gIGJvZHkuc3RyZWFtID0gb3V0MVxuXG4gIC8vIDMuIFJldHVybiBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIG91dDIgYW5kIG90aGVyIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIGJvZHkuXG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBmaW5hbENsb25lLFxuICAgIGxlbmd0aDogYm9keS5sZW5ndGgsXG4gICAgc291cmNlOiBib2R5LnNvdXJjZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29uc3VtZUJvZHkgKGJvZHkpIHtcbiAgaWYgKGJvZHkpIHtcbiAgICBpZiAoaXNVaW50OEFycmF5KGJvZHkpKSB7XG4gICAgICB5aWVsZCBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGJvZHkuc3RyZWFtXG5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKHN0cmVhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICAgICAgfVxuXG4gICAgICAvLyBDb21wYXQuXG4gICAgICBzdHJlYW1ba0JvZHlVc2VkXSA9IHRydWVcblxuICAgICAgeWllbGQgKiBzdHJlYW1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm9keU1peGluTWV0aG9kcyAoaW5zdGFuY2UpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBibG9iICgpIHtcbiAgICAgIC8vIFRoZSBibG9iKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgQmxvYiB3aG9zZVxuICAgICAgLy8gY29udGVudHMgYXJlIGJ5dGVzIGFuZCB3aG9zZSB0eXBlIGF0dHJpYnV0ZSBpcyB0aGlzXHUyMDE5c1xuICAgICAgLy8gTUlNRSB0eXBlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgbGV0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhIEJsb2Igd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzIGFuZCB0eXBlIGF0dHJpYnV0ZVxuICAgICAgICAvLyBpcyBtaW1lVHlwZS5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogbWltZVR5cGUgfSlcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhcnJheUJ1ZmZlciAoKSB7XG4gICAgICAvLyBUaGUgYXJyYXlCdWZmZXIoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0XG4gICAgICAvLyBvZiBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXJcbiAgICAgIC8vIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcykuYnVmZmVyXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgdGV4dCAoKSB7XG4gICAgICAvLyBUaGUgdGV4dCgpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgVVRGLTggZGVjb2RlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHBhcnNlSlNPTkZyb21CeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIGluc3RhbmNlKVxuXG4gICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJylcblxuICAgICAgLy8gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsIHRoZW46XG4gICAgICBpZiAoL211bHRpcGFydFxcL2Zvcm0tZGF0YS8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuaGVhZGVycykgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgIGxldCBidXNib3lcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJ1c2JveSA9IG5ldyBCdXNib3koe1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHByZXNlcnZlUGF0aDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYCR7ZXJyfWAsICdBYm9ydEVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1c2JveS5vbignZmllbGQnLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnVzYm95Lm9uKCdmaWxlJywgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmtzID0gW11cblxuICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcgfHwgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgIGxldCBiYXNlNjRjaHVuayA9ICcnXG5cbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rICs9IGNodW5rLnRvU3RyaW5nKCkucmVwbGFjZSgvW1xcclxcbl0vZ20sICcnKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJhc2U2NGNodW5rLmxlbmd0aCAtIGJhc2U2NGNodW5rLmxlbmd0aCAlIDRcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmsuc2xpY2UoMCwgZW5kKSwgJ2Jhc2U2NCcpKVxuXG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rID0gYmFzZTY0Y2h1bmsuc2xpY2UoZW5kKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLCAnYmFzZTY0JykpXG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYnVzYm95UmVzb2x2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBidXNib3kub24oJ2ZpbmlzaCcsIHJlc29sdmUpXG4gICAgICAgICAgYnVzYm95Lm9uKCdlcnJvcicsIChlcnIpID0+IHJlamVjdChuZXcgVHlwZUVycm9yKGVycikpKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLmJvZHkgIT09IG51bGwpIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSBidXNib3kud3JpdGUoY2h1bmspXG4gICAgICAgIGJ1c2JveS5lbmQoKVxuICAgICAgICBhd2FpdCBidXNib3lSZXNvbHZlXG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRm9ybURhdGFcbiAgICAgIH0gZWxzZSBpZiAoL2FwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsIHRoZW46XG5cbiAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICBsZXQgZW50cmllc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCB0ZXh0ID0gJydcbiAgICAgICAgICAvLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcGFyc2VyIHdpbGwga2VlcCB0aGUgQk9NLlxuICAgICAgICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmxlbmNvZGVkLXBhcnNlclxuICAgICAgICAgIC8vIE5vdGUgdGhhdCBzdHJlYW1pbmcgZGVjb2RlciBpcyBzdGF0ZWZ1bCBhbmQgY2Fubm90IGJlIHJldXNlZFxuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ0RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBpZ25vcmVCT006IHRydWUgfSlcblxuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgVWludDhBcnJheSBjaHVuaycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKClcbiAgICAgICAgICBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0ZXh0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogVW5jbGVhciB3aGVuIG5ldyBVUkxTZWFyY2hQYXJhbXMgY2FuIGZhaWwgb24gYSBzdHJpbmcuXG4gICAgICAgICAgLy8gMi4gSWYgZW50cmllcyBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcigpLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3Qgd2hvc2UgZW50cmllcyBhcmUgZW50cmllcy5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdhaXQgYSB0aWNrIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UsIGEgVHlwZUVycm9yIGNhbiBiZSB0aHJvd24gd2hlbiBhbiBBYm9ydEVycm9yIHNob3VsZC5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogYCR7aW5zdGFuY2UubmFtZX0uZm9ybURhdGFgLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgcGFyc2UgY29udGVudCBhcyBGb3JtRGF0YS4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHNcbn1cblxuZnVuY3Rpb24gbWl4aW5Cb2R5IChwcm90b3R5cGUpIHtcbiAgT2JqZWN0LmFzc2lnbihwcm90b3R5cGUucHJvdG90eXBlLCBib2R5TWl4aW5NZXRob2RzKHByb3RvdHlwZSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBvYmplY3RcbiAqIEBwYXJhbSB7KHZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gaW5zdGFuY2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3BlY0NvbnN1bWVCb2R5IChvYmplY3QsIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZSwgaW5zdGFuY2UpIHtcbiAgd2ViaWRsLmJyYW5kQ2hlY2sob2JqZWN0LCBpbnN0YW5jZSlcblxuICB0aHJvd0lmQWJvcnRlZChvYmplY3Rba1N0YXRlXSlcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgdW51c2FibGUsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZSByZWplY3RlZFxuICAvLyAgICB3aXRoIGEgVHlwZUVycm9yLlxuICBpZiAoYm9keVVudXNhYmxlKG9iamVjdFtrU3RhdGVdLmJvZHkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZScpXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBnaXZlbiBlcnJvciBiZSB0byByZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBjb25zdCBlcnJvclN0ZXBzID0gKGVycm9yKSA9PiBwcm9taXNlLnJlamVjdChlcnJvcilcblxuICAvLyA0LiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBkYXRhIGJlIHRvIHJlc29sdmVcbiAgLy8gICAgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAgLy8gICAgd2l0aCBkYXRhLiBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwc1xuICAvLyAgICB3aXRoIHRoYXQgZXhjZXB0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSAoZGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoY29udmVydEJ5dGVzVG9KU1ZhbHVlKGRhdGEpKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yU3RlcHMoZSlcbiAgICB9XG4gIH1cblxuICAvLyA1LiBJZiBvYmplY3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gc3VjY2Vzc1N0ZXBzIHdpdGggYW5cbiAgLy8gICAgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgaWYgKG9iamVjdFtrU3RhdGVdLmJvZHkgPT0gbnVsbCkge1xuICAgIHN1Y2Nlc3NTdGVwcyhuZXcgVWludDhBcnJheSgpKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChib2R5KSB7XG4gIC8vIEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIEJvZHkgaW50ZXJmYWNlIG1peGluIGlzXG4gIC8vIHNhaWQgdG8gYmUgdW51c2FibGUgaWYgaXRzIGJvZHkgaXMgbm9uLW51bGwgYW5kXG4gIC8vIGl0cyBib2R5XHUyMDE5cyBzdHJlYW0gaXMgZGlzdHVyYmVkIG9yIGxvY2tlZC5cbiAgcmV0dXJuIGJvZHkgIT0gbnVsbCAmJiAoYm9keS5zdHJlYW0ubG9ja2VkIHx8IHV0aWwuaXNEaXN0dXJiZWQoYm9keS5zdHJlYW0pKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi04LWRlY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5mdW5jdGlvbiB1dGY4RGVjb2RlQnl0ZXMgKGJ1ZmZlcikge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMS4gTGV0IGJ1ZmZlciBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgdGhyZWUgYnl0ZXMgZnJvbVxuICAvLyAgICBpb1F1ZXVlLCBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuXG4gIC8vIDIuIElmIGJ1ZmZlciBpcyAweEVGIDB4QkIgMHhCRiwgdGhlbiByZWFkIHRocmVlXG4gIC8vICAgIGJ5dGVzIGZyb20gaW9RdWV1ZS4gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gIGlmIChidWZmZXJbMF0gPT09IDB4RUYgJiYgYnVmZmVyWzFdID09PSAweEJCICYmIGJ1ZmZlclsyXSA9PT0gMHhCRikge1xuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgzKVxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgVVRGLThcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cbiAgY29uc3Qgb3V0cHV0ID0gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcilcblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtanNvbi1ieXRlcy10by1hLWphdmFzY3JpcHQtdmFsdWVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VKU09ORnJvbUJ5dGVzIChieXRlcykge1xuICByZXR1cm4gSlNPTi5wYXJzZSh1dGY4RGVjb2RlQnl0ZXMoYnl0ZXMpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1taW1lLXR5cGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3Jlc3BvbnNlJykuUmVzcG9uc2V8aW1wb3J0KCcuL3JlcXVlc3QnKS5SZXF1ZXN0fSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYm9keU1pbWVUeXBlIChvYmplY3QpIHtcbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gb2JqZWN0W2tTdGF0ZV1cbiAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzTGlzdC5nZXQoJ2NvbnRlbnQtdHlwZScpXG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlTUlNRVR5cGUoY29udGVudFR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0hUVFAyQnVpbGRSZXF1ZXN0LCBrSFRUUDJDb3B5SGVhZGVycywga0hUVFAxQnVpbGRSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8vIHRva2VuUmVnRXhwIGFuZCBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiB2YWwgaXMgYSB2YWxpZCBIVFRQIHRva2VuXG4gKiBwZXIgdGhlIHJ1bGVzIGRlZmluZWQgaW4gUkZDIDcyMzBcbiAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKi9cbmNvbnN0IHRva2VuUmVnRXhwID0gL15bXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0rJC9cblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLy8gVmVyaWZpZXMgdGhhdCBhIGdpdmVuIHBhdGggaXMgdmFsaWQgZG9lcyBub3QgY29udGFpbiBjb250cm9sIGNoYXJzIFxceDAwIHRvIFxceDIwXG5jb25zdCBpbnZhbGlkUGF0aFJlZ2V4ID0gL1teXFx1MDAyMS1cXHUwMGZmXS9cblxuY29uc3Qga0hhbmRsZXIgPSBTeW1ib2woJ2hhbmRsZXInKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5cbmxldCBleHRyYWN0Qm9keVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuY3JlYXRlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmNyZWF0ZScpXG4gIGNoYW5uZWxzLmJvZHlTZW50ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmJvZHlTZW50JylcbiAgY2hhbm5lbHMuaGVhZGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJylcbiAgY2hhbm5lbHMudHJhaWxlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnKVxuICBjaGFubmVscy5lcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDplcnJvcicpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuY3JlYXRlID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5ib2R5U2VudCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuaGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMudHJhaWxlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeSxcbiAgICBpZGVtcG90ZW50LFxuICAgIGJsb2NraW5nLFxuICAgIHVwZ3JhZGUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgcmVzZXQsXG4gICAgdGhyb3dPbkVycm9yLFxuICAgIGV4cGVjdENvbnRpbnVlXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LmV4ZWMocGF0aCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKG1ldGhvZCkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUgJiYgdHlwZW9mIHVwZ3JhZGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3VwZ3JhZGUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXJzVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBib2R5VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKHJlc2V0ICE9IG51bGwgJiYgdHlwZW9mIHJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXNldCcpXG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdENvbnRpbnVlICE9IG51bGwgJiYgdHlwZW9mIGV4cGVjdENvbnRpbnVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBleHBlY3RDb250aW51ZScpXG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzVGltZW91dCA9IGhlYWRlcnNUaW1lb3V0XG5cbiAgICB0aGlzLmJvZHlUaW1lb3V0ID0gYm9keVRpbWVvdXRcblxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yID09PSB0cnVlXG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxuXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcblxuICAgICAgY29uc3QgclN0YXRlID0gdGhpcy5ib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoIXJTdGF0ZSB8fCAhclN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAgIHRoaXMuZW5kSGFuZGxlciA9IGZ1bmN0aW9uIGF1dG9EZXN0cm95ICgpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gYm9keSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5idWZmZXIuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5Lmxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSB8fCB1dGlsLmlzSXRlcmFibGUoYm9keSkgfHwgdXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keSBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBSZWFkYWJsZSBzdHJlYW0sIGFuIGl0ZXJhYmxlLCBvciBhbiBhc3luYyBpdGVyYWJsZScpXG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcblxuICAgIHRoaXMudXBncmFkZSA9IHVwZ3JhZGUgfHwgbnVsbFxuXG4gICAgdGhpcy5wYXRoID0gcXVlcnkgPyB1dGlsLmJ1aWxkVVJMKHBhdGgsIHF1ZXJ5KSA6IHBhdGhcblxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luXG5cbiAgICB0aGlzLmlkZW1wb3RlbnQgPSBpZGVtcG90ZW50ID09IG51bGxcbiAgICAgID8gbWV0aG9kID09PSAnSEVBRCcgfHwgbWV0aG9kID09PSAnR0VUJ1xuICAgICAgOiBpZGVtcG90ZW50XG5cbiAgICB0aGlzLmJsb2NraW5nID0gYmxvY2tpbmcgPT0gbnVsbCA/IGZhbHNlIDogYmxvY2tpbmdcblxuICAgIHRoaXMucmVzZXQgPSByZXNldCA9PSBudWxsID8gbnVsbCA6IHJlc2V0XG5cbiAgICB0aGlzLmhvc3QgPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gJydcblxuICAgIC8vIE9ubHkgZm9yIEgyXG4gICAgdGhpcy5leHBlY3RDb250aW51ZSA9IGV4cGVjdENvbnRpbnVlICE9IG51bGwgPyBleHBlY3RDb250aW51ZSA6IGZhbHNlXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZSh0aGlzLmJvZHkpKSB7XG4gICAgICBpZiAodXRpbC5ub2RlTWFqb3IgPCAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yIDwgOCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdGb3JtLURhdGEgYm9kaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBub2RlIHYxNi44IGFuZCBuZXdlci4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4dHJhY3RCb2R5KSB7XG4gICAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vZmV0Y2gvYm9keS5qcycpLmV4dHJhY3RCb2R5XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgaWYgKHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbiAgICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Y29udGVudFR5cGV9XFxyXFxuYFxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5ID0gYm9keVN0cmVhbS5zdHJlYW1cbiAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkgJiYgdGhpcy5jb250ZW50VHlwZSA9PSBudWxsICYmIGJvZHkudHlwZSkge1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Ym9keS50eXBlfVxcclxcbmBcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSB1dGlsLmdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKGNoYW5uZWxzLmhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkRhdGEoY2h1bmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcblxuICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZVxuICAgIGlmIChjaGFubmVscy50cmFpbGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMudHJhaWxlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHRyYWlsZXJzIH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETyAoZml4KTogVGhpcyBtaWdodCBiZSBhIGJhZCBpZGVhP1xuICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICB9XG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGlmIChjaGFubmVscy5lcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuZXJyb3IucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIGVycm9yIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25GaW5hbGx5ICgpIHtcbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB0aGlzLmVuZEhhbmRsZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogYWRqdXN0IHRvIHN1cHBvcnQgSDJcbiAgYWRkSGVhZGVyIChrZXksIHZhbHVlKSB7XG4gICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIHZhbHVlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMUJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIC8vIFRPRE86IE1pZ3JhdGUgaGVhZGVyIHBhcnNpbmcgaGVyZSwgdG8gbWFrZSBSZXF1ZXN0c1xuICAgIC8vIEhUVFAgYWdub3N0aWNcbiAgICByZXR1cm4gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0cy5oZWFkZXJzXG4gICAgb3B0cyA9IHsgLi4ub3B0cywgaGVhZGVyczogbnVsbCB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzID0ge31cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGtleSwgaGVhZGVyc1trZXldLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0XG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkNvcHlIZWFkZXJzXSAocmF3KSB7XG4gICAgY29uc3QgcmF3SGVhZGVycyA9IHJhdy5zcGxpdCgnXFxyXFxuJylcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJhd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGhlYWRlci5zcGxpdCgnOiAnKVxuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgIGlmIChoZWFkZXJzW2tleV0pIGhlYWRlcnNba2V5XSArPSBgLCR7dmFsdWV9YFxuICAgICAgZWxzZSBoZWFkZXJzW2tleV0gPSB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlclZhbHVlIChrZXksIHZhbCwgc2tpcEFwcGVuZCkge1xuICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgdmFsID0gdmFsICE9IG51bGwgPyBgJHt2YWx9YCA6ICcnXG5cbiAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICByZXR1cm4gc2tpcEFwcGVuZCA/IHZhbCA6IGAke2tleX06ICR7dmFsfVxcclxcbmBcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlciAocmVxdWVzdCwga2V5LCB2YWwsIHNraXBBcHBlbmQgPSBmYWxzZSkge1xuICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKFxuICAgIHJlcXVlc3QuaG9zdCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2hvc3QnXG4gICkge1xuICAgIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgfVxuICAgIC8vIENvbnN1bWVkIGJ5IENsaWVudFxuICAgIHJlcXVlc3QuaG9zdCA9IHZhbFxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDE0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID0gcGFyc2VJbnQodmFsLCAxMClcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXF1ZXN0LmNvbnRlbnRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC1sZW5ndGggaGVhZGVyJylcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDEyICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPSB2YWxcbiAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDE3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc2Zlci1lbmNvZGluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHRyYW5zZmVyLWVuY29kaW5nIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nXG4gICkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwudG9Mb3dlckNhc2UoKSA6IG51bGxcbiAgICBpZiAodmFsdWUgIT09ICdjbG9zZScgJiYgdmFsdWUgIT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb24gaGVhZGVyJylcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXAtYWxpdmUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd1cGdyYWRlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDYgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2V4cGVjdCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKCdleHBlY3QgaGVhZGVyIG5vdCBzdXBwb3J0ZWQnKVxuICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMoa2V5KSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2tpcEFwcGVuZCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNba2V5XSkgcmVxdWVzdC5oZWFkZXJzW2tleV0gKz0gYCwke3Byb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZCl9YFxuICAgICAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3Qge1xuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBrRGVzdHJveWVkID0gU3ltYm9sKCdkZXN0cm95ZWQnKVxuY29uc3Qga0Nsb3NlZCA9IFN5bWJvbCgnY2xvc2VkJylcbmNvbnN0IGtPbkRlc3Ryb3llZCA9IFN5bWJvbCgnb25EZXN0cm95ZWQnKVxuY29uc3Qga09uQ2xvc2VkID0gU3ltYm9sKCdvbkNsb3NlZCcpXG5jb25zdCBrSW50ZXJjZXB0ZWREaXNwYXRjaCA9IFN5bWJvbCgnSW50ZXJjZXB0ZWQgRGlzcGF0Y2gnKVxuXG5jbGFzcyBEaXNwYXRjaGVyQmFzZSBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trRGVzdHJveWVkXVxuICB9XG5cbiAgZ2V0IGNsb3NlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nsb3NlZF1cbiAgfVxuXG4gIGdldCBpbnRlcmNlcHRvcnMgKCkge1xuICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRvcnNdXG4gIH1cblxuICBzZXQgaW50ZXJjZXB0b3JzIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICBpZiAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgICBmb3IgKGxldCBpID0gbmV3SW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXVxuICAgICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnRlcmNlcHRvciBtdXN0IGJlIGFuIGZ1bmN0aW9uJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBuZXdJbnRlcmNlcHRvcnNcbiAgfVxuXG4gIGNsb3NlIChjYWxsYmFjaykge1xuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpLCBudWxsKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25DbG9zZWRdKSB7XG4gICAgICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzW2tDbG9zZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25DbG9zZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkNsb3NlZF1cbiAgICAgIHRoaXNba09uQ2xvc2VkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trQ2xvc2VdKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGVzdHJveSgpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhvbkNsb3NlZClcbiAgICAgIH0pXG4gIH1cblxuICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gZXJyXG4gICAgICBlcnIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnIsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBuZXZlciBlcnJvciAqLyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgaWYgKHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGVyciA9IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IHRydWVcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSB0aGlzW2tPbkRlc3Ryb3llZF0gfHwgW11cbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uRGVzdHJveWVkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25EZXN0cm95ZWRdXG4gICAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Rlc3Ryb3ldKGVycikudGhlbigoKSA9PiB7XG4gICAgICBxdWV1ZU1pY3JvdGFzayhvbkRlc3Ryb3llZClcbiAgICB9KVxuICB9XG5cbiAgW2tJbnRlcmNlcHRlZERpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghdGhpc1trSW50ZXJjZXB0b3JzXSB8fCB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSB0aGlzW2tEaXNwYXRjaF1cbiAgICAgIHJldHVybiB0aGlzW2tEaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9XG5cbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzW2tEaXNwYXRjaF0uYmluZCh0aGlzKVxuICAgIGZvciAobGV0IGkgPSB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBkaXNwYXRjaCA9IHRoaXNba0ludGVyY2VwdG9yc11baV0oZGlzcGF0Y2gpXG4gICAgfVxuICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gZGlzcGF0Y2hcbiAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0gfHwgdGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnRDbG9zZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5vbkVycm9yKGVycilcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlckJhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIENvbm5lY3RUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIXByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCd0bHMnKVxuICAgICAgfVxuICAgICAgc2VydmVybmFtZSA9IHNlcnZlcm5hbWUgfHwgb3B0aW9ucy5zZXJ2ZXJuYW1lIHx8IHV0aWwuZ2V0U2VydmVyTmFtZShob3N0KSB8fCBudWxsXG5cbiAgICAgIGNvbnN0IHNlc3Npb25LZXkgPSBzZXJ2ZXJuYW1lIHx8IGhvc3RuYW1lXG4gICAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KSB8fCBudWxsXG5cbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDE2Mzg0LCAvLyBUTFMgaW4gbm9kZSBjYW4ndCBoYXZlIGJpZ2dlciBIV00gYW55d2F5Li4uXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgIHNlc3Npb24sXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgLy8gVE9ETyhIVFRQLzIpOiBBZGQgc3VwcG9ydCBmb3IgaDJjXG4gICAgICAgIEFMUE5Qcm90b2NvbHM6IGFsbG93SDIgPyBbJ2h0dHAvMS4xJywgJ2gyJ10gOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgIHNvY2tldDogaHR0cFNvY2tldCwgLy8gdXBncmFkZSBzb2NrZXQgY29ubmVjdGlvblxuICAgICAgICBwb3J0OiBwb3J0IHx8IDQ0MyxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG5cbiAgICAgIHNvY2tldFxuICAgICAgICAub24oJ3Nlc3Npb24nLCBmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IENhbiBhIHNlc3Npb24gYmVjb21lIGludmFsaWQgb25jZSBlc3RhYmxpc2hlZD8gRG9uJ3QgdGhpbmsgc28/XG4gICAgICAgICAgc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoIWh0dHBTb2NrZXQsICdodHRwU29ja2V0IGNhbiBvbmx5IGJlIHNlbnQgb24gVExTIHVwZGF0ZScpXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0OiBwb3J0IHx8IDgwLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNhbmNlbFRpbWVvdXQgPSBzZXR1cFRpbWVvdXQoKCkgPT4gb25Db25uZWN0VGltZW91dChzb2NrZXQpLCB0aW1lb3V0KVxuXG4gICAgc29ja2V0XG4gICAgICAuc2V0Tm9EZWxheSh0cnVlKVxuICAgICAgLm9uY2UocHJvdG9jb2wgPT09ICdodHRwczonID8gJ3NlY3VyZUNvbm5lY3QnIDogJ2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKGVycilcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHJldHVybiBzb2NrZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFRpbWVvdXQgKG9uQ29ubmVjdFRpbWVvdXQsIHRpbWVvdXQpIHtcbiAgaWYgKCF0aW1lb3V0KSB7XG4gICAgcmV0dXJuICgpID0+IHt9XG4gIH1cblxuICBsZXQgczEgPSBudWxsXG4gIGxldCBzMiA9IG51bGxcbiAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW90b3Jpc2Ugc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgczIgPSBzZXRJbW1lZGlhdGUoKCkgPT4gb25Db25uZWN0VGltZW91dCgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Db25uZWN0VGltZW91dCgpXG4gICAgICB9XG4gICAgfSlcbiAgfSwgdGltZW91dClcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgIGNsZWFySW1tZWRpYXRlKHMyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ29ubmVjdFRpbWVvdXQgKHNvY2tldCkge1xuICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQ29ubmVjdFRpbWVvdXRFcnJvcigpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29ubmVjdG9yXG4iLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jb25zdCByZWRpcmVjdGFibGVTdGF0dXNDb2RlcyA9IFszMDAsIDMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5jb25zdCBrQm9keSA9IFN5bWJvbCgnYm9keScpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5jbGFzcyBSZWRpcmVjdEhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcikge1xuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgb3B0cy5tZXRob2QsIG9wdHMudXBncmFkZSlcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIG9wdHMgbXVzdCBiZSBhIGNvcHlcbiAgICB0aGlzLm1heFJlZGlyZWN0aW9ucyA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0odGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBQcm92aWRlIHNvbWUgd2F5IGZvciB0aGUgdXNlciB0byBjYWNoZSB0aGUgZmlsZSB0byBlLmcuIC90bXBcbiAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BhdGNoZWQgYWdhaW4/XG4gICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgICBpZiAodXRpbC5ib2R5TGVuZ3RoKHRoaXMub3B0cy5ib2R5KSA9PT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVxuICAgICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5ib2R5LnJlYWRhYmxlRGlkUmVhZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5W2tCb2R5VXNlZF0gPSBmYWxzZVxuICAgICAgICBFRS5wcm90b3R5cGUub24uY2FsbCh0aGlzLm9wdHMuYm9keSwgJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmJvZHkgJiYgdHlwZW9mIHRoaXMub3B0cy5ib2R5LnBpcGVUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZGlzdHVyYmVkLiBUaGlzIGlzIGp1c3RcbiAgICAgIC8vIGEgd29ya2Fyb3VuZC5cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLm9wdHMuYm9keSAmJlxuICAgICAgdHlwZW9mIHRoaXMub3B0cy5ib2R5ICE9PSAnc3RyaW5nJyAmJlxuICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh0aGlzLm9wdHMuYm9keSkgJiZcbiAgICAgIHV0aWwuaXNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBhbGxvdyByZS11c2luZyBpdGVyYWJsZSBpZiAhdGhpcy5vcHRzLmlkZW1wb3RlbnRcbiAgICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoYWJvcnQsIHsgaGlzdG9yeTogdGhpcy5oaXN0b3J5IH0pXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMgfHwgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSlcbiAgICAgID8gbnVsbFxuICAgICAgOiBwYXJzZUxvY2F0aW9uKHN0YXR1c0NvZGUsIGhlYWRlcnMpXG5cbiAgICBpZiAodGhpcy5vcHRzLm9yaWdpbikge1xuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gobmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfVxuXG4gICAgY29uc3QgeyBvcmlnaW4sIHBhdGhuYW1lLCBzZWFyY2ggfSA9IHV0aWwucGFyc2VVUkwobmV3IFVSTCh0aGlzLmxvY2F0aW9uLCB0aGlzLm9wdHMub3JpZ2luICYmIG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKSlcbiAgICBjb25zdCBwYXRoID0gc2VhcmNoID8gYCR7cGF0aG5hbWV9JHtzZWFyY2h9YCA6IHBhdGhuYW1lXG5cbiAgICAvLyBSZW1vdmUgaGVhZGVycyByZWZlcnJpbmcgdG8gdGhlIG9yaWdpbmFsIFVSTC5cbiAgICAvLyBCeSBkZWZhdWx0IGl0IGlzIEhvc3Qgb25seSwgdW5sZXNzIGl0J3MgYSAzMDMgKHNlZSBiZWxvdyksIHdoaWNoIHJlbW92ZXMgYWxzbyBhbGwgQ29udGVudC0qIGhlYWRlcnMuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbiAgICB0aGlzLm9wdHMuaGVhZGVycyA9IGNsZWFuUmVxdWVzdEhlYWRlcnModGhpcy5vcHRzLmhlYWRlcnMsIHN0YXR1c0NvZGUgPT09IDMwMywgdGhpcy5vcHRzLm9yaWdpbiAhPT0gb3JpZ2luKVxuICAgIHRoaXMub3B0cy5wYXRoID0gcGF0aFxuICAgIHRoaXMub3B0cy5vcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLm9wdHMubWF4UmVkaXJlY3Rpb25zID0gMFxuICAgIHRoaXMub3B0cy5xdWVyeSA9IG51bGxcblxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbiAgICAvLyBJbiBjYXNlIG9mIEhUVFAgMzAzLCBhbHdheXMgcmVwbGFjZSBtZXRob2QgdG8gYmUgZWl0aGVyIEhFQUQgb3IgR0VUXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDMwMyAmJiB0aGlzLm9wdHMubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMub3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgYm9kaWVzLlxuXG4gICAgICAgIFJlZGlyZWN0aW9uIGlzIHVzZWQgdG8gc2VydmUgdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBmcm9tIGFub3RoZXIgVVJMLCBzbyBpdCBpcyBhc3N1bWVzIHRoYXRcbiAgICAgICAgbm8gYm9keSBpcyBnZW5lcmF0ZWQgKGFuZCB0aHVzIGNhbiBiZSBpZ25vcmVkKS4gRXZlbiB0aG91Z2ggZ2VuZXJhdGluZyBhIGJvZHkgaXMgbm90IHByb2hpYml0ZWQuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDEsIDMwMiwgMzAzLCAzMDcgYW5kIDMwOCAodGhlIGxhdHRlciBmcm9tIFJGQyA3MjM4KSwgdGhlIHNwZWNzIG1lbnRpb24gdGhhdCB0aGUgYm9keSB1c3VhbGx5XG4gICAgICAgICh3aGljaCBtZWFucyBpdCdzIG9wdGlvbmFsIGFuZCBub3QgbWFuZGF0ZWQpIGNvbnRhaW4ganVzdCBhbiBoeXBlcmxpbmsgdG8gdGhlIHZhbHVlIG9mXG4gICAgICAgIHRoZSBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIsIHNvIHRoZSBib2R5IGNhbiBiZSBpZ25vcmVkIHNhZmVseS5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMCwgd2hpY2ggaXMgXCJNdWx0aXBsZSBDaG9pY2VzXCIsIHRoZSBzcGVjIG1lbnRpb25zIGJvdGggZ2VuZXJhdGluZyBhIExvY2F0aW9uXG4gICAgICAgIHJlc3BvbnNlIGhlYWRlciBBTkQgYSByZXNwb25zZSBib2R5IHdpdGggdGhlIG90aGVyIHBvc3NpYmxlIGxvY2F0aW9uIHRvIGZvbGxvdy5cbiAgICAgICAgU2luY2UgdGhlIHNwZWMgZXhwbGljaXRpbHkgY2hvb3NlcyBub3QgdG8gc3BlY2lmeSBhIGZvcm1hdCBmb3Igc3VjaCBib2R5IGFuZCBsZWF2ZSBpdCB0b1xuICAgICAgICBzZXJ2ZXJzIGFuZCBicm93c2VycyBpbXBsZW1lbnRvcnMsIHdlIGlnbm9yZSB0aGUgYm9keSBhcyB0aGVyZSBpcyBubyBzcGVjaWZpZWQgd2F5IHRvIGV2ZW50dWFsbHkgcGFyc2UgaXQuXG4gICAgICAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgdHJhaWxlcnMgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIGluIGNhc2Ugb2YgcmVkaXJlY3Rpb25zXG4gICAgICAgIGFuZCBuZWl0aGVyIGFyZSB1c2VmdWwgaWYgcHJlc2VudC5cblxuICAgICAgICBTZWUgY29tbWVudCBvbiBvbkRhdGEgbWV0aG9kIGFib3ZlIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9ucy5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDc0xnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMWtBSUFCQkdHcENBRGNEQUNBQVFnQTNBd0FnQUVFNGFrSUFOd01BSUFCQk1HcENBRGNEQUNBQVFTaHFRZ0EzQXdBZ0FFRWdha0lBTndNQUlBQkJFR3BDQURjREFDQUFRUWhxUWdBM0F3QWdBRUhkQVRZQ0hFRUFDM3NCQVg4Q1FDQUFLQUlNSWdNTkFBSkFJQUFvQWdSRkRRQWdBQ0FCTmdJRUN3SkFJQUFnQVNBQ0VNU0FnSUFBSWdNTkFDQUFLQUlNRHdzZ0FDQUROZ0ljUVFBaEF5QUFLQUlFSWdGRkRRQWdBQ0FCSUFJZ0FDZ0NDQkdCZ0lDQUFBQWlBVVVOQUNBQUlBSTJBaFFnQUNBQk5nSU1JQUVoQXdzZ0F3dms4d0VERG44RGZnUi9JNENBZ0lBQVFSQnJJZ01rZ0lDQWdBQWdBU0VFSUFFaEJTQUJJUVlnQVNFSElBRWhDQ0FCSVFrZ0FTRUtJQUVoQ3lBQklRd2dBU0VOSUFFaERpQUJJUThDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUNnQ0hDSVFRWDlxRHQwQjJnRUIyUUVDQXdRRkJnY0lDUW9MREEwTzJBRVBFTmNCRVJMV0FSTVVGUllYR0JrYUcrQUIzd0VjSFI3VkFSOGdJU0lqSkNYVUFTWW5LQ2txS3l6VEFkSUJMUzdSQWRBQkx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHMndGSFNFbEt6d0hPQVV2TkFVek1BVTFPVDFCUlVsTlVWVlpYV0ZsYVcxeGRYbDlnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2Y0QUJnUUdDQVlNQmhBR0ZBWVlCaHdHSUFZa0JpZ0dMQVl3QmpRR09BWThCa0FHUkFaSUJrd0dVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0hMQWNvQnVBSEpBYmtCeUFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQVFEY0FRdEJBQ0VRRE1ZQkMwRU9JUkFNeFFFTFFRMGhFQXpFQVF0QkR5RVFETU1CQzBFUUlSQU13Z0VMUVJNaEVBekJBUXRCRkNFUURNQUJDMEVWSVJBTXZ3RUxRUlloRUF5K0FRdEJGeUVRREwwQkMwRVlJUkFNdkFFTFFSa2hFQXk3QVF0QkdpRVFETG9CQzBFYklSQU11UUVMUVJ3aEVBeTRBUXRCQ0NFUURMY0JDMEVkSVJBTXRnRUxRU0FoRUF5MUFRdEJIeUVRRExRQkMwRUhJUkFNc3dFTFFTRWhFQXl5QVF0QklpRVFETEVCQzBFZUlSQU1zQUVMUVNNaEVBeXZBUXRCRWlFUURLNEJDMEVSSVJBTXJRRUxRU1FoRUF5c0FRdEJKU0VRREtzQkMwRW1JUkFNcWdFTFFTY2hFQXlwQVF0Qnd3RWhFQXlvQVF0QktTRVFES2NCQzBFcklSQU1wZ0VMUVN3aEVBeWxBUXRCTFNFUURLUUJDMEV1SVJBTW93RUxRUzhoRUF5aUFRdEJ4QUVoRUF5aEFRdEJNQ0VRREtBQkMwRTBJUkFNbndFTFFRd2hFQXllQVF0Qk1TRVFESjBCQzBFeUlSQU1uQUVMUVRNaEVBeWJBUXRCT1NFUURKb0JDMEUxSVJBTW1RRUxRY1VCSVJBTW1BRUxRUXNoRUF5WEFRdEJPaUVRREpZQkMwRTJJUkFNbFFFTFFRb2hFQXlVQVF0Qk55RVFESk1CQzBFNElSQU1rZ0VMUVR3aEVBeVJBUXRCT3lFUURKQUJDMEU5SVJBTWp3RUxRUWtoRUF5T0FRdEJLQ0VRREkwQkMwRStJUkFNakFFTFFUOGhFQXlMQVF0QndBQWhFQXlLQVF0QndRQWhFQXlKQVF0QndnQWhFQXlJQVF0Qnd3QWhFQXlIQVF0QnhBQWhFQXlHQVF0QnhRQWhFQXlGQVF0QnhnQWhFQXlFQVF0QktpRVFESU1CQzBISEFDRVFESUlCQzBISUFDRVFESUVCQzBISkFDRVFESUFCQzBIS0FDRVFESDhMUWNzQUlSQU1mZ3RCelFBaEVBeDlDMEhNQUNFUURId0xRYzRBSVJBTWV3dEJ6d0FoRUF4NkMwSFFBQ0VRREhrTFFkRUFJUkFNZUF0QjBnQWhFQXgzQzBIVEFDRVFESFlMUWRRQUlSQU1kUXRCMWdBaEVBeDBDMEhWQUNFUURITUxRUVloRUF4eUMwSFhBQ0VRREhFTFFRVWhFQXh3QzBIWUFDRVFERzhMUVFRaEVBeHVDMEhaQUNFUURHMExRZG9BSVJBTWJBdEIyd0FoRUF4ckMwSGNBQ0VRREdvTFFRTWhFQXhwQzBIZEFDRVFER2dMUWQ0QUlSQU1ad3RCM3dBaEVBeG1DMEhoQUNFUURHVUxRZUFBSVJBTVpBdEI0Z0FoRUF4akMwSGpBQ0VRREdJTFFRSWhFQXhoQzBIa0FDRVFER0FMUWVVQUlSQU1Yd3RCNWdBaEVBeGVDMEhuQUNFUURGMExRZWdBSVJBTVhBdEI2UUFoRUF4YkMwSHFBQ0VRREZvTFFlc0FJUkFNV1F0QjdBQWhFQXhZQzBIdEFDRVFERmNMUWU0QUlSQU1WZ3RCN3dBaEVBeFZDMEh3QUNFUURGUUxRZkVBSVJBTVV3dEI4Z0FoRUF4U0MwSHpBQ0VRREZFTFFmUUFJUkFNVUF0QjlRQWhFQXhQQzBIMkFDRVFERTRMUWZjQUlSQU1UUXRCK0FBaEVBeE1DMEg1QUNFUURFc0xRZm9BSVJBTVNndEIrd0FoRUF4SkMwSDhBQ0VRREVnTFFmMEFJUkFNUnd0Qi9nQWhFQXhHQzBIL0FDRVFERVVMUVlBQklSQU1SQXRCZ1FFaEVBeERDMEdDQVNFUURFSUxRWU1CSVJBTVFRdEJoQUVoRUF4QUMwR0ZBU0VRREQ4TFFZWUJJUkFNUGd0Qmh3RWhFQXc5QzBHSUFTRVFERHdMUVlrQklSQU1Pd3RCaWdFaEVBdzZDMEdMQVNFUUREa0xRWXdCSVJBTU9BdEJqUUVoRUF3M0MwR09BU0VRRERZTFFZOEJJUkFNTlF0QmtBRWhFQXcwQzBHUkFTRVFERE1MUVpJQklSQU1NZ3RCa3dFaEVBd3hDMEdVQVNFUUREQUxRWlVCSVJBTUx3dEJsZ0VoRUF3dUMwR1hBU0VRREMwTFFaZ0JJUkFNTEF0Qm1RRWhFQXdyQzBHYUFTRVFEQ29MUVpzQklSQU1LUXRCbkFFaEVBd29DMEdkQVNFUURDY0xRWjRCSVJBTUpndEJud0VoRUF3bEMwR2dBU0VRRENRTFFhRUJJUkFNSXd0Qm9nRWhFQXdpQzBHakFTRVFEQ0VMUWFRQklSQU1JQXRCcFFFaEVBd2ZDMEdtQVNFUURCNExRYWNCSVJBTUhRdEJxQUVoRUF3Y0MwR3BBU0VRREJzTFFhb0JJUkFNR2d0QnF3RWhFQXdaQzBHc0FTRVFEQmdMUWEwQklSQU1Gd3RCcmdFaEVBd1dDMEVCSVJBTUZRdEJyd0VoRUF3VUMwR3dBU0VRREJNTFFiRUJJUkFNRWd0QnN3RWhFQXdSQzBHeUFTRVFEQkFMUWJRQklSQU1Ed3RCdFFFaEVBd09DMEcyQVNFUURBMExRYmNCSVJBTURBdEJ1QUVoRUF3TEMwRzVBU0VRREFvTFFib0JJUkFNQ1F0QnV3RWhFQXdJQzBIR0FTRVFEQWNMUWJ3QklSQU1CZ3RCdlFFaEVBd0ZDMEcrQVNFUURBUUxRYjhCSVJBTUF3dEJ3QUVoRUF3Q0MwSENBU0VRREFFTFFjRUJJUkFMQTBBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFEc2NCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZUh5QWhJeVVvUDBCQlJFVkdSMGhKU2t0TVRVOVFVVkpUM2dOWFdWdGNYV0JpWldabmFHbHFhMnh0YjNCeGNuTjBkWFozZUhsNmUzeDlmb0FCZ2dHRkFZWUJod0dKQVlzQmpBR05BWTRCandHUUFaRUJsQUdWQVpZQmx3R1lBWmtCbWdHYkFad0JuUUdlQVo4Qm9BR2hBYUlCb3dHa0FhVUJwZ0duQWFnQnFRR3FBYXNCckFHdEFhNEJyd0d3QWJFQnNnR3pBYlFCdFFHMkFiY0J1QUc1QWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCeHdISUFja0J5Z0hMQWN3QnpRSE9BYzhCMEFIUkFkSUIwd0hVQWRVQjFnSFhBZGdCMlFIYUFkc0IzQUhkQWQ0QjRBSGhBZUlCNHdIa0FlVUI1Z0huQWVnQjZRSHFBZXNCN0FIdEFlNEI3d0h3QWZFQjhnSHpBWmtDcEFLd0F2NEMvZ0lMSUFFaUJDQUNSdzN6QVVIZEFTRVFEUDhEQ3lBQkloQWdBa2NOM1FGQnd3RWhFQXorQXdzZ0FTSUJJQUpIRFpBQlFmY0FJUkFNL1FNTElBRWlBU0FDUncyR0FVSHZBQ0VRRFB3REN5QUJJZ0VnQWtjTmYwSHFBQ0VRRFBzREN5QUJJZ0VnQWtjTmUwSG9BQ0VRRFBvREN5QUJJZ0VnQWtjTmVFSG1BQ0VRRFBrREN5QUJJZ0VnQWtjTkdrRVlJUkFNK0FNTElBRWlBU0FDUncwVVFSSWhFQXozQXdzZ0FTSUJJQUpIRFZsQnhRQWhFQXoyQXdzZ0FTSUJJQUpIRFVwQlB5RVFEUFVEQ3lBQklnRWdBa2NOU0VFOElSQU05QU1MSUFFaUFTQUNSdzFCUVRFaEVBenpBd3NnQUMwQUxrRUJSZzNyQXd5SEFnc2dBQ0FCSWdFZ0FoREFnSUNBQUVFQlJ3M21BU0FBUWdBM0F5QU01d0VMSUFBZ0FTSUJJQUlRdElDQWdBQWlFQTNuQVNBQklRRU05UUlMQWtBZ0FTSUJJQUpIRFFCQkJpRVFEUEFEQ3lBQUlBRkJBV29pQVNBQ0VMdUFnSUFBSWhBTjZBRWdBU0VCRERFTElBQkNBRGNESUVFU0lSQU0xUU1MSUFFaUVDQUNSdzByUVIwaEVBenRBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUZCRUNFUUROUURDMEVISVJBTTdBTUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjVRRkJDQ0VRRE9zREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFVUlSQU0wZ01MUVFraEVBenFBd3NnQVNFQklBQXBBeUJRRGVRQklBRWhBUXp5QWdzQ1FDQUJJZ0VnQWtjTkFFRUxJUkFNNlFNTElBQWdBVUVCYWlJQklBSVF0b0NBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM21BU0FCSVFFTURRc2dBQ0FCSWdFZ0FoQzZnSUNBQUNJUURlY0JJQUVoQVF6d0Fnc0NRQ0FCSWdFZ0FrY05BRUVQSVJBTTVRTUxJQUV0QUFBaUVFRTdSZzBJSUJCQkRVY042QUVnQVVFQmFpRUJETzhDQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONkFFZ0FTRUJEUElDQ3dOQUFrQWdBUzBBQUVId3RZQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrY042d0VnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQVVFQmFpSUJFTG1BZ0lBQUloQU42Z0VnQVNFQkRQUUNDeUFCUVFGcUlnRWdBa2NOQUF0QkVpRVFET0lEQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONlFFZ0FTRUJEQW9MSUFFaUFTQUNSdzBHUVJzaEVBemdBd3NDUUNBQklnRWdBa2NOQUVFV0lSQU00QU1MSUFCQmlvQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFBZ0FTQUNFTGlBZ0lBQUloQU42Z0VnQVNFQlFTQWhFQXpHQXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFSHd0NENBQUdvdEFBQWlFRUVDUmcwQUFrQWdFRUYvYWc0RTVRSHNBUURyQWV3QkN5QUJRUUZxSVFGQkNDRVFETWdEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJGU0VRRE44REMwRVZJUkFNM2dNTEEwQUNRQ0FCTFFBQVFmQzVnSUFBYWkwQUFDSVFRUUpHRFFBZ0VFRi9hZzRFM2dIc0FlQUI2d0hzQVFzZ0FVRUJhaUlCSUFKSERRQUxRUmdoRUF6ZEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVl1QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQkJ5RVFETVFEQzBFWklSQU0zQU1MSUFGQkFXb2hBUXdDQ3dKQUlBRWlGQ0FDUncwQVFSb2hFQXpiQXdzZ0ZDRUJBa0FnRkMwQUFFRnphZzRVM1FMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dJQTdnSUxRUUFoRUNBQVFRQTJBaHdnQUVHdmk0Q0FBRFlDRUNBQVFRSTJBZ3dnQUNBVVFRRnFOZ0lVRE5vREN3SkFJQUV0QUFBaUVFRTdSZzBBSUJCQkRVY042QUVnQVVFQmFpRUJET1VDQ3lBQlFRRnFJUUVMUVNJaEVBeS9Bd3NDUUNBQkloQWdBa2NOQUVFY0lSQU0yQU1MUWdBaEVTQVFJUUVnRUMwQUFFRlFhZzQzNXdIbUFRRUNBd1FGQmdjSUFBQUFBQUFBQUFrS0N3d05EZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEeEFSRWhNVUFBdEJIaUVRREwwREMwSUNJUkVNNVFFTFFnTWhFUXprQVF0Q0JDRVJET01CQzBJRklSRU00Z0VMUWdZaEVRemhBUXRDQnlFUkRPQUJDMElJSVJFTTN3RUxRZ2toRVF6ZUFRdENDaUVSRE4wQkMwSUxJUkVNM0FFTFFnd2hFUXpiQVF0Q0RTRVJETm9CQzBJT0lSRU0yUUVMUWc4aEVRellBUXRDQ2lFUkROY0JDMElMSVJFTTFnRUxRZ3doRVF6VkFRdENEU0VSRE5RQkMwSU9JUkVNMHdFTFFnOGhFUXpTQVF0Q0FDRVJBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUUxRQUFRVkJxRGpmbEFlUUJBQUVDQXdRRkJnZm1BZVlCNWdIbUFlWUI1Z0htQVFnSkNnc01EZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnRU9EeEFSRWhQbUFRdENBaUVSRE9RQkMwSURJUkVNNHdFTFFnUWhFUXppQVF0Q0JTRVJET0VCQzBJR0lSRU00QUVMUWdjaEVRemZBUXRDQ0NFUkRONEJDMElKSVJFTTNRRUxRZ29oRVF6Y0FRdENDeUVSRE5zQkMwSU1JUkVNMmdFTFFnMGhFUXpaQVF0Q0RpRVJETmdCQzBJUElSRU0xd0VMUWdvaEVReldBUXRDQ3lFUkROVUJDMElNSVJFTTFBRUxRZzBoRVF6VEFRdENEaUVSRE5JQkMwSVBJUkVNMFFFTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVOMGdGQkh5RVFETUFEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVrSVJBTXB3TUxRU0FoRUF5L0F3c2dBQ0FCSWhBZ0FoQytnSUNBQUVGL2FnNEZ0Z0VBeFFJQjBRSFNBUXRCRVNFUURLUURDeUFBUVFFNkFDOGdFQ0VCRExzREN5QUJJZ0VnQWtjTjBnRkJKQ0VRRExzREN5QUJJZzBnQWtjTkhrSEdBQ0VRRExvREN5QUFJQUVpQVNBQ0VMS0FnSUFBSWhBTjFBRWdBU0VCRExVQkN5QUJJaEFnQWtjTkprSFFBQ0VRRExnREN3SkFJQUVpQVNBQ1J3MEFRU2doRUF5NEF3c2dBRUVBTmdJRUlBQkJqSUNBZ0FBMkFnZ2dBQ0FCSUFFUXNZQ0FnQUFpRUEzVEFTQUJJUUVNMkFFTEFrQWdBU0lRSUFKSERRQkJLU0VRRExjREN5QVFMUUFBSWdGQklFWU5GQ0FCUVFsSERkTUJJQkJCQVdvaEFRd1ZDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdYQzBFcUlSQU10UU1MQWtBZ0FTSVFJQUpIRFFCQkt5RVFETFVEQ3dKQUlCQXRBQUFpQVVFSlJnMEFJQUZCSUVjTjFRRUxJQUF0QUN4QkNFWU4wd0VnRUNFQkRKRURDd0pBSUFFaUFTQUNSdzBBUVN3aEVBeTBBd3NnQVMwQUFFRUtSdzNWQVNBQlFRRnFJUUVNeVFJTElBRWlEaUFDUnczVkFVRXZJUkFNc2dNTEEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUlCQkJkbW9PQkFEY0Fkd0JBTm9CQ3lBQklRRU00QUVMSUFGQkFXb2lBU0FDUncwQUMwRXhJUkFNc1FNTFFUSWhFQ0FCSWhRZ0FrWU5zQU1nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFRGFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZkM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJBMGNOQUVFR0lRRU1sZ01MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExFREN5QUFRUUEyQWdBZ0ZDRUJETmtCQzBFeklSQWdBU0lVSUFKR0RhOERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQ0dvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSDB1NENBQUdvdEFBQkhEUUVDUUNBQlFRaEhEUUJCQlNFQkRKVURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl3QXdzZ0FFRUFOZ0lBSUJRaEFRellBUXRCTkNFUUlBRWlGQ0FDUmcydUF5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUVZxSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MEJBa0FnQVVFRlJ3MEFRUWNoQVF5VUF3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1yd01MSUFCQkFEWUNBQ0FVSVFFTTF3RUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0w2QWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVFKR0RRb2dBU0VCRE4wQkN5QUJRUUZxSWdFZ0FrY05BQXRCTUNFUURLNERDMEV3SVJBTXJRTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCZG1vT0JOa0IyZ0hhQWRrQjJnRUxJQUZCQVdvaUFTQUNSdzBBQzBFNElSQU1yUU1MUVRnaEVBeXNBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCQ1VjTkF3c2dBVUVCYWlJQklBSkhEUUFMUVR3aEVBeXJBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUNBUVFYWnFEZ1RhQVFFQjJnRUFDeUFRUVN4R0Rkc0JDeUFCSVFFTUJBc2dBVUVCYWlJQklBSkhEUUFMUVQ4aEVBeXFBd3NnQVNFQkROc0JDMEhBQUNFUUlBRWlGQ0FDUmcyb0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUVpxSVJjQ1FBTkFJQlF0QUFCQklISWdBVUdBd0lDQUFHb3RBQUJIRFFFZ0FVRUdSZzJPQXlBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5cEF3c2dBRUVBTmdJQUlCUWhBUXRCTmlFUURJNERDd0pBSUFFaUR5QUNSdzBBUWNFQUlSQU1wd01MSUFCQmpJQ0FnQUEyQWdnZ0FDQVBOZ0lFSUE4aEFTQUFMUUFzUVg5cURnVE5BZFVCMXdIWkFZY0RDeUFCUVFGcUlRRU16QUVMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdjaUFRSUJCQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SWhCQkNVWU5BQ0FRUVNCR0RRQUNRQUpBQWtBQ1FDQVFRWjEvYWc0VEFBTURBd01EQXdNQkF3TURBd01EQXdNREFnTUxJQUZCQVdvaEFVRXhJUkFNa1FNTElBRkJBV29oQVVFeUlSQU1rQU1MSUFGQkFXb2hBVUV6SVJBTWp3TUxJQUVoQVF6UUFRc2dBVUVCYWlJQklBSkhEUUFMUVRVaEVBeWxBd3RCTlNFUURLUURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUVlDOGdJQUFhaTBBQUVFQlJnMEFJQUVoQVF6VEFRc2dBVUVCYWlJQklBSkhEUUFMUVQwaEVBeWtBd3RCUFNFUURLTURDeUFBSUFFaUFTQUNFTENBZ0lBQUloQU4xZ0VnQVNFQkRBRUxJQkJCQVdvaEFRdEJQQ0VRREljREN3SkFJQUVpQVNBQ1J3MEFRY0lBSVJBTW9BTUxBa0FEUUFKQUlBRXRBQUJCZDJvT0dBQUMvZ0wrQW9RRC9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Q0FQNENDeUFCUVFGcUlnRWdBa2NOQUF0QndnQWhFQXlnQXdzZ0FVRUJhaUVCSUFBdEFDMUJBWEZGRGIwQklBRWhBUXRCTENFUURJVURDeUFCSWdFZ0FrY04wd0ZCeEFBaEVBeWRBd3NEUUFKQUlBRXRBQUJCa01DQWdBQnFMUUFBUVFGR0RRQWdBU0VCRExjQ0N5QUJRUUZxSWdFZ0FrY05BQXRCeFFBaEVBeWNBd3NnRFMwQUFDSVFRU0JHRGJNQklCQkJPa2NOZ1FNZ0FDZ0NCQ0VCSUFCQkFEWUNCQ0FBSUFFZ0RSQ3ZnSUNBQUNJQkRkQUJJQTFCQVdvaEFReXpBZ3RCeHdBaEVDQUJJZzBnQWtZTm1nTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVGYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHUXdvQ0FBR290QUFCSERZQURJQUZCQlVZTjlBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tZ01MUWNnQUlSQWdBU0lOSUFKR0Raa0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQ1dvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQmxzS0FnQUJxTFFBQVJ3My9BZ0pBSUFGQkNVY05BRUVDSVFFTTlRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmtEQ3dKQUlBRWlEU0FDUncwQVFja0FJUkFNbVFNTEFrQUNRQ0FOTFFBQUlnRkJJSElnQVNBQlFiOS9ha0gvQVhGQkdra2JRZjhCY1VHU2Yyb09Cd0NBQTRBRGdBT0FBNEFEQVlBREN5QU5RUUZxSVFGQlBpRVFESUFEQ3lBTlFRRnFJUUZCUHlFUURQOENDMEhLQUNFUUlBRWlEU0FDUmcyWEF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUUZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFEQ2dJQUFhaTBBQUVjTi9RSWdBVUVCUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVhBd3RCeXdBaEVDQUJJZzBnQWtZTmxnTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVPYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHaXdvQ0FBR290QUFCSERmd0NJQUZCRGtZTjhBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sZ01MUWN3QUlSQWdBU0lOSUFKR0RaVURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCRDJvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQndNS0FnQUJxTFFBQVJ3MzdBZ0pBSUFGQkQwY05BRUVESVFFTThRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlVEQzBITkFDRVFJQUVpRFNBQ1JnMlVBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFkRENnSUFBYWkwQUFFY04rZ0lDUUNBQlFRVkhEUUJCQkNFQkRQQUNDeUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlVQXdzQ1FDQUJJZzBnQWtjTkFFSE9BQ0VRREpRREN3SkFBa0FDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWjEvYWc0VEFQMEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QWdIOUF2MEMvUUlDQS8wQ0N5QU5RUUZxSVFGQndRQWhFQXo5QWdzZ0RVRUJhaUVCUWNJQUlSQU0vQUlMSUExQkFXb2hBVUhEQUNFUURQc0NDeUFOUVFGcUlRRkJ4QUFoRUF6NkFnc0NRQ0FCSWdFZ0FrWU5BQ0FBUVkyQWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQnhRQWhFQXo2QWd0Qnp3QWhFQXlTQXdzZ0VDRUJBa0FDUUNBUUxRQUFRWFpxRGdRQnFBS29BZ0NvQWdzZ0VFRUJhaUVCQzBFbklSQU0rQUlMQWtBZ0FTSUJJQUpIRFFCQjBRQWhFQXlSQXdzQ1FDQUJMUUFBUVNCR0RRQWdBU0VCREkwQkN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnh3RWdBU0VCREl3QkN5QUJJaGNnQWtjTnlBRkIwZ0FoRUF5UEF3dEIwd0FoRUNBQkloUWdBa1lOamdNZ0FpQVVheUFBS0FJQUlnRnFJUllnRkNBQmEwRUJhaUVYQTBBZ0ZDMEFBQ0FCUWRiQ2dJQUFhaTBBQUVjTnpBRWdBVUVCUmczSEFTQUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeU9Bd3NDUUNBQklnRWdBa2NOQUVIVkFDRVFESTREQ3lBQkxRQUFRUXBIRGN3QklBRkJBV29oQVF6SEFRc0NRQ0FCSWdFZ0FrY05BRUhXQUNFUURJMERDd0pBQWtBZ0FTMEFBRUYyYWc0RUFNMEJ6UUVCelFFTElBRkJBV29oQVF6SEFRc2dBVUVCYWlFQlFjb0FJUkFNOHdJTElBQWdBU0lCSUFJUXJvQ0FnQUFpRUEzTEFTQUJJUUZCelFBaEVBenlBZ3NnQUMwQUtVRWlSZzJGQXd5bUFnc0NRQ0FCSWdFZ0FrY05BRUhiQUNFUURJb0RDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVGUWFnNEsxQUhUQVFBQkFnTUVCUVlJMVFFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNekFFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd6TEFRc0NRQ0FCSWdFZ0FrY05BRUhkQUNFUURJa0RDeUFCTFFBQVFTNUhEY3dCSUFGQkFXb2hBUXltQWdzZ0FTSUJJQUpIRGN3QlFkOEFJUkFNaHdNTEFrQWdBU0lCSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWRBQUlSQU03Z0lMUWVBQUlSQU1oZ01MUWVFQUlSQWdBU0lCSUFKR0RZVURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSGl3b0NBQUdvdEFBQkhEYzBCSUJSQkEwWU56QUVnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaFFNTFFlSUFJUkFnQVNJQklBSkdEWVFESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkFtb2hGd05BSUFFdEFBQWdGRUhtd29DQUFHb3RBQUJIRGN3QklCUkJBa1lOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhBTUxRZU1BSVJBZ0FTSUJJQUpHRFlNRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIcHdvQ0FBR290QUFCSERjc0JJQlJCQTBZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1nd01MQWtBZ0FTSUJJQUpIRFFCQjVRQWhFQXlEQXdzZ0FDQUJRUUZxSWdFZ0FoQ29nSUNBQUNJUURjMEJJQUVoQVVIV0FDRVFET2tDQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUFrQUNRQ0FRUWJoL2FnNExBQUhQQWM4Qnp3SFBBYzhCendIUEFjOEJBczhCQ3lBQlFRRnFJUUZCMGdBaEVBenRBZ3NnQVVFQmFpRUJRZE1BSVJBTTdBSUxJQUZCQVdvaEFVSFVBQ0VRRE9zQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNUFBaEVBeUNBd3RCNUFBaEVBeUJBd3NEUUFKQUlBRXRBQUJCOE1LQWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVg1cURnUFBBZEFCMFFIU0FRc2dBVUVCYWlJQklBSkhEUUFMUWVZQUlSQU1nQU1MQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlY0FJUkFNL3dJTEEwQUNRQ0FCTFFBQVFmREVnSUFBYWkwQUFDSVFRUUZHRFFBQ1FDQVFRWDVxRGdUU0FkTUIxQUVBMVFFTElBRWhBVUhYQUNFUURPY0NDeUFCUVFGcUlnRWdBa2NOQUF0QjZBQWhFQXorQWdzQ1FDQUJJZ0VnQWtjTkFFSHBBQ0VRRFA0Q0N3SkFJQUV0QUFBaUVFRjJhZzRhdWdIVkFkVUJ2QUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhLQWRVQjFRRUEwd0VMSUFGQkFXb2hBUXRCQmlFUURPTUNDd05BQWtBZ0FTMEFBRUh3eG9DQUFHb3RBQUJCQVVZTkFDQUJJUUVNbmdJTElBRkJBV29pQVNBQ1J3MEFDMEhxQUNFUURQc0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdEQzBIckFDRVFEUG9DQ3dKQUlBRWlBU0FDUncwQVFld0FJUkFNK2dJTElBRkJBV29oQVF3QkN3SkFJQUVpQVNBQ1J3MEFRZTBBSVJBTStRSUxJQUZCQVdvaEFRdEJCQ0VRRE40Q0N3SkFJQUVpRkNBQ1J3MEFRZTRBSVJBTTl3SUxJQlFoQVFKQUFrQUNRQ0FVTFFBQVFmRElnSUFBYWkwQUFFRi9hZzRIMUFIVkFkWUJBSndDQVFMWEFRc2dGRUVCYWlFQkRBb0xJQlJCQVdvaEFRek5BUXRCQUNFUUlBQkJBRFlDSENBQVFadVNnSUFBTmdJUUlBQkJCellDRENBQUlCUkJBV28yQWhRTTlnSUxBa0FEUUFKQUlBRXRBQUJCOE1pQWdBQnFMUUFBSWhCQkJFWU5BQUpBQWtBZ0VFRi9hZzRIMGdIVEFkUUIyUUVBQkFIWkFRc2dBU0VCUWRvQUlSQU00QUlMSUFGQkFXb2hBVUhjQUNFUUROOENDeUFCUVFGcUlnRWdBa2NOQUF0Qjd3QWhFQXoyQWdzZ0FVRUJhaUVCRE1zQkN3SkFJQUVpRkNBQ1J3MEFRZkFBSVJBTTlRSUxJQlF0QUFCQkwwY04xQUVnRkVFQmFpRUJEQVlMQWtBZ0FTSVVJQUpIRFFCQjhRQWhFQXowQWdzQ1FDQVVMUUFBSWdGQkwwY05BQ0FVUVFGcUlRRkIzUUFoRUF6YkFnc2dBVUYyYWlJRVFSWkxEZE1CUVFFZ0JIUkJpWUNBQW5GRkRkTUJETW9DQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVIZUFDRVFETm9DQzBIeUFDRVFEUElDQ3dKQUlBRWlGQ0FDUncwQVFmUUFJUkFNOGdJTElCUWhBUUpBSUJRdEFBQkI4TXlBZ0FCcUxRQUFRWDlxRGdQSkFwUUNBTlFCQzBIaEFDRVFETmdDQ3dKQUlBRWlGQ0FDUmcwQUEwQUNRQ0FVTFFBQVFmREtnSUFBYWkwQUFDSUJRUU5HRFFBQ1FDQUJRWDlxRGdMTEFnRFZBUXNnRkNFQlFkOEFJUkFNMmdJTElCUkJBV29pRkNBQ1J3MEFDMEh6QUNFUURQRUNDMEh6QUNFUURQQUNDd0pBSUFFaUFTQUNSZzBBSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSGdBQ0VRRE5jQ0MwSDFBQ0VRRE84Q0N3SkFJQUVpQVNBQ1J3MEFRZllBSVJBTTd3SUxJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVF0QkF5RVFETlFDQ3dOQUlBRXRBQUJCSUVjTnd3SWdBVUVCYWlJQklBSkhEUUFMUWZjQUlSQU03QUlMQWtBZ0FTSUJJQUpIRFFCQitBQWhFQXpzQWdzZ0FTMEFBRUVnUnczT0FTQUJRUUZxSVFFTTd3RUxJQUFnQVNJQklBSVFySUNBZ0FBaUVBM09BU0FCSVFFTWpnSUxBa0FnQVNJRUlBSkhEUUJCK2dBaEVBenFBZ3NnQkMwQUFFSE1BRWNOMFFFZ0JFRUJhaUVCUVJNaEVBelBBUXNDUUNBQklnUWdBa2NOQUVIN0FDRVFET2tDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFEUUNBRUxRQUFJQUZCOE02QWdBQnFMUUFBUnczUUFTQUJRUVZHRGM0QklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmc0FJUkFNNkFJTEFrQWdBU0lFSUFKSERRQkIvQUFoRUF6b0Fnc0NRQUpBSUFRdEFBQkJ2WDlxRGd3QTBRSFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRRUIwUUVMSUFSQkFXb2hBVUhtQUNFUURNOENDeUFFUVFGcUlRRkI1d0FoRUF6T0Fnc0NRQ0FCSWdRZ0FrY05BRUg5QUNFUURPY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGM4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIOUFDRVFET2NDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkFoRUF6TUFRc0NRQ0FCSWdRZ0FrY05BRUgrQUNFUURPWUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUgyem9DQUFHb3RBQUJIRGM0QklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIK0FDRVFET1lDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlloRUF6TEFRc0NRQ0FCSWdRZ0FrY05BRUgvQUNFUURPVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUg4em9DQUFHb3RBQUJIRGMwQklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIL0FDRVFET1VDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVVoRUF6S0FRc0NRQ0FCSWdRZ0FrY05BRUdBQVNFUURPUUNDeUFFTFFBQVFka0FSdzNMQVNBRVFRRnFJUUZCQ0NFUURNa0JDd0pBSUFFaUJDQUNSdzBBUVlFQklSQU00d0lMQWtBQ1FDQUVMUUFBUWJKL2FnNERBTXdCQWN3QkN5QUVRUUZxSVFGQjZ3QWhFQXpLQWdzZ0JFRUJhaUVCUWV3QUlSQU15UUlMQWtBZ0FTSUVJQUpIRFFCQmdnRWhFQXppQWdzQ1FBSkFJQVF0QUFCQnVIOXFEZ2dBeXdITEFjc0J5d0hMQWNzQkFjc0JDeUFFUVFGcUlRRkI2Z0FoRUF6SkFnc2dCRUVCYWlFQlFlMEFJUkFNeUFJTEFrQWdBU0lFSUFKSERRQkJnd0VoRUF6aEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJBZ0JDQUJhMEVDYWlFVUFrQURRQ0FFTFFBQUlBRkJnTStBZ0FCcUxRQUFSdzNKQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCQTJBZ0JCZ3dFaEVBemhBZ3RCQUNFUUlBQkJBRFlDQUNBVVFRRnFJUUVNeGdFTEFrQWdBU0lFSUFKSERRQkJoQUVoRUF6Z0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJnOCtBZ0FCcUxRQUFSdzNJQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaEFFaEVBemdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWpJUkFNeFFFTEFrQWdBU0lFSUFKSERRQkJoUUVoRUF6ZkFnc0NRQUpBSUFRdEFBQkJ0SDlxRGdnQXlBSElBY2dCeUFISUFjZ0JBY2dCQ3lBRVFRRnFJUUZCN3dBaEVBekdBZ3NnQkVFQmFpRUJRZkFBSVJBTXhRSUxBa0FnQVNJRUlBSkhEUUJCaGdFaEVBemVBZ3NnQkMwQUFFSEZBRWNOeFFFZ0JFRUJhaUVCRElNQ0N3SkFJQUVpQkNBQ1J3MEFRWWNCSVJBTTNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRWWpQZ0lBQWFpMEFBRWNOeFFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVljQklSQU0zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJMU0VRRE1JQkN3SkFJQUVpQkNBQ1J3MEFRWWdCSVJBTTNBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOeEFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlnQklSQU0zQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLU0VRRE1FQkN3SkFJQUVpQVNBQ1J3MEFRWWtCSVJBTTJ3SUxRUUVoRUNBQkxRQUFRZDhBUnczQUFTQUJRUUZxSVFFTWdRSUxBa0FnQVNJRUlBSkhEUUJCaWdFaEVBemFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBMEFnQkMwQUFDQUJRWXpQZ0lBQWFpMEFBRWNOd1FFZ0FVRUJSZzJ2QWlBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHS0FTRVFETmtDQ3dKQUlBRWlCQ0FDUncwQVFZc0JJUkFNMlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFZN1BnSUFBYWkwQUFFY053UUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXNCSVJBTTJRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkFpRVFETDRCQ3dKQUlBRWlCQ0FDUncwQVFZd0JJUkFNMkFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY053QUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXdCSVJBTTJBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkh5RVFETDBCQ3dKQUlBRWlCQ0FDUncwQVFZMEJJUkFNMXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY052d0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWTBCSVJBTTF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkNTRVFETHdCQ3dKQUlBRWlCQ0FDUncwQVFZNEJJUkFNMWdJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQUw4QnZ3Ry9BYjhCdndFQnZ3RUxJQVJCQVdvaEFVSDRBQ0VRREwwQ0N5QUVRUUZxSVFGQitRQWhFQXk4QWdzQ1FDQUJJZ1FnQWtjTkFFR1BBU0VRRE5VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR1J6NENBQUdvdEFBQkhEYjBCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdQQVNFUUROVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSZ2hFQXk2QVFzQ1FDQUJJZ1FnQWtjTkFFR1FBU0VRRE5RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVR1h6NENBQUdvdEFBQkhEYndCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdRQVNFUUROUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSY2hFQXk1QVFzQ1FDQUJJZ1FnQWtjTkFFR1JBU0VRRE5NQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVR2F6NENBQUdvdEFBQkhEYnNCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdSQVNFUUROTUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSVWhFQXk0QVFzQ1FDQUJJZ1FnQWtjTkFFR1NBU0VRRE5JQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR2h6NENBQUdvdEFBQkhEYm9CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdTQVNFUUROSUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSNGhFQXkzQVFzQ1FDQUJJZ1FnQWtjTkFFR1RBU0VRRE5FQ0N5QUVMUUFBUWN3QVJ3MjRBU0FFUVFGcUlRRkJDaUVRRExZQkN3SkFJQVFnQWtjTkFFR1VBU0VRRE5BQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRHdDNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QVFHNUFRc2dCRUVCYWlFQlFmNEFJUkFNdHdJTElBUkJBV29oQVVIL0FDRVFETFlDQ3dKQUlBUWdBa2NOQUVHVkFTRVFETThDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Bd0M0QVFHNEFRc2dCRUVCYWlFQlFmMEFJUkFNdGdJTElBUkJBV29oQkVHQUFTRVFETFVDQ3dKQUlBUWdBa2NOQUVHV0FTRVFETTRDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHbno0Q0FBR290QUFCSERiWUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1dBU0VRRE00Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFzaEVBeXpBUXNDUUNBRUlBSkhEUUJCbHdFaEVBek5BZ3NDUUFKQUFrQUNRQ0FFTFFBQVFWTnFEaU1BdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QVFHNEFiZ0J1QUc0QWJnQkFyZ0J1QUc0QVFPNEFRc2dCRUVCYWlFQlFmc0FJUkFNdGdJTElBUkJBV29oQVVIOEFDRVFETFVDQ3lBRVFRRnFJUVJCZ1FFaEVBeTBBZ3NnQkVFQmFpRUVRWUlCSVJBTXN3SUxBa0FnQkNBQ1J3MEFRWmdCSVJBTXpBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRYW5QZ0lBQWFpMEFBRWNOdEFFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpnQklSQU16QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHU0VRRExFQkN3SkFJQVFnQWtjTkFFR1pBU0VRRE1zQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR3V6NENBQUdvdEFBQkhEYk1CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdaQVNFUURNc0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRWWhFQXl3QVFzQ1FDQUVJQUpIRFFCQm1nRWhFQXpLQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRNK0FnQUJxTFFBQVJ3MnlBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtZ0VoRUF6S0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFY0lSQU1yd0VMQWtBZ0JDQUNSdzBBUVpzQklSQU15UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJiUGdJQUFhaTBBQUVjTnNRRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFac0JJUkFNeVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSnlFUURLNEJDd0pBSUFRZ0FrY05BRUdjQVNFUURNZ0NDd0pBQWtBZ0JDMEFBRUdzZjJvT0FnQUJzUUVMSUFSQkFXb2hCRUdHQVNFUURLOENDeUFFUVFGcUlRUkJod0VoRUF5dUFnc0NRQ0FFSUFKSERRQkJuUUVoRUF6SEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1TStBZ0FCcUxRQUFSdzJ2QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCblFFaEVBekhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW1JUkFNckFFTEFrQWdCQ0FDUncwQVFaNEJJUkFNeGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiclBnSUFBYWkwQUFFY05yZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjRCSVJBTXhnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkF5RVFES3NCQ3dKQUlBUWdBa2NOQUVHZkFTRVFETVVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhMEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2ZBU0VRRE1VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVF3aEVBeXFBUXNDUUNBRUlBSkhEUUJCb0FFaEVBekVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCdk0rQWdBQnFMUUFBUncyc0FTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm9BRWhFQXpFQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVOSVJBTXFRRUxBa0FnQkNBQ1J3MEFRYUVCSVJBTXd3SUxBa0FDUUNBRUxRQUFRYnAvYWc0TEFLd0JyQUdzQWF3QnJBR3NBYXdCckFHc0FRR3NBUXNnQkVFQmFpRUVRWXNCSVJBTXFnSUxJQVJCQVdvaEJFR01BU0VRREtrQ0N3SkFJQVFnQWtjTkFFR2lBU0VRRE1JQ0N5QUVMUUFBUWRBQVJ3MnBBU0FFUVFGcUlRUU02UUVMQWtBZ0JDQUNSdzBBUWFNQklSQU13UUlMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBYW9CcWdHcUFhb0JxZ0VBcWdFTElBUkJBV29oQkVHT0FTRVFES2dDQ3lBRVFRRnFJUUZCSWlFUURLWUJDd0pBSUFRZ0FrY05BRUdrQVNFUURNQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUhBejRDQUFHb3RBQUJIRGFnQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHa0FTRVFETUFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjBoRUF5bEFRc0NRQ0FFSUFKSERRQkJwUUVoRUF5L0Fnc0NRQUpBSUFRdEFBQkJybjlxRGdNQXFBRUJxQUVMSUFSQkFXb2hCRUdRQVNFUURLWUNDeUFFUVFGcUlRRkJCQ0VRREtRQkN3SkFJQVFnQWtjTkFFR21BU0VRREw0Q0N3SkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUNxQWFvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQVFHcUFhb0JBcW9CcWdFRHFnR3FBUVNxQVFzZ0JFRUJhaUVFUVlnQklSQU1xQUlMSUFSQkFXb2hCRUdKQVNFUURLY0NDeUFFUVFGcUlRUkJpZ0VoRUF5bUFnc2dCRUVCYWlFRVFZOEJJUkFNcFFJTElBUkJBV29oQkVHUkFTRVFES1FDQ3dKQUlBUWdBa2NOQUVHbkFTRVFETDBDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhVUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR25BU0VRREwwQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJFaEVBeWlBUXNDUUNBRUlBSkhEUUJCcUFFaEVBeThBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCd3MrQWdBQnFMUUFBUncya0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFBRWhFQXk4QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVzSVJBTW9RRUxBa0FnQkNBQ1J3MEFRYWtCSVJBTXV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRY1hQZ0lBQWFpMEFBRWNOb3dFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFrQklSQU11d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLeUVRREtBQkN3SkFJQVFnQWtjTkFFR3FBU0VRRExvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEt6NENBQUdvdEFBQkhEYUlCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdxQVNFUURMb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSUWhFQXlmQVFzQ1FDQUVJQUpIRFFCQnF3RWhFQXk1QWdzQ1FBSkFBa0FDUUNBRUxRQUFRYjUvYWc0UEFBRUNwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQVFPa0FRc2dCRUVCYWlFRVFaTUJJUkFNb2dJTElBUkJBV29oQkVHVUFTRVFES0VDQ3lBRVFRRnFJUVJCbFFFaEVBeWdBZ3NnQkVFQmFpRUVRWllCSVJBTW53SUxBa0FnQkNBQ1J3MEFRYXdCSVJBTXVBSUxJQVF0QUFCQnhRQkhEWjhCSUFSQkFXb2hCQXpnQVFzQ1FDQUVJQUpIRFFCQnJRRWhFQXkzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQnpjK0FnQUJxTFFBQVJ3MmZBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyUUVoRUF5M0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFT0lSQU1uQUVMQWtBZ0JDQUNSdzBBUWE0QklSQU10Z0lMSUFRdEFBQkIwQUJIRFowQklBUkJBV29oQVVFbElSQU1td0VMQWtBZ0JDQUNSdzBBUWE4QklSQU10UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTm5RRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhOEJJUkFNdFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCS2lFUURKb0JDd0pBSUFRZ0FrY05BRUd3QVNFUURMUUNDd0pBQWtBZ0JDMEFBRUdyZjJvT0N3Q2RBWjBCblFHZEFaMEJuUUdkQVowQm5RRUJuUUVMSUFSQkFXb2hCRUdhQVNFUURKc0NDeUFFUVFGcUlRUkJtd0VoRUF5YUFnc0NRQ0FFSUFKSERRQkJzUUVoRUF5ekFnc0NRQUpBSUFRdEFBQkJ2MzlxRGhRQW5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3QkFad0JDeUFFUVFGcUlRUkJtUUVoRUF5YUFnc2dCRUVCYWlFRVFad0JJUkFNbVFJTEFrQWdCQ0FDUncwQVFiSUJJUkFNc2dJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFkblBnSUFBYWkwQUFFY05tZ0VnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYklCSVJBTXNnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQklTRVFESmNCQ3dKQUlBUWdBa2NOQUVHekFTRVFETEVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVIZHo0Q0FBR290QUFCSERaa0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3pBU0VRRExFQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJvaEVBeVdBUXNDUUNBRUlBSkhEUUJCdEFFaEVBeXdBZ3NDUUFKQUFrQWdCQzBBQUVHN2Yyb09FUUNhQVpvQm1nR2FBWm9CbWdHYUFab0JtZ0VCbWdHYUFab0JtZ0dhQVFLYUFRc2dCRUVCYWlFRVFaMEJJUkFNbUFJTElBUkJBV29oQkVHZUFTRVFESmNDQ3lBRVFRRnFJUVJCbndFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCdFFFaEVBeXZBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRmFpRVFBa0FEUUNBRUxRQUFJQUZCNU0rQWdBQnFMUUFBUncyWEFTQUJRUVZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRRRWhFQXl2QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVvSVJBTWxBRUxBa0FnQkNBQ1J3MEFRYllCSVJBTXJnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZXJQZ0lBQWFpMEFBRWNObGdFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJZQklSQU1yZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCeUVRREpNQkN3SkFJQVFnQWtjTkFFRzNBU0VRREswQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRGdDV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0VCbGdFTElBUkJBV29oQkVHaEFTRVFESlFDQ3lBRVFRRnFJUVJCb2dFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCdUFFaEVBeXNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCN2MrQWdBQnFMUUFBUncyVUFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVBRWhFQXlzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVTSVJBTWtRRUxBa0FnQkNBQ1J3MEFRYmtCSVJBTXF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOa3dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJrQklSQU1xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJQ0VRREpBQkN3SkFJQVFnQWtjTkFFRzZBU0VRREtvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSHl6NENBQUdvdEFBQkhEWklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc2QVNFUURLb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFROGhFQXlQQVFzQ1FDQUVJQUpIRFFCQnV3RWhFQXlwQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBa2dHU0FaSUJrZ0dTQVFHU0FRc2dCRUVCYWlFRVFhVUJJUkFNa0FJTElBUkJBV29oQkVHbUFTRVFESThDQ3dKQUlBUWdBa2NOQUVHOEFTRVFES2dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRZHFJUkFDUUFOQUlBUXRBQUFnQVVIMHo0Q0FBR290QUFCSERaQUJJQUZCQjBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzhBU0VRREtnQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJzaEVBeU5BUXNDUUNBRUlBSkhEUUJCdlFFaEVBeW5BZ3NDUUFKQUFrQWdCQzBBQUVHK2Yyb09FZ0NSQVpFQmtRR1JBWkVCa1FHUkFaRUJrUUVCa1FHUkFaRUJrUUdSQVpFQkFwRUJDeUFFUVFGcUlRUkJwQUVoRUF5UEFnc2dCRUVCYWlFRVFhY0JJUkFNamdJTElBUkJBV29oQkVHb0FTRVFESTBDQ3dKQUlBUWdBa2NOQUVHK0FTRVFES1lDQ3lBRUxRQUFRYzRBUncyTkFTQUVRUUZxSVFRTXp3RUxBa0FnQkNBQ1J3MEFRYjhCSVJBTXBRSUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQUJBZ09jQVFRRkJwd0JuQUdjQVFjSUNRb0xuQUVNRFE0UG5BRUxJQVJCQVdvaEFVSG9BQ0VRREpvQ0N5QUVRUUZxSVFGQjZRQWhFQXlaQWdzZ0JFRUJhaUVCUWU0QUlSQU1tQUlMSUFSQkFXb2hBVUh5QUNFUURKY0NDeUFFUVFGcUlRRkI4d0FoRUF5V0Fnc2dCRUVCYWlFQlFmWUFJUkFNbFFJTElBUkJBV29oQVVIM0FDRVFESlFDQ3lBRVFRRnFJUUZCK2dBaEVBeVRBZ3NnQkVFQmFpRUVRWU1CSVJBTWtnSUxJQVJCQVdvaEJFR0VBU0VRREpFQ0N5QUVRUUZxSVFSQmhRRWhFQXlRQWdzZ0JFRUJhaUVFUVpJQklSQU1qd0lMSUFSQkFXb2hCRUdZQVNFUURJNENDeUFFUVFGcUlRUkJvQUVoRUF5TkFnc2dCRUVCYWlFRVFhTUJJUkFNakFJTElBUkJBV29oQkVHcUFTRVFESXNDQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHckFTRVFESXNDQzBIQUFTRVFES01DQ3lBQUlBVWdBaENxZ0lDQUFDSUJEWXNCSUFVaEFReGNDd0pBSUFZZ0FrWU5BQ0FHUVFGcUlRVU1qUUVMUWNJQklSQU1vUUlMQTBBQ1FDQVFMUUFBUVhacURnU01BUUFBandFQUN5QVFRUUZxSWhBZ0FrY05BQXRCd3dFaEVBeWdBZ3NDUUNBSElBSkdEUUFnQUVHUmdJQ0FBRFlDQ0NBQUlBYzJBZ1FnQnlFQlFRRWhFQXlIQWd0QnhBRWhFQXlmQWdzQ1FDQUhJQUpIRFFCQnhRRWhFQXlmQWdzQ1FBSkFJQWN0QUFCQmRtb09CQUhPQWM0QkFNNEJDeUFIUVFGcUlRWU1qUUVMSUFkQkFXb2hCUXlKQVFzQ1FDQUhJQUpIRFFCQnhnRWhFQXllQWdzQ1FBSkFJQWN0QUFCQmRtb09Gd0dQQVk4QkFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFRQ1BBUXNnQjBFQmFpRUhDMEd3QVNFUURJUUNDd0pBSUFnZ0FrY05BRUhJQVNFUURKMENDeUFJTFFBQVFTQkhEWTBCSUFCQkFEc0JNaUFJUVFGcUlRRkJzd0VoRUF5REFnc2dBU0VYQWtBRFFDQVhJZ2NnQWtZTkFTQUhMUUFBUVZCcVFmOEJjU0lRUVFwUERjd0JBa0FnQUM4Qk1pSVVRWmt6U3cwQUlBQWdGRUVLYkNJVU93RXlJQkJCLy84RGN5QVVRZjcvQTNGSkRRQWdCMEVCYWlFWElBQWdGQ0FRYWlJUU93RXlJQkJCLy84RGNVSG9CMGtOQVFzTFFRQWhFQ0FBUVFBMkFod2dBRUhCaVlDQUFEWUNFQ0FBUVEwMkFnd2dBQ0FIUVFGcU5nSVVESndDQzBISEFTRVFESnNDQ3lBQUlBZ2dBaEN1Z0lDQUFDSVFSUTNLQVNBUVFSVkhEWXdCSUFCQnlBRTJBaHdnQUNBSU5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5YUFnc0NRQ0FKSUFKSERRQkJ6QUVoRUF5YUFndEJBQ0VVUVFFaEYwRUJJUlpCQUNFUUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBa3RBQUJCVUdvT0NwWUJsUUVBQVFJREJBVUdDSmNCQzBFQ0lSQU1CZ3RCQXlFUURBVUxRUVFoRUF3RUMwRUZJUkFNQXd0QkJpRVFEQUlMUVFjaEVBd0JDMEVJSVJBTFFRQWhGMEVBSVJaQkFDRVVESTRCQzBFSklSQkJBU0VVUVFBaEYwRUFJUllNalFFTEFrQWdDaUFDUncwQVFjNEJJUkFNbVFJTElBb3RBQUJCTGtjTmpnRWdDa0VCYWlFSkRNb0JDeUFMSUFKSERZNEJRZEFCSVJBTWx3SUxBa0FnQ3lBQ1JnMEFJQUJCam9DQWdBQTJBZ2dnQUNBTE5nSUVRYmNCSVJBTS9nRUxRZEVCSVJBTWxnSUxBa0FnQkNBQ1J3MEFRZElCSVJBTWxnSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQkdvaEN3TkFJQVF0QUFBZ0VFSDh6NENBQUdvdEFBQkhEWTRCSUJCQkJFWU42UUVnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMGdFaEVBeVZBZ3NnQUNBTUlBSVFySUNBZ0FBaUFRMk5BU0FNSVFFTXVBRUxBa0FnQkNBQ1J3MEFRZFFCSVJBTWxBSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQVdvaERBTkFJQVF0QUFBZ0VFR0IwSUNBQUdvdEFBQkhEWThCSUJCQkFVWU5qZ0VnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMUFFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCMWdFaEVBeVRBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQ2FpRUxBMEFnQkMwQUFDQVFRWVBRZ0lBQWFpMEFBRWNOamdFZ0VFRUNSZzJRQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIV0FTRVFESklDQ3dKQUlBUWdBa2NOQUVIWEFTRVFESklDQ3dKQUFrQWdCQzBBQUVHN2Yyb09FQUNQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQVk4QkN5QUVRUUZxSVFSQnV3RWhFQXo1QVFzZ0JFRUJhaUVFUWJ3QklSQU0rQUVMQWtBZ0JDQUNSdzBBUWRnQklSQU1rUUlMSUFRdEFBQkJ5QUJIRFl3QklBUkJBV29oQkF6RUFRc0NRQ0FFSUFKR0RRQWdBRUdRZ0lDQUFEWUNDQ0FBSUFRMkFnUkJ2Z0VoRUF6M0FRdEIyUUVoRUF5UEFnc0NRQ0FFSUFKSERRQkIyZ0VoRUF5UEFnc2dCQzBBQUVISUFFWU53d0VnQUVFQk9nQW9ETGtCQ3lBQVFRSTZBQzhnQUNBRUlBSVFwb0NBZ0FBaUVBMk5BVUhDQVNFUURQUUJDeUFBTFFBb1FYOXFEZ0szQWJrQnVBRUxBMEFDUUNBRUxRQUFRWFpxRGdRQWpnR09BUUNPQVFzZ0JFRUJhaUlFSUFKSERRQUxRZDBCSVJBTWl3SUxJQUJCQURvQUx5QUFMUUF0UVFSeFJRMkVBZ3NnQUVFQU9nQXZJQUJCQVRvQU5DQUJJUUVNakFFTElCQkJGVVlOMmdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWlBSUxBa0FnQUNBUUlBSVF0SUNBZ0FBaUJBMEFJQkFoQVF5QkFnc0NRQ0FFUVJWSERRQWdBRUVETmdJY0lBQWdFRFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1pQUlMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUduam9DQUFEWUNFQ0FBUVJJMkFneEJBQ0VRREljQ0N5QVFRUlZHRGRZQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIYWpZQ0FBRFlDRUNBQVFSUTJBZ3hCQUNFUURJWUNDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOalFFZ0FFRUhOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRElVQ0N5QUFJQUF2QVRCQmdBRnlPd0V3SUFFaEFRdEJLaUVRRE9vQkN5QVFRUlZHRGRFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHRGpJQ0FBRFlDRUNBQVFSTTJBZ3hCQUNFUURJSUNDeUFRUVJWR0RjOEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFESUVDQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU5BUXNnQUVFTU5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRElBQ0N5QVFRUlZHRGN3QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TUFRc2dBRUVOTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUDRCQ3lBUVFSVkdEY2tCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFAwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlMQVFzZ0FFRU9OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SldBZ0FBMkFoQWdBRUVDTmdJTVFRQWhFQXo3QVFzZ0VFRVZSZzNGQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG95QWdBQTJBaEFnQUVFak5nSU1RUUFoRUF6NkFRc2dBRUVRTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURQa0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6eEFRc2dBRUVSTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUGdCQ3lBUVFSVkdEY0VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBjQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlJQVFzZ0FFRVROZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQWUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6dEFRc2dBRUVVTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFVCQ3lBUVFSVkdEYjBCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFBRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlHQVFzZ0FFRVdOZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQTUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXQ0Q0FnQUFpQkEwQUlBRkJBV29oQVF6cEFRc2dBRUVYTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUElCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6eEFRdENBU0VSQ3lBUVFRRnFJUUVDUUNBQUtRTWdJaEpDLy8vLy8vLy8vLzhQVmcwQUlBQWdFa0lFaGlBUmhEY0RJQ0FCSVFFTWhBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3RpWUNBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzhCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6dUFRc2dBQ2dDQkNFWElBQkJBRFlDQkNBUUlCR25haUlXSVFFZ0FDQVhJQkFnRmlBVUd5SVFFTFdBZ0lBQUloUkZEWE1nQUVFRk5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFETzBCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcXB5QWdBQTJBaEFnQUVFUE5nSU1RUUFoRUF6c0FRc2dBQ0FRSUFJUXRJQ0FnQUFpQVEwQklCQWhBUXRCRGlFUURORUJDd0pBSUFGQkZVY05BQ0FBUVFJMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpxQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTTZRRUxJQUZCQVdvaEVBSkFJQUF2QVRBaUFVR0FBWEZGRFFBQ1FDQUFJQkFnQWhDN2dJQ0FBQ0lCRFFBZ0VDRUJESEFMSUFGQkZVY051Z0VnQUVFRk5nSWNJQUFnRURZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTEFrQWdBVUdnQkhGQm9BUkhEUUFnQUMwQUxVRUNjUTBBSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdXazRDQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRE9rQkN5QUFJQkFnQWhDOWdJQ0FBQm9nRUNFQkFrQUNRQUpBQWtBQ1FDQUFJQkFnQWhDemdJQ0FBQTRXQWdFQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUF3UUxJQUJCQVRvQUxnc2dBQ0FBTHdFd1FjQUFjanNCTUNBUUlRRUxRU1loRUF6UkFRc2dBRUVqTmdJY0lBQWdFRFlDRkNBQVFhV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhWaTRDQUFEWUNFQ0FBUVJFMkFneEJBQ0VRRE9nQkN5QUFMUUF0UVFGeFJRMEJRY01CSVJBTXpnRUxBa0FnRFNBQ1JnMEFBMEFDUUNBTkxRQUFRU0JHRFFBZ0RTRUJETVFCQ3lBTlFRRnFJZzBnQWtjTkFBdEJKU0VRRE9jQkMwRWxJUkFNNWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBMFFyNENBZ0FBaUJFVU5yUUVnQUVFbU5nSWNJQUFnQkRZQ0RDQUFJQTFCQVdvMkFoUkJBQ0VRRE9VQkN5QVFRUlZHRGFzQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWpZQ0FBRFlDRUNBQVFSMDJBZ3hCQUNFUURPUUJDeUFBUVNjMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU00d0VMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBQWtBQ1FDQUFMUUFzUVg1cURnY0dCUVVEQVFJQUJRc2dBQ0FBTHdFd1FRaHlPd0V3REFNTFFRSWhGQXdCQzBFRUlSUUxJQUJCQVRvQUxDQUFJQUF2QVRBZ0ZISTdBVEFMSUJBaEFRdEJLeUVRRE1vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnE1S0FnQUEyQWhBZ0FFRUxOZ0lNUVFBaEVBemlBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNNFFFTElBQkJBRG9BTENBUUlRRU12UUVMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVwSVJBTXhRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSHdsSUNBQURZQ0VDQUFRUU0yQWd4QkFDRVFETjBCQ3dKQUlBNHRBQUJCRFVjTkFDQUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE1QkFXb2hBUXgxQ3lBQVFTdzJBaHdnQUNBQk5nSU1JQUFnRGtFQmFqWUNGRUVBSVJBTTNRRUxJQUF0QUMxQkFYRkZEUUZCeEFFaEVBekRBUXNDUUNBT0lBSkhEUUJCTFNFUUROd0JDd0pBQWtBRFFBSkFJQTR0QUFCQmRtb09CQUlBQUFNQUN5QU9RUUZxSWc0Z0FrY05BQXRCTFNFUUROMEJDeUFBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNGhBUXgwQ3lBQVFTdzJBaHdnQUNBT05nSVVJQUFnQVRZQ0RFRUFJUkFNM0FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESE1MSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6YkFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEaEN4Z0lDQUFDSUVEYUFCSUE0aEFRek9BUXNnRUVFc1J3MEJJQUZCQVdvaEVFRUJJUUVDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnUUFDeUFRSVFFTUJBdEJBaUVCREFFTFFRUWhBUXNnQUVFQk9nQXNJQUFnQUM4Qk1DQUJjanNCTUNBUUlRRU1BUXNnQUNBQUx3RXdRUWh5T3dFd0lCQWhBUXRCT1NFUURMOEJDeUFBUVFBNkFDd2dBU0VCQzBFMElSQU12UUVMSUFBZ0FDOEJNRUVnY2pzQk1DQUJJUUVNQWdzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFTEdBZ0lBQUlnUU5BQ0FCSVFFTXh3RUxJQUJCTnpZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBelVBUXNnQUVFSU9nQXNJQUVoQVF0Qk1DRVFETGtCQ3dKQUlBQXRBQ2hCQVVZTkFDQUJJUUVNQkFzZ0FDMEFMVUVJY1VVTmt3RWdBU0VCREFNTElBQXRBREJCSUhFTmxBRkJ4UUVoRUF5M0FRc0NRQ0FQSUFKR0RRQUNRQU5BQWtBZ0R5MEFBRUZRYWlJQlFmOEJjVUVLU1EwQUlBOGhBVUUxSVJBTXVnRUxJQUFwQXlBaUVVS1pzK2JNbWJQbXpCbFdEUUVnQUNBUlFncCtJaEUzQXlBZ0VTQUJyVUwvQVlNaUVrSi9oVllOQVNBQUlCRWdFbnczQXlBZ0QwRUJhaUlQSUFKSERRQUxRVGtoRUF6UkFRc2dBQ2dDQkNFQ0lBQkJBRFlDQkNBQUlBSWdEMEVCYWlJRUVMR0FnSUFBSWdJTmxRRWdCQ0VCRE1NQkMwRTVJUkFNendFTEFrQWdBQzhCTUNJQlFRaHhSUTBBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUWh4UlEyUUFRc2dBQ0FCUWZmN0EzRkJnQVJ5T3dFd0lBOGhBUXRCTnlFUURMUUJDeUFBSUFBdkFUQkJFSEk3QVRBTXF3RUxJQkJCRlVZTml3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ09nSUFBTmdJUUlBQkJIRFlDREVFQUlSQU15d0VMSUFCQnd3QTJBaHdnQUNBQk5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTXlnRUxBa0FnQVMwQUFFRTZSdzBBSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ3ZnSUNBQUNJUURRQWdBVUVCYWlFQkRHTUxJQUJCd3dBMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNeWdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHeGtZQ0FBRFlDRUNBQVFRbzJBZ3hCQUNFUURNa0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJvSm1BZ0FBMkFoQWdBRUVlTmdJTVFRQWhFQXpJQVFzZ0FFRUFOZ0lBQ3lBQVFZQVNPd0VxSUFBZ0YwRUJhaUlCSUFJUXFJQ0FnQUFpRUEwQklBRWhBUXRCeHdBaEVBeXNBUXNnRUVFVlJ3MkRBU0FBUWRFQU5nSWNJQUFnQVRZQ0ZDQUFRZU9YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNeEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGNExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU13d0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhCcUlDQUFEWUNFQ0FBUVFjMkFnd2dBRUVBTmdJQVFRQWhFQXpDQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekJBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHQWtZQ0FBRFlDRUNBQVFRazJBZ3dNd0FFTElCQkJGVVlOZlNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5L0FRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0FVRUJhaUVCQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLMkFnSUFBSWhBTkFDQUJJUUVNWEFzZ0FFSFlBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5K0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1yUUVMSUFCQjJRQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdlFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLc0JDeUFBUWRvQU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5cEFRc2dBRUhjQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTdBUXNDUUNBQkxRQUFRVkJxSWhCQi93RnhRUXBQRFFBZ0FDQVFPZ0FxSUFGQkFXb2hBVUhQQUNFUURLSUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXluQVFzZ0FFSGVBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5NkFRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSTA4TkFDQUJJUUVNV1FzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRPSmdJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXVRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd010d0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcFFTRkhEUUFnQVNFQkRGWUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2Jpb0NBQURZQ0VDQUFRUWcyQWd4QkFDRVFETFlCQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtTSVFRVjFxUVF0UERRQWdBU0VCREZVTEFrQWdFRUVHU3cwQVFRRWdFSFJCeWdCeFJRMEFJQUVoQVF4VkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZmVKZ0lBQU5nSVFJQUJCQ0RZQ0RBeTFBUXNnRUVFVlJnMXhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFRzVqWUNBQURZQ0VDQUFRUm8yQWd4QkFDRVFETFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4VUN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMTUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExJQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEVCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4UkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMQUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3FBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXl2QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dEFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1UUXNnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlzQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWR5SWdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTXF3RUxJQkJCUDBjTkFTQUJRUUZxSVFFTFFRVWhFQXlRQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlrb0NBQURZQ0VDQUFRUWMyQWd3TXFBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcHdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVZTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjBnQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNcEFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMHdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vd0VMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREVNTElBQkI1UUEyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW9nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0VCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdzQrQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5Z0FRdEJBQ0VRSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFnd01ud0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREo0QkN5QUFRUUEyQWh3Z0FDQVVOZ0lVSUFCQi9wR0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWRBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWTZiZ0lBQU5nSVFJQUJCQmpZQ0RFRUFJUkFNbkFFTElCQkJGVVlOVnlBQVFRQTJBaHdnQUNBQk5nSVVJQUJCekk2QWdBQTJBaEFnQUVFZ05nSU1RUUFoRUF5YkFRc2dBRUVBTmdJQUlCQkJBV29oQVVFa0lSQUxJQUFnRURvQUtTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJFS3VBZ0lBQUloQU5WQ0FCSVFFTVBnc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZkdiZ0lBQU5nSVFJQUJCQmpZQ0RBeVhBUXNnQVVFVlJnMVFJQUJCQURZQ0hDQUFJQVUyQWhRZ0FFSHdqSUNBQURZQ0VDQUFRUnMyQWd4QkFDRVFESllCQ3lBQUtBSUVJUVVnQUVFQU5nSUVJQUFnQlNBUUVLbUFnSUFBSWdVTkFTQVFRUUZxSVFVTFFhMEJJUkFNZXdzZ0FFSEJBVFlDSENBQUlBVTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVRBUXNnQUNnQ0JDRUdJQUJCQURZQ0JDQUFJQVlnRUJDcGdJQ0FBQ0lHRFFFZ0VFRUJhaUVHQzBHdUFTRVFESGdMSUFCQndnRTJBaHdnQUNBR05nSU1JQUFnRUVFQmFqWUNGRUVBSVJBTWtBRUxJQUJCQURZQ0hDQUFJQWMyQWhRZ0FFR1hpNENBQURZQ0VDQUFRUTAyQWd4QkFDRVFESThCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCNDVDQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF5T0FRc2dBRUVBTmdJY0lBQWdDRFlDRkNBQVFaU05nSUFBTmdJUUlBQkJJVFlDREVFQUlSQU1qUUVMUVFFaEZrRUFJUmRCQUNFVVFRRWhFQXNnQUNBUU9nQXJJQWxCQVdvaENBSkFBa0FnQUMwQUxVRVFjUTBBQWtBQ1FBSkFJQUF0QUNvT0F3RUFBZ1FMSUJaRkRRTU1BZ3NnRkEwQkRBSUxJQmRGRFFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBZ1FyWUNBZ0FBaUVFVU5QU0FBUWNrQk5nSWNJQUFnQ0RZQ0ZDQUFJQkEyQWd4QkFDRVFESXdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSUVLMkFnSUFBSWdSRkRYWWdBRUhLQVRZQ0hDQUFJQWcyQWhRZ0FDQUVOZ0lNUVFBaEVBeUxBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ1JDdGdJQ0FBQ0lFUlExMElBQkJ5d0UyQWh3Z0FDQUpOZ0lVSUFBZ0JEWUNERUVBSVJBTWlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQW9RcllDQWdBQWlCRVVOY2lBQVFjMEJOZ0ljSUFBZ0NqWUNGQ0FBSUFRMkFneEJBQ0VRRElrQkN3SkFJQXN0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dDMEVCYWlFS1FiWUJJUkFNY0FzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0N4Q3RnSUNBQUNJRVJRMXdJQUJCendFMkFod2dBQ0FMTmdJVUlBQWdCRFlDREVFQUlSQU1pQUVMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd2dBRUVBTmdJQVFRQWhFQXlIQVFzZ0FVRVZSZzAvSUFCQkFEWUNIQ0FBSUF3MkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRRElZQkN5QUFRWUVFT3dFb0lBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBeEJBV29pREJDcmdJQ0FBQ0lRUlEwNElBQkIwd0UyQWh3Z0FDQU1OZ0lVSUFBZ0VEWUNERUVBSVJBTWhRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhZbTRDQUFEWUNFQ0FBUVFnMkFnd01nd0VMSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF0QkFXb2lDeENyZ0lDQUFDSVFEUUZCeGdFaEVBeHBDeUFBUVFJNkFDZ01WUXNnQUVIVkFUWUNIQ0FBSUFzMkFoUWdBQ0FRTmdJTVFRQWhFQXlBQVFzZ0VFRVZSZzAzSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdraklDQUFEWUNFQ0FBUVJBMkFneEJBQ0VRREg4TElBQXRBRFJCQVVjTk5DQUFJQVFnQWhDOGdJQ0FBQ0lRUlEwMElCQkJGVWNOTlNBQVFkd0JOZ0ljSUFBZ0JEWUNGQ0FBUWRXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWZndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNZlF0QkFDRVFER01MUVFJaEVBeGlDMEVOSVJBTVlRdEJEeUVRREdBTFFTVWhFQXhmQzBFVElSQU1YZ3RCRlNFUURGMExRUlloRUF4Y0MwRVhJUkFNV3d0QkdDRVFERm9MUVJraEVBeFpDMEVhSVJBTVdBdEJHeUVRREZjTFFSd2hFQXhXQzBFZElSQU1WUXRCSHlFUURGUUxRU0VoRUF4VEMwRWpJUkFNVWd0QnhnQWhFQXhSQzBFdUlSQU1VQXRCTHlFUURFOExRVHNoRUF4T0MwRTlJUkFNVFF0QnlBQWhFQXhNQzBISkFDRVFERXNMUWNzQUlSQU1TZ3RCekFBaEVBeEpDMEhPQUNFUURFZ0xRZEVBSVJBTVJ3dEIxUUFoRUF4R0MwSFlBQ0VRREVVTFFka0FJUkFNUkF0QjJ3QWhFQXhEQzBIa0FDRVFERUlMUWVVQUlSQU1RUXRCOFFBaEVBeEFDMEgwQUNFUUREOExRWTBCSVJBTVBndEJsd0VoRUF3OUMwR3BBU0VRRER3TFFhd0JJUkFNT3d0QndBRWhFQXc2QzBHNUFTRVFERGtMUWE4QklSQU1PQXRCc1FFaEVBdzNDMEd5QVNFUUREWUxRYlFCSVJBTU5RdEJ0UUVoRUF3MEMwRzZBU0VRRERNTFFiMEJJUkFNTWd0QnZ3RWhFQXd4QzBIQkFTRVFEREFMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhwaTRDQUFEWUNFQ0FBUVI4MkFneEJBQ0VRREVnTElBQkIyd0UyQWh3Z0FDQUVOZ0lVSUFCQitwYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEhDeUFBUWZnQU5nSWNJQUFnRERZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUmdzZ0FFSFJBRFlDSENBQUlBVTJBaFFnQUVHd2w0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFVUxJQUJCK1FBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1SQXNnQUVINEFEWUNIQ0FBSUFFMkFoUWdBRUhLbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVNTElBQkI1QUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeENDeUFBUWRjQU5nSWNJQUFnQVRZQ0ZDQUFRY21YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTVFBc2dBRUhDQURZQ0hDQUFJQUUyQWhRZ0FFSGptSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERDhMSUFCQkFEWUNCQ0FBSUE4Z0R4Q3hnSUNBQUNJRVJRMEJJQUJCT2pZQ0hDQUFJQVEyQWd3Z0FDQVBRUUZxTmdJVVFRQWhFQXcrQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJFVU5BQ0FBUVRzMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNUGdzZ0FVRUJhaUVCREMwTElBOUJBV29oQVF3dEN5QUFRUUEyQWh3Z0FDQVBOZ0lVSUFCQjVKS0FnQUEyQWhBZ0FFRUVOZ0lNUVFBaEVBdzdDeUFBUVRZMkFod2dBQ0FFTmdJVUlBQWdBallDREVFQUlSQU1PZ3NnQUVFdU5nSWNJQUFnRGpZQ0ZDQUFJQVEyQWd4QkFDRVFERGtMSUFCQjBBQTJBaHdnQUNBQk5nSVVJQUJCa1ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3NEN5QU5RUUZxSVFFTUxBc2dBRUVWTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OZ3NnQUVFYk5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTlFzZ0FFRVBOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Bc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Nd3NnQUVFYU5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTWdzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Rc2dBRUVLTmdJY0lBQWdBVFlDRkNBQVFlU1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NQXNnQUVFZU5nSWNJQUFnQVRZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTHdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTUxnc2dBRUVFTmdJY0lBQWdBVFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1MUXNnQUVFQU5nSUFJQXRCQVdvaEN3dEJ1QUVoRUF3U0N5QUFRUUEyQWdBZ0VFRUJhaUVCUWZVQUlSQU1FUXNnQVNFQkFrQWdBQzBBS1VFRlJ3MEFRZU1BSVJBTUVRdEI0Z0FoRUF3UUMwRUFJUkFnQUVFQU5nSWNJQUJCNUpHQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXdvQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRY0FBSVJBTURndEJBU0VCQ3lBQUlBRTZBQ3dnQUVFQU5nSUFJQmRCQVdvaEFRdEJLQ0VRREFzTElBRWhBUXRCT0NFUURBa0xBa0FnQVNJUElBSkdEUUFEUUFKQUlBOHRBQUJCZ0w2QWdBQnFMUUFBSWdGQkFVWU5BQ0FCUVFKSERRTWdEMEVCYWlFQkRBUUxJQTlCQVdvaUR5QUNSdzBBQzBFK0lSQU1JZ3RCUGlFUURDRUxJQUJCQURvQUxDQVBJUUVNQVF0QkN5RVFEQVlMUVRvaEVBd0ZDeUFCUVFGcUlRRkJMU0VRREFRTElBQWdBVG9BTENBQVFRQTJBZ0FnRmtFQmFpRUJRUXdoRUF3REN5QUFRUUEyQWdBZ0YwRUJhaUVCUVFvaEVBd0NDeUFBUVFBMkFnQUxJQUJCQURvQUxDQU5JUUZCQ1NFUURBQUxDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0N6WUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdYQzBFQUlSQWdBRUVBTmdJY0lBQWdDallDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3V0MwRUFJUkFnQUVFQU5nSWNJQUFnQ1RZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1ZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdVQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3VEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1NDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdSQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3UUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd1BDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdPQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjQ1NnSUFBTmdJUUlBQkJDellDREF3TkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWldKZ0lBQU5nSVFJQUJCQ3pZQ0RBd01DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNEQXdMQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmdVBnSUFBTmdJUUlBQkJDallDREF3S0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkdaZ0lBQU5nSVFJQUJCQWpZQ0RBd0pDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNTVWdJQUFOZ0lRSUFCQkFqWUNEQXdJQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmS1ZnSUFBTmdJUUlBQkJBallDREF3SEN5QUFRUUkyQWh3Z0FDQUJOZ0lVSUFCQm5KcUFnQUEyQWhBZ0FFRVdOZ0lNUVFBaEVBd0dDMEVCSVJBTUJRdEIxQUFoRUNBQklnUWdBa1lOQkNBRFFRaHFJQUFnQkNBQ1FkakNnSUFBUVFvUXhZQ0FnQUFnQXlnQ0RDRUVJQU1vQWdnT0F3RUVBZ0FMRU1xQWdJQUFBQXNnQUVFQU5nSWNJQUJCdFpxQWdBQTJBaEFnQUVFWE5nSU1JQUFnQkVFQmFqWUNGRUVBSVJBTUFnc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFjcWFnSUFBTmdJUUlBQkJDVFlDREVFQUlSQU1BUXNDUUNBQklnUWdBa2NOQUVFaUlSQU1BUXNnQUVHSmdJQ0FBRFlDQ0NBQUlBUTJBZ1JCSVNFUUN5QURRUkJxSklDQWdJQUFJQkFMcndFQkFuOGdBU2dDQUNFR0FrQUNRQ0FDSUFOR0RRQWdCQ0FHYWlFRUlBWWdBMm9nQW1zaEJ5QUNJQVpCZjNNZ0JXb2lCbW9oQlFOQUFrQWdBaTBBQUNBRUxRQUFSZzBBUVFJaEJBd0RDd0pBSUFZTkFFRUFJUVFnQlNFQ0RBTUxJQVpCZjJvaEJpQUVRUUZxSVFRZ0FrRUJhaUlDSUFOSERRQUxJQWNoQmlBRElRSUxJQUJCQVRZQ0FDQUJJQVkyQWdBZ0FDQUNOZ0lFRHdzZ0FVRUFOZ0lBSUFBZ0JEWUNBQ0FBSUFJMkFnUUxDZ0FnQUJESGdJQ0FBQXZ5TmdFTGZ5T0FnSUNBQUVFUWF5SUJKSUNBZ0lBQUFrQkJBQ2dDb05DQWdBQU5BRUVBRU11QWdJQUFRWURVaElBQWF5SUNRZGtBU1EwQVFRQWhBd0pBUVFBb0F1RFRnSUFBSWdRTkFFRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFSWFrRndjVUhZcXRXcUJYTWlCRFlDNE5PQWdBQkJBRUVBTmdMMDA0Q0FBRUVBUVFBMkFzVFRnSUFBQzBFQUlBSTJBc3pUZ0lBQVFRQkJnTlNFZ0FBMkFzalRnSUFBUVFCQmdOU0VnQUEyQXBqUWdJQUFRUUFnQkRZQ3JOQ0FnQUJCQUVGL05nS28wSUNBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMUVlEVWhJQUFRWGhCZ05TRWdBQnJRUTl4UVFCQmdOU0VnQUJCQ0dwQkQzRWJJZ05xSWdSQkJHb2dBa0ZJYWlJRklBTnJJZ05CQVhJMkFnQkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBUVlEVWhJQUFJQVZxUVRnMkFnUUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZMRFFBQ1FFRUFLQUtJMElDQUFDSUdRUkFnQUVFVGFrRndjU0FBUVF0Skd5SUNRUU4ySWdSMklnTkJBM0ZGRFFBQ1FBSkFJQU5CQVhFZ0JISkJBWE1pQlVFRGRDSUVRYkRRZ0lBQWFpSURJQVJCdU5DQWdBQnFLQUlBSWdRb0FnZ2lBa2NOQUVFQUlBWkJmaUFGZDNFMkFvalFnSUFBREFFTElBTWdBallDQ0NBQ0lBTTJBZ3dMSUFSQkNHb2hBeUFFSUFWQkEzUWlCVUVEY2pZQ0JDQUVJQVZxSWdRZ0JDZ0NCRUVCY2pZQ0JBd01DeUFDUVFBb0FwRFFnSUFBSWdkTkRRRUNRQ0FEUlEwQUFrQUNRQ0FESUFSMFFRSWdCSFFpQTBFQUlBTnJjbkVpQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxSWdSQkEzUWlBMEd3MElDQUFHb2lCU0FEUWJqUWdJQUFhaWdDQUNJREtBSUlJZ0JIRFFCQkFDQUdRWDRnQkhkeElnWTJBb2pRZ0lBQURBRUxJQVVnQURZQ0NDQUFJQVUyQWd3TElBTWdBa0VEY2pZQ0JDQURJQVJCQTNRaUJHb2dCQ0FDYXlJRk5nSUFJQU1nQW1vaUFDQUZRUUZ5TmdJRUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUVFDUUFKQUlBWkJBU0FIUVFOMmRDSUljUTBBUVFBZ0JpQUljallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUVOZ0lNSUFJZ0JEWUNDQ0FFSUFJMkFnd2dCQ0FJTmdJSUN5QURRUWhxSVFOQkFDQUFOZ0tjMElDQUFFRUFJQVUyQXBEUWdJQUFEQXdMUVFBb0FvelFnSUFBSWdsRkRRRWdDVUVBSUFscmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFRUUowUWJqU2dJQUFhaWdDQUNJQUtBSUVRWGh4SUFKcklRUWdBQ0VGQWtBRFFBSkFJQVVvQWhBaUF3MEFJQVZCRkdvb0FnQWlBMFVOQWdzZ0F5Z0NCRUY0Y1NBQ2F5SUZJQVFnQlNBRVNTSUZHeUVFSUFNZ0FDQUZHeUVBSUFNaEJRd0FDd3NnQUNnQ0dDRUtBa0FnQUNnQ0RDSUlJQUJHRFFBZ0FDZ0NDQ0lEUVFBb0FwalFnSUFBU1JvZ0NDQUROZ0lJSUFNZ0NEWUNEQXdMQ3dKQUlBQkJGR29pQlNnQ0FDSUREUUFnQUNnQ0VDSURSUTBESUFCQkVHb2hCUXNEUUNBRklRc2dBeUlJUVJScUlnVW9BZ0FpQXcwQUlBaEJFR29oQlNBSUtBSVFJZ01OQUFzZ0MwRUFOZ0lBREFvTFFYOGhBaUFBUWI5L1N3MEFJQUJCRTJvaUEwRndjU0VDUVFBb0FvelFnSUFBSWdkRkRRQkJBQ0VMQWtBZ0FrR0FBa2tOQUVFZklRc2dBa0gvLy84SFN3MEFJQU5CQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJDQUVRWURnSDJwQkVIWkJCSEVpQkhRaUJTQUZRWUNBRDJwQkVIWkJBbkVpQlhSQkQzWWdBeUFFY2lBRmNtc2lBMEVCZENBQ0lBTkJGV3AyUVFGeGNrRWNhaUVMQzBFQUlBSnJJUVFDUUFKQUFrQUNRQ0FMUVFKMFFialNnSUFBYWlnQ0FDSUZEUUJCQUNFRFFRQWhDQXdCQzBFQUlRTWdBa0VBUVJrZ0MwRUJkbXNnQzBFZlJodDBJUUJCQUNFSUEwQUNRQ0FGS0FJRVFYaHhJQUpySWdZZ0JFOE5BQ0FHSVFRZ0JTRUlJQVlOQUVFQUlRUWdCU0VJSUFVaEF3d0RDeUFESUFWQkZHb29BZ0FpQmlBR0lBVWdBRUVkZGtFRWNXcEJFR29vQWdBaUJVWWJJQU1nQmhzaEF5QUFRUUYwSVFBZ0JRMEFDd3NDUUNBRElBaHlEUUJCQUNFSVFRSWdDM1FpQTBFQUlBTnJjaUFIY1NJRFJRMERJQU5CQUNBRGEzRkJmMm9pQXlBRFFReDJRUkJ4SWdOMklnVkJCWFpCQ0hFaUFDQURjaUFGSUFCMklnTkJBblpCQkhFaUJYSWdBeUFGZGlJRFFRRjJRUUp4SWdWeUlBTWdCWFlpQTBFQmRrRUJjU0lGY2lBRElBVjJha0VDZEVHNDBvQ0FBR29vQWdBaEF3c2dBMFVOQVFzRFFDQURLQUlFUVhoeElBSnJJZ1lnQkVraEFBSkFJQU1vQWhBaUJRMEFJQU5CRkdvb0FnQWhCUXNnQmlBRUlBQWJJUVFnQXlBSUlBQWJJUWdnQlNFRElBVU5BQXNMSUFoRkRRQWdCRUVBS0FLUTBJQ0FBQ0FDYTA4TkFDQUlLQUlZSVFzQ1FDQUlLQUlNSWdBZ0NFWU5BQ0FJS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFBSUFNMkFnZ2dBeUFBTmdJTURBa0xBa0FnQ0VFVWFpSUZLQUlBSWdNTkFDQUlLQUlRSWdORkRRTWdDRUVRYWlFRkN3TkFJQVVoQmlBRElnQkJGR29pQlNnQ0FDSUREUUFnQUVFUWFpRUZJQUFvQWhBaUF3MEFDeUFHUVFBMkFnQU1DQXNDUUVFQUtBS1EwSUNBQUNJRElBSkpEUUJCQUNnQ25OQ0FnQUFoQkFKQUFrQWdBeUFDYXlJRlFSQkpEUUFnQkNBQ2FpSUFJQVZCQVhJMkFnUkJBQ0FGTmdLUTBJQ0FBRUVBSUFBMkFwelFnSUFBSUFRZ0Eyb2dCVFlDQUNBRUlBSkJBM0kyQWdRTUFRc2dCQ0FEUVFOeU5nSUVJQVFnQTJvaUF5QURLQUlFUVFGeU5nSUVRUUJCQURZQ25OQ0FnQUJCQUVFQU5nS1EwSUNBQUFzZ0JFRUlhaUVEREFvTEFrQkJBQ2dDbE5DQWdBQWlBQ0FDVFEwQVFRQW9BcURRZ0lBQUlnTWdBbW9pQkNBQUlBSnJJZ1ZCQVhJMkFnUkJBQ0FGTmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFNZ0FrRURjallDQkNBRFFRaHFJUU1NQ2dzQ1FBSkFRUUFvQXVEVGdJQUFSUTBBUVFBb0F1alRnSUFBSVFRTUFRdEJBRUovTndMczA0Q0FBRUVBUW9DQWhJQ0FnTUFBTndMazA0Q0FBRUVBSUFGQkRHcEJjSEZCMktyVnFnVnpOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUJCZ0lBRUlRUUxRUUFoQXdKQUlBUWdBa0hIQUdvaUIyb2lCa0VBSUFScklndHhJZ2dnQWtzTkFFRUFRVEEyQXZqVGdJQUFEQW9MQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BQUpBUVFBb0FyalRnSUFBSWdRZ0NHb2lCU0FFVFEwQUlBVWdBMDBOQVF0QkFDRURRUUJCTURZQytOT0FnQUFNQ2d0QkFDMEF4Tk9BZ0FCQkJIRU5CQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUFKQUlBTW9BZ0FpQlNBRVN3MEFJQVVnQXlnQ0JHb2dCRXNOQXdzZ0F5Z0NDQ0lERFFBTEMwRUFFTXVBZ0lBQUlnQkJmMFlOQlNBSUlRWUNRRUVBS0FMazA0Q0FBQ0lEUVg5cUlnUWdBSEZGRFFBZ0NDQUFheUFFSUFCcVFRQWdBMnR4YWlFR0N5QUdJQUpORFFVZ0JrSCsvLy8vQjBzTkJRSkFRUUFvQXNEVGdJQUFJZ05GRFFCQkFDZ0N1Tk9BZ0FBaUJDQUdhaUlGSUFSTkRRWWdCU0FEU3cwR0N5QUdFTXVBZ0lBQUlnTWdBRWNOQVF3SEN5QUdJQUJySUF0eElnWkIvdi8vL3dkTERRUWdCaERMZ0lDQUFDSUFJQU1vQWdBZ0F5Z0NCR3BHRFFNZ0FDRURDd0pBSUFOQmYwWU5BQ0FDUWNnQWFpQUdUUTBBQWtBZ0J5QUdhMEVBS0FMbzA0Q0FBQ0lFYWtFQUlBUnJjU0lFUWY3Ly8vOEhUUTBBSUFNaEFBd0hDd0pBSUFRUXk0Q0FnQUJCZjBZTkFDQUVJQVpxSVFZZ0F5RUFEQWNMUVFBZ0Jtc1F5NENBZ0FBYURBUUxJQU1oQUNBRFFYOUhEUVVNQXd0QkFDRUlEQWNMUVFBaEFBd0ZDeUFBUVg5SERRSUxRUUJCQUNnQ3hOT0FnQUJCQkhJMkFzVFRnSUFBQ3lBSVFmNy8vLzhIU3cwQklBZ1F5NENBZ0FBaEFFRUFFTXVBZ0lBQUlRTWdBRUYvUmcwQklBTkJmMFlOQVNBQUlBTlBEUUVnQXlBQWF5SUdJQUpCT0dwTkRRRUxRUUJCQUNnQ3VOT0FnQUFnQm1vaUF6WUN1Tk9BZ0FBQ1FDQURRUUFvQXJ6VGdJQUFUUTBBUVFBZ0F6WUN2Tk9BZ0FBTEFrQUNRQUpBQWtCQkFDZ0NvTkNBZ0FBaUJFVU5BRUhJMDRDQUFDRURBMEFnQUNBREtBSUFJZ1VnQXlnQ0JDSUlha1lOQWlBREtBSUlJZ01OQUF3REN3c0NRQUpBUVFBb0FwalFnSUFBSWdORkRRQWdBQ0FEVHcwQkMwRUFJQUEyQXBqUWdJQUFDMEVBSVFOQkFDQUdOZ0xNMDRDQUFFRUFJQUEyQXNqVGdJQUFRUUJCZnpZQ3FOQ0FnQUJCQUVFQUtBTGcwNENBQURZQ3JOQ0FnQUJCQUVFQU5nTFUwNENBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ1FnQmtGSWFpSUZJQU5ySWdOQkFYSTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBQWdCV3BCT0RZQ0JBd0NDeUFETFFBTVFRaHhEUUFnQkNBRlNRMEFJQVFnQUU4TkFDQUVRWGdnQkd0QkQzRkJBQ0FFUVFocVFROXhHeUlGYWlJQVFRQW9BcFRRZ0lBQUlBWnFJZ3NnQldzaUJVRUJjallDQkNBRElBZ2dCbW8yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUZOZ0tVMElDQUFFRUFJQUEyQXFEUWdJQUFJQVFnQzJwQk9EWUNCQXdCQ3dKQUlBQkJBQ2dDbU5DQWdBQWlDRThOQUVFQUlBQTJBcGpRZ0lBQUlBQWhDQXNnQUNBR2FpRUZRY2pUZ0lBQUlRTUNRQUpBQWtBQ1FBSkFBa0FDUUFOQUlBTW9BZ0FnQlVZTkFTQURLQUlJSWdNTkFBd0NDd3NnQXkwQURFRUljVVVOQVF0QnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUlGSUFSTERRTUxJQU1vQWdnaEF3d0FDd3NnQXlBQU5nSUFJQU1nQXlnQ0JDQUdhallDQkNBQVFYZ2dBR3RCRDNGQkFDQUFRUWhxUVE5eEcyb2lDeUFDUVFOeU5nSUVJQVZCZUNBRmEwRVBjVUVBSUFWQkNHcEJEM0ViYWlJR0lBc2dBbW9pQW1zaEF3SkFJQVlnQkVjTkFFRUFJQUkyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQTJvaUF6WUNsTkNBZ0FBZ0FpQURRUUZ5TmdJRURBTUxBa0FnQmtFQUtBS2MwSUNBQUVjTkFFRUFJQUkyQXB6UWdJQUFRUUJCQUNnQ2tOQ0FnQUFnQTJvaUF6WUNrTkNBZ0FBZ0FpQURRUUZ5TmdJRUlBSWdBMm9nQXpZQ0FBd0RDd0pBSUFZb0FnUWlCRUVEY1VFQlJ3MEFJQVJCZUhFaEJ3SkFBa0FnQkVIL0FVc05BQ0FHS0FJSUlnVWdCRUVEZGlJSVFRTjBRYkRRZ0lBQWFpSUFSaG9DUUNBR0tBSU1JZ1FnQlVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQ0hkeE5nS0kwSUNBQUF3Q0N5QUVJQUJHR2lBRUlBVTJBZ2dnQlNBRU5nSU1EQUVMSUFZb0FoZ2hDUUpBQWtBZ0JpZ0NEQ0lBSUFaR0RRQWdCaWdDQ0NJRUlBaEpHaUFBSUFRMkFnZ2dCQ0FBTmdJTURBRUxBa0FnQmtFVWFpSUVLQUlBSWdVTkFDQUdRUkJxSWdRb0FnQWlCUTBBUVFBaEFBd0JDd05BSUFRaENDQUZJZ0JCRkdvaUJDZ0NBQ0lGRFFBZ0FFRVFhaUVFSUFBb0FoQWlCUTBBQ3lBSVFRQTJBZ0FMSUFsRkRRQUNRQUpBSUFZZ0JpZ0NIQ0lGUVFKMFFialNnSUFBYWlJRUtBSUFSdzBBSUFRZ0FEWUNBQ0FBRFFGQkFFRUFLQUtNMElDQUFFRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUdSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUpOZ0lZQWtBZ0JpZ0NFQ0lFUlEwQUlBQWdCRFlDRUNBRUlBQTJBaGdMSUFZb0FoUWlCRVVOQUNBQVFSUnFJQVEyQWdBZ0JDQUFOZ0lZQ3lBSElBTnFJUU1nQmlBSGFpSUdLQUlFSVFRTElBWWdCRUYrY1RZQ0JDQUNJQU5xSUFNMkFnQWdBaUFEUVFGeU5nSUVBa0FnQTBIL0FVc05BQ0FEUVhoeFFiRFFnSUFBYWlFRUFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0EwRURkblFpQTNFTkFFRUFJQVVnQTNJMkFvalFnSUFBSUFRaEF3d0JDeUFFS0FJSUlRTUxJQU1nQWpZQ0RDQUVJQUkyQWdnZ0FpQUVOZ0lNSUFJZ0F6WUNDQXdEQzBFZklRUUNRQ0FEUWYvLy93ZExEUUFnQTBFSWRpSUVJQVJCZ1A0L2FrRVFka0VJY1NJRWRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUFJQUJCZ0lBUGFrRVFka0VDY1NJQWRFRVBkaUFFSUFWeUlBQnlheUlFUVFGMElBTWdCRUVWYW5aQkFYRnlRUnhxSVFRTElBSWdCRFlDSENBQ1FnQTNBaEFnQkVFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ0JCQVNBRWRDSUljUTBBSUFVZ0FqWUNBRUVBSUFBZ0NISTJBb3pRZ0lBQUlBSWdCVFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQU1MSUFOQkFFRVpJQVJCQVhacklBUkJIMFliZENFRUlBVW9BZ0FoQUFOQUlBQWlCU2dDQkVGNGNTQURSZzBDSUFSQkhYWWhBQ0FFUVFGMElRUWdCU0FBUVFSeGFrRVFhaUlJS0FJQUlnQU5BQXNnQ0NBQ05nSUFJQUlnQlRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFJTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdzZ0JrRklhaUlJSUFOcklnTkJBWEkyQWdRZ0FDQUlha0U0TmdJRUlBUWdCVUUzSUFWclFROXhRUUFnQlVGSmFrRVBjUnRxUVVGcUlnZ2dDQ0FFUVJCcVNSc2lDRUVqTmdJRVFRQkJBQ2dDOE5PQWdBQTJBcVRRZ0lBQVFRQWdBellDbE5DQWdBQkJBQ0FMTmdLZzBJQ0FBQ0FJUVJCcVFRQXBBdERUZ0lBQU53SUFJQWhCQUNrQ3lOT0FnQUEzQWdoQkFDQUlRUWhxTmdMUTA0Q0FBRUVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRUFOZ0xVMDRDQUFDQUlRU1JxSVFNRFFDQURRUWMyQWdBZ0EwRUVhaUlESUFWSkRRQUxJQWdnQkVZTkF5QUlJQWdvQWdSQmZuRTJBZ1FnQ0NBSUlBUnJJZ0EyQWdBZ0JDQUFRUUZ5TmdJRUFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQUVFRGRuUWlBSEVOQUVFQUlBVWdBSEkyQW9qUWdJQUFJQU1oQlF3QkN5QURLQUlJSVFVTElBVWdCRFlDRENBRElBUTJBZ2dnQkNBRE5nSU1JQVFnQlRZQ0NBd0VDMEVmSVFNQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJSUlBaEJnSUFQYWtFUWRrRUNjU0lJZEVFUGRpQURJQVZ5SUFoeWF5SURRUUYwSUFBZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFRZ0F6WUNIQ0FFUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnaEJBU0FEZENJR2NRMEFJQVVnQkRZQ0FFRUFJQWdnQm5JMkFvelFnSUFBSUFRZ0JUWUNHQ0FFSUFRMkFnZ2dCQ0FFTmdJTURBUUxJQUJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhDQU5BSUFnaUJTZ0NCRUY0Y1NBQVJnMERJQU5CSFhZaENDQURRUUYwSVFNZ0JTQUlRUVJ4YWtFUWFpSUdLQUlBSWdnTkFBc2dCaUFFTmdJQUlBUWdCVFlDR0NBRUlBUTJBZ3dnQkNBRU5nSUlEQU1MSUFVb0FnZ2lBeUFDTmdJTUlBVWdBallDQ0NBQ1FRQTJBaGdnQWlBRk5nSU1JQUlnQXpZQ0NBc2dDMEVJYWlFRERBVUxJQVVvQWdnaUF5QUVOZ0lNSUFVZ0JEWUNDQ0FFUVFBMkFoZ2dCQ0FGTmdJTUlBUWdBellDQ0F0QkFDZ0NsTkNBZ0FBaUF5QUNUUTBBUVFBb0FxRFFnSUFBSWdRZ0Ftb2lCU0FESUFKcklnTkJBWEkyQWdSQkFDQUROZ0tVMElDQUFFRUFJQVUyQXFEUWdJQUFJQVFnQWtFRGNqWUNCQ0FFUVFocUlRTU1Bd3RCQUNFRFFRQkJNRFlDK05PQWdBQU1BZ3NDUUNBTFJRMEFBa0FDUUNBSUlBZ29BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBQTJBZ0FnQUEwQlFRQWdCMEYrSUFWM2NTSUhOZ0tNMElDQUFBd0NDeUFMUVJCQkZDQUxLQUlRSUFoR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFzMkFoZ0NRQ0FJS0FJUUlnTkZEUUFnQUNBRE5nSVFJQU1nQURZQ0dBc2dDRUVVYWlnQ0FDSURSUTBBSUFCQkZHb2dBellDQUNBRElBQTJBaGdMQWtBQ1FDQUVRUTlMRFFBZ0NDQUVJQUpxSWdOQkEzSTJBZ1FnQ0NBRGFpSURJQU1vQWdSQkFYSTJBZ1FNQVFzZ0NDQUNhaUlBSUFSQkFYSTJBZ1FnQ0NBQ1FRTnlOZ0lFSUFBZ0JHb2dCRFlDQUFKQUlBUkIvd0ZMRFFBZ0JFRjRjVUd3MElDQUFHb2hBd0pBQWtCQkFDZ0NpTkNBZ0FBaUJVRUJJQVJCQTNaMElnUnhEUUJCQUNBRklBUnlOZ0tJMElDQUFDQURJUVFNQVFzZ0F5Z0NDQ0VFQ3lBRUlBQTJBZ3dnQXlBQU5nSUlJQUFnQXpZQ0RDQUFJQVEyQWdnTUFRdEJIeUVEQWtBZ0JFSC8vLzhIU3cwQUlBUkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQlNBRlFZRGdIMnBCRUhaQkJIRWlCWFFpQWlBQ1FZQ0FEMnBCRUhaQkFuRWlBblJCRDNZZ0F5QUZjaUFDY21zaUEwRUJkQ0FFSUFOQkZXcDJRUUZ4Y2tFY2FpRURDeUFBSUFNMkFod2dBRUlBTndJUUlBTkJBblJCdU5LQWdBQnFJUVVDUUNBSFFRRWdBM1FpQW5FTkFDQUZJQUEyQWdCQkFDQUhJQUp5TmdLTTBJQ0FBQ0FBSUFVMkFoZ2dBQ0FBTmdJSUlBQWdBRFlDREF3QkN5QUVRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBeUFGS0FJQUlRSUNRQU5BSUFJaUJTZ0NCRUY0Y1NBRVJnMEJJQU5CSFhZaEFpQURRUUYwSVFNZ0JTQUNRUVJ4YWtFUWFpSUdLQUlBSWdJTkFBc2dCaUFBTmdJQUlBQWdCVFlDR0NBQUlBQTJBZ3dnQUNBQU5nSUlEQUVMSUFVb0FnZ2lBeUFBTmdJTUlBVWdBRFlDQ0NBQVFRQTJBaGdnQUNBRk5nSU1JQUFnQXpZQ0NBc2dDRUVJYWlFRERBRUxBa0FnQ2tVTkFBSkFBa0FnQUNBQUtBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdNb0FnQkhEUUFnQXlBSU5nSUFJQWdOQVVFQUlBbEJmaUFGZDNFMkFvelFnSUFBREFJTElBcEJFRUVVSUFvb0FoQWdBRVliYWlBSU5nSUFJQWhGRFFFTElBZ2dDallDR0FKQUlBQW9BaEFpQTBVTkFDQUlJQU0yQWhBZ0F5QUlOZ0lZQ3lBQVFSUnFLQUlBSWdORkRRQWdDRUVVYWlBRE5nSUFJQU1nQ0RZQ0dBc0NRQUpBSUFSQkQwc05BQ0FBSUFRZ0Ftb2lBMEVEY2pZQ0JDQUFJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFBSUFKcUlnVWdCRUVCY2pZQ0JDQUFJQUpCQTNJMkFnUWdCU0FFYWlBRU5nSUFBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFNQ1FBSkFRUUVnQjBFRGRuUWlDQ0FHY1EwQVFRQWdDQ0FHY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FETmdJTUlBSWdBellDQ0NBRElBSTJBZ3dnQXlBSU5nSUlDMEVBSUFVMkFwelFnSUFBUVFBZ0JEWUNrTkNBZ0FBTElBQkJDR29oQXdzZ0FVRVFhaVNBZ0lDQUFDQURDd29BSUFBUXlZQ0FnQUFMNGcwQkIzOENRQ0FBUlEwQUlBQkJlR29pQVNBQVFYeHFLQUlBSWdKQmVIRWlBR29oQXdKQUlBSkJBWEVOQUNBQ1FRTnhSUTBCSUFFZ0FTZ0NBQ0lDYXlJQlFRQW9BcGpRZ0lBQUlnUkpEUUVnQWlBQWFpRUFBa0FnQVVFQUtBS2MwSUNBQUVZTkFBSkFJQUpCL3dGTERRQWdBU2dDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQVNnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQXdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0NDeUFCS0FJWUlRY0NRQUpBSUFFb0Fnd2lCaUFCUmcwQUlBRW9BZ2dpQWlBRVNSb2dCaUFDTmdJSUlBSWdCallDREF3QkN3SkFJQUZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUlDS0FJQUlnUU5BRUVBSVFZTUFRc0RRQ0FDSVFVZ0JDSUdRUlJxSWdJb0FnQWlCQTBBSUFaQkVHb2hBaUFHS0FJUUlnUU5BQXNnQlVFQU5nSUFDeUFIUlEwQkFrQUNRQ0FCSUFFb0Fod2lCRUVDZEVHNDBvQ0FBR29pQWlnQ0FFY05BQ0FDSUFZMkFnQWdCZzBCUVFCQkFDZ0NqTkNBZ0FCQmZpQUVkM0UyQW96UWdJQUFEQU1MSUFkQkVFRVVJQWNvQWhBZ0FVWWJhaUFHTmdJQUlBWkZEUUlMSUFZZ0J6WUNHQUpBSUFFb0FoQWlBa1VOQUNBR0lBSTJBaEFnQWlBR05nSVlDeUFCS0FJVUlnSkZEUUVnQmtFVWFpQUNOZ0lBSUFJZ0JqWUNHQXdCQ3lBREtBSUVJZ0pCQTNGQkEwY05BQ0FESUFKQmZuRTJBZ1JCQUNBQU5nS1EwSUNBQUNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUR3c2dBU0FEVHcwQUlBTW9BZ1FpQWtFQmNVVU5BQUpBQWtBZ0FrRUNjUTBBQWtBZ0EwRUFLQUtnMElDQUFFY05BRUVBSUFFMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0FHb2lBRFlDbE5DQWdBQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFOQkFFRUFOZ0tRMElDQUFFRUFRUUEyQXB6UWdJQUFEd3NDUUNBRFFRQW9BcHpRZ0lBQVJ3MEFRUUFnQVRZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBQWFpSUFOZ0tRMElDQUFDQUJJQUJCQVhJMkFnUWdBU0FBYWlBQU5nSUFEd3NnQWtGNGNTQUFhaUVBQWtBQ1FDQUNRZjhCU3cwQUlBTW9BZ2dpQkNBQ1FRTjJJZ1ZCQTNSQnNOQ0FnQUJxSWdaR0dnSkFJQU1vQWd3aUFpQUVSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUZkM0UyQW9qUWdJQUFEQUlMSUFJZ0JrWWFJQUlnQkRZQ0NDQUVJQUkyQWd3TUFRc2dBeWdDR0NFSEFrQUNRQ0FES0FJTUlnWWdBMFlOQUNBREtBSUlJZ0pCQUNnQ21OQ0FnQUJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0EwRVVhaUlDS0FJQUlnUU5BQ0FEUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUFDUUFKQUlBTWdBeWdDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUFnc2dCMEVRUVJRZ0J5Z0NFQ0FEUmh0cUlBWTJBZ0FnQmtVTkFRc2dCaUFITmdJWUFrQWdBeWdDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBTW9BaFFpQWtVTkFDQUdRUlJxSUFJMkFnQWdBaUFHTmdJWUN5QUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFGQkFDQUFOZ0tRMElDQUFBOExJQU1nQWtGK2NUWUNCQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFQ3dKQUlBQkIvd0ZMRFFBZ0FFRjRjVUd3MElDQUFHb2hBZ0pBQWtCQkFDZ0NpTkNBZ0FBaUJFRUJJQUJCQTNaMElnQnhEUUJCQUNBRUlBQnlOZ0tJMElDQUFDQUNJUUFNQVFzZ0FpZ0NDQ0VBQ3lBQUlBRTJBZ3dnQWlBQk5nSUlJQUVnQWpZQ0RDQUJJQUEyQWdnUEMwRWZJUUlDUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlDSUFKQmdQNC9ha0VRZGtFSWNTSUNkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lHSUFaQmdJQVBha0VRZGtFQ2NTSUdkRUVQZGlBQ0lBUnlJQVp5YXlJQ1FRRjBJQUFnQWtFVmFuWkJBWEZ5UVJ4cUlRSUxJQUVnQWpZQ0hDQUJRZ0EzQWhBZ0FrRUNkRUc0MG9DQUFHb2hCQUpBQWtCQkFDZ0NqTkNBZ0FBaUJrRUJJQUowSWdOeERRQWdCQ0FCTmdJQVFRQWdCaUFEY2pZQ2pOQ0FnQUFnQVNBRU5nSVlJQUVnQVRZQ0NDQUJJQUUyQWd3TUFRc2dBRUVBUVJrZ0FrRUJkbXNnQWtFZlJodDBJUUlnQkNnQ0FDRUdBa0FEUUNBR0lnUW9BZ1JCZUhFZ0FFWU5BU0FDUVIxMklRWWdBa0VCZENFQ0lBUWdCa0VFY1dwQkVHb2lBeWdDQUNJR0RRQUxJQU1nQVRZQ0FDQUJJQVEyQWhnZ0FTQUJOZ0lNSUFFZ0FUWUNDQXdCQ3lBRUtBSUlJZ0FnQVRZQ0RDQUVJQUUyQWdnZ0FVRUFOZ0lZSUFFZ0JEWUNEQ0FCSUFBMkFnZ0xRUUJCQUNnQ3FOQ0FnQUJCZjJvaUFVRi9JQUViTmdLbzBJQ0FBQXNMQkFBQUFBdE9BQUpBSUFBTkFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRWDlNRFFBQ1FDQUFRUkIyUUFBaUFFRi9SdzBBUVFCQk1EWUMrTk9BZ0FCQmZ3OExJQUJCRUhRUEN4REtnSUNBQUFBTDhnSUNBMzhCZmdKQUlBSkZEUUFnQUNBQk9nQUFJQUlnQUdvaUEwRi9haUFCT2dBQUlBSkJBMGtOQUNBQUlBRTZBQUlnQUNBQk9nQUJJQU5CZldvZ0FUb0FBQ0FEUVg1cUlBRTZBQUFnQWtFSFNRMEFJQUFnQVRvQUF5QURRWHhxSUFFNkFBQWdBa0VKU1EwQUlBQkJBQ0FBYTBFRGNTSUVhaUlESUFGQi93RnhRWUdDaEFoc0lnRTJBZ0FnQXlBQ0lBUnJRWHh4SWdScUlnSkJmR29nQVRZQ0FDQUVRUWxKRFFBZ0F5QUJOZ0lJSUFNZ0FUWUNCQ0FDUVhocUlBRTJBZ0FnQWtGMGFpQUJOZ0lBSUFSQkdVa05BQ0FESUFFMkFoZ2dBeUFCTmdJVUlBTWdBVFlDRUNBRElBRTJBZ3dnQWtGd2FpQUJOZ0lBSUFKQmJHb2dBVFlDQUNBQ1FXaHFJQUUyQWdBZ0FrRmthaUFCTmdJQUlBUWdBMEVFY1VFWWNpSUZheUlDUVNCSkRRQWdBYTFDZ1lDQWdCQitJUVlnQXlBRmFpRUJBMEFnQVNBR053TVlJQUVnQmpjREVDQUJJQVkzQXdnZ0FTQUdOd01BSUFGQklHb2hBU0FDUVdCcUlnSkJIMHNOQUFzTElBQUxDNDVJQVFCQmdBZ0xoa2dCQUFBQUFnQUFBQU1BQUFBQUFBQUFBQUFBQUFRQUFBQUZBQUFBQUFBQUFBQUFBQUFHQUFBQUJ3QUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z2NYVmxjbmtBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlpYjJSNUFFTnZiblJsYm5RdFRHVnVaM1JvSUc5MlpYSm1iRzkzQUVOb2RXNXJJSE5wZW1VZ2IzWmxjbVpzYjNjQVVtVnpjRzl1YzJVZ2IzWmxjbVpzYjNjQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlFaFVWRkF2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlGSlVVMUF2ZUM1NElISmxjWFZsYzNRQVJYaHdaV04wWldRZ1UwOVZVa05GSUcxbGRHaHZaQ0JtYjNJZ1NVTkZMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z1puSmhaMjFsYm5RZ2MzUmhjblFBUlhod1pXTjBaV1FnWkc5MEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmMzUmhkSFZ6QUVsdWRtRnNhV1FnY21WemNHOXVjMlVnYzNSaGRIVnpBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1BVlhObGNpQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjbVZ6WlhSZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5b1pXRmtaWEpnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJKbFoybHVZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjM1JoZEhWelgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYM1Z5YkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGRHaHZaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmxjblpsY2dCSmJuWmhiR2xrSUdobFlXUmxjaUIyWVd4MVpTQmphR0Z5QUVsdWRtRnNhV1FnYUdWaFpHVnlJR1pwWld4a0lHTm9ZWElBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV2x1YjNJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUcxaGFtOXlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0JEVWt4R0lHRm1kR1Z5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0JJVkZSUUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCb1pXRmtaWElnZEc5clpXNEFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTFjbXdBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUdsdUlIVnliQUJWYm1WNGNHVmpkR1ZrSUhOMFlYSjBJR05vWVhJZ2FXNGdkWEpzQUVSdmRXSnNaU0JBSUdsdUlIVnliQUJGYlhCMGVTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQkRiMjUwWlc1MExVeGxibWQwYUFCRWRYQnNhV05oZEdVZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCd1lYUm9BRU52Ym5SbGJuUXRUR1Z1WjNSb0lHTmhiaWQwSUdKbElIQnlaWE5sYm5RZ2QybDBhQ0JVY21GdWMyWmxjaTFGYm1OdlpHbHVad0JKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJ6YVhwbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2RtRnNkV1VBVFdsemMybHVaeUJsZUhCbFkzUmxaQ0JNUmlCaFpuUmxjaUJvWldGa1pYSWdkbUZzZFdVQVNXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0lHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhGMWIzUmxJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdWa0lIWmhiSFZsQUZCaGRYTmxaQ0JpZVNCdmJsOW9aV0ZrWlhKelgyTnZiWEJzWlhSbEFFbHVkbUZzYVdRZ1JVOUdJSE4wWVhSbEFHOXVYM0psYzJWMElIQmhkWE5sQUc5dVgyTm9kVzVyWDJobFlXUmxjaUJ3WVhWelpRQnZibDl0WlhOellXZGxYMkpsWjJsdUlIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaU0J3WVhWelpRQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTFjbXhmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpTQndZWFZ6WlFCVmJtVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSE4wWVhKMElHeHBibVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklHNWhiV1VBVUdGMWMyVWdiMjRnUTA5T1RrVkRWQzlWY0dkeVlXUmxBRkJoZFhObElHOXVJRkJTU1M5VmNHZHlZV1JsQUVWNGNHVmpkR1ZrSUVoVVZGQXZNaUJEYjI1dVpXTjBhVzl1SUZCeVpXWmhZMlVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl0WlhSb2IyUUFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYldWMGFHOWtBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgyWnBaV3hrQUZCaGRYTmxaQUJKYm5aaGJHbGtJSGR2Y21RZ1pXNWpiM1Z1ZEdWeVpXUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1pXNWpiM1Z1ZEdWeVpXUUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelkyaGxiV0VBVW1WeGRXVnpkQ0JvWVhNZ2FXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0FGTlhTVlJEU0Y5UVVrOVlXUUJWVTBWZlVGSlBXRmtBVFV0QlExUkpWa2xVV1FCVlRsQlNUME5GVTFOQlFreEZYMFZPVkVsVVdRQkRUMUJaQUUxUFZrVkVYMUJGVWsxQlRrVk9WRXhaQUZSUFQxOUZRVkpNV1FCT1QxUkpSbGtBUmtGSlRFVkVYMFJGVUVWT1JFVk9RMWtBUWtGRVgwZEJWRVZYUVZrQVVFeEJXUUJRVlZRQVEwaEZRMHRQVlZRQVIwRlVSVmRCV1Y5VVNVMUZUMVZVQUZKRlVWVkZVMVJmVkVsTlJVOVZWQUJPUlZSWFQxSkxYME5QVGs1RlExUmZWRWxOUlU5VlZBQkRUMDVPUlVOVVNVOU9YMVJKVFVWUFZWUUFURTlIU1U1ZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDFKRlFVUmZWRWxOUlU5VlZBQlFUMU5VQUUxSlUwUkpVa1ZEVkVWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlTUlZGVlJWTlVBRU5NU1VWT1ZGOURURTlUUlVSZlRFOUJSRjlDUVV4QlRrTkZSRjlTUlZGVlJWTlVBRUpCUkY5U1JWRlZSVk5VQUVoVVZGQmZVa1ZSVlVWVFZGOVRSVTVVWDFSUFgwaFVWRkJUWDFCUFVsUUFVa1ZRVDFKVUFFbE5YMEZmVkVWQlVFOVVBRkpGVTBWVVgwTlBUbFJGVGxRQVRrOWZRMDlPVkVWT1ZBQlFRVkpVU1VGTVgwTlBUbFJGVGxRQVNGQkZYMGxPVmtGTVNVUmZRMDlPVTFSQlRsUUFTRkJGWDBOQ1gxSkZVMFZVQUVkRlZBQklVRVZmVTFSU1NVTlVBRU5QVGtaTVNVTlVBRlJGVFZCUFVrRlNXVjlTUlVSSlVrVkRWQUJRUlZKTlFVNUZUbFJmVWtWRVNWSkZRMVFBUTA5T1RrVkRWQUJOVlV4VVNWOVRWRUZVVlZNQVNGQkZYMGxPVmtGTVNVUmZVMVJCVkZWVEFGUlBUMTlOUVU1WlgxSkZVVlZGVTFSVEFFVkJVa3haWDBoSlRsUlRBRlZPUVZaQlNVeEJRa3hGWDBaUFVsOU1SVWRCVEY5U1JVRlRUMDVUQUU5UVZFbFBUbE1BVTFkSlZFTklTVTVIWDFCU1QxUlBRMDlNVXdCV1FWSkpRVTVVWDBGTVUwOWZUa1ZIVDFSSlFWUkZVd0JOVlV4VVNWQk1SVjlEU0U5SlEwVlRBRWxPVkVWU1RrRk1YMU5GVWxaRlVsOUZVbEpQVWdCWFJVSmZVMFZTVmtWU1gxVk9TMDVQVjA1ZlJWSlNUMUlBVWtGSlRFZFZUbDlGVWxKUFVnQkpSRVZPVkVsVVdWOVFVazlXU1VSRlVsOUJWVlJJUlU1VVNVTkJWRWxQVGw5RlVsSlBVZ0JUVTB4ZlEwVlNWRWxHU1VOQlZFVmZSVkpTVDFJQVNVNVdRVXhKUkY5WVgwWlBVbGRCVWtSRlJGOUdUMUlBVTBWVVgxQkJVa0ZOUlZSRlVnQkhSVlJmVUVGU1FVMUZWRVZTQUVoUVJWOVZVMFZTQUZORlJWOVBWRWhGVWdCSVVFVmZRMEpmUTBoVlRrdGZTRVZCUkVWU0FFMUxRMEZNUlU1RVFWSUFVMFZVVlZBQVYwVkNYMU5GVWxaRlVsOUpVMTlFVDFkT0FGUkZRVkpFVDFkT0FFaFFSVjlEVEU5VFJVUmZRMDlPVGtWRFZFbFBUZ0JJUlZWU1NWTlVTVU5mUlZoUVNWSkJWRWxQVGdCRVNWTkRUMDVPUlVOVVJVUmZUMUJGVWtGVVNVOU9BRTVQVGw5QlZWUklUMUpKVkVGVVNWWkZYMGxPUms5U1RVRlVTVTlPQUVoUVJWOUpUbFpCVEVsRVgxWkZVbE5KVDA0QVNGQkZYME5DWDAxRlUxTkJSMFZmUWtWSFNVNEFVMGxVUlY5SlUxOUdVazlhUlU0QVNGQkZYMGxPVmtGTVNVUmZTRVZCUkVWU1gxUlBTMFZPQUVsT1ZrRk1TVVJmVkU5TFJVNEFSazlTUWtsRVJFVk9BRVZPU0VGT1EwVmZXVTlWVWw5RFFVeE5BRWhRUlY5SlRsWkJURWxFWDFWU1RBQkNURTlEUzBWRVgwSlpYMUJCVWtWT1ZFRk1YME5QVGxSU1Qwd0FUVXREVDB3QVFVTk1BRWhRUlY5SlRsUkZVazVCVEFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZYMVZPVDBaR1NVTkpRVXdBU0ZCRlgwOUxBRlZPVEVsT1N3QlZUa3hQUTBzQVVGSkpBRkpGVkZKWlgxZEpWRWdBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9WRVZPVkY5TVJVNUhWRWdBU0ZCRlgxVk9SVmhRUlVOVVJVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVJreFZVMGdBVUZKUFVGQkJWRU5JQUUwdFUwVkJVa05JQUZWU1NWOVVUMDlmVEU5T1J3QlFVazlEUlZOVFNVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlVFVlNVMGxUVkVWT1ZGOVhRVkpPU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVjBGU1RrbE9Sd0JJVUVWZlNVNVdRVXhKUkY5VVVrRk9VMFpGVWw5RlRrTlBSRWxPUndCRmVIQmxZM1JsWkNCRFVreEdBRWhRUlY5SlRsWkJURWxFWDBOSVZVNUxYMU5KV2tVQVRVOVdSUUJEVDA1VVNVNVZSUUJJVUVWZlEwSmZVMVJCVkZWVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlXUlZKVFNVOU9YME5QVFZCTVJWUkZBRWhRUlY5RFFsOVZVa3hmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gwNUJUVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZWRWhQUkY5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMFpKUlV4RVgwTlBUVkJNUlZSRkFFUkZURVZVUlFCSVVFVmZTVTVXUVV4SlJGOUZUMFpmVTFSQlZFVUFTVTVXUVV4SlJGOVRVMHhmUTBWU1ZFbEdTVU5CVkVVQVVFRlZVMFVBVGs5ZlVrVlRVRTlPVTBVQVZVNVRWVkJRVDFKVVJVUmZUVVZFU1VGZlZGbFFSUUJIVDA1RkFFNVBWRjlCUTBORlVGUkJRa3hGQUZORlVsWkpRMFZmVlU1QlZrRkpURUZDVEVVQVVrRk9SMFZmVGs5VVgxTkJWRWxUUmtsQlFreEZBRTlTU1VkSlRsOUpVMTlWVGxKRlFVTklRVUpNUlFCU1JWTlFUMDVUUlY5SlUxOVRWRUZNUlFCUVZWSkhSUUJOUlZKSFJRQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMVJQVDE5TVFWSkhSUUJRUVZsTVQwRkVYMVJQVDE5TVFWSkhSUUJKVGxOVlJrWkpRMGxGVGxSZlUxUlBVa0ZIUlFCSVVFVmZVRUZWVTBWRVgxVlFSMUpCUkVVQVNGQkZYMUJCVlZORlJGOUlNbDlWVUVkU1FVUkZBRk5QVlZKRFJRQkJUazVQVlU1RFJRQlVVa0ZEUlFCSVVFVmZWVTVGV0ZCRlExUkZSRjlUVUVGRFJRQkVSVk5EVWtsQ1JRQlZUbE5WUWxORFVrbENSUUJTUlVOUFVrUUFTRkJGWDBsT1ZrRk1TVVJmVFVWVVNFOUVBRTVQVkY5R1QxVk9SQUJRVWs5UVJrbE9SQUJWVGtKSlRrUUFVa1ZDU1U1RUFGVk9RVlZVU0U5U1NWcEZSQUJOUlZSSVQwUmZUazlVWDBGTVRFOVhSVVFBU0ZSVVVGOVdSVkpUU1U5T1gwNVBWRjlUVlZCUVQxSlVSVVFBUVV4U1JVRkVXVjlTUlZCUFVsUkZSQUJCUTBORlVGUkZSQUJPVDFSZlNVMVFURVZOUlU1VVJVUUFURTlQVUY5RVJWUkZRMVJGUkFCSVVFVmZRMUpmUlZoUVJVTlVSVVFBU0ZCRlgweEdYMFZZVUVWRFZFVkVBRU5TUlVGVVJVUUFTVTFmVlZORlJBQklVRVZmVUVGVlUwVkVBRlJKVFVWUFZWUmZUME5EVlZKRlJBQlFRVmxOUlU1VVgxSkZVVlZKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlTUlZGVlNWSkZSQUJRVWs5WVdWOUJWVlJJUlU1VVNVTkJWRWxQVGw5U1JWRlZTVkpGUkFCT1JWUlhUMUpMWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRXhGVGtkVVNGOVNSVkZWU1ZKRlJBQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlVrVlJWVWxTUlVRQVZWQkhVa0ZFUlY5U1JWRlZTVkpGUkFCUVFVZEZYMFZZVUVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDBaQlNVeEZSQUJGV0ZCRlExUkJWRWxQVGw5R1FVbE1SVVFBVWtWV1FVeEpSRUZVU1U5T1gwWkJTVXhGUkFCVFUweGZTRUZPUkZOSVFVdEZYMFpCU1V4RlJBQk1UME5MUlVRQVZGSkJUbE5HVDFKTlFWUkpUMDVmUVZCUVRFbEZSQUJPVDFSZlRVOUVTVVpKUlVRQVRrOVVYMFZZVkVWT1JFVkVBRUpCVGtSWFNVUlVTRjlNU1UxSlZGOUZXRU5GUlVSRlJBQlRTVlJGWDBsVFgwOVdSVkpNVDBGRVJVUUFTRVZCUkFCRmVIQmxZM1JsWkNCSVZGUlFMd0FBWGhNQUFDWVRBQUF3RUFBQThCY0FBSjBUQUFBVkVnQUFPUmNBQVBBU0FBQUtFQUFBZFJJQUFLMFNBQUNDRXdBQVR4UUFBSDhRQUFDZ0ZRQUFJeFFBQUlrU0FBQ0xGQUFBVFJVQUFOUVJBQURQRkFBQUVCZ0FBTWtXQUFEY0ZnQUF3UkVBQU9BWEFBQzdGQUFBZEJRQUFId1ZBQURsRkFBQUNCY0FBQjhRQUFCbEZRQUFveFFBQUNnVkFBQUNGUUFBbVJVQUFDd1FBQUNMR1FBQVR3OEFBTlFPQUFCcUVBQUF6aEFBQUFJWEFBQ0pEZ0FBYmhNQUFCd1RBQUJtRkFBQVZoY0FBTUVUQUFETkV3QUFiQk1BQUdnWEFBQm1Gd0FBWHhjQUFDSVRBQURPRHdBQWFRNEFBTmdPQUFCakZnQUF5eE1BQUtvT0FBQW9Gd0FBSmhjQUFNVVRBQUJkRmdBQTZCRUFBR2NUQUFCbEV3QUE4aFlBQUhNVEFBQWRGd0FBK1JZQUFQTVJBQURQRGdBQXpoVUFBQXdTQUFDekVRQUFwUkVBQUdFUUFBQXlGd0FBdXhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUJBQUFBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiRzl6WldWbGNDMWhiR2wyWlFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUFBQUVCQUFFQkFBRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmxZM1JwYjI1bGJuUXRiR1Z1WjNSb2IyNXliM2g1TFdOdmJtNWxZM1JwYjI0QUFBQUFBQUFBQUFBQUFBQUFBQUJ5WVc1elptVnlMV1Z1WTI5a2FXNW5jR2R5WVdSbERRb05DZzBLVTAwTkNnMEtWRlJRTDBORkwxUlRVQzhBQUFBQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUlBQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFRRUZBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUFBUUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNRUFBQUVCQVFFQkFRRUJBUUVCQVVFQkFRRUJBUUVCQVFFQkFRQUJBQUdCd1FFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFJQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJPVDFWT1EwVkZRMHRQVlZST1JVTlVSVlJGUTFKSlFrVk1WVk5JUlZSRlFVUlRSVUZTUTBoU1IwVkRWRWxXU1ZSWlRFVk9SRUZTVmtWUFZFbEdXVkJVU1U5T1UwTklVMFZCV1ZOVVFWUkRTRWRGVDFKRVNWSkZRMVJQVWxSU1EwaFFRVkpCVFVWVVJWSlZVa05GUWxORFVrbENSVUZTUkU5WFRrRkRSVWxPUkU1TFEwdFZRbE5EVWtsQ1JVaFVWRkF2UVVSVVVDOD0nXG4iLCAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3JMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzBrQkFYc2dBRUVRYXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNJQi9Rc0RBQ0FBSUFIOUN3TUFJQUJCTUdvZ0FmMExBd0FnQUVFZ2FpQUIvUXNEQUNBQVFkMEJOZ0ljUVFBTGV3RUJmd0pBSUFBb0Fnd2lBdzBBQWtBZ0FDZ0NCRVVOQUNBQUlBRTJBZ1FMQWtBZ0FDQUJJQUlReElDQWdBQWlBdzBBSUFBb0Fnd1BDeUFBSUFNMkFoeEJBQ0VESUFBb0FnUWlBVVVOQUNBQUlBRWdBaUFBS0FJSUVZR0FnSUFBQUNJQlJRMEFJQUFnQWpZQ0ZDQUFJQUUyQWd3Z0FTRURDeUFEQytUekFRTU9md04rQkg4amdJQ0FnQUJCRUdzaUF5U0FnSUNBQUNBQklRUWdBU0VGSUFFaEJpQUJJUWNnQVNFSUlBRWhDU0FCSVFvZ0FTRUxJQUVoRENBQklRMGdBU0VPSUFFaER3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFLQUljSWhCQmYyb08zUUhhQVFIWkFRSURCQVVHQndnSkNnc01EUTdZQVE4UTF3RVJFdFlCRXhRVkZoY1lHUm9iNEFIZkFSd2RIdFVCSHlBaElpTWtKZFFCSmljb0tTb3JMTk1CMGdFdEx0RUIwQUV2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVYmJBVWRJU1VyUEFjNEJTODBCVE13QlRVNVBVRkZTVTFSVlZsZFlXVnBiWEYxZVgyQmhZbU5rWldabmFHbHFhMnh0Ym05d2NYSnpkSFYyZDNoNWVudDhmWDUvZ0FHQkFZSUJnd0dFQVlVQmhnR0hBWWdCaVFHS0FZc0JqQUdOQVk0Qmp3R1FBWkVCa2dHVEFaUUJsUUdXQVpjQm1BR1pBWm9CbXdHY0FaMEJuZ0dmQWFBQm9RR2lBYU1CcEFHbEFhWUJwd0dvQWFrQnFnR3JBYXdCclFHdUFhOEJzQUd4QWJJQnN3RzBBYlVCdGdHM0Fjc0J5Z0c0QWNrQnVRSElBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJBTndCQzBFQUlSQU14Z0VMUVE0aEVBekZBUXRCRFNFUURNUUJDMEVQSVJBTXd3RUxRUkFoRUF6Q0FRdEJFeUVRRE1FQkMwRVVJUkFNd0FFTFFSVWhFQXkvQVF0QkZpRVFETDRCQzBFWElSQU12UUVMUVJnaEVBeThBUXRCR1NFUURMc0JDMEVhSVJBTXVnRUxRUnNoRUF5NUFRdEJIQ0VRRExnQkMwRUlJUkFNdHdFTFFSMGhFQXkyQVF0QklDRVFETFVCQzBFZklSQU10QUVMUVFjaEVBeXpBUXRCSVNFUURMSUJDMEVpSVJBTXNRRUxRUjRoRUF5d0FRdEJJeUVRREs4QkMwRVNJUkFNcmdFTFFSRWhFQXl0QVF0QkpDRVFES3dCQzBFbElSQU1xd0VMUVNZaEVBeXFBUXRCSnlFUURLa0JDMEhEQVNFUURLZ0JDMEVwSVJBTXB3RUxRU3NoRUF5bUFRdEJMQ0VRREtVQkMwRXRJUkFNcEFFTFFTNGhFQXlqQVF0Qkx5RVFES0lCQzBIRUFTRVFES0VCQzBFd0lSQU1vQUVMUVRRaEVBeWZBUXRCRENFUURKNEJDMEV4SVJBTW5RRUxRVEloRUF5Y0FRdEJNeUVRREpzQkMwRTVJUkFNbWdFTFFUVWhFQXlaQVF0QnhRRWhFQXlZQVF0QkN5RVFESmNCQzBFNklSQU1sZ0VMUVRZaEVBeVZBUXRCQ2lFUURKUUJDMEUzSVJBTWt3RUxRVGdoRUF5U0FRdEJQQ0VRREpFQkMwRTdJUkFNa0FFTFFUMGhFQXlQQVF0QkNTRVFESTRCQzBFb0lSQU1qUUVMUVQ0aEVBeU1BUXRCUHlFUURJc0JDMEhBQUNFUURJb0JDMEhCQUNFUURJa0JDMEhDQUNFUURJZ0JDMEhEQUNFUURJY0JDMEhFQUNFUURJWUJDMEhGQUNFUURJVUJDMEhHQUNFUURJUUJDMEVxSVJBTWd3RUxRY2NBSVJBTWdnRUxRY2dBSVJBTWdRRUxRY2tBSVJBTWdBRUxRY29BSVJBTWZ3dEJ5d0FoRUF4K0MwSE5BQ0VRREgwTFFjd0FJUkFNZkF0QnpnQWhFQXg3QzBIUEFDRVFESG9MUWRBQUlSQU1lUXRCMFFBaEVBeDRDMEhTQUNFUURIY0xRZE1BSVJBTWRndEIxQUFoRUF4MUMwSFdBQ0VRREhRTFFkVUFJUkFNY3d0QkJpRVFESElMUWRjQUlSQU1jUXRCQlNFUURIQUxRZGdBSVJBTWJ3dEJCQ0VRREc0TFFka0FJUkFNYlF0QjJnQWhFQXhzQzBIYkFDRVFER3NMUWR3QUlSQU1hZ3RCQXlFUURHa0xRZDBBSVJBTWFBdEIzZ0FoRUF4bkMwSGZBQ0VRREdZTFFlRUFJUkFNWlF0QjRBQWhFQXhrQzBIaUFDRVFER01MUWVNQUlSQU1ZZ3RCQWlFUURHRUxRZVFBSVJBTVlBdEI1UUFoRUF4ZkMwSG1BQ0VRREY0TFFlY0FJUkFNWFF0QjZBQWhFQXhjQzBIcEFDRVFERnNMUWVvQUlSQU1XZ3RCNndBaEVBeFpDMEhzQUNFUURGZ0xRZTBBSVJBTVZ3dEI3Z0FoRUF4V0MwSHZBQ0VRREZVTFFmQUFJUkFNVkF0QjhRQWhFQXhUQzBIeUFDRVFERklMUWZNQUlSQU1VUXRCOUFBaEVBeFFDMEgxQUNFUURFOExRZllBSVJBTVRndEI5d0FoRUF4TkMwSDRBQ0VRREV3TFFma0FJUkFNU3d0QitnQWhFQXhLQzBIN0FDRVFERWtMUWZ3QUlSQU1TQXRCL1FBaEVBeEhDMEgrQUNFUURFWUxRZjhBSVJBTVJRdEJnQUVoRUF4RUMwR0JBU0VRREVNTFFZSUJJUkFNUWd0Qmd3RWhFQXhCQzBHRUFTRVFERUFMUVlVQklSQU1Qd3RCaGdFaEVBdytDMEdIQVNFUUREMExRWWdCSVJBTVBBdEJpUUVoRUF3N0MwR0tBU0VRRERvTFFZc0JJUkFNT1F0QmpBRWhFQXc0QzBHTkFTRVFERGNMUVk0QklSQU1OZ3RCandFaEVBdzFDMEdRQVNFUUREUUxRWkVCSVJBTU13dEJrZ0VoRUF3eUMwR1RBU0VRRERFTFFaUUJJUkFNTUF0QmxRRWhFQXd2QzBHV0FTRVFEQzRMUVpjQklSQU1MUXRCbUFFaEVBd3NDMEdaQVNFUURDc0xRWm9CSVJBTUtndEJtd0VoRUF3cEMwR2NBU0VRRENnTFFaMEJJUkFNSnd0Qm5nRWhFQXdtQzBHZkFTRVFEQ1VMUWFBQklSQU1KQXRCb1FFaEVBd2pDMEdpQVNFUURDSUxRYU1CSVJBTUlRdEJwQUVoRUF3Z0MwR2xBU0VRREI4TFFhWUJJUkFNSGd0QnB3RWhFQXdkQzBHb0FTRVFEQndMUWFrQklSQU1Hd3RCcWdFaEVBd2FDMEdyQVNFUURCa0xRYXdCSVJBTUdBdEJyUUVoRUF3WEMwR3VBU0VRREJZTFFRRWhFQXdWQzBHdkFTRVFEQlFMUWJBQklSQU1Fd3RCc1FFaEVBd1NDMEd6QVNFUURCRUxRYklCSVJBTUVBdEJ0QUVoRUF3UEMwRzFBU0VRREE0TFFiWUJJUkFNRFF0QnR3RWhFQXdNQzBHNEFTRVFEQXNMUWJrQklSQU1DZ3RCdWdFaEVBd0pDMEc3QVNFUURBZ0xRY1lCSVJBTUJ3dEJ2QUVoRUF3R0MwRzlBU0VRREFVTFFiNEJJUkFNQkF0QnZ3RWhFQXdEQzBIQUFTRVFEQUlMUWNJQklSQU1BUXRCd1FFaEVBc0RRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBT3h3RUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjRmSUNFakpTZy9RRUZFUlVaSFNFbEtTMHhOVDFCUlVsUGVBMWRaVzF4ZFlHSmxabWRvYVdwcmJHMXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2dBR0NBWVVCaGdHSEFZa0Jpd0dNQVkwQmpnR1BBWkFCa1FHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdHNEFia0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnSEhBY2dCeVFIS0Fjc0J6QUhOQWM0Qnp3SFFBZEVCMGdIVEFkUUIxUUhXQWRjQjJBSFpBZG9CMndIY0FkMEIzZ0hnQWVFQjRnSGpBZVFCNVFIbUFlY0I2QUhwQWVvQjZ3SHNBZTBCN2dIdkFmQUI4UUh5QWZNQm1RS2tBckFDL2dMK0Fnc2dBU0lFSUFKSERmTUJRZDBCSVJBTS93TUxJQUVpRUNBQ1J3M2RBVUhEQVNFUURQNERDeUFCSWdFZ0FrY05rQUZCOXdBaEVBejlBd3NnQVNJQklBSkhEWVlCUWU4QUlSQU0vQU1MSUFFaUFTQUNSdzEvUWVvQUlSQU0rd01MSUFFaUFTQUNSdzE3UWVnQUlSQU0rZ01MSUFFaUFTQUNSdzE0UWVZQUlSQU0rUU1MSUFFaUFTQUNSdzBhUVJnaEVBejRBd3NnQVNJQklBSkhEUlJCRWlFUURQY0RDeUFCSWdFZ0FrY05XVUhGQUNFUURQWURDeUFCSWdFZ0FrY05Ta0UvSVJBTTlRTUxJQUVpQVNBQ1J3MUlRVHdoRUF6MEF3c2dBU0lCSUFKSERVRkJNU0VRRFBNREN5QUFMUUF1UVFGR0Rlc0RESWNDQ3lBQUlBRWlBU0FDRU1DQWdJQUFRUUZIRGVZQklBQkNBRGNESUF6bkFRc2dBQ0FCSWdFZ0FoQzBnSUNBQUNJUURlY0JJQUVoQVF6MUFnc0NRQ0FCSWdFZ0FrY05BRUVHSVJBTThBTUxJQUFnQVVFQmFpSUJJQUlRdTRDQWdBQWlFQTNvQVNBQklRRU1NUXNnQUVJQU53TWdRUkloRUF6VkF3c2dBU0lRSUFKSERTdEJIU0VRRE8wREN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVRVFJUkFNMUFNTFFRY2hFQXpzQXdzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNsQVVFSUlSQU02d01MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRUlFoRUF6U0F3dEJDU0VRRE9vREN5QUJJUUVnQUNrRElGQU41QUVnQVNFQkRQSUNDd0pBSUFFaUFTQUNSdzBBUVFzaEVBenBBd3NnQUNBQlFRRnFJZ0VnQWhDMmdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVZQklBRWhBUXdOQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONXdFZ0FTRUJEUEFDQ3dKQUlBRWlBU0FDUncwQVFROGhFQXpsQXdzZ0FTMEFBQ0lRUVR0R0RRZ2dFRUVOUnczb0FTQUJRUUZxSVFFTTd3SUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM29BU0FCSVFFTThnSUxBMEFDUUNBQkxRQUFRZkMxZ0lBQWFpMEFBQ0lRUVFGR0RRQWdFRUVDUnczckFTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJRUUZxSWdFUXVZQ0FnQUFpRUEzcUFTQUJJUUVNOUFJTElBRkJBV29pQVNBQ1J3MEFDMEVTSVJBTTRnTUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM3BBU0FCSVFFTUNnc2dBU0lCSUFKSERRWkJHeUVRRE9BREN3SkFJQUVpQVNBQ1J3MEFRUlloRUF6Z0F3c2dBRUdLZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBQ0FCSUFJUXVJQ0FnQUFpRUEzcUFTQUJJUUZCSUNFUURNWURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUWZDM2dJQUFhaTBBQUNJUVFRSkdEUUFDUUNBUVFYOXFEZ1RsQWV3QkFPc0I3QUVMSUFGQkFXb2hBVUVJSVJBTXlBTUxJQUZCQVdvaUFTQUNSdzBBQzBFVklSQU0zd01MUVJVaEVBemVBd3NEUUFKQUlBRXRBQUJCOExtQWdBQnFMUUFBSWhCQkFrWU5BQ0FRUVg5cURnVGVBZXdCNEFIckFld0JDeUFCUVFGcUlnRWdBa2NOQUF0QkdDRVFETjBEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVISVJBTXhBTUxRUmtoRUF6Y0F3c2dBVUVCYWlFQkRBSUxBa0FnQVNJVUlBSkhEUUJCR2lFUUROc0RDeUFVSVFFQ1FDQVVMUUFBUVhOcURoVGRBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBZ0R1QWd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU0yZ01MQWtBZ0FTMEFBQ0lRUVR0R0RRQWdFRUVOUnczb0FTQUJRUUZxSVFFTTVRSUxJQUZCQVdvaEFRdEJJaUVRREw4REN3SkFJQUVpRUNBQ1J3MEFRUndoRUF6WUF3dENBQ0VSSUJBaEFTQVFMUUFBUVZCcURqZm5BZVlCQVFJREJBVUdCd2dBQUFBQUFBQUFDUW9MREEwT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUEVCRVNFeFFBQzBFZUlSQU12UU1MUWdJaEVRemxBUXRDQXlFUkRPUUJDMElFSVJFTTR3RUxRZ1VoRVF6aUFRdENCaUVSRE9FQkMwSUhJUkVNNEFFTFFnZ2hFUXpmQVF0Q0NTRVJETjRCQzBJS0lSRU0zUUVMUWdzaEVRemNBUXRDRENFUkROc0JDMElOSVJFTTJnRUxRZzRoRVF6WkFRdENEeUVSRE5nQkMwSUtJUkVNMXdFTFFnc2hFUXpXQVF0Q0RDRVJETlVCQzBJTklSRU0xQUVMUWc0aEVRelRBUXRDRHlFUkROSUJDMElBSVJFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkF0QUFCQlVHb09OK1VCNUFFQUFRSURCQVVHQitZQjVnSG1BZVlCNWdIbUFlWUJDQWtLQ3d3TjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQVE0UEVCRVNFK1lCQzBJQ0lSRU01QUVMUWdNaEVRempBUXRDQkNFUkRPSUJDMElGSVJFTTRRRUxRZ1loRVF6Z0FRdENCeUVSRE44QkMwSUlJUkVNM2dFTFFna2hFUXpkQVF0Q0NpRVJETndCQzBJTElSRU0yd0VMUWd3aEVRemFBUXRDRFNFUkROa0JDMElPSVJFTTJBRUxRZzhoRVF6WEFRdENDaUVSRE5ZQkMwSUxJUkVNMVFFTFFnd2hFUXpVQVF0Q0RTRVJETk1CQzBJT0lSRU0wZ0VMUWc4aEVRelJBUXNnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM1NBVUVmSVJBTXdBTUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFTUWhFQXluQXd0QklDRVFETDhEQ3lBQUlBRWlFQ0FDRUw2QWdJQUFRWDlxRGdXMkFRREZBZ0hSQWRJQkMwRVJJUkFNcEFNTElBQkJBVG9BTHlBUUlRRU11d01MSUFFaUFTQUNSdzNTQVVFa0lSQU11d01MSUFFaURTQUNSdzBlUWNZQUlSQU11Z01MSUFBZ0FTSUJJQUlRc29DQWdBQWlFQTNVQVNBQklRRU10UUVMSUFFaUVDQUNSdzBtUWRBQUlSQU11QU1MQWtBZ0FTSUJJQUpIRFFCQktDRVFETGdEQ3lBQVFRQTJBZ1FnQUVHTWdJQ0FBRFlDQ0NBQUlBRWdBUkN4Z0lDQUFDSVFEZE1CSUFFaEFRellBUXNDUUNBQkloQWdBa2NOQUVFcElSQU10d01MSUJBdEFBQWlBVUVnUmcwVUlBRkJDVWNOMHdFZ0VFRUJhaUVCREJVTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRCY0xRU29oRUF5MUF3c0NRQ0FCSWhBZ0FrY05BRUVySVJBTXRRTUxBa0FnRUMwQUFDSUJRUWxHRFFBZ0FVRWdSdzNWQVFzZ0FDMEFMRUVJUmczVEFTQVFJUUVNa1FNTEFrQWdBU0lCSUFKSERRQkJMQ0VRRExRREN5QUJMUUFBUVFwSERkVUJJQUZCQVdvaEFRekpBZ3NnQVNJT0lBSkhEZFVCUVM4aEVBeXlBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FnRUVGMmFnNEVBTndCM0FFQTJnRUxJQUVoQVF6Z0FRc2dBVUVCYWlJQklBSkhEUUFMUVRFaEVBeXhBd3RCTWlFUUlBRWlGQ0FDUmcyd0F5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUU5xSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjhMdUFnQUJxTFFBQVJ3MEJBa0FnQVVFRFJ3MEFRUVloQVF5V0F3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1zUU1MSUFCQkFEWUNBQ0FVSVFFTTJRRUxRVE1oRUNBQkloUWdBa1lOcndNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRUlhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZTN2dJQUFhaTBBQUVjTkFRSkFJQUZCQ0VjTkFFRUZJUUVNbFFNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMQURDeUFBUVFBMkFnQWdGQ0VCRE5nQkMwRTBJUkFnQVNJVUlBSkdEYTRESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkJXb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhRd29DQUFHb3RBQUJIRFFFQ1FDQUJRUVZIRFFCQkJ5RUJESlFEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5dkF3c2dBRUVBTmdJQUlCUWhBUXpYQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFR0F2b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa1lOQ2lBQklRRU0zUUVMSUFGQkFXb2lBU0FDUncwQUMwRXdJUkFNcmdNTFFUQWhFQXl0QXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRjJhZzRFMlFIYUFkb0IyUUhhQVFzZ0FVRUJhaUlCSUFKSERRQUxRVGdoRUF5dEF3dEJPQ0VRREt3REN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRUpSdzBEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQQ0VRREtzREN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBQ1FBSkFJQkJCZG1vT0JOb0JBUUhhQVFBTElCQkJMRVlOMndFTElBRWhBUXdFQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQeUVRREtvREN5QUJJUUVNMndFTFFjQUFJUkFnQVNJVUlBSkdEYWdESUFJZ0ZHc2dBQ2dDQUNJQmFpRVdJQlFnQVd0QkJtb2hGd0pBQTBBZ0ZDMEFBRUVnY2lBQlFZREFnSUFBYWkwQUFFY05BU0FCUVFaR0RZNERJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFES2tEQ3lBQVFRQTJBZ0FnRkNFQkMwRTJJUkFNamdNTEFrQWdBU0lQSUFKSERRQkJ3UUFoRUF5bkF3c2dBRUdNZ0lDQUFEWUNDQ0FBSUE4MkFnUWdEeUVCSUFBdEFDeEJmMm9PQk0wQjFRSFhBZGtCaHdNTElBRkJBV29oQVF6TUFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCeUlCQWdFRUcvZjJwQi93RnhRUnBKRzBIL0FYRWlFRUVKUmcwQUlCQkJJRVlOQUFKQUFrQUNRQUpBSUJCQm5YOXFEaE1BQXdNREF3TURBd0VEQXdNREF3TURBd01DQXdzZ0FVRUJhaUVCUVRFaEVBeVJBd3NnQVVFQmFpRUJRVEloRUF5UUF3c2dBVUVCYWlFQlFUTWhFQXlQQXdzZ0FTRUJETkFCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJOU0VRREtVREMwRTFJUkFNcEFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTHlBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETk1CQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQU0VRREtRREMwRTlJUkFNb3dNTElBQWdBU0lCSUFJUXNJQ0FnQUFpRUEzV0FTQUJJUUVNQVFzZ0VFRUJhaUVCQzBFOElSQU1od01MQWtBZ0FTSUJJQUpIRFFCQndnQWhFQXlnQXdzQ1FBTkFBa0FnQVMwQUFFRjNhZzRZQUFMK0F2NENoQVArQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0lBL2dJTElBRkJBV29pQVNBQ1J3MEFDMEhDQUNFUURLQURDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU52UUVnQVNFQkMwRXNJUkFNaFFNTElBRWlBU0FDUnczVEFVSEVBQ0VRREowREN3TkFBa0FnQVMwQUFFR1F3SUNBQUdvdEFBQkJBVVlOQUNBQklRRU10d0lMSUFGQkFXb2lBU0FDUncwQUMwSEZBQ0VRREp3REN5QU5MUUFBSWhCQklFWU5zd0VnRUVFNlJ3MkJBeUFBS0FJRUlRRWdBRUVBTmdJRUlBQWdBU0FORUsrQWdJQUFJZ0VOMEFFZ0RVRUJhaUVCRExNQ0MwSEhBQ0VRSUFFaURTQUNSZzJhQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRWkRDZ0lBQWFpMEFBRWNOZ0FNZ0FVRUZSZzMwQWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5YUF3dEJ5QUFoRUNBQklnMGdBa1lObVFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUphaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdXd29DQUFHb3RBQUJIRGY4Q0FrQWdBVUVKUncwQVFRSWhBUXoxQWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1RTUxBa0FnQVNJTklBSkhEUUJCeVFBaEVBeVpBd3NDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWkovYWc0SEFJQURnQU9BQTRBRGdBTUJnQU1MSUExQkFXb2hBVUUrSVJBTWdBTUxJQTFCQVdvaEFVRS9JUkFNL3dJTFFjb0FJUkFnQVNJTklBSkdEWmNESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkFXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJvTUtBZ0FCcUxRQUFSdzM5QWlBQlFRRkdEZkFDSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpjREMwSExBQ0VRSUFFaURTQUNSZzJXQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRNXFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYUxDZ0lBQWFpMEFBRWNOL0FJZ0FVRU9SZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5V0F3dEJ6QUFoRUNBQklnMGdBa1lObFFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRVBhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhBd29DQUFHb3RBQUJIRGZzQ0FrQWdBVUVQUncwQVFRTWhBUXp4QWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxRTUxRYzBBSVJBZ0FTSU5JQUpHRFpRRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJCV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUnczNkFnSkFJQUZCQlVjTkFFRUVJUUVNOEFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKUURDd0pBSUFFaURTQUNSdzBBUWM0QUlSQU1sQU1MQWtBQ1FBSkFBa0FnRFMwQUFDSUJRU0J5SUFFZ0FVRy9mMnBCL3dGeFFScEpHMEgvQVhGQm5YOXFEaE1BL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MENBZjBDL1FMOUFnSUQvUUlMSUExQkFXb2hBVUhCQUNFUURQMENDeUFOUVFGcUlRRkJ3Z0FoRUF6OEFnc2dEVUVCYWlFQlFjTUFJUkFNK3dJTElBMUJBV29oQVVIRUFDRVFEUG9DQ3dKQUlBRWlBU0FDUmcwQUlBQkJqWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhGQUNFUURQb0NDMEhQQUNFUURKSURDeUFRSVFFQ1FBSkFJQkF0QUFCQmRtb09CQUdvQXFnQ0FLZ0NDeUFRUVFGcUlRRUxRU2NoRUF6NEFnc0NRQ0FCSWdFZ0FrY05BRUhSQUNFUURKRURDd0pBSUFFdEFBQkJJRVlOQUNBQklRRU1qUUVMSUFGQkFXb2hBU0FBTFFBdFFRRnhSUTNIQVNBQklRRU1qQUVMSUFFaUZ5QUNSdzNJQVVIU0FDRVFESThEQzBIVEFDRVFJQUVpRkNBQ1JnMk9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFGcUlSY0RRQ0FVTFFBQUlBRkIxc0tBZ0FCcUxRQUFSdzNNQVNBQlFRRkdEY2NCSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREk0REN3SkFJQUVpQVNBQ1J3MEFRZFVBSVJBTWpnTUxJQUV0QUFCQkNrY056QUVnQVVFQmFpRUJETWNCQ3dKQUlBRWlBU0FDUncwQVFkWUFJUkFNalFNTEFrQUNRQ0FCTFFBQVFYWnFEZ1FBelFITkFRSE5BUXNnQVVFQmFpRUJETWNCQ3lBQlFRRnFJUUZCeWdBaEVBenpBZ3NnQUNBQklnRWdBaEN1Z0lDQUFDSVFEY3NCSUFFaEFVSE5BQ0VRRFBJQ0N5QUFMUUFwUVNKR0RZVURES1lDQ3dKQUlBRWlBU0FDUncwQVFkc0FJUkFNaWdNTFFRQWhGRUVCSVJkQkFTRVdRUUFoRUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRVkJxRGdyVUFkTUJBQUVDQXdRRkJnalZBUXRCQWlFUURBWUxRUU1oRUF3RkMwRUVJUkFNQkF0QkJTRVFEQU1MUVFZaEVBd0NDMEVISVJBTUFRdEJDQ0VRQzBFQUlSZEJBQ0VXUVFBaEZBek1BUXRCQ1NFUVFRRWhGRUVBSVJkQkFDRVdETXNCQ3dKQUlBRWlBU0FDUncwQVFkMEFJUkFNaVFNTElBRXRBQUJCTGtjTnpBRWdBVUVCYWlFQkRLWUNDeUFCSWdFZ0FrY056QUZCM3dBaEVBeUhBd3NDUUNBQklnRWdBa1lOQUNBQVFZNkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkIwQUFoRUF6dUFndEI0QUFoRUF5R0F3dEI0UUFoRUNBQklnRWdBa1lOaFFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVMQ2dJQUFhaTBBQUVjTnpRRWdGRUVEUmczTUFTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUZBd3RCNGdBaEVDQUJJZ0VnQWtZTmhBTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVDYWlFWEEwQWdBUzBBQUNBVVFlYkNnSUFBYWkwQUFFY056QUVnRkVFQ1JnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlFQXd0QjR3QWhFQ0FCSWdFZ0FrWU5nd01nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZW5DZ0lBQWFpMEFBRWNOeXdFZ0ZFRURSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5REF3c0NRQ0FCSWdFZ0FrY05BRUhsQUNFUURJTURDeUFBSUFGQkFXb2lBU0FDRUtpQWdJQUFJaEFOelFFZ0FTRUJRZFlBSVJBTTZRSUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUFKQUlCQkJ1SDlxRGdzQUFjOEJ6d0hQQWM4Qnp3SFBBYzhCendFQ3p3RUxJQUZCQVdvaEFVSFNBQ0VRRE8wQ0N5QUJRUUZxSVFGQjB3QWhFQXpzQWdzZ0FVRUJhaUVCUWRRQUlSQU02d0lMSUFGQkFXb2lBU0FDUncwQUMwSGtBQ0VRRElJREMwSGtBQ0VRRElFREN3TkFBa0FnQVMwQUFFSHd3b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJmbW9PQTg4QjBBSFJBZElCQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1Z0FoRUF5QUF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRU1Bd3RCNXdBaEVBei9BZ3NEUUFKQUlBRXRBQUJCOE1TQWdBQnFMUUFBSWhCQkFVWU5BQUpBSUJCQmZtb09CTklCMHdIVUFRRFZBUXNnQVNFQlFkY0FJUkFNNXdJTElBRkJBV29pQVNBQ1J3MEFDMEhvQUNFUURQNENDd0pBSUFFaUFTQUNSdzBBUWVrQUlSQU0vZ0lMQWtBZ0FTMEFBQ0lRUVhacURocTZBZFVCMVFHOEFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFjb0IxUUhWQVFEVEFRc2dBVUVCYWlFQkMwRUdJUkFNNHdJTEEwQUNRQ0FCTFFBQVFmREdnSUFBYWkwQUFFRUJSZzBBSUFFaEFReWVBZ3NnQVVFQmFpSUJJQUpIRFFBTFFlb0FJUkFNK3dJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZXNBSVJBTStnSUxBa0FnQVNJQklBSkhEUUJCN0FBaEVBejZBZ3NnQVVFQmFpRUJEQUVMQWtBZ0FTSUJJQUpIRFFCQjdRQWhFQXo1QWdzZ0FVRUJhaUVCQzBFRUlSQU0zZ0lMQWtBZ0FTSVVJQUpIRFFCQjdnQWhFQXozQWdzZ0ZDRUJBa0FDUUFKQUlCUXRBQUJCOE1pQWdBQnFMUUFBUVg5cURnZlVBZFVCMWdFQW5BSUJBdGNCQ3lBVVFRRnFJUUVNQ2dzZ0ZFRUJhaUVCRE0wQkMwRUFJUkFnQUVFQU5nSWNJQUJCbTVLQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXoyQWdzQ1FBTkFBa0FnQVMwQUFFSHd5SUNBQUdvdEFBQWlFRUVFUmcwQUFrQUNRQ0FRUVg5cURnZlNBZE1CMUFIWkFRQUVBZGtCQ3lBQklRRkIyZ0FoRUF6Z0Fnc2dBVUVCYWlFQlFkd0FJUkFNM3dJTElBRkJBV29pQVNBQ1J3MEFDMEh2QUNFUURQWUNDeUFCUVFGcUlRRU15d0VMQWtBZ0FTSVVJQUpIRFFCQjhBQWhFQXoxQWdzZ0ZDMEFBRUV2UnczVUFTQVVRUUZxSVFFTUJnc0NRQ0FCSWhRZ0FrY05BRUh4QUNFUURQUUNDd0pBSUJRdEFBQWlBVUV2UncwQUlCUkJBV29oQVVIZEFDRVFETnNDQ3lBQlFYWnFJZ1JCRmtzTjB3RkJBU0FFZEVHSmdJQUNjVVVOMHdFTXlnSUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJRZDRBSVJBTTJnSUxRZklBSVJBTThnSUxBa0FnQVNJVUlBSkhEUUJCOUFBaEVBenlBZ3NnRkNFQkFrQWdGQzBBQUVId3pJQ0FBR290QUFCQmYyb09BOGtDbEFJQTFBRUxRZUVBSVJBTTJBSUxBa0FnQVNJVUlBSkdEUUFEUUFKQUlCUXRBQUJCOE1xQWdBQnFMUUFBSWdGQkEwWU5BQUpBSUFGQmYyb09Bc3NDQU5VQkN5QVVJUUZCM3dBaEVBemFBZ3NnRkVFQmFpSVVJQUpIRFFBTFFmTUFJUkFNOFFJTFFmTUFJUkFNOEFJTEFrQWdBU0lCSUFKR0RRQWdBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWVBQUlSQU0xd0lMUWZVQUlSQU03d0lMQWtBZ0FTSUJJQUpIRFFCQjlnQWhFQXp2QWdzZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJDMEVESVJBTTFBSUxBMEFnQVMwQUFFRWdSdzNEQWlBQlFRRnFJZ0VnQWtjTkFBdEI5d0FoRUF6c0Fnc0NRQ0FCSWdFZ0FrY05BRUg0QUNFUURPd0NDeUFCTFFBQVFTQkhEYzRCSUFGQkFXb2hBUXp2QVFzZ0FDQUJJZ0VnQWhDc2dJQ0FBQ0lRRGM0QklBRWhBUXlPQWdzQ1FDQUJJZ1FnQWtjTkFFSDZBQ0VRRE9vQ0N5QUVMUUFBUWN3QVJ3M1JBU0FFUVFGcUlRRkJFeUVRRE04QkN3SkFJQUVpQkNBQ1J3MEFRZnNBSVJBTTZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBTkFJQVF0QUFBZ0FVSHd6b0NBQUdvdEFBQkhEZEFCSUFGQkJVWU56Z0VnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCK3dBaEVBem9BZ3NDUUNBQklnUWdBa2NOQUVIOEFDRVFET2dDQ3dKQUFrQWdCQzBBQUVHOWYyb09EQURSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUhSQVFIUkFRc2dCRUVCYWlFQlFlWUFJUkFNendJTElBUkJBV29oQVVIbkFDRVFETTRDQ3dKQUlBRWlCQ0FDUncwQVFmMEFJUkFNNXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY056d0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjBBSVJBTTV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVDRVFETXdCQ3dKQUlBRWlCQ0FDUncwQVFmNEFJUkFNNWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFmYk9nSUFBYWkwQUFFY056Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjRBSVJBTTVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZpRVFETXNCQ3dKQUlBRWlCQ0FDUncwQVFmOEFJUkFNNVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFmek9nSUFBYWkwQUFFY056UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjhBSVJBTTVRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJTRVFETW9CQ3dKQUlBRWlCQ0FDUncwQVFZQUJJUkFNNUFJTElBUXRBQUJCMlFCSERjc0JJQVJCQVdvaEFVRUlJUkFNeVFFTEFrQWdBU0lFSUFKSERRQkJnUUVoRUF6akFnc0NRQUpBSUFRdEFBQkJzbjlxRGdNQXpBRUJ6QUVMSUFSQkFXb2hBVUhyQUNFUURNb0NDeUFFUVFGcUlRRkI3QUFoRUF6SkFnc0NRQ0FCSWdRZ0FrY05BRUdDQVNFUURPSUNDd0pBQWtBZ0JDMEFBRUc0ZjJvT0NBRExBY3NCeXdITEFjc0J5d0VCeXdFTElBUkJBV29oQVVIcUFDRVFETWtDQ3lBRVFRRnFJUUZCN1FBaEVBeklBZ3NDUUNBQklnUWdBa2NOQUVHREFTRVFET0VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hFQ0FFSUFGclFRSnFJUlFDUUFOQUlBUXRBQUFnQVVHQXo0Q0FBR290QUFCSERja0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRURZQ0FFR0RBU0VRRE9FQ0MwRUFJUkFnQUVFQU5nSUFJQlJCQVdvaEFRekdBUXNDUUNBQklnUWdBa2NOQUVHRUFTRVFET0FDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRUnFJUkFDUUFOQUlBUXRBQUFnQVVHRHo0Q0FBR290QUFCSERjZ0JJQUZCQkVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0VBU0VRRE9BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNNaEVBekZBUXNDUUNBQklnUWdBa2NOQUVHRkFTRVFETjhDQ3dKQUFrQWdCQzBBQUVHMGYyb09DQURJQWNnQnlBSElBY2dCeUFFQnlBRUxJQVJCQVdvaEFVSHZBQ0VRRE1ZQ0N5QUVRUUZxSVFGQjhBQWhFQXpGQWdzQ1FDQUJJZ1FnQWtjTkFFR0dBU0VRRE40Q0N5QUVMUUFBUWNVQVJ3M0ZBU0FFUVFGcUlRRU1nd0lMQWtBZ0FTSUVJQUpIRFFCQmh3RWhFQXpkQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQmlNK0FnQUJxTFFBQVJ3M0ZBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJod0VoRUF6ZEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFdElSQU13Z0VMQWtBZ0FTSUVJQUpIRFFCQmlBRWhFQXpjQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3M0VBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpQUVoRUF6Y0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcElSQU13UUVMQWtBZ0FTSUJJQUpIRFFCQmlRRWhFQXpiQWd0QkFTRVFJQUV0QUFCQjN3QkhEY0FCSUFGQkFXb2hBUXlCQWdzQ1FDQUJJZ1FnQWtjTkFFR0tBU0VRRE5vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBRFFDQUVMUUFBSUFGQmpNK0FnQUJxTFFBQVJ3M0JBU0FCUVFGR0RhOENJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWW9CSVJBTTJRSUxBa0FnQVNJRUlBSkhEUUJCaXdFaEVBelpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCanMrQWdBQnFMUUFBUnczQkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQml3RWhFQXpaQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVDSVJBTXZnRUxBa0FnQVNJRUlBSkhEUUJCakFFaEVBellBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUnczQUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpBRWhFQXpZQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVmSVJBTXZRRUxBa0FnQVNJRUlBSkhEUUJCalFFaEVBelhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOHMrQWdBQnFMUUFBUncyL0FTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpRRWhFQXpYQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVKSVJBTXZBRUxBa0FnQVNJRUlBSkhEUUJCamdFaEVBeldBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0F2d0cvQWI4QnZ3Ry9BUUcvQVFzZ0JFRUJhaUVCUWZnQUlSQU12UUlMSUFSQkFXb2hBVUg1QUNFUURMd0NDd0pBSUFFaUJDQUNSdzBBUVk4QklSQU0xUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUVpIUGdJQUFhaTBBQUVjTnZRRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZOEJJUkFNMVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR0NFUURMb0JDd0pBSUFFaUJDQUNSdzBBUVpBQklSQU0xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpmUGdJQUFhaTBBQUVjTnZBRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaQUJJUkFNMUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRnlFUURMa0JDd0pBSUFFaUJDQUNSdzBBUVpFQklSQU0wd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpyUGdJQUFhaTBBQUVjTnV3RWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaRUJJUkFNMHdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRlNFUURMZ0JDd0pBSUFFaUJDQUNSdzBBUVpJQklSQU0wZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFIUGdJQUFhaTBBQUVjTnVnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaSUJJUkFNMGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSGlFUURMY0JDd0pBSUFFaUJDQUNSdzBBUVpNQklSQU0wUUlMSUFRdEFBQkJ6QUJIRGJnQklBUkJBV29oQVVFS0lSQU10Z0VMQWtBZ0JDQUNSdzBBUVpRQklSQU0wQUlMQWtBQ1FDQUVMUUFBUWI5L2FnNFBBTGtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0JBYmtCQ3lBRVFRRnFJUUZCL2dBaEVBeTNBZ3NnQkVFQmFpRUJRZjhBSVJBTXRnSUxBa0FnQkNBQ1J3MEFRWlVCSVJBTXp3SUxBa0FDUUNBRUxRQUFRYjkvYWc0REFMZ0JBYmdCQ3lBRVFRRnFJUUZCL1FBaEVBeTJBZ3NnQkVFQmFpRUVRWUFCSVJBTXRRSUxBa0FnQkNBQ1J3MEFRWllCSVJBTXpnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYWZQZ0lBQWFpMEFBRWNOdGdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpZQklSQU16Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDeUVRRExNQkN3SkFJQVFnQWtjTkFFR1hBU0VRRE0wQ0N3SkFBa0FDUUFKQUlBUXRBQUJCVTJvT0l3QzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0JBYmdCdUFHNEFiZ0J1QUVDdUFHNEFiZ0JBN2dCQ3lBRVFRRnFJUUZCK3dBaEVBeTJBZ3NnQkVFQmFpRUJRZndBSVJBTXRRSUxJQVJCQVdvaEJFR0JBU0VRRExRQ0N5QUVRUUZxSVFSQmdnRWhFQXl6QWdzQ1FDQUVJQUpIRFFCQm1BRWhFQXpNQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnFjK0FnQUJxTFFBQVJ3MjBBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtQUVoRUF6TUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFWklSQU1zUUVMQWtBZ0JDQUNSdzBBUVprQklSQU15d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWE3UGdJQUFhaTBBQUVjTnN3RWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaa0JJUkFNeXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQmlFUURMQUJDd0pBSUFRZ0FrY05BRUdhQVNFUURNb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUcwejRDQUFHb3RBQUJIRGJJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHYUFTRVFETW9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUndoRUF5dkFRc0NRQ0FFSUFKSERRQkJtd0VoRUF6SkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0cytBZ0FCcUxRQUFSdzJ4QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbXdFaEVBekpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW5JUkFNcmdFTEFrQWdCQ0FDUncwQVFad0JJUkFNeUFJTEFrQUNRQ0FFTFFBQVFheC9hZzRDQUFHeEFRc2dCRUVCYWlFRVFZWUJJUkFNcndJTElBUkJBV29oQkVHSEFTRVFESzRDQ3dKQUlBUWdBa2NOQUVHZEFTRVFETWNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHNHo0Q0FBR290QUFCSERhOEJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2RBU0VRRE1jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNZaEVBeXNBUXNDUUNBRUlBSkhEUUJCbmdFaEVBekdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdXMrQWdBQnFMUUFBUncydUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5nRWhFQXpHQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVESVJBTXF3RUxBa0FnQkNBQ1J3MEFRWjhCSVJBTXhRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOclFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo4QklSQU14UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEQ0VRREtvQkN3SkFJQVFnQWtjTkFFR2dBU0VRRE1RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVRzh6NENBQUdvdEFBQkhEYXdCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdnQVNFUURNUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRMGhFQXlwQVFzQ1FDQUVJQUpIRFFCQm9RRWhFQXpEQWdzQ1FBSkFJQVF0QUFCQnVuOXFEZ3NBckFHc0Fhd0JyQUdzQWF3QnJBR3NBYXdCQWF3QkN5QUVRUUZxSVFSQml3RWhFQXlxQWdzZ0JFRUJhaUVFUVl3QklSQU1xUUlMQWtBZ0JDQUNSdzBBUWFJQklSQU13Z0lMSUFRdEFBQkIwQUJIRGFrQklBUkJBV29oQkF6cEFRc0NRQ0FFSUFKSERRQkJvd0VoRUF6QkFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQnFnR3FBYW9CcWdHcUFRQ3FBUXNnQkVFQmFpRUVRWTRCSVJBTXFBSUxJQVJCQVdvaEFVRWlJUkFNcGdFTEFrQWdCQ0FDUncwQVFhUUJJUkFNd0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFjRFBnSUFBYWkwQUFFY05xQUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYVFCSVJBTXdBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhTRVFES1VCQ3dKQUlBUWdBa2NOQUVHbEFTRVFETDhDQ3dKQUFrQWdCQzBBQUVHdWYyb09Bd0NvQVFHb0FRc2dCRUVCYWlFRVFaQUJJUkFNcGdJTElBUkJBV29oQVVFRUlSQU1wQUVMQWtBZ0JDQUNSdzBBUWFZQklSQU12Z0lMQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFLb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFhb0JBYW9CcWdFQ3FnR3FBUU9xQWFvQkJLb0JDeUFFUVFGcUlRUkJpQUVoRUF5b0Fnc2dCRUVCYWlFRVFZa0JJUkFNcHdJTElBUkJBV29oQkVHS0FTRVFES1lDQ3lBRVFRRnFJUVJCandFaEVBeWxBZ3NnQkVFQmFpRUVRWkVCSVJBTXBBSUxBa0FnQkNBQ1J3MEFRYWNCSVJBTXZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOcFFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFjQklSQU12UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFU0VRREtJQkN3SkFJQVFnQWtjTkFFR29BU0VRREx3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEN6NENBQUdvdEFBQkhEYVFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdvQVNFUURMd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTd2hFQXloQVFzQ1FDQUVJQUpIRFFCQnFRRWhFQXk3QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnhjK0FnQUJxTFFBQVJ3MmpBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxUUVoRUF5N0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcklSQU1vQUVMQWtBZ0JDQUNSdzBBUWFvQklSQU11Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWNyUGdJQUFhaTBBQUVjTm9nRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhb0JJUkFNdWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRkNFUURKOEJDd0pBSUFRZ0FrY05BRUdyQVNFUURMa0NDd0pBQWtBQ1FBSkFJQVF0QUFCQnZuOXFEZzhBQVFLa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJBNlFCQ3lBRVFRRnFJUVJCa3dFaEVBeWlBZ3NnQkVFQmFpRUVRWlFCSVJBTW9RSUxJQVJCQVdvaEJFR1ZBU0VRREtBQ0N5QUVRUUZxSVFSQmxnRWhFQXlmQWdzQ1FDQUVJQUpIRFFCQnJBRWhFQXk0QWdzZ0JDMEFBRUhGQUVjTm53RWdCRUVCYWlFRURPQUJDd0pBSUFRZ0FrY05BRUd0QVNFUURMY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhOejRDQUFHb3RBQUJIRFo4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHdEFTRVFETGNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTRoRUF5Y0FRc0NRQ0FFSUFKSERRQkJyZ0VoRUF5MkFnc2dCQzBBQUVIUUFFY05uUUVnQkVFQmFpRUJRU1VoRUF5YkFRc0NRQ0FFSUFKSERRQkJyd0VoRUF5MUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzJkQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcndFaEVBeTFBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXFJUkFNbWdFTEFrQWdCQ0FDUncwQVFiQUJJUkFNdEFJTEFrQUNRQ0FFTFFBQVFhdC9hZzRMQUowQm5RR2RBWjBCblFHZEFaMEJuUUdkQVFHZEFRc2dCRUVCYWlFRVFab0JJUkFNbXdJTElBUkJBV29oQkVHYkFTRVFESm9DQ3dKQUlBUWdBa2NOQUVHeEFTRVFETE1DQ3dKQUFrQWdCQzBBQUVHL2Yyb09GQUNjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUVCbkFFTElBUkJBV29oQkVHWkFTRVFESm9DQ3lBRVFRRnFJUVJCbkFFaEVBeVpBZ3NDUUNBRUlBSkhEUUJCc2dFaEVBeXlBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCMmMrQWdBQnFMUUFBUncyYUFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnNnRWhFQXl5QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVoSVJBTWx3RUxBa0FnQkNBQ1J3MEFRYk1CSVJBTXNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRZDNQZ0lBQWFpMEFBRWNObVFFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJNQklSQU1zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHaUVRREpZQkN3SkFJQVFnQWtjTkFFRzBBU0VRRExBQ0N3SkFBa0FDUUNBRUxRQUFRYnQvYWc0UkFKb0JtZ0dhQVpvQm1nR2FBWm9CbWdHYUFRR2FBWm9CbWdHYUFab0JBcG9CQ3lBRVFRRnFJUVJCblFFaEVBeVlBZ3NnQkVFQmFpRUVRWjRCSVJBTWx3SUxJQVJCQVdvaEJFR2ZBU0VRREpZQ0N3SkFJQVFnQWtjTkFFRzFBU0VRREs4Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSGt6NENBQUdvdEFBQkhEWmNCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUcxQVNFUURLOENDeUFBUVFBMkFnQWdFRUVCYWlFQlFTZ2hFQXlVQVFzQ1FDQUVJQUpIRFFCQnRnRWhFQXl1QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjZzK0FnQUJxTFFBQVJ3MldBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0Z0VoRUF5dUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSElSQU1rd0VMQWtBZ0JDQUNSdzBBUWJjQklSQU1yUUlMQWtBQ1FDQUVMUUFBUWJ0L2FnNE9BSllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FRR1dBUXNnQkVFQmFpRUVRYUVCSVJBTWxBSUxJQVJCQVdvaEJFR2lBU0VRREpNQ0N3SkFJQVFnQWtjTkFFRzRBU0VRREt3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEWlFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc0QVNFUURLd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSSWhFQXlSQVFzQ1FDQUVJQUpIRFFCQnVRRWhFQXlyQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3MlRBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1UUVoRUF5ckFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZ0lSQU1rQUVMQWtBZ0JDQUNSdzBBUWJvQklSQU1xZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTmtnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFib0JJUkFNcWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRHlFUURJOEJDd0pBSUFRZ0FrY05BRUc3QVNFUURLa0NDd0pBQWtBZ0JDMEFBRUczZjJvT0J3Q1NBWklCa2dHU0FaSUJBWklCQ3lBRVFRRnFJUVJCcFFFaEVBeVFBZ3NnQkVFQmFpRUVRYVlCSVJBTWp3SUxBa0FnQkNBQ1J3MEFRYndCSVJBTXFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQjJvaEVBSkFBMEFnQkMwQUFDQUJRZlRQZ0lBQWFpMEFBRWNOa0FFZ0FVRUhSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJ3QklSQU1xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHeUVRREkwQkN3SkFJQVFnQWtjTkFFRzlBU0VRREtjQ0N3SkFBa0FDUUNBRUxRQUFRYjUvYWc0U0FKRUJrUUdSQVpFQmtRR1JBWkVCa1FHUkFRR1JBWkVCa1FHUkFaRUJrUUVDa1FFTElBUkJBV29oQkVHa0FTRVFESThDQ3lBRVFRRnFJUVJCcHdFaEVBeU9BZ3NnQkVFQmFpRUVRYWdCSVJBTWpRSUxBa0FnQkNBQ1J3MEFRYjRCSVJBTXBnSUxJQVF0QUFCQnpnQkhEWTBCSUFSQkFXb2hCQXpQQVFzQ1FDQUVJQUpIRFFCQnZ3RWhFQXlsQWdzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUFFQ0E1d0JCQVVHbkFHY0Fad0JCd2dKQ2d1Y0FRd05EZytjQVFzZ0JFRUJhaUVCUWVnQUlSQU1tZ0lMSUFSQkFXb2hBVUhwQUNFUURKa0NDeUFFUVFGcUlRRkI3Z0FoRUF5WUFnc2dCRUVCYWlFQlFmSUFJUkFNbHdJTElBUkJBV29oQVVIekFDRVFESllDQ3lBRVFRRnFJUUZCOWdBaEVBeVZBZ3NnQkVFQmFpRUJRZmNBSVJBTWxBSUxJQVJCQVdvaEFVSDZBQ0VRREpNQ0N5QUVRUUZxSVFSQmd3RWhFQXlTQWdzZ0JFRUJhaUVFUVlRQklSQU1rUUlMSUFSQkFXb2hCRUdGQVNFUURKQUNDeUFFUVFGcUlRUkJrZ0VoRUF5UEFnc2dCRUVCYWlFRVFaZ0JJUkFNamdJTElBUkJBV29oQkVHZ0FTRVFESTBDQ3lBRVFRRnFJUVJCb3dFaEVBeU1BZ3NnQkVFQmFpRUVRYW9CSVJBTWl3SUxBa0FnQkNBQ1JnMEFJQUJCa0lDQWdBQTJBZ2dnQUNBRU5nSUVRYXNCSVJBTWl3SUxRY0FCSVJBTW93SUxJQUFnQlNBQ0VLcUFnSUFBSWdFTml3RWdCU0VCREZ3TEFrQWdCaUFDUmcwQUlBWkJBV29oQlF5TkFRdEJ3Z0VoRUF5aEFnc0RRQUpBSUJBdEFBQkJkbW9PQkl3QkFBQ1BBUUFMSUJCQkFXb2lFQ0FDUncwQUMwSERBU0VRREtBQ0N3SkFJQWNnQWtZTkFDQUFRWkdBZ0lBQU5nSUlJQUFnQnpZQ0JDQUhJUUZCQVNFUURJY0NDMEhFQVNFUURKOENDd0pBSUFjZ0FrY05BRUhGQVNFUURKOENDd0pBQWtBZ0J5MEFBRUYyYWc0RUFjNEJ6Z0VBemdFTElBZEJBV29oQmd5TkFRc2dCMEVCYWlFRkRJa0JDd0pBSUFjZ0FrY05BRUhHQVNFUURKNENDd0pBQWtBZ0J5MEFBRUYyYWc0WEFZOEJqd0VCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQUk4QkN5QUhRUUZxSVFjTFFiQUJJUkFNaEFJTEFrQWdDQ0FDUncwQVFjZ0JJUkFNblFJTElBZ3RBQUJCSUVjTmpRRWdBRUVBT3dFeUlBaEJBV29oQVVHekFTRVFESU1DQ3lBQklSY0NRQU5BSUJjaUJ5QUNSZzBCSUFjdEFBQkJVR3BCL3dGeEloQkJDazhOekFFQ1FDQUFMd0V5SWhSQm1UTkxEUUFnQUNBVVFRcHNJaFE3QVRJZ0VFSC8vd056SUJSQi92OERjVWtOQUNBSFFRRnFJUmNnQUNBVUlCQnFJaEE3QVRJZ0VFSC8vd054UWVnSFNRMEJDd3RCQUNFUUlBQkJBRFlDSENBQVFjR0pnSUFBTmdJUUlBQkJEVFlDRENBQUlBZEJBV28yQWhRTW5BSUxRY2NCSVJBTW13SUxJQUFnQ0NBQ0VLNkFnSUFBSWhCRkRjb0JJQkJCRlVjTmpBRWdBRUhJQVRZQ0hDQUFJQWcyQWhRZ0FFSEpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFESm9DQ3dKQUlBa2dBa2NOQUVITUFTRVFESm9DQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ1MwQUFFRlFhZzRLbGdHVkFRQUJBZ01FQlFZSWx3RUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTWpnRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZneU5BUXNDUUNBS0lBSkhEUUJCemdFaEVBeVpBZ3NnQ2kwQUFFRXVSdzJPQVNBS1FRRnFJUWtNeWdFTElBc2dBa2NOamdGQjBBRWhFQXlYQWdzQ1FDQUxJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQXMyQWdSQnR3RWhFQXorQVF0QjBRRWhFQXlXQWdzQ1FDQUVJQUpIRFFCQjBnRWhFQXlXQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUVhaUVMQTBBZ0JDMEFBQ0FRUWZ6UGdJQUFhaTBBQUVjTmpnRWdFRUVFUmczcEFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFNBU0VRREpVQ0N5QUFJQXdnQWhDc2dJQ0FBQ0lCRFkwQklBd2hBUXk0QVFzQ1FDQUVJQUpIRFFCQjFBRWhFQXlVQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUJhaUVNQTBBZ0JDMEFBQ0FRUVlIUWdJQUFhaTBBQUVjTmp3RWdFRUVCUmcyT0FTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFVBU0VRREpNQ0N3SkFJQVFnQWtjTkFFSFdBU0VRREpNQ0N5QUNJQVJySUFBb0FnQWlFR29oRkNBRUlCQnJRUUpxSVFzRFFDQUVMUUFBSUJCQmc5Q0FnQUJxTFFBQVJ3Mk9BU0FRUVFKR0RaQUJJQkJCQVdvaEVDQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZFlCSVJBTWtnSUxBa0FnQkNBQ1J3MEFRZGNCSVJBTWtnSUxBa0FDUUNBRUxRQUFRYnQvYWc0UUFJOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3RUJqd0VMSUFSQkFXb2hCRUc3QVNFUURQa0JDeUFFUVFGcUlRUkJ2QUVoRUF6NEFRc0NRQ0FFSUFKSERRQkIyQUVoRUF5UkFnc2dCQzBBQUVISUFFY05qQUVnQkVFQmFpRUVETVFCQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHK0FTRVFEUGNCQzBIWkFTRVFESThDQ3dKQUlBUWdBa2NOQUVIYUFTRVFESThDQ3lBRUxRQUFRY2dBUmczREFTQUFRUUU2QUNnTXVRRUxJQUJCQWpvQUx5QUFJQVFnQWhDbWdJQ0FBQ0lRRFkwQlFjSUJJUkFNOUFFTElBQXRBQ2hCZjJvT0FyY0J1UUc0QVFzRFFBSkFJQVF0QUFCQmRtb09CQUNPQVk0QkFJNEJDeUFFUVFGcUlnUWdBa2NOQUF0QjNRRWhFQXlMQWdzZ0FFRUFPZ0F2SUFBdEFDMUJCSEZGRFlRQ0N5QUFRUUE2QUM4Z0FFRUJPZ0EwSUFFaEFReU1BUXNnRUVFVlJnM2FBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXlJQWdzQ1FDQUFJQkFnQWhDMGdJQ0FBQ0lFRFFBZ0VDRUJESUVDQ3dKQUlBUkJGVWNOQUNBQVFRTTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5SUFnc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1od0lMSUJCQkZVWU4xZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNaGdJTElBQW9BZ1FoRnlBQVFRQTJBZ1FnRUNBUnAyb2lGaUVCSUFBZ0Z5QVFJQllnRkJzaUVCQzFnSUNBQUNJVVJRMk5BU0FBUVFjMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU1oUUlMSUFBZ0FDOEJNRUdBQVhJN0FUQWdBU0VCQzBFcUlSQU02Z0VMSUJCQkZVWU4wUUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWU9NZ0lBQU5nSVFJQUJCRXpZQ0RFRUFJUkFNZ2dJTElCQkJGVVlOendFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTWdRSUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREkwQkN5QUFRUXcyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1nQUlMSUJCQkZVWU56QUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNL3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESXdCQ3lBQVFRMDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9nRUxJQkJCRlVZTnlRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU0vUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJc0JDeUFBUVE0MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIQWxZQ0FBRFlDRUNBQVFRSTJBZ3hCQUNFUURQc0JDeUFRUVJWR0RjVUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUG9CQ3lBQVFSQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNK1FFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJEUEVCQ3lBQVFSRTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTStBRUxJQkJCRlVZTndRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU05d0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJZ0JDeUFBUVJNMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJETzBCQ3lBQVFSUTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlRRUxJQkJCRlVZTnZRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU05QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJWUJDeUFBUVJZMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOHdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkMzZ0lDQUFDSUVEUUFnQVVFQmFpRUJET2tCQ3lBQVFSYzJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTThnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFEUEVCQzBJQklSRUxJQkJCQVdvaEFRSkFJQUFwQXlBaUVrTC8vLy8vLy8vLy93OVdEUUFnQUNBU1FnU0dJQkdFTndNZ0lBRWhBUXlFQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWEySmdJQUFOZ0lRSUFCQkREWUNERUVBSVJBTTd3RUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzRCQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmN5QUFRUVUyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTTdRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3FuSUNBQURZQ0VDQUFRUTgyQWd4QkFDRVFET3dCQ3lBQUlCQWdBaEMwZ0lDQUFDSUJEUUVnRUNFQkMwRU9JUkFNMFFFTEFrQWdBVUVWUncwQUlBQkJBallDSENBQUlCQTJBaFFnQUVHd21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURPb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXpwQVFzZ0FVRUJhaUVRQWtBZ0FDOEJNQ0lCUVlBQmNVVU5BQUpBSUFBZ0VDQUNFTHVBZ0lBQUlnRU5BQ0FRSVFFTWNBc2dBVUVWUncyNkFTQUFRUVUyQWh3Z0FDQVFOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNDUUNBQlFhQUVjVUdnQkVjTkFDQUFMUUF0UVFKeERRQWdBRUVBTmdJY0lBQWdFRFlDRkNBQVFaYVRnSUFBTmdJUUlBQkJCRFlDREVFQUlSQU02UUVMSUFBZ0VDQUNFTDJBZ0lBQUdpQVFJUUVDUUFKQUFrQUNRQUpBSUFBZ0VDQUNFTE9BZ0lBQURoWUNBUUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFEQkFzZ0FFRUJPZ0F1Q3lBQUlBQXZBVEJCd0FCeU93RXdJQkFoQVF0QkppRVFETkVCQ3lBQVFTTTJBaHdnQUNBUU5nSVVJQUJCcFphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkV0xnSUFBTmdJUUlBQkJFVFlDREVFQUlSQU02QUVMSUFBdEFDMUJBWEZGRFFGQnd3RWhFQXpPQVFzQ1FDQU5JQUpHRFFBRFFBSkFJQTB0QUFCQklFWU5BQ0FOSVFFTXhBRUxJQTFCQVdvaURTQUNSdzBBQzBFbElSQU01d0VMUVNVaEVBem1BUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRFJDdmdJQ0FBQ0lFUlEydEFTQUFRU1kyQWh3Z0FDQUVOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU01UUVMSUJCQkZVWU5xd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJOZ0lBQU5nSVFJQUJCSFRZQ0RFRUFJUkFNNUFFTElBQkJKellDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6akFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQUNRQUpBSUFBdEFDeEJmbW9PQndZRkJRTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcklSQU15Z0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdya29DQUFEWUNFQ0FBUVFzMkFneEJBQ0VRRE9JQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNUVFBaEVBemhBUXNnQUVFQU9nQXNJQkFoQVF5OUFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQUFVTElBQWdBQzhCTUVFSWNqc0JNQXdEQzBFQ0lSUU1BUXRCQkNFVUN5QUFRUUU2QUN3Z0FDQUFMd0V3SUJSeU93RXdDeUFRSVFFTFFTa2hFQXpGQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDVWdJQUFOZ0lRSUFCQkF6WUNERUVBSVJBTTNRRUxBa0FnRGkwQUFFRU5SdzBBSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRIVUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpkQVFzZ0FDMEFMVUVCY1VVTkFVSEVBU0VRRE1NQkN3SkFJQTRnQWtjTkFFRXRJUkFNM0FFTEFrQUNRQU5BQWtBZ0RpMEFBRUYyYWc0RUFnQUFBd0FMSUE1QkFXb2lEaUFDUncwQUMwRXRJUkFNM1FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGlFQkRIUUxJQUJCTERZQ0hDQUFJQTQyQWhRZ0FDQUJOZ0lNUVFBaEVBemNBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBT0VMR0FnSUFBSWdFTkFDQU9RUUZxSVFFTWN3c2dBRUVzTmdJY0lBQWdBVFlDRENBQUlBNUJBV28yQWhSQkFDRVFETnNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBT0VMR0FnSUFBSWdRTm9BRWdEaUVCRE00QkN5QVFRU3hIRFFFZ0FVRUJhaUVRUVFFaEFRSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQkFBTElCQWhBUXdFQzBFQ0lRRU1BUXRCQkNFQkN5QUFRUUU2QUN3Z0FDQUFMd0V3SUFGeU93RXdJQkFoQVF3QkN5QUFJQUF2QVRCQkNISTdBVEFnRUNFQkMwRTVJUkFNdndFTElBQkJBRG9BTENBQklRRUxRVFFoRUF5OUFRc2dBQ0FBTHdFd1FTQnlPd0V3SUFFaEFRd0NDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkEwQUlBRWhBUXpIQVFzZ0FFRTNOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRE5RQkN5QUFRUWc2QUN3Z0FTRUJDMEV3SVJBTXVRRUxBa0FnQUMwQUtFRUJSZzBBSUFFaEFRd0VDeUFBTFFBdFFRaHhSUTJUQVNBQklRRU1Bd3NnQUMwQU1FRWdjUTJVQVVIRkFTRVFETGNCQ3dKQUlBOGdBa1lOQUFKQUEwQUNRQ0FQTFFBQVFWQnFJZ0ZCL3dGeFFRcEpEUUFnRHlFQlFUVWhFQXk2QVFzZ0FDa0RJQ0lSUXBtejVzeVpzK2JNR1ZZTkFTQUFJQkZDQ240aUVUY0RJQ0FSSUFHdFF2OEJneUlTUW4rRlZnMEJJQUFnRVNBU2ZEY0RJQ0FQUVFGcUlnOGdBa2NOQUF0Qk9TRVFETkVCQ3lBQUtBSUVJUUlnQUVFQU5nSUVJQUFnQWlBUFFRRnFJZ1FRc1lDQWdBQWlBZzJWQVNBRUlRRU13d0VMUVRraEVBelBBUXNDUUNBQUx3RXdJZ0ZCQ0hGRkRRQWdBQzBBS0VFQlJ3MEFJQUF0QUMxQkNIRkZEWkFCQ3lBQUlBRkI5L3NEY1VHQUJISTdBVEFnRHlFQkMwRTNJUkFNdEFFTElBQWdBQzhCTUVFUWNqc0JNQXlyQVFzZ0VFRVZSZzJMQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOEk2QWdBQTJBaEFnQUVFY05nSU1RUUFoRUF6TEFRc2dBRUhEQURZQ0hDQUFJQUUyQWd3Z0FDQU5RUUZxTmdJVVFRQWhFQXpLQVFzQ1FDQUJMUUFBUVRwSERRQWdBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsrQWdJQUFJaEFOQUNBQlFRRnFJUUVNWXdzZ0FFSERBRFlDSENBQUlCQTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBektBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYkdSZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNeVFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHZ21ZQ0FBRFlDRUNBQVFSNDJBZ3hCQUNFUURNZ0JDeUFBUVFBMkFnQUxJQUJCZ0JJN0FTb2dBQ0FYUVFGcUlnRWdBaENvZ0lDQUFDSVFEUUVnQVNFQkMwSEhBQ0VRREt3QkN5QVFRUlZIRFlNQklBQkIwUUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBekVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWGdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6REFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjR29nSUFBTmdJUUlBQkJCellDRENBQVFRQTJBZ0JCQUNFUURNSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhkQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRE1FQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWUNSZ0lBQU5nSVFJQUJCQ1RZQ0RBekFBUXNnRUVFVlJnMTlJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1VqWUNBQURZQ0VDQUFRU0UyQWd4QkFDRVFETDhCQzBFQklSWkJBQ0VYUVFBaEZFRUJJUkFMSUFBZ0VEb0FLeUFCUVFGcUlRRUNRQUpBSUFBdEFDMUJFSEVOQUFKQUFrQUNRQ0FBTFFBcURnTUJBQUlFQ3lBV1JRMEREQUlMSUJRTkFRd0NDeUFYUlEwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcllDQWdBQWlFQTBBSUFFaEFReGNDeUFBUWRnQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETDRCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5dEFRc2dBRUhaQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTlBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNcXdFTElBQkIyZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZBRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2tCQ3lBQVFkd0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExzQkN3SkFJQUV0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dBVUVCYWlFQlFjOEFJUkFNb2dFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLY0JDeUFBUWQ0QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETG9CQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtVRWpUdzBBSUFFaEFReFpDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIwNG1BZ0FBMkFoQWdBRUVJTmdJTVFRQWhFQXk1QVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDREF5M0FRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSVVjTkFDQUJJUUVNVmdzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp1S2dJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXRnRUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwSWhCQlhXcEJDMDhOQUNBQklRRU1WUXNDUUNBUVFRWkxEUUJCQVNBUWRFSEtBSEZGRFFBZ0FTRUJERlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjk0bUFnQUEyQWhBZ0FFRUlOZ0lNRExVQkN5QVFRUlZHRFhFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTXRBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERlFMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNRRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERkVMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2lvQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREs0QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIzSWlBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlyQVFzZ0VFRS9SdzBCSUFGQkFXb2hBUXRCQlNFUURKQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyU2dJQUFOZ0lRSUFCQkJ6WUNEQXlvQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1SZ3NnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlsQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhTQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWtBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFRBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5akFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Rd3NnQUVIbEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlpQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNPUGdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW9RRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0FCQzBFQUlSQWdBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREF5ZkFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREVFQUlSQU1uZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUgra1lDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREowQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmpwdUFnQUEyQWhBZ0FFRUdOZ0lNUVFBaEVBeWNBUXNnRUVFVlJnMVhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESnNCQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1FoRUFzZ0FDQVFPZ0FwSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFFUXE0Q0FnQUFpRUExVUlBRWhBUXcrQ3lBQVFRQTJBZ0FMUVFBaEVDQUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQjhadUFnQUEyQWhBZ0FFRUdOZ0lNREpjQkN5QUJRUlZHRFZBZ0FFRUFOZ0ljSUFBZ0JUWUNGQ0FBUWZDTWdJQUFOZ0lRSUFCQkd6WUNERUVBSVJBTWxnRUxJQUFvQWdRaEJTQUFRUUEyQWdRZ0FDQUZJQkFRcVlDQWdBQWlCUTBCSUJCQkFXb2hCUXRCclFFaEVBeDdDeUFBUWNFQk5nSWNJQUFnQlRZQ0RDQUFJQkJCQVdvMkFoUkJBQ0VRREpNQkN5QUFLQUlFSVFZZ0FFRUFOZ0lFSUFBZ0JpQVFFS21BZ0lBQUlnWU5BU0FRUVFGcUlRWUxRYTRCSVJBTWVBc2dBRUhDQVRZQ0hDQUFJQVkyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlRQVFzZ0FFRUFOZ0ljSUFBZ0J6WUNGQ0FBUVplTGdJQUFOZ0lRSUFCQkRUWUNERUVBSVJBTWp3RUxJQUJCQURZQ0hDQUFJQWcyQWhRZ0FFSGprSUNBQURZQ0VDQUFRUWsyQWd4QkFDRVFESTRCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5TkFRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0NVRUJhaUVJQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQ0JDdGdJQ0FBQ0lRUlEwOUlBQkJ5UUUyQWh3Z0FDQUlOZ0lVSUFBZ0VEWUNERUVBSVJBTWpBRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQWdRcllDQWdBQWlCRVVOZGlBQVFjb0JOZ0ljSUFBZ0NEWUNGQ0FBSUFRMkFneEJBQ0VRRElzQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUpFSzJBZ0lBQUlnUkZEWFFnQUVITEFUWUNIQ0FBSUFrMkFoUWdBQ0FFTmdJTVFRQWhFQXlLQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NoQ3RnSUNBQUNJRVJRMXlJQUJCelFFMkFod2dBQ0FLTmdJVUlBQWdCRFlDREVFQUlSQU1pUUVMQWtBZ0N5MEFBRUZRYWlJUVFmOEJjVUVLVHcwQUlBQWdFRG9BS2lBTFFRRnFJUXBCdGdFaEVBeHdDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FMRUsyQWdJQUFJZ1JGRFhBZ0FFSFBBVFlDSENBQUlBczJBaFFnQUNBRU5nSU1RUUFoRUF5SUFRc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDRENBQVFRQTJBZ0JCQUNFUURJY0JDeUFCUVJWR0RUOGdBRUVBTmdJY0lBQWdERFlDRkNBQVFjeU9nSUFBTmdJUUlBQkJJRFlDREVFQUlSQU1oZ0VMSUFCQmdRUTdBU2dnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnREVFQmFpSU1FS3VBZ0lBQUloQkZEVGdnQUVIVEFUWUNIQ0FBSUF3MkFoUWdBQ0FRTmdJTVFRQWhFQXlGQVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFkaWJnSUFBTmdJUUlBQkJDRFlDREF5REFRc2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdDMEVCYWlJTEVLdUFnSUFBSWhBTkFVSEdBU0VRREdrTElBQkJBam9BS0F4VkN5QUFRZFVCTmdJY0lBQWdDellDRkNBQUlCQTJBZ3hCQUNFUURJQUJDeUFRUVJWR0RUY2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFhU01nSUFBTmdJUUlBQkJFRFlDREVFQUlSQU1md3NnQUMwQU5FRUJSdzAwSUFBZ0JDQUNFTHlBZ0lBQUloQkZEVFFnRUVFVlJ3MDFJQUJCM0FFMkFod2dBQ0FFTmdJVUlBQkIxWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXgrQzBFQUlSQWdBRUVBTmdJY0lBQkJyNHVBZ0FBMkFoQWdBRUVDTmdJTUlBQWdGRUVCYWpZQ0ZBeDlDMEVBSVJBTVl3dEJBaUVRREdJTFFRMGhFQXhoQzBFUElSQU1ZQXRCSlNFUURGOExRUk1oRUF4ZUMwRVZJUkFNWFF0QkZpRVFERndMUVJjaEVBeGJDMEVZSVJBTVdndEJHU0VRREZrTFFSb2hFQXhZQzBFYklSQU1Wd3RCSENFUURGWUxRUjBoRUF4VkMwRWZJUkFNVkF0QklTRVFERk1MUVNNaEVBeFNDMEhHQUNFUURGRUxRUzRoRUF4UUMwRXZJUkFNVHd0Qk95RVFERTRMUVQwaEVBeE5DMEhJQUNFUURFd0xRY2tBSVJBTVN3dEJ5d0FoRUF4S0MwSE1BQ0VRREVrTFFjNEFJUkFNU0F0QjBRQWhFQXhIQzBIVkFDRVFERVlMUWRnQUlSQU1SUXRCMlFBaEVBeEVDMEhiQUNFUURFTUxRZVFBSVJBTVFndEI1UUFoRUF4QkMwSHhBQ0VRREVBTFFmUUFJUkFNUHd0QmpRRWhFQXcrQzBHWEFTRVFERDBMUWFrQklSQU1QQXRCckFFaEVBdzdDMEhBQVNFUUREb0xRYmtCSVJBTU9RdEJyd0VoRUF3NEMwR3hBU0VRRERjTFFiSUJJUkFNTmd0QnRBRWhFQXcxQzBHMUFTRVFERFFMUWJvQklSQU1Nd3RCdlFFaEVBd3lDMEcvQVNFUURERUxRY0VCSVJBTU1Bc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFlbUxnSUFBTmdJUUlBQkJIellDREVFQUlSQU1TQXNnQUVIYkFUWUNIQ0FBSUFRMkFoUWdBRUg2bG9DQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVjTElBQkIrQUEyQWh3Z0FDQU1OZ0lVSUFCQnlwaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEdDeUFBUWRFQU5nSWNJQUFnQlRZQ0ZDQUFRYkNYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUlFzZ0FFSDVBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF4RUN5QUFRZmdBTmdJY0lBQWdBVFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Rd3NnQUVIa0FEWUNIQ0FBSUFFMkFoUWdBRUhqbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVJTElBQkIxd0EyQWh3Z0FDQUJOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ1WTJBZ0FBMkFoQWdBRUVhTmdJTVFRQWhFQXhBQ3lBQVFjSUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVB3c2dBRUVBTmdJRUlBQWdEeUFQRUxHQWdJQUFJZ1JGRFFFZ0FFRTZOZ0ljSUFBZ0JEWUNEQ0FBSUE5QkFXbzJBaFJCQUNFUURENExJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDeGdJQ0FBQ0lFUlEwQUlBQkJPellDSENBQUlBUTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBdytDeUFCUVFGcUlRRU1MUXNnRDBFQmFpRUJEQzBMSUFCQkFEWUNIQ0FBSUE4MkFoUWdBRUhra29DQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRERzTElBQkJOallDSENBQUlBUTJBaFFnQUNBQ05nSU1RUUFoRUF3NkN5QUFRUzQyQWh3Z0FDQU9OZ0lVSUFBZ0JEWUNERUVBSVJBTU9Rc2dBRUhRQURZQ0hDQUFJQUUyQWhRZ0FFR1JtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERGdMSUExQkFXb2hBUXdzQ3lBQVFSVTJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MkN5QUFRUnMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzFDeUFBUVE4MkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcwQ3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3ekN5QUFRUm8yQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3lDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd4Q3lBQVFRbzJBaHdnQUNBQk5nSVVJQUJCNUphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3d0N5QUFRUjQyQWh3Z0FDQUJOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3ZDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkIybzJBZ0FBMkFoQWdBRUVVTmdJTVFRQWhFQXd1Q3lBQVFRUTJBaHdnQUNBQk5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dEN5QUFRUUEyQWdBZ0MwRUJhaUVMQzBHNEFTRVFEQklMSUFCQkFEWUNBQ0FRUVFGcUlRRkI5UUFoRUF3UkN5QUJJUUVDUUNBQUxRQXBRUVZIRFFCQjR3QWhFQXdSQzBIaUFDRVFEQkFMUVFBaEVDQUFRUUEyQWh3Z0FFSGtrWUNBQURZQ0VDQUFRUWMyQWd3Z0FDQVVRUUZxTmdJVURDZ0xJQUJCQURZQ0FDQVhRUUZxSVFGQndBQWhFQXdPQzBFQklRRUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0YwRUJhaUVCQzBFb0lSQU1Dd3NnQVNFQkMwRTRJUkFNQ1FzQ1FDQUJJZzhnQWtZTkFBTkFBa0FnRHkwQUFFR0F2b0NBQUdvdEFBQWlBVUVCUmcwQUlBRkJBa2NOQXlBUFFRRnFJUUVNQkFzZ0QwRUJhaUlQSUFKSERRQUxRVDRoRUF3aUMwRStJUkFNSVFzZ0FFRUFPZ0FzSUE4aEFRd0JDMEVMSVJBTUJndEJPaUVRREFVTElBRkJBV29oQVVFdElSQU1CQXNnQUNBQk9nQXNJQUJCQURZQ0FDQVdRUUZxSVFGQkRDRVFEQU1MSUFCQkFEWUNBQ0FYUVFGcUlRRkJDaUVRREFJTElBQkJBRFlDQUFzZ0FFRUFPZ0FzSUEwaEFVRUpJUkFNQUFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FMTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCY0xRUUFoRUNBQVFRQTJBaHdnQUNBS05nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQllMUVFBaEVDQUFRUUEyQWh3Z0FDQUpOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJVTFFRQWhFQ0FBUVFBMkFod2dBQ0FJTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCUUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQk1MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJJTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCRUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQkFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE4TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBNExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pLQWdBQTJBaEFnQUVFTE5nSU1EQTBMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxZbUFnQUEyQWhBZ0FFRUxOZ0lNREF3TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTURBc0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCKzQrQWdBQTJBaEFnQUVFS05nSU1EQW9MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhabUFnQUEyQWhBZ0FFRUNOZ0lNREFrTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4SlNBZ0FBMkFoQWdBRUVDTmdJTURBZ0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOHBXQWdBQTJBaEFnQUVFQ05nSU1EQWNMSUFCQkFqWUNIQ0FBSUFFMkFoUWdBRUdjbW9DQUFEWUNFQ0FBUVJZMkFneEJBQ0VRREFZTFFRRWhFQXdGQzBIVUFDRVFJQUVpQkNBQ1JnMEVJQU5CQ0dvZ0FDQUVJQUpCMk1LQWdBQkJDaERGZ0lDQUFDQURLQUlNSVFRZ0F5Z0NDQTREQVFRQ0FBc1F5b0NBZ0FBQUN5QUFRUUEyQWh3Z0FFRzFtb0NBQURZQ0VDQUFRUmMyQWd3Z0FDQUVRUUZxTmdJVVFRQWhFQXdDQ3lBQVFRQTJBaHdnQUNBRU5nSVVJQUJCeXBxQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF3QkN3SkFJQUVpQkNBQ1J3MEFRU0loRUF3QkN5QUFRWW1BZ0lBQU5nSUlJQUFnQkRZQ0JFRWhJUkFMSUFOQkVHb2tnSUNBZ0FBZ0VBdXZBUUVDZnlBQktBSUFJUVlDUUFKQUlBSWdBMFlOQUNBRUlBWnFJUVFnQmlBRGFpQUNheUVISUFJZ0JrRi9jeUFGYWlJR2FpRUZBMEFDUUNBQ0xRQUFJQVF0QUFCR0RRQkJBaUVFREFNTEFrQWdCZzBBUVFBaEJDQUZJUUlNQXdzZ0JrRi9haUVHSUFSQkFXb2hCQ0FDUVFGcUlnSWdBMGNOQUFzZ0J5RUdJQU1oQWdzZ0FFRUJOZ0lBSUFFZ0JqWUNBQ0FBSUFJMkFnUVBDeUFCUVFBMkFnQWdBQ0FFTmdJQUlBQWdBallDQkFzS0FDQUFFTWVBZ0lBQUMvSTJBUXQvSTRDQWdJQUFRUkJySWdFa2dJQ0FnQUFDUUVFQUtBS2cwSUNBQUEwQVFRQVF5NENBZ0FCQmdOU0VnQUJySWdKQjJRQkpEUUJCQUNFREFrQkJBQ2dDNE5PQWdBQWlCQTBBUVFCQ2Z6Y0M3Tk9BZ0FCQkFFS0FnSVNBZ0lEQUFEY0M1Tk9BZ0FCQkFDQUJRUWhxUVhCeFFkaXExYW9GY3lJRU5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQUxRUUFnQWpZQ3pOT0FnQUJCQUVHQTFJU0FBRFlDeU5PQWdBQkJBRUdBMUlTQUFEWUNtTkNBZ0FCQkFDQUVOZ0tzMElDQUFFRUFRWDgyQXFqUWdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBdEJnTlNFZ0FCQmVFR0ExSVNBQUd0QkQzRkJBRUdBMUlTQUFFRUlha0VQY1JzaUEyb2lCRUVFYWlBQ1FVaHFJZ1VnQTJzaUEwRUJjallDQUVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQkJnTlNFZ0FBZ0JXcEJPRFlDQkFzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUVIc0FVc05BQUpBUVFBb0FvalFnSUFBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdKQkEzWWlCSFlpQTBFRGNVVU5BQUpBQWtBZ0EwRUJjU0FFY2tFQmN5SUZRUU4wSWdSQnNOQ0FnQUJxSWdNZ0JFRzQwSUNBQUdvb0FnQWlCQ2dDQ0NJQ1J3MEFRUUFnQmtGK0lBVjNjVFlDaU5DQWdBQU1BUXNnQXlBQ05nSUlJQUlnQXpZQ0RBc2dCRUVJYWlFRElBUWdCVUVEZENJRlFRTnlOZ0lFSUFRZ0JXb2lCQ0FFS0FJRVFRRnlOZ0lFREF3TElBSkJBQ2dDa05DQWdBQWlCMDBOQVFKQUlBTkZEUUFDUUFKQUlBTWdCSFJCQWlBRWRDSURRUUFnQTJ0eWNTSURRUUFnQTJ0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtb2lCRUVEZENJRFFiRFFnSUFBYWlJRklBTkJ1TkNBZ0FCcUtBSUFJZ01vQWdnaUFFY05BRUVBSUFaQmZpQUVkM0VpQmpZQ2lOQ0FnQUFNQVFzZ0JTQUFOZ0lJSUFBZ0JUWUNEQXNnQXlBQ1FRTnlOZ0lFSUFNZ0JFRURkQ0lFYWlBRUlBSnJJZ1UyQWdBZ0F5QUNhaUlBSUFWQkFYSTJBZ1FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQmtFQklBZEJBM1owSWdoeERRQkJBQ0FHSUFoeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFRMkFnd2dBaUFFTmdJSUlBUWdBallDRENBRUlBZzJBZ2dMSUFOQkNHb2hBMEVBSUFBMkFwelFnSUFBUVFBZ0JUWUNrTkNBZ0FBTURBdEJBQ2dDak5DQWdBQWlDVVVOQVNBSlFRQWdDV3R4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1wQkFuUkJ1TktBZ0FCcUtBSUFJZ0FvQWdSQmVIRWdBbXNoQkNBQUlRVUNRQU5BQWtBZ0JTZ0NFQ0lERFFBZ0JVRVVhaWdDQUNJRFJRMENDeUFES0FJRVFYaHhJQUpySWdVZ0JDQUZJQVJKSWdVYklRUWdBeUFBSUFVYklRQWdBeUVGREFBTEN5QUFLQUlZSVFvQ1FDQUFLQUlNSWdnZ0FFWU5BQ0FBS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFJSUFNMkFnZ2dBeUFJTmdJTURBc0xBa0FnQUVFVWFpSUZLQUlBSWdNTkFDQUFLQUlRSWdORkRRTWdBRUVRYWlFRkN3TkFJQVVoQ3lBRElnaEJGR29pQlNnQ0FDSUREUUFnQ0VFUWFpRUZJQWdvQWhBaUF3MEFDeUFMUVFBMkFnQU1DZ3RCZnlFQ0lBQkJ2MzlMRFFBZ0FFRVRhaUlEUVhCeElRSkJBQ2dDak5DQWdBQWlCMFVOQUVFQUlRc0NRQ0FDUVlBQ1NRMEFRUjhoQ3lBQ1FmLy8vd2RMRFFBZ0EwRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lGSUFWQmdJQVBha0VRZGtFQ2NTSUZkRUVQZGlBRElBUnlJQVZ5YXlJRFFRRjBJQUlnQTBFVmFuWkJBWEZ5UVJ4cUlRc0xRUUFnQW1zaEJBSkFBa0FDUUFKQUlBdEJBblJCdU5LQWdBQnFLQUlBSWdVTkFFRUFJUU5CQUNFSURBRUxRUUFoQXlBQ1FRQkJHU0FMUVFGMmF5QUxRUjlHRzNRaEFFRUFJUWdEUUFKQUlBVW9BZ1JCZUhFZ0Ftc2lCaUFFVHcwQUlBWWhCQ0FGSVFnZ0JnMEFRUUFoQkNBRklRZ2dCU0VEREFNTElBTWdCVUVVYWlnQ0FDSUdJQVlnQlNBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lGUmhzZ0F5QUdHeUVESUFCQkFYUWhBQ0FGRFFBTEN3SkFJQU1nQ0hJTkFFRUFJUWhCQWlBTGRDSURRUUFnQTJ0eUlBZHhJZ05GRFFNZ0EwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQlVFRmRrRUljU0lBSUFOeUlBVWdBSFlpQTBFQ2RrRUVjU0lGY2lBRElBVjJJZ05CQVhaQkFuRWlCWElnQXlBRmRpSURRUUYyUVFGeElnVnlJQU1nQlhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0VEQ3lBRFJRMEJDd05BSUFNb0FnUkJlSEVnQW1zaUJpQUVTU0VBQWtBZ0F5Z0NFQ0lGRFFBZ0EwRVVhaWdDQUNFRkN5QUdJQVFnQUJzaEJDQURJQWdnQUJzaENDQUZJUU1nQlEwQUN3c2dDRVVOQUNBRVFRQW9BcERRZ0lBQUlBSnJUdzBBSUFnb0FoZ2hDd0pBSUFnb0Fnd2lBQ0FJUmcwQUlBZ29BZ2dpQTBFQUtBS1kwSUNBQUVrYUlBQWdBellDQ0NBRElBQTJBZ3dNQ1FzQ1FDQUlRUlJxSWdVb0FnQWlBdzBBSUFnb0FoQWlBMFVOQXlBSVFSQnFJUVVMQTBBZ0JTRUdJQU1pQUVFVWFpSUZLQUlBSWdNTkFDQUFRUkJxSVFVZ0FDZ0NFQ0lERFFBTElBWkJBRFlDQUF3SUN3SkFRUUFvQXBEUWdJQUFJZ01nQWtrTkFFRUFLQUtjMElDQUFDRUVBa0FDUUNBRElBSnJJZ1ZCRUVrTkFDQUVJQUpxSWdBZ0JVRUJjallDQkVFQUlBVTJBcERRZ0lBQVFRQWdBRFlDbk5DQWdBQWdCQ0FEYWlBRk5nSUFJQVFnQWtFRGNqWUNCQXdCQ3lBRUlBTkJBM0kyQWdRZ0JDQURhaUlESUFNb0FnUkJBWEkyQWdSQkFFRUFOZ0tjMElDQUFFRUFRUUEyQXBEUWdJQUFDeUFFUVFocUlRTU1DZ3NDUUVFQUtBS1UwSUNBQUNJQUlBSk5EUUJCQUNnQ29OQ0FnQUFpQXlBQ2FpSUVJQUFnQW1zaUJVRUJjallDQkVFQUlBVTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBeUFDUVFOeU5nSUVJQU5CQ0dvaEF3d0tDd0pBQWtCQkFDZ0M0Tk9BZ0FCRkRRQkJBQ2dDNk5PQWdBQWhCQXdCQzBFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVNYWtGd2NVSFlxdFdxQlhNMkF1RFRnSUFBUVFCQkFEWUM5Tk9BZ0FCQkFFRUFOZ0xFMDRDQUFFR0FnQVFoQkF0QkFDRURBa0FnQkNBQ1FjY0FhaUlIYWlJR1FRQWdCR3NpQzNFaUNDQUNTdzBBUVFCQk1EWUMrTk9BZ0FBTUNnc0NRRUVBS0FMQTA0Q0FBQ0lEUlEwQUFrQkJBQ2dDdU5PQWdBQWlCQ0FJYWlJRklBUk5EUUFnQlNBRFRRMEJDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0tDMEVBTFFERTA0Q0FBRUVFY1EwRUFrQUNRQUpBUVFBb0FxRFFnSUFBSWdSRkRRQkJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlBRVN3MERDeUFES0FJSUlnTU5BQXNMUVFBUXk0Q0FnQUFpQUVGL1JnMEZJQWdoQmdKQVFRQW9BdVRUZ0lBQUlnTkJmMm9pQkNBQWNVVU5BQ0FJSUFCcklBUWdBR3BCQUNBRGEzRnFJUVlMSUFZZ0FrME5CU0FHUWY3Ly8vOEhTdzBGQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BRUVBS0FLNDA0Q0FBQ0lFSUFacUlnVWdCRTBOQmlBRklBTkxEUVlMSUFZUXk0Q0FnQUFpQXlBQVJ3MEJEQWNMSUFZZ0FHc2dDM0VpQmtIKy8vLy9CMHNOQkNBR0VNdUFnSUFBSWdBZ0F5Z0NBQ0FES0FJRWFrWU5BeUFBSVFNTEFrQWdBMEYvUmcwQUlBSkJ5QUJxSUFaTkRRQUNRQ0FISUFaclFRQW9BdWpUZ0lBQUlnUnFRUUFnQkd0eElnUkIvdi8vL3dkTkRRQWdBeUVBREFjTEFrQWdCQkRMZ0lDQUFFRi9SZzBBSUFRZ0Jtb2hCaUFESVFBTUJ3dEJBQ0FHYXhETGdJQ0FBQm9NQkFzZ0F5RUFJQU5CZjBjTkJRd0RDMEVBSVFnTUJ3dEJBQ0VBREFVTElBQkJmMGNOQWd0QkFFRUFLQUxFMDRDQUFFRUVjallDeE5PQWdBQUxJQWhCL3YvLy93ZExEUUVnQ0JETGdJQ0FBQ0VBUVFBUXk0Q0FnQUFoQXlBQVFYOUdEUUVnQTBGL1JnMEJJQUFnQTA4TkFTQURJQUJySWdZZ0FrRTRhazBOQVF0QkFFRUFLQUs0MDRDQUFDQUdhaUlETmdLNDA0Q0FBQUpBSUFOQkFDZ0N2Tk9BZ0FCTkRRQkJBQ0FETmdLODA0Q0FBQXNDUUFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFDQUFJQU1vQWdBaUJTQURLQUlFSWdocVJnMENJQU1vQWdnaUF3MEFEQU1MQ3dKQUFrQkJBQ2dDbU5DQWdBQWlBMFVOQUNBQUlBTlBEUUVMUVFBZ0FEWUNtTkNBZ0FBTFFRQWhBMEVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRi9OZ0tvMElDQUFFRUFRUUFvQXVEVGdJQUFOZ0tzMElDQUFFRUFRUUEyQXRUVGdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUJDQUdRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQUNBRmFrRTROZ0lFREFJTElBTXRBQXhCQ0hFTkFDQUVJQVZKRFFBZ0JDQUFUdzBBSUFSQmVDQUVhMEVQY1VFQUlBUkJDR3BCRDNFYklnVnFJZ0JCQUNnQ2xOQ0FnQUFnQm1vaUN5QUZheUlGUVFGeU5nSUVJQU1nQ0NBR2FqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFVMkFwVFFnSUFBUVFBZ0FEWUNvTkNBZ0FBZ0JDQUxha0U0TmdJRURBRUxBa0FnQUVFQUtBS1kwSUNBQUNJSVR3MEFRUUFnQURZQ21OQ0FnQUFnQUNFSUN5QUFJQVpxSVFWQnlOT0FnQUFoQXdKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnQXlnQ0FDQUZSZzBCSUFNb0FnZ2lBdzBBREFJTEN5QURMUUFNUVFoeFJRMEJDMEhJMDRDQUFDRURBMEFDUUNBREtBSUFJZ1VnQkVzTkFDQUZJQU1vQWdScUlnVWdCRXNOQXdzZ0F5Z0NDQ0VEREFBTEN5QURJQUEyQWdBZ0F5QURLQUlFSUFacU5nSUVJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViYWlJTElBSkJBM0kyQWdRZ0JVRjRJQVZyUVE5eFFRQWdCVUVJYWtFUGNSdHFJZ1lnQ3lBQ2FpSUNheUVEQWtBZ0JpQUVSdzBBUVFBZ0FqWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQURhaUlETmdLVTBJQ0FBQ0FDSUFOQkFYSTJBZ1FNQXdzQ1FDQUdRUUFvQXB6UWdJQUFSdzBBUVFBZ0FqWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQURhaUlETmdLUTBJQ0FBQ0FDSUFOQkFYSTJBZ1FnQWlBRGFpQUROZ0lBREFNTEFrQWdCaWdDQkNJRVFRTnhRUUZIRFFBZ0JFRjRjU0VIQWtBQ1FDQUVRZjhCU3cwQUlBWW9BZ2dpQlNBRVFRTjJJZ2hCQTNSQnNOQ0FnQUJxSWdCR0dnSkFJQVlvQWd3aUJDQUZSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUlkM0UyQW9qUWdJQUFEQUlMSUFRZ0FFWWFJQVFnQlRZQ0NDQUZJQVEyQWd3TUFRc2dCaWdDR0NFSkFrQUNRQ0FHS0FJTUlnQWdCa1lOQUNBR0tBSUlJZ1FnQ0VrYUlBQWdCRFlDQ0NBRUlBQTJBZ3dNQVFzQ1FDQUdRUlJxSWdRb0FnQWlCUTBBSUFaQkVHb2lCQ2dDQUNJRkRRQkJBQ0VBREFFTEEwQWdCQ0VJSUFVaUFFRVVhaUlFS0FJQUlnVU5BQ0FBUVJCcUlRUWdBQ2dDRUNJRkRRQUxJQWhCQURZQ0FBc2dDVVVOQUFKQUFrQWdCaUFHS0FJY0lnVkJBblJCdU5LQWdBQnFJZ1FvQWdCSERRQWdCQ0FBTmdJQUlBQU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JYZHhOZ0tNMElDQUFBd0NDeUFKUVJCQkZDQUpLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFrMkFoZ0NRQ0FHS0FJUUlnUkZEUUFnQUNBRU5nSVFJQVFnQURZQ0dBc2dCaWdDRkNJRVJRMEFJQUJCRkdvZ0JEWUNBQ0FFSUFBMkFoZ0xJQWNnQTJvaEF5QUdJQWRxSWdZb0FnUWhCQXNnQmlBRVFYNXhOZ0lFSUFJZ0Eyb2dBellDQUNBQ0lBTkJBWEkyQWdRQ1FDQURRZjhCU3cwQUlBTkJlSEZCc05DQWdBQnFJUVFDUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FEUVFOMmRDSURjUTBBUVFBZ0JTQURjallDaU5DQWdBQWdCQ0VEREFFTElBUW9BZ2doQXdzZ0F5QUNOZ0lNSUFRZ0FqWUNDQ0FDSUFRMkFnd2dBaUFETmdJSURBTUxRUjhoQkFKQUlBTkIvLy8vQjBzTkFDQURRUWgySWdRZ0JFR0EvajlxUVJCMlFRaHhJZ1IwSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdBZ0FFR0FnQTlxUVJCMlFRSnhJZ0IwUVE5MklBUWdCWElnQUhKcklnUkJBWFFnQXlBRVFSVnFka0VCY1hKQkhHb2hCQXNnQWlBRU5nSWNJQUpDQURjQ0VDQUVRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUFFRUJJQVIwSWdoeERRQWdCU0FDTmdJQVFRQWdBQ0FJY2pZQ2pOQ0FnQUFnQWlBRk5nSVlJQUlnQWpZQ0NDQUNJQUkyQWd3TUF3c2dBMEVBUVJrZ0JFRUJkbXNnQkVFZlJodDBJUVFnQlNnQ0FDRUFBMEFnQUNJRktBSUVRWGh4SUFOR0RRSWdCRUVkZGlFQUlBUkJBWFFoQkNBRklBQkJCSEZxUVJCcUlnZ29BZ0FpQUEwQUN5QUlJQUkyQWdBZ0FpQUZOZ0lZSUFJZ0FqWUNEQ0FDSUFJMkFnZ01BZ3NnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lDeUFHUVVocUlnZ2dBMnNpQTBFQmNqWUNCQ0FBSUFocVFUZzJBZ1FnQkNBRlFUY2dCV3RCRDNGQkFDQUZRVWxxUVE5eEcycEJRV29pQ0NBSUlBUkJFR3BKR3lJSVFTTTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBczJBcURRZ0lBQUlBaEJFR3BCQUNrQzBOT0FnQUEzQWdBZ0NFRUFLUUxJMDRDQUFEY0NDRUVBSUFoQkNHbzJBdERUZ0lBQVFRQWdCallDek5PQWdBQkJBQ0FBTmdMSTA0Q0FBRUVBUVFBMkF0VFRnSUFBSUFoQkpHb2hBd05BSUFOQkJ6WUNBQ0FEUVFScUlnTWdCVWtOQUFzZ0NDQUVSZzBESUFnZ0NDZ0NCRUYrY1RZQ0JDQUlJQWdnQkdzaUFEWUNBQ0FFSUFCQkFYSTJBZ1FDUUNBQVFmOEJTdzBBSUFCQmVIRkJzTkNBZ0FCcUlRTUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQUFRUU4yZENJQWNRMEFRUUFnQlNBQWNqWUNpTkNBZ0FBZ0F5RUZEQUVMSUFNb0FnZ2hCUXNnQlNBRU5nSU1JQU1nQkRZQ0NDQUVJQU0yQWd3Z0JDQUZOZ0lJREFRTFFSOGhBd0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ01nQTBHQS9qOXFRUkIyUVFoeElnTjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ2dnQ0VHQWdBOXFRUkIyUVFKeElnaDBRUTkySUFNZ0JYSWdDSEpySWdOQkFYUWdBQ0FEUVJWcWRrRUJjWEpCSEdvaEF3c2dCQ0FETmdJY0lBUkNBRGNDRUNBRFFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQ0VFQklBTjBJZ1p4RFFBZ0JTQUVOZ0lBUVFBZ0NDQUdjallDak5DQWdBQWdCQ0FGTmdJWUlBUWdCRFlDQ0NBRUlBUTJBZ3dNQkFzZ0FFRUFRUmtnQTBFQmRtc2dBMEVmUmh0MElRTWdCU2dDQUNFSUEwQWdDQ0lGS0FJRVFYaHhJQUJHRFFNZ0EwRWRkaUVJSUFOQkFYUWhBeUFGSUFoQkJIRnFRUkJxSWdZb0FnQWlDQTBBQ3lBR0lBUTJBZ0FnQkNBRk5nSVlJQVFnQkRZQ0RDQUVJQVEyQWdnTUF3c2dCU2dDQ0NJRElBSTJBZ3dnQlNBQ05nSUlJQUpCQURZQ0dDQUNJQVUyQWd3Z0FpQUROZ0lJQ3lBTFFRaHFJUU1NQlFzZ0JTZ0NDQ0lESUFRMkFnd2dCU0FFTmdJSUlBUkJBRFlDR0NBRUlBVTJBZ3dnQkNBRE5nSUlDMEVBS0FLVTBJQ0FBQ0lESUFKTkRRQkJBQ2dDb05DQWdBQWlCQ0FDYWlJRklBTWdBbXNpQTBFQmNqWUNCRUVBSUFNMkFwVFFnSUFBUVFBZ0JUWUNvTkNBZ0FBZ0JDQUNRUU55TmdJRUlBUkJDR29oQXd3REMwRUFJUU5CQUVFd05nTDQwNENBQUF3Q0N3SkFJQXRGRFFBQ1FBSkFJQWdnQ0NnQ0hDSUZRUUowUWJqU2dJQUFhaUlES0FJQVJ3MEFJQU1nQURZQ0FDQUFEUUZCQUNBSFFYNGdCWGR4SWdjMkFvelFnSUFBREFJTElBdEJFRUVVSUFzb0FoQWdDRVliYWlBQU5nSUFJQUJGRFFFTElBQWdDellDR0FKQUlBZ29BaEFpQTBVTkFDQUFJQU0yQWhBZ0F5QUFOZ0lZQ3lBSVFSUnFLQUlBSWdORkRRQWdBRUVVYWlBRE5nSUFJQU1nQURZQ0dBc0NRQUpBSUFSQkQwc05BQ0FJSUFRZ0Ftb2lBMEVEY2pZQ0JDQUlJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFJSUFKcUlnQWdCRUVCY2pZQ0JDQUlJQUpCQTNJMkFnUWdBQ0FFYWlBRU5nSUFBa0FnQkVIL0FVc05BQ0FFUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0JFRURkblFpQkhFTkFFRUFJQVVnQkhJMkFvalFnSUFBSUFNaEJBd0JDeUFES0FJSUlRUUxJQVFnQURZQ0RDQURJQUEyQWdnZ0FDQUROZ0lNSUFBZ0JEWUNDQXdCQzBFZklRTUNRQ0FFUWYvLy93ZExEUUFnQkVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUNJQUpCZ0lBUGFrRVFka0VDY1NJQ2RFRVBkaUFESUFWeUlBSnlheUlEUVFGMElBUWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBQWdBellDSENBQVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFJQWRCQVNBRGRDSUNjUTBBSUFVZ0FEWUNBRUVBSUFjZ0FuSTJBb3pRZ0lBQUlBQWdCVFlDR0NBQUlBQTJBZ2dnQUNBQU5nSU1EQUVMSUFSQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQWdKQUEwQWdBaUlGS0FJRVFYaHhJQVJHRFFFZ0EwRWRkaUVDSUFOQkFYUWhBeUFGSUFKQkJIRnFRUkJxSWdZb0FnQWlBZzBBQ3lBR0lBQTJBZ0FnQUNBRk5nSVlJQUFnQURZQ0RDQUFJQUEyQWdnTUFRc2dCU2dDQ0NJRElBQTJBZ3dnQlNBQU5nSUlJQUJCQURZQ0dDQUFJQVUyQWd3Z0FDQUROZ0lJQ3lBSVFRaHFJUU1NQVFzQ1FDQUtSUTBBQWtBQ1FDQUFJQUFvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQWcyQWdBZ0NBMEJRUUFnQ1VGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ2tFUVFSUWdDaWdDRUNBQVJodHFJQWcyQWdBZ0NFVU5BUXNnQ0NBS05nSVlBa0FnQUNnQ0VDSURSUTBBSUFnZ0F6WUNFQ0FESUFnMkFoZ0xJQUJCRkdvb0FnQWlBMFVOQUNBSVFSUnFJQU0yQWdBZ0F5QUlOZ0lZQ3dKQUFrQWdCRUVQU3cwQUlBQWdCQ0FDYWlJRFFRTnlOZ0lFSUFBZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFREFFTElBQWdBbW9pQlNBRVFRRnlOZ0lFSUFBZ0FrRURjallDQkNBRklBUnFJQVEyQWdBQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhBd0pBQWtCQkFTQUhRUU4yZENJSUlBWnhEUUJCQUNBSUlBWnlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBTTJBZ3dnQWlBRE5nSUlJQU1nQWpZQ0RDQURJQWcyQWdnTFFRQWdCVFlDbk5DQWdBQkJBQ0FFTmdLUTBJQ0FBQXNnQUVFSWFpRURDeUFCUVJCcUpJQ0FnSUFBSUFNTENnQWdBQkRKZ0lDQUFBdmlEUUVIZndKQUlBQkZEUUFnQUVGNGFpSUJJQUJCZkdvb0FnQWlBa0Y0Y1NJQWFpRURBa0FnQWtFQmNRMEFJQUpCQTNGRkRRRWdBU0FCS0FJQUlnSnJJZ0ZCQUNnQ21OQ0FnQUFpQkVrTkFTQUNJQUJxSVFBQ1FDQUJRUUFvQXB6UWdJQUFSZzBBQWtBZ0FrSC9BVXNOQUNBQktBSUlJZ1FnQWtFRGRpSUZRUU4wUWJEUWdJQUFhaUlHUmhvQ1FDQUJLQUlNSWdJZ0JFY05BRUVBUVFBb0FvalFnSUFBUVg0Z0JYZHhOZ0tJMElDQUFBd0RDeUFDSUFaR0dpQUNJQVEyQWdnZ0JDQUNOZ0lNREFJTElBRW9BaGdoQndKQUFrQWdBU2dDRENJR0lBRkdEUUFnQVNnQ0NDSUNJQVJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0FVRVVhaUlDS0FJQUlnUU5BQ0FCUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUVDUUFKQUlBRWdBU2dDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUF3c2dCMEVRUVJRZ0J5Z0NFQ0FCUmh0cUlBWTJBZ0FnQmtVTkFnc2dCaUFITmdJWUFrQWdBU2dDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBRW9BaFFpQWtVTkFTQUdRUlJxSUFJMkFnQWdBaUFHTmdJWURBRUxJQU1vQWdRaUFrRURjVUVEUncwQUlBTWdBa0YrY1RZQ0JFRUFJQUEyQXBEUWdJQUFJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FQQ3lBQklBTlBEUUFnQXlnQ0JDSUNRUUZ4UlEwQUFrQUNRQ0FDUVFKeERRQUNRQ0FEUVFBb0FxRFFnSUFBUncwQVFRQWdBVFlDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FBYWlJQU5nS1UwSUNBQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BMEVBUVFBMkFwRFFnSUFBUVFCQkFEWUNuTkNBZ0FBUEN3SkFJQU5CQUNnQ25OQ0FnQUJIRFFCQkFDQUJOZ0tjMElDQUFFRUFRUUFvQXBEUWdJQUFJQUJxSWdBMkFwRFFnSUFBSUFFZ0FFRUJjallDQkNBQklBQnFJQUEyQWdBUEN5QUNRWGh4SUFCcUlRQUNRQUpBSUFKQi93RkxEUUFnQXlnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0F5Z0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUFnc2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdCQ3lBREtBSVlJUWNDUUFKQUlBTW9BZ3dpQmlBRFJnMEFJQU1vQWdnaUFrRUFLQUtZMElDQUFFa2FJQVlnQWpZQ0NDQUNJQVkyQWd3TUFRc0NRQ0FEUVJScUlnSW9BZ0FpQkEwQUlBTkJFR29pQWlnQ0FDSUVEUUJCQUNFR0RBRUxBMEFnQWlFRklBUWlCa0VVYWlJQ0tBSUFJZ1FOQUNBR1FSQnFJUUlnQmlnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQjBVTkFBSkFBa0FnQXlBREtBSWNJZ1JCQW5SQnVOS0FnQUJxSWdJb0FnQkhEUUFnQWlBR05nSUFJQVlOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCSGR4TmdLTTBJQ0FBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBTkdHMm9nQmpZQ0FDQUdSUTBCQ3lBR0lBYzJBaGdDUUNBREtBSVFJZ0pGRFFBZ0JpQUNOZ0lRSUFJZ0JqWUNHQXNnQXlnQ0ZDSUNSUTBBSUFaQkZHb2dBallDQUNBQ0lBWTJBaGdMSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BVUVBSUFBMkFwRFFnSUFBRHdzZ0F5QUNRWDV4TmdJRUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUUxBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFQ0FrQUNRRUVBS0FLSTBJQ0FBQ0lFUVFFZ0FFRURkblFpQUhFTkFFRUFJQVFnQUhJMkFvalFnSUFBSUFJaEFBd0JDeUFDS0FJSUlRQUxJQUFnQVRZQ0RDQUNJQUUyQWdnZ0FTQUNOZ0lNSUFFZ0FEWUNDQThMUVI4aEFnSkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnSWdBa0dBL2o5cVFSQjJRUWh4SWdKMElnUWdCRUdBNEI5cVFSQjJRUVJ4SWdSMElnWWdCa0dBZ0E5cVFSQjJRUUp4SWdaMFFROTJJQUlnQkhJZ0JuSnJJZ0pCQVhRZ0FDQUNRUlZxZGtFQmNYSkJIR29oQWdzZ0FTQUNOZ0ljSUFGQ0FEY0NFQ0FDUVFKMFFialNnSUFBYWlFRUFrQUNRRUVBS0FLTTBJQ0FBQ0lHUVFFZ0FuUWlBM0VOQUNBRUlBRTJBZ0JCQUNBR0lBTnlOZ0tNMElDQUFDQUJJQVEyQWhnZ0FTQUJOZ0lJSUFFZ0FUWUNEQXdCQ3lBQVFRQkJHU0FDUVFGMmF5QUNRUjlHRzNRaEFpQUVLQUlBSVFZQ1FBTkFJQVlpQkNnQ0JFRjRjU0FBUmcwQklBSkJIWFloQmlBQ1FRRjBJUUlnQkNBR1FRUnhha0VRYWlJREtBSUFJZ1lOQUFzZ0F5QUJOZ0lBSUFFZ0JEWUNHQ0FCSUFFMkFnd2dBU0FCTmdJSURBRUxJQVFvQWdnaUFDQUJOZ0lNSUFRZ0FUWUNDQ0FCUVFBMkFoZ2dBU0FFTmdJTUlBRWdBRFlDQ0F0QkFFRUFLQUtvMElDQUFFRi9haUlCUVg4Z0FSczJBcWpRZ0lBQUN3c0VBQUFBQzA0QUFrQWdBQTBBUHdCQkVIUVBDd0pBSUFCQi8vOERjUTBBSUFCQmYwd05BQUpBSUFCQkVIWkFBQ0lBUVg5SERRQkJBRUV3TmdMNDA0Q0FBRUYvRHdzZ0FFRVFkQThMRU1xQWdJQUFBQXZ5QWdJRGZ3RitBa0FnQWtVTkFDQUFJQUU2QUFBZ0FpQUFhaUlEUVg5cUlBRTZBQUFnQWtFRFNRMEFJQUFnQVRvQUFpQUFJQUU2QUFFZ0EwRjlhaUFCT2dBQUlBTkJmbW9nQVRvQUFDQUNRUWRKRFFBZ0FDQUJPZ0FESUFOQmZHb2dBVG9BQUNBQ1FRbEpEUUFnQUVFQUlBQnJRUU54SWdScUlnTWdBVUgvQVhGQmdZS0VDR3dpQVRZQ0FDQURJQUlnQkd0QmZIRWlCR29pQWtGOGFpQUJOZ0lBSUFSQkNVa05BQ0FESUFFMkFnZ2dBeUFCTmdJRUlBSkJlR29nQVRZQ0FDQUNRWFJxSUFFMkFnQWdCRUVaU1EwQUlBTWdBVFlDR0NBRElBRTJBaFFnQXlBQk5nSVFJQU1nQVRZQ0RDQUNRWEJxSUFFMkFnQWdBa0ZzYWlBQk5nSUFJQUpCYUdvZ0FUWUNBQ0FDUVdScUlBRTJBZ0FnQkNBRFFRUnhRUmh5SWdWcklnSkJJRWtOQUNBQnJVS0JnSUNBRUg0aEJpQURJQVZxSVFFRFFDQUJJQVkzQXhnZ0FTQUdOd01RSUFFZ0JqY0RDQ0FCSUFZM0F3QWdBVUVnYWlFQklBSkJZR29pQWtFZlN3MEFDd3NnQUFzTGprZ0JBRUdBQ0F1R1NBRUFBQUFDQUFBQUF3QUFBQUFBQUFBQUFBQUFCQUFBQUFVQUFBQUFBQUFBQUFBQUFBWUFBQUFIQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J4ZFdWeWVRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgySnZaSGtBUTI5dWRHVnVkQzFNWlc1bmRHZ2diM1psY21ac2IzY0FRMmgxYm1zZ2MybDZaU0J2ZG1WeVpteHZkd0JTWlhOd2IyNXpaU0J2ZG1WeVpteHZkd0JKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnU0ZSVVVDOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnVWxSVFVDOTRMbmdnY21WeGRXVnpkQUJGZUhCbFkzUmxaQ0JUVDFWU1EwVWdiV1YwYUc5a0lHWnZjaUJKUTBVdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0JtY21GbmJXVnVkQ0J6ZEdGeWRBQkZlSEJsWTNSbFpDQmtiM1FBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl6ZEdGMGRYTUFTVzUyWVd4cFpDQnlaWE53YjI1elpTQnpkR0YwZFhNQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN3QlZjMlZ5SUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5eVpYTmxkR0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMmhsWVdSbGNtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZbVZuYVc1Z0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRYSnNYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDI1aGJXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJWeWRtVnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlIWmhiSFZsSUdOb1lYSUFTVzUyWVd4cFpDQm9aV0ZrWlhJZ1ptbGxiR1FnWTJoaGNnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzWmxjbk5wYjI0QVNXNTJZV3hwWkNCdGFXNXZjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV0ZxYjNJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lFTlNURVlnWVdaMFpYSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lFaFVWRkFnZG1WeWMybHZiZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjBiMnRsYmdCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNWeWJBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNuTWdhVzRnZFhKc0FGVnVaWGh3WldOMFpXUWdjM1JoY25RZ1kyaGhjaUJwYmlCMWNtd0FSRzkxWW14bElFQWdhVzRnZFhKc0FFVnRjSFI1SUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUVOdmJuUmxiblF0VEdWdVozUm9BRVIxY0d4cFkyRjBaU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWElnYVc0Z2RYSnNJSEJoZEdnQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnWTJGdUozUWdZbVVnY0hKbGMyVnVkQ0IzYVhSb0lGUnlZVzV6Wm1WeUxVVnVZMjlrYVc1bkFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklITnBlbVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZkbUZzZFdVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUIyWVd4MVpRQk5hWE56YVc1bklHVjRjR1ZqZEdWa0lFeEdJR0ZtZEdWeUlHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFnYUdWaFpHVnlJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdVZ2RtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCeGRXOTBaV1FnZG1Gc2RXVUFVR0YxYzJWa0lHSjVJRzl1WDJobFlXUmxjbk5mWTI5dGNHeGxkR1VBU1c1MllXeHBaQ0JGVDBZZ2MzUmhkR1VBYjI1ZmNtVnpaWFFnY0dGMWMyVUFiMjVmWTJoMWJtdGZhR1ZoWkdWeUlIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlltVm5hVzRnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbElIQmhkWE5sQUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDNWeWJGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOXRaWFJvYjJSZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsSUhCaGRYTmxBRlZ1Wlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2MzUmhjblFnYkdsdVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nYm1GdFpRQlFZWFZ6WlNCdmJpQkRUMDVPUlVOVUwxVndaM0poWkdVQVVHRjFjMlVnYjI0Z1VGSkpMMVZ3WjNKaFpHVUFSWGh3WldOMFpXUWdTRlJVVUM4eUlFTnZibTVsWTNScGIyNGdVSEpsWm1GalpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyMWxkR2h2WkFCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnRaWFJvYjJRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmWm1sbGJHUUFVR0YxYzJWa0FFbHVkbUZzYVdRZ2QyOXlaQ0JsYm1OdmRXNTBaWEpsWkFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JsYm1OdmRXNTBaWEpsWkFCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5qYUdWdFlRQlNaWEYxWlhOMElHaGhjeUJwYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFBVTFkSlZFTklYMUJTVDFoWkFGVlRSVjlRVWs5WVdRQk5TMEZEVkVsV1NWUlpBRlZPVUZKUFEwVlRVMEZDVEVWZlJVNVVTVlJaQUVOUFVGa0FUVTlXUlVSZlVFVlNUVUZPUlU1VVRGa0FWRTlQWDBWQlVreFpBRTVQVkVsR1dRQkdRVWxNUlVSZlJFVlFSVTVFUlU1RFdRQkNRVVJmUjBGVVJWZEJXUUJRVEVGWkFGQlZWQUJEU0VWRFMwOVZWQUJIUVZSRlYwRlpYMVJKVFVWUFZWUUFVa1ZSVlVWVFZGOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlEwOU9Ua1ZEVkY5VVNVMUZUMVZVQUVOUFRrNUZRMVJKVDA1ZlZFbE5SVTlWVkFCTVQwZEpUbDlVU1UxRlQxVlVBRTVGVkZkUFVrdGZVa1ZCUkY5VVNVMUZUMVZVQUZCUFUxUUFUVWxUUkVsU1JVTlVSVVJmVWtWUlZVVlRWQUJEVEVsRlRsUmZRMHhQVTBWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlNVDBGRVgwSkJURUZPUTBWRVgxSkZVVlZGVTFRQVFrRkVYMUpGVVZWRlUxUUFTRlJVVUY5U1JWRlZSVk5VWDFORlRsUmZWRTlmU0ZSVVVGTmZVRTlTVkFCU1JWQlBVbFFBU1UxZlFWOVVSVUZRVDFRQVVrVlRSVlJmUTA5T1ZFVk9WQUJPVDE5RFQwNVVSVTVVQUZCQlVsUkpRVXhmUTA5T1ZFVk9WQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVRWRUZPVkFCSVVFVmZRMEpmVWtWVFJWUUFSMFZVQUVoUVJWOVRWRkpKUTFRQVEwOU9Sa3hKUTFRQVZFVk5VRTlTUVZKWlgxSkZSRWxTUlVOVUFGQkZVazFCVGtWT1ZGOVNSVVJKVWtWRFZBQkRUMDVPUlVOVUFFMVZURlJKWDFOVVFWUlZVd0JJVUVWZlNVNVdRVXhKUkY5VFZFRlVWVk1BVkU5UFgwMUJUbGxmVWtWUlZVVlRWRk1BUlVGU1RGbGZTRWxPVkZNQVZVNUJWa0ZKVEVGQ1RFVmZSazlTWDB4RlIwRk1YMUpGUVZOUFRsTUFUMUJVU1U5T1V3QlRWMGxVUTBoSlRrZGZVRkpQVkU5RFQweFRBRlpCVWtsQlRsUmZRVXhUVDE5T1JVZFBWRWxCVkVWVEFFMVZURlJKVUV4RlgwTklUMGxEUlZNQVNVNVVSVkpPUVV4ZlUwVlNWa1ZTWDBWU1VrOVNBRmRGUWw5VFJWSldSVkpmVlU1TFRrOVhUbDlGVWxKUFVnQlNRVWxNUjFWT1gwVlNVazlTQUVsRVJVNVVTVlJaWDFCU1QxWkpSRVZTWDBGVlZFaEZUbFJKUTBGVVNVOU9YMFZTVWs5U0FGTlRURjlEUlZKVVNVWkpRMEZVUlY5RlVsSlBVZ0JKVGxaQlRFbEVYMWhmUms5U1YwRlNSRVZFWDBaUFVnQlRSVlJmVUVGU1FVMUZWRVZTQUVkRlZGOVFRVkpCVFVWVVJWSUFTRkJGWDFWVFJWSUFVMFZGWDA5VVNFVlNBRWhRUlY5RFFsOURTRlZPUzE5SVJVRkVSVklBVFV0RFFVeEZUa1JCVWdCVFJWUlZVQUJYUlVKZlUwVlNWa1ZTWDBsVFgwUlBWMDRBVkVWQlVrUlBWMDRBU0ZCRlgwTk1UMU5GUkY5RFQwNU9SVU5VU1U5T0FFaEZWVkpKVTFSSlExOUZXRkJKVWtGVVNVOU9BRVJKVTBOUFRrNUZRMVJGUkY5UFVFVlNRVlJKVDA0QVRrOU9YMEZWVkVoUFVrbFVRVlJKVmtWZlNVNUdUMUpOUVZSSlQwNEFTRkJGWDBsT1ZrRk1TVVJmVmtWU1UwbFBUZ0JJVUVWZlEwSmZUVVZUVTBGSFJWOUNSVWRKVGdCVFNWUkZYMGxUWDBaU1QxcEZUZ0JJVUVWZlNVNVdRVXhKUkY5SVJVRkVSVkpmVkU5TFJVNEFTVTVXUVV4SlJGOVVUMHRGVGdCR1QxSkNTVVJFUlU0QVJVNUlRVTVEUlY5WlQxVlNYME5CVEUwQVNGQkZYMGxPVmtGTVNVUmZWVkpNQUVKTVQwTkxSVVJmUWxsZlVFRlNSVTVVUVV4ZlEwOU9WRkpQVEFCTlMwTlBUQUJCUTB3QVNGQkZYMGxPVkVWU1RrRk1BRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBWZlZVNVBSa1pKUTBsQlRBQklVRVZmVDBzQVZVNU1TVTVMQUZWT1RFOURTd0JRVWtrQVVrVlVVbGxmVjBsVVNBQklVRVZmU1U1V1FVeEpSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQklVRVZmVlU1RldGQkZRMVJGUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJHVEZWVFNBQlFVazlRVUVGVVEwZ0FUUzFUUlVGU1EwZ0FWVkpKWDFSUFQxOU1UMDVIQUZCU1QwTkZVMU5KVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlRUlZKVFNWTlVSVTVVWDFkQlVrNUpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVhRVkpPU1U1SEFFaFFSVjlKVGxaQlRFbEVYMVJTUVU1VFJrVlNYMFZPUTA5RVNVNUhBRVY0Y0dWamRHVmtJRU5TVEVZQVNGQkZYMGxPVmtGTVNVUmZRMGhWVGt0ZlUwbGFSUUJOVDFaRkFFTlBUbFJKVGxWRkFFaFFSVjlEUWw5VFZFRlVWVk5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxWkZVbE5KVDA1ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFWU1RGOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVGtGTlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlRVMEZIUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVVNFOUVYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlJrbEZURVJmUTA5TlVFeEZWRVVBUkVWTVJWUkZBRWhRUlY5SlRsWkJURWxFWDBWUFJsOVRWRUZVUlFCSlRsWkJURWxFWDFOVFRGOURSVkpVU1VaSlEwRlVSUUJRUVZWVFJRQk9UMTlTUlZOUVQwNVRSUUJWVGxOVlVGQlBVbFJGUkY5TlJVUkpRVjlVV1ZCRkFFZFBUa1VBVGs5VVgwRkRRMFZRVkVGQ1RFVUFVMFZTVmtsRFJWOVZUa0ZXUVVsTVFVSk1SUUJTUVU1SFJWOU9UMVJmVTBGVVNWTkdTVUZDVEVVQVQxSkpSMGxPWDBsVFgxVk9Va1ZCUTBoQlFreEZBRkpGVTFCUFRsTkZYMGxUWDFOVVFVeEZBRkJWVWtkRkFFMUZVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVUFVa1ZSVlVWVFZGOUlSVUZFUlZKZlZFOVBYMHhCVWtkRkFGQkJXVXhQUVVSZlZFOVBYMHhCVWtkRkFFbE9VMVZHUmtsRFNVVk9WRjlUVkU5U1FVZEZBRWhRUlY5UVFWVlRSVVJmVlZCSFVrRkVSUUJJVUVWZlVFRlZVMFZFWDBneVgxVlFSMUpCUkVVQVUwOVZVa05GQUVGT1RrOVZUa05GQUZSU1FVTkZBRWhRUlY5VlRrVllVRVZEVkVWRVgxTlFRVU5GQUVSRlUwTlNTVUpGQUZWT1UxVkNVME5TU1VKRkFGSkZRMDlTUkFCSVVFVmZTVTVXUVV4SlJGOU5SVlJJVDBRQVRrOVVYMFpQVlU1RUFGQlNUMUJHU1U1RUFGVk9Ra2xPUkFCU1JVSkpUa1FBVlU1QlZWUklUMUpKV2tWRUFFMUZWRWhQUkY5T1QxUmZRVXhNVDFkRlJBQklWRlJRWDFaRlVsTkpUMDVmVGs5VVgxTlZVRkJQVWxSRlJBQkJURkpGUVVSWlgxSkZVRTlTVkVWRUFFRkRRMFZRVkVWRUFFNVBWRjlKVFZCTVJVMUZUbFJGUkFCTVQwOVFYMFJGVkVWRFZFVkVBRWhRUlY5RFVsOUZXRkJGUTFSRlJBQklVRVZmVEVaZlJWaFFSVU5VUlVRQVExSkZRVlJGUkFCSlRWOVZVMFZFQUVoUVJWOVFRVlZUUlVRQVZFbE5SVTlWVkY5UFEwTlZVa1ZFQUZCQldVMUZUbFJmVWtWUlZVbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gxSkZVVlZKVWtWRUFGQlNUMWhaWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRTVGVkZkUFVrdGZRVlZVU0VWT1ZFbERRVlJKVDA1ZlVrVlJWVWxTUlVRQVRFVk9SMVJJWDFKRlVWVkpVa1ZFQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlTUlZGVlNWSkZSQUJWVUVkU1FVUkZYMUpGVVZWSlVrVkVBRkJCUjBWZlJWaFFTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZSa0ZKVEVWRUFFVllVRVZEVkVGVVNVOU9YMFpCU1V4RlJBQlNSVlpCVEVsRVFWUkpUMDVmUmtGSlRFVkVBRk5UVEY5SVFVNUVVMGhCUzBWZlJrRkpURVZFQUV4UFEwdEZSQUJVVWtGT1UwWlBVazFCVkVsUFRsOUJVRkJNU1VWRUFFNVBWRjlOVDBSSlJrbEZSQUJPVDFSZlJWaFVSVTVFUlVRQVFrRk9SRmRKUkZSSVgweEpUVWxVWDBWWVEwVkZSRVZFQUZOSlZFVmZTVk5mVDFaRlVreFBRVVJGUkFCSVJVRkVBRVY0Y0dWamRHVmtJRWhVVkZBdkFBQmVFd0FBSmhNQUFEQVFBQUR3RndBQW5STUFBQlVTQUFBNUZ3QUE4QklBQUFvUUFBQjFFZ0FBclJJQUFJSVRBQUJQRkFBQWZ4QUFBS0FWQUFBakZBQUFpUklBQUlzVUFBQk5GUUFBMUJFQUFNOFVBQUFRR0FBQXlSWUFBTndXQUFEQkVRQUE0QmNBQUxzVUFBQjBGQUFBZkJVQUFPVVVBQUFJRndBQUh4QUFBR1VWQUFDakZBQUFLQlVBQUFJVkFBQ1pGUUFBTEJBQUFJc1pBQUJQRHdBQTFBNEFBR29RQUFET0VBQUFBaGNBQUlrT0FBQnVFd0FBSEJNQUFHWVVBQUJXRndBQXdSTUFBTTBUQUFCc0V3QUFhQmNBQUdZWEFBQmZGd0FBSWhNQUFNNFBBQUJwRGdBQTJBNEFBR01XQUFETEV3QUFxZzRBQUNnWEFBQW1Gd0FBeFJNQUFGMFdBQURvRVFBQVp4TUFBR1VUQUFEeUZnQUFjeE1BQUIwWEFBRDVGZ0FBOHhFQUFNOE9BQURPRlFBQURCSUFBTE1SQUFDbEVRQUFZUkFBQURJWEFBQzdFd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUF3QUVBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCc2IzTmxaV1Z3TFdGc2FYWmxBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUZqYUhWdWEyVmtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRQUJBUUVCQVFBQUFRRUFBUUVBQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0FBQUFBQUFBQUFBQUFBQUFBQUFISmhibk5tWlhJdFpXNWpiMlJwYm1kd1ozSmhaR1VOQ2cwS0RRcFRUUTBLRFFwVVZGQXZRMFV2VkZOUUx3QUFBQUFBQUFBQUFBQUFBQUVDQUFFREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFVQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQkFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBZ0FBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFNVBWVTVEUlVWRFMwOVZWRTVGUTFSRlZFVkRVa2xDUlV4VlUwaEZWRVZCUkZORlFWSkRTRkpIUlVOVVNWWkpWRmxNUlU1RVFWSldSVTlVU1VaWlVGUkpUMDVUUTBoVFJVRlpVMVJCVkVOSVIwVlBVa1JKVWtWRFZFOVNWRkpEU0ZCQlVrRk5SVlJGVWxWU1EwVkNVME5TU1VKRlFWSkVUMWRPUVVORlNVNUVUa3REUzFWQ1UwTlNTVUpGU0ZSVVVDOUJSRlJRTHc9PSdcbiIsICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4ndXNlIHN0cmljdCdcblxuLy8gRXh0cmFjdGVkIGZyb20gbm9kZS9saWIvaW50ZXJuYWwvZml4ZWRfcXVldWUuanNcblxuLy8gQ3VycmVudGx5IG9wdGltYWwgcXVldWUgc2l6ZSwgdGVzdGVkIG9uIFY4IDYuMCAtIDYuNi4gTXVzdCBiZSBwb3dlciBvZiB0d28uXG5jb25zdCBrU2l6ZSA9IDIwNDg7XG5jb25zdCBrTWFzayA9IGtTaXplIC0gMTtcblxuLy8gVGhlIEZpeGVkUXVldWUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgZml4ZWQtc2l6ZVxuLy8gY2lyY3VsYXIgYnVmZmVycy4gSXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczpcbi8vXG4vLyAgaGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsXG4vLyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi8vICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyA8LS0tLS1cXCAgICAgICArLS0tLS0tLS0tLS0rIDwtLS0tLS1cXCAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgIFxcLS0tLS0gfCAgIG5leHQgICAgfCAgICAgICAgIFxcLS0tLS0tLSB8ICAgbmV4dCAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfCA8LS0gdG9wICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIE9yLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIsIGl0IGxvb2tzIHNvbWV0aGluZ1xuLy8gbGlrZSBlaXRoZXIgb2YgdGhlc2U6XG4vL1xuLy8gIGhlYWQgICB0YWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCAgIHRhaWxcbi8vICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfFxuLy8gICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICB2XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW251bGxdICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgICAgICAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBBZGRpbmcgYSB2YWx1ZSBtZWFucyBtb3ZpbmcgYHRvcGAgZm9yd2FyZCBieSBvbmUsIHJlbW92aW5nIG1lYW5zXG4vLyBtb3ZpbmcgYGJvdHRvbWAgZm9yd2FyZCBieSBvbmUuIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQsIHRoZSBxdWV1ZVxuLy8gd3JhcHMgYXJvdW5kLlxuLy9cbi8vIFdoZW4gYHRvcCA9PT0gYm90dG9tYCB0aGUgY3VycmVudCBxdWV1ZSBpcyBlbXB0eSBhbmQgd2hlblxuLy8gYHRvcCArIDEgPT09IGJvdHRvbWAgaXQncyBmdWxsLiBUaGlzIHdhc3RlcyBhIHNpbmdsZSBzcGFjZSBvZiBzdG9yYWdlXG4vLyBidXQgYWxsb3dzIG11Y2ggcXVpY2tlciBjaGVja3MuXG5cbmNsYXNzIEZpeGVkQ2lyY3VsYXJCdWZmZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJvdHRvbSA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheShrU2l6ZSk7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGlzRnVsbCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnRvcCArIDEpICYga01hc2spID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIHRoaXMubGlzdFt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0W3RoaXMuYm90dG9tXTtcbiAgICBpZiAobmV4dEl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHRoaXMubGlzdFt0aGlzLmJvdHRvbV0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSAodGhpcy5ib3R0b20gKyAxKSAmIGtNYXNrO1xuICAgIHJldHVybiBuZXh0SXRlbTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufTtcbiIsICJjb25zdCB7IGtGcmVlLCBrQ29ubmVjdGVkLCBrUGVuZGluZywga1F1ZXVlZCwga1J1bm5pbmcsIGtTaXplIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBwYXJzZU9yaWdpbiB9ID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbmZ1bmN0aW9uIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciAoYSwgYikge1xuICBpZiAoYiA9PT0gMCkgcmV0dXJuIGFcbiAgcmV0dXJuIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvcihiLCBhICUgYilcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICBmb3IgKGNvbnN0IHVwc3RyZWFtIG9mIHVwc3RyZWFtcykge1xuICAgICAgdGhpcy5hZGRVcHN0cmVhbSh1cHN0cmVhbSlcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICB9XG5cbiAgYWRkVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBpZiAodGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0ZhY3RvcnldKHVwc3RyZWFtT3JpZ2luLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzW2tPcHRpb25zXSkpXG5cbiAgICB0aGlzW2tBZGRDbGllbnRdKHBvb2wpXG4gICAgcG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1pbih0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdLCBwb29sW2tXZWlnaHRdICsgdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICB9KVxuXG4gICAgcG9vbC5vbignY29ubmVjdGlvbkVycm9yJywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdkaXNjb25uZWN0JywgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IGFyZ3NbMl1cbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdVTkRfRVJSX1NPQ0tFVCcpIHtcbiAgICAgICAgLy8gZGVjcmVhc2UgdGhlIHdlaWdodCBvZiB0aGUgcG9vbC5cbiAgICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICBjbGllbnRba1dlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cyAoKSB7XG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHRoaXNba0NsaWVudHNdLm1hcChwID0+IHBba1dlaWdodF0pLnJlZHVjZShnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IsIDApXG4gIH1cblxuICByZW1vdmVVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpc1trUmVtb3ZlQ2xpZW50XShwb29sKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgdXBzdHJlYW1zICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11cbiAgICAgIC5maWx0ZXIoZGlzcGF0Y2hlciA9PiBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJiBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHApID0+IHBba1VybF0ub3JpZ2luKVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgLy8gV2UgdmFsaWRhdGUgdGhhdCBwb29scyBpcyBncmVhdGVyIHRoYW4gMCxcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byB3YWl0IHVudGlsIGFuIHVwc3RyZWFtXG4gICAgLy8gaXMgYWRkZWQsIHdoaWNoIG1pZ2h0IG5ldmVyIGhhcHBlbi5cbiAgICBpZiAodGhpc1trQ2xpZW50c10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFsbENsaWVudHNCdXN5ID0gdGhpc1trQ2xpZW50c10ubWFwKHBvb2wgPT4gcG9vbFtrTmVlZERyYWluXSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpXG5cbiAgICBpZiAoYWxsQ2xpZW50c0J1c3kpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBjb3VudGVyID0gMFxuXG4gICAgbGV0IG1heFdlaWdodEluZGV4ID0gdGhpc1trQ2xpZW50c10uZmluZEluZGV4KHBvb2wgPT4gIXBvb2xba05lZWREcmFpbl0pXG5cbiAgICB3aGlsZSAoY291bnRlcisrIDwgdGhpc1trQ2xpZW50c10ubGVuZ3RoKSB7XG4gICAgICB0aGlzW2tJbmRleF0gPSAodGhpc1trSW5kZXhdICsgMSkgJSB0aGlzW2tDbGllbnRzXS5sZW5ndGhcbiAgICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXVt0aGlzW2tJbmRleF1dXG5cbiAgICAgIC8vIGZpbmQgcG9vbCBpbmRleCB3aXRoIHRoZSBsYXJnZXN0IHdlaWdodFxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF0gJiYgIXBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tJbmRleF1cbiAgICAgIH1cblxuICAgICAgLy8gZGVjcmVhc2UgdGhlIGN1cnJlbnQgd2VpZ2h0IGV2ZXJ5IGB0aGlzW2tDbGllbnRzXS5sZW5ndGhgLlxuICAgICAgaWYgKHRoaXNba0luZGV4XSA9PT0gMCkge1xuICAgICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgd2VpZ2h0IHRvIHRoZSBuZXh0IGxvd2VyIHdlaWdodC5cbiAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAtIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl1cblxuICAgICAgICBpZiAodGhpc1trQ3VycmVudFdlaWdodF0gPD0gMCkge1xuICAgICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+PSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAmJiAoIXBvb2xba05lZWREcmFpbl0pKSB7XG4gICAgICAgIHJldHVybiBwb29sXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF1cbiAgICB0aGlzW2tJbmRleF0gPSBtYXhXZWlnaHRJbmRleFxuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhbGFuY2VkUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZTogb25seSBmb3IgTm9kZSAxMiAqL1xuXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jbGFzcyBDb21wYXRXZWFrUmVmIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBkZXJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVba0Nvbm5lY3RlZF0gPT09IDAgJiYgdGhpcy52YWx1ZVtrU2l6ZV0gPT09IDBcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMudmFsdWVcbiAgfVxufVxuXG5jbGFzcyBDb21wYXRGaW5hbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoZmluYWxpemVyKSB7XG4gICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXJcbiAgfVxuXG4gIHJlZ2lzdGVyIChkaXNwYXRjaGVyLCBrZXkpIHtcbiAgICBpZiAoZGlzcGF0Y2hlci5vbikge1xuICAgICAgZGlzcGF0Y2hlci5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgaWYgKGRpc3BhdGNoZXJba0Nvbm5lY3RlZF0gPT09IDAgJiYgZGlzcGF0Y2hlcltrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgICB0aGlzLmZpbmFsaXplcihrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICAgIHJldHVybiB7XG4gICAgICBXZWFrUmVmOiBDb21wYXRXZWFrUmVmLFxuICAgICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IENvbXBhdEZpbmFsaXplclxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFdlYWtSZWY6IGdsb2JhbC5XZWFrUmVmIHx8IENvbXBhdFdlYWtSZWYsXG4gICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSB8fCBDb21wYXRGaW5hbGl6ZXJcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbUZyb20sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5sZXQgQmxvYlxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2Fib3J0JylcbmNvbnN0IGtDb250ZW50VHlwZSA9IFN5bWJvbCgna0NvbnRlbnRUeXBlJylcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGhpZ2hXYXRlck1hcmsgPSA2NCAqIDEwMjQgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogcmVzdW1lLFxuICAgICAgaGlnaFdhdGVyTWFya1xuICAgIH0pXG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gZmFsc2VcblxuICAgIHRoaXNba0Fib3J0XSA9IGFib3J0XG4gICAgdGhpc1trQ29uc3VtZV0gPSBudWxsXG4gICAgdGhpc1trQm9keV0gPSBudWxsXG4gICAgdGhpc1trQ29udGVudFR5cGVdID0gY29udGVudFR5cGVcblxuICAgIC8vIElzIHN0cmVhbSBiZWluZyBjb25zdW1lZCB0aHJvdWdoIFJlYWRhYmxlIEFQST9cbiAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGF2b2lkIGNoZWNraW5nXG4gICAgLy8gZm9yICdkYXRhJyBhbmQgJ3JlYWRhYmxlJyBsaXN0ZW5lcnMgaW4gdGhlIGhvdCBwYXRoXG4gICAgLy8gaW5zaWRlIHB1c2goKS5cbiAgICB0aGlzW2tSZWFkaW5nXSA9IGZhbHNlXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpc1trQWJvcnRdKClcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZGVzdHJveShlcnIpXG4gIH1cblxuICBlbWl0IChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAvLyBOb2RlIDwgMTYuN1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZW1pdChldiwgLi4uYXJncylcbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwgJiYgdGhpcy5yZWFkYWJsZUxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3VtZVB1c2godGhpc1trQ29uc3VtZV0sIGNodW5rKVxuICAgICAgcmV0dXJuIHRoaXNba1JlYWRpbmddID8gc3VwZXIucHVzaChjaHVuaykgOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wdXNoKGNodW5rKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LXRleHRcbiAgYXN5bmMgdGV4dCAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ3RleHQnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWpzb25cbiAgYXN5bmMganNvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2pzb24nKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJsb2JcbiAgYXN5bmMgYmxvYiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2Jsb2InKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWFycmF5YnVmZmVyXG4gIGFzeW5jIGFycmF5QnVmZmVyICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWZvcm1kYXRhXG4gIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQuXG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5dXNlZFxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHRoaXMpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keVxuICBnZXQgYm9keSAoKSB7XG4gICAgaWYgKCF0aGlzW2tCb2R5XSkge1xuICAgICAgdGhpc1trQm9keV0gPSBSZWFkYWJsZVN0cmVhbUZyb20odGhpcylcbiAgICAgIGlmICh0aGlzW2tDb25zdW1lXSkge1xuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBmb3JjZSBhIGxvY2s/XG4gICAgICAgIHRoaXNba0JvZHldLmdldFJlYWRlcigpIC8vIEVuc3VyZSBzdHJlYW0gaXMgbG9ja2VkLlxuICAgICAgICBhc3NlcnQodGhpc1trQm9keV0ubG9ja2VkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trQm9keV1cbiAgfVxuXG4gIGR1bXAgKG9wdHMpIHtcbiAgICBsZXQgbGltaXQgPSBvcHRzICYmIE51bWJlci5pc0Zpbml0ZShvcHRzLmxpbWl0KSA/IG9wdHMubGltaXQgOiAyNjIxNDRcbiAgICBjb25zdCBzaWduYWwgPSBvcHRzICYmIG9wdHMuc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwnKVxuICAgICAgICB9XG4gICAgICAgIHV0aWwudGhyb3dJZkFib3J0ZWQoc2lnbmFsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25hbExpc3RlbmVyQ2xlYW51cCA9IHNpZ25hbFxuICAgICAgICA/IHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgICA6IG5vb3BcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbExpc3RlbmVyQ2xlYW51cCgpXG4gICAgICAgICAgaWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24gfHwgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKSwgeyBuYW1lOiAnQWJvcnRFcnJvcicgfSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgfVxuXG4gIGFzc2VydCghc3RyZWFtW2tDb25zdW1lXSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICB0eXBlLFxuICAgICAgc3RyZWFtLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGJvZHk6IFtdXG4gICAgfVxuXG4gICAgc3RyZWFtXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXNba0NvbnN1bWVdLmJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjb25zdW1lU3RhcnQsIHN0cmVhbVtrQ29uc3VtZV0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTdGFydCAoY29uc3VtZSkge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IF9yZWFkYWJsZVN0YXRlOiBzdGF0ZSB9ID0gY29uc3VtZS5zdHJlYW1cblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgIGNvbnN1bWVQdXNoKGNvbnN1bWUsIGNodW5rKVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRW5kIChjb25zdW1lKSB7XG4gIGNvbnN0IHsgdHlwZSwgYm9keSwgcmVzb2x2ZSwgc3RyZWFtLCBsZW5ndGggfSA9IGNvbnN1bWVcblxuICB0cnkge1xuICAgIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJlc29sdmUodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnanNvbicpIHtcbiAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcblxuICAgICAgbGV0IHBvcyA9IDBcbiAgICAgIGZvciAoY29uc3QgYnVmIG9mIGJvZHkpIHtcbiAgICAgICAgZHN0LnNldChidWYsIHBvcylcbiAgICAgICAgcG9zICs9IGJ1Zi5ieXRlTGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZHN0LmJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdibG9iJykge1xuICAgICAgaWYgKCFCbG9iKSB7XG4gICAgICAgIEJsb2IgPSByZXF1aXJlKCdidWZmZXInKS5CbG9iXG4gICAgICB9XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfVxuXG4gICAgY29uc3VtZUZpbmlzaChjb25zdW1lKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZVB1c2ggKGNvbnN1bWUsIGNodW5rKSB7XG4gIGNvbnN1bWUubGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICBjb25zdW1lLmJvZHkucHVzaChjaHVuaylcbn1cblxuZnVuY3Rpb24gY29uc3VtZUZpbmlzaCAoY29uc3VtZSwgZXJyKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBjb25zdW1lLnJlamVjdChlcnIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNvbnN1bWUudHlwZSA9IG51bGxcbiAgY29uc3VtZS5zdHJlYW0gPSBudWxsXG4gIGNvbnN1bWUucmVzb2x2ZSA9IG51bGxcbiAgY29uc3VtZS5yZWplY3QgPSBudWxsXG4gIGNvbnN1bWUubGVuZ3RoID0gMFxuICBjb25zdW1lLmJvZHkgPSBudWxsXG59XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHtcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgKHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH0pIHtcbiAgYXNzZXJ0KGJvZHkpXG5cbiAgbGV0IGNodW5rcyA9IFtdXG4gIGxldCBsaW1pdCA9IDBcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICBsaW1pdCArPSBjaHVuay5sZW5ndGhcbiAgICBpZiAobGltaXQgPiAxMjggKiAxMDI0KSB7XG4gICAgICBjaHVua3MgPSBudWxsXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0dXNDb2RlID09PSAyMDQgfHwgIWNvbnRlbnRUeXBlIHx8ICFjaHVua3MpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gUHJvY2VzcyBpbiBhIGZhbGxiYWNrIGlmIGVycm9yXG4gIH1cblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH1cbiIsICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFJlcXVlc3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IsIGhpZ2hXYXRlck1hcmsgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChoaWdoV2F0ZXJNYXJrICYmICh0eXBlb2YgaGlnaFdhdGVyTWFyayAhPT0gJ251bWJlcicgfHwgaGlnaFdhdGVyTWFyayA8IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoaWdoV2F0ZXJNYXJrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1JFUVVFU1QnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGFib3J0LCBjb250ZXh0LCByZXNwb25zZUhlYWRlcnMsIGhpZ2hXYXRlck1hcmsgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgIGNvbnN0IGJvZHkgPSBuZXcgUmVhZGFibGUoeyByZXN1bWUsIGFib3J0LCBjb250ZW50VHlwZSwgaGlnaFdhdGVyTWFyayB9KVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICB0aGlzLnJlcyA9IGJvZHlcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgICAgeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycywgdGhpcy50cmFpbGVycylcblxuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIGJvZHksIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgUmVxdWVzdEhhbmRsZXIob3B0cywgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZSAmJiByZXMuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmVhbVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jbGFzcyBVcGdyYWRlSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1VQR1JBREUnKVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzQ29kZSwgMTAxKVxuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGdyYWRlIChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1cGdyYWRlLmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVwZ3JhZGVIYW5kbGVyID0gbmV3IFVwZ3JhZGVIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICB1cGdyYWRlOiBvcHRzLnByb3RvY29sIHx8ICdXZWJzb2NrZXQnXG4gICAgfSwgdXBncmFkZUhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZ3JhZGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNsYXNzIE1vY2tOb3RNYXRjaGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBNb2NrTm90TWF0Y2hlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNb2NrTm90TWF0Y2hlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcydcbiAgICB0aGlzLmNvZGUgPSAnVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1vY2tOb3RNYXRjaGVkRXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtBZ2VudDogU3ltYm9sKCdhZ2VudCcpLFxuICBrT3B0aW9uczogU3ltYm9sKCdvcHRpb25zJyksXG4gIGtGYWN0b3J5OiBTeW1ib2woJ2ZhY3RvcnknKSxcbiAga0Rpc3BhdGNoZXM6IFN5bWJvbCgnZGlzcGF0Y2hlcycpLFxuICBrRGlzcGF0Y2hLZXk6IFN5bWJvbCgnZGlzcGF0Y2gga2V5JyksXG4gIGtEZWZhdWx0SGVhZGVyczogU3ltYm9sKCdkZWZhdWx0IGhlYWRlcnMnKSxcbiAga0RlZmF1bHRUcmFpbGVyczogU3ltYm9sKCdkZWZhdWx0IHRyYWlsZXJzJyksXG4gIGtDb250ZW50TGVuZ3RoOiBTeW1ib2woJ2NvbnRlbnQgbGVuZ3RoJyksXG4gIGtNb2NrQWdlbnQ6IFN5bWJvbCgnbW9jayBhZ2VudCcpLFxuICBrTW9ja0FnZW50U2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgc2V0JyksXG4gIGtNb2NrQWdlbnRHZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBnZXQnKSxcbiAga01vY2tEaXNwYXRjaDogU3ltYm9sKCdtb2NrIGRpc3BhdGNoJyksXG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrT3JpZ2luYWxDbG9zZTogU3ltYm9sKCdvcmlnaW5hbCBhZ2VudCBjbG9zZScpLFxuICBrT3JpZ2luOiBTeW1ib2woJ29yaWdpbicpLFxuICBrSXNNb2NrQWN0aXZlOiBTeW1ib2woJ2lzIG1vY2sgYWN0aXZlJyksXG4gIGtOZXRDb25uZWN0OiBTeW1ib2woJ25ldCBjb25uZWN0JyksXG4gIGtHZXROZXRDb25uZWN0OiBTeW1ib2woJ2dldCBuZXQgY29ubmVjdCcpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL2ZldGNoL2luZGV4LmpzI0wxODExXG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwob3B0cy5wYXRoLCAnZGF0YTovLycpXG4gICAgICAgIG9wdHMucGF0aCA9IHBhcnNlZFVSTC5wYXRobmFtZSArIHBhcnNlZFVSTC5zZWFyY2hcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgIH1cblxuICAgIHRoaXNba0Rpc3BhdGNoS2V5XSA9IGJ1aWxkS2V5KG9wdHMpXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBtb2NrRGlzcGF0Y2hlc1xuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IHt9XG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHt9XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBmYWxzZVxuICB9XG5cbiAgY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHN0YXR1c0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0YXR1c0NvZGUgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdkYXRhIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2VPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5RGF0YSkge1xuICAgIC8vIFZhbHVlcyBvZiByZXBseSBhcmVuJ3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyBhcyB0aGV5XG4gICAgLy8gY2FuIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHJlcGx5IGNhbGxiYWNrIGlzIGludm9rZWQuXG4gICAgaWYgKHR5cGVvZiByZXBseURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ2xsIGZpcnN0IHdyYXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGluIGFub3RoZXIgZnVuY3Rpb24sXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvcGVybHkgcmVzb2x2ZSB0aGUgZGF0YSBmcm9tIHRoZSBjYWxsYmFja1xuICAgICAgLy8gd2hlbiBpbnZva2VkLlxuICAgICAgY29uc3Qgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2sgPSAob3B0cykgPT4ge1xuICAgICAgICAvLyBPdXIgcmVwbHkgb3B0aW9ucyBjYWxsYmFjayBjb250YWlucyB0aGUgcGFyYW1ldGVyIGZvciBzdGF0dXNDb2RlLCBkYXRhIGFuZCBvcHRpb25zLlxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSByZXBseURhdGEob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwbHkgb3B0aW9ucyBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBvYmplY3QnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9IH0gPSByZXNvbHZlZERhdGFcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGltbWVkaWF0ZWx5IHdlIHJldHVybiB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhpcyBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdXN1YWwgZGlzcGF0Y2ggZGF0YSwgYnV0IHRoaXMgdGltZSBzZXQgdGhlIGRhdGEgcGFyYW1ldGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgZGF0YS5cbiAgICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjaylcbiAgICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgICB9XG5cbiAgICAvLyBXZSBjYW4gaGF2ZSBlaXRoZXIgb25lIG9yIHRocmVlIHBhcmFtZXRlcnMsIGlmIHdlIGdldCBoZXJlLFxuICAgIC8vIHdlIHNob3VsZCBoYXZlIDEtMyBwYXJhbWV0ZXJzLiBTbyB3ZSBzcHJlYWQgdGhlIGFyZ3VtZW50cyBvZlxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSByZXBseURhdGEgd2lsbCBhbHdheXNcbiAgICAvLyBqdXN0IGJlIHRoZSBzdGF0dXNDb2RlLlxuICAgIGNvbnN0IFtzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9XSA9IFsuLi5hcmd1bWVudHNdXG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi4vY2xpZW50JylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja0NsaWVudCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBDbGllbnQgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja0NsaWVudCBleHRlbmRzIENsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tDbGllbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNpbmd1bGFycyA9IHtcbiAgcHJvbm91bjogJ2l0JyxcbiAgaXM6ICdpcycsXG4gIHdhczogJ3dhcycsXG4gIHRoaXM6ICd0aGlzJ1xufVxuXG5jb25zdCBwbHVyYWxzID0ge1xuICBwcm9ub3VuOiAndGhleScsXG4gIGlzOiAnYXJlJyxcbiAgd2FzOiAnd2VyZScsXG4gIHRoaXM6ICd0aGVzZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQbHVyYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICB0aGlzLnNpbmd1bGFyID0gc2luZ3VsYXJcbiAgICB0aGlzLnBsdXJhbCA9IHBsdXJhbFxuICB9XG5cbiAgcGx1cmFsaXplIChjb3VudCkge1xuICAgIGNvbnN0IG9uZSA9IGNvdW50ID09PSAxXG4gICAgY29uc3Qga2V5cyA9IG9uZSA/IHNpbmd1bGFycyA6IHBsdXJhbHNcbiAgICBjb25zdCBub3VuID0gb25lID8gdGhpcy5zaW5ndWxhciA6IHRoaXMucGx1cmFsXG4gICAgcmV0dXJuIHsgLi4ua2V5cywgY291bnQsIG5vdW4gfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVHJhbnNmb3JtIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBDb25zb2xlIH0gPSByZXF1aXJlKCdjb25zb2xlJylcblxuLyoqXG4gKiBHZXRzIHRoZSBvdXRwdXQgb2YgYGNvbnNvbGUudGFibGUoXHUyMDI2KWAgYXMgYSBzdHJpbmcuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGRpc2FibGVDb2xvcnMgfSA9IHt9KSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcbiAgICAgIHRyYW5zZm9ybSAoY2h1bmssIF9lbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBDb25zb2xlKHtcbiAgICAgIHN0ZG91dDogdGhpcy50cmFuc2Zvcm0sXG4gICAgICBpbnNwZWN0T3B0aW9uczoge1xuICAgICAgICBjb2xvcnM6ICFkaXNhYmxlQ29sb3JzICYmICFwcm9jZXNzLmVudi5DSVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmb3JtYXQgKHBlbmRpbmdJbnRlcmNlcHRvcnMpIHtcbiAgICBjb25zdCB3aXRoUHJldHR5SGVhZGVycyA9IHBlbmRpbmdJbnRlcmNlcHRvcnMubWFwKFxuICAgICAgKHsgbWV0aG9kLCBwYXRoLCBkYXRhOiB7IHN0YXR1c0NvZGUgfSwgcGVyc2lzdCwgdGltZXMsIHRpbWVzSW52b2tlZCwgb3JpZ2luIH0pID0+ICh7XG4gICAgICAgIE1ldGhvZDogbWV0aG9kLFxuICAgICAgICBPcmlnaW46IG9yaWdpbixcbiAgICAgICAgUGF0aDogcGF0aCxcbiAgICAgICAgJ1N0YXR1cyBjb2RlJzogc3RhdHVzQ29kZSxcbiAgICAgICAgUGVyc2lzdGVudDogcGVyc2lzdCA/ICdcdTI3MDUnIDogJ1x1Mjc0QycsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ3VybCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtBZ2VudCA9IFN5bWJvbCgncHJveHkgYWdlbnQnKVxuY29uc3Qga0NsaWVudCA9IFN5bWJvbCgncHJveHkgY2xpZW50JylcbmNvbnN0IGtQcm94eUhlYWRlcnMgPSBTeW1ib2woJ3Byb3h5IGhlYWRlcnMnKVxuY29uc3Qga1JlcXVlc3RUbHMgPSBTeW1ib2woJ3JlcXVlc3QgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtQcm94eVRscyA9IFN5bWJvbCgncHJveHkgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtDb25uZWN0RW5kcG9pbnQgPSBTeW1ib2woJ2Nvbm5lY3QgZW5kcG9pbnQgZnVuY3Rpb24nKVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvdG9jb2xQb3J0IChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbn1cblxuZnVuY3Rpb24gYnVpbGRQcm94eU9wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gIH1cblxuICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB1cmk6IG9wdHMudXJpLFxuICAgIHByb3RvY29sOiBvcHRzLnByb3RvY29sIHx8ICdodHRwcydcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcbiAgICB0aGlzW2tQcm94eV0gPSBidWlsZFByb3h5T3B0aW9ucyhvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gICAgfVxuXG4gICAgY29uc3QgeyBjbGllbnRGYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnkgfSA9IG9wdHNcblxuICAgIGlmICh0eXBlb2YgY2xpZW50RmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLmNsaWVudEZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trUmVxdWVzdFRsc10gPSBvcHRzLnJlcXVlc3RUbHNcbiAgICB0aGlzW2tQcm94eVRsc10gPSBvcHRzLnByb3h5VGxzXG4gICAgdGhpc1trUHJveHlIZWFkZXJzXSA9IG9wdHMuaGVhZGVycyB8fCB7fVxuXG4gICAgY29uc3QgcmVzb2x2ZWRVcmwgPSBuZXcgVVJMKG9wdHMudXJpKVxuICAgIGNvbnN0IHsgb3JpZ2luLCBwb3J0LCBob3N0LCB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlc29sdmVkVXJsXG5cbiAgICBpZiAob3B0cy5hdXRoICYmIG9wdHMudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5hdXRoIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3B0cy50b2tlbicpXG4gICAgfSBlbHNlIGlmIChvcHRzLmF1dGgpIHtcbiAgICAgIC8qIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBvcHRzLnRva2VuICovXG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtvcHRzLmF1dGh9YFxuICAgIH0gZWxzZSBpZiAob3B0cy50b2tlbikge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gb3B0cy50b2tlblxuICAgIH0gZWxzZSBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2RlY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucHJveHlUbHMgfSlcbiAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnJlcXVlc3RUbHMgfSlcbiAgICB0aGlzW2tDbGllbnRdID0gY2xpZW50RmFjdG9yeShyZXNvbHZlZFVybCwgeyBjb25uZWN0IH0pXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZEhvc3QgPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRIb3N0ICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZEhvc3QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgeyBob3N0IH0gPSBuZXcgVVJMKG9wdHMub3JpZ2luKVxuICAgIGNvbnN0IGhlYWRlcnMgPSBidWlsZEhlYWRlcnMob3B0cy5oZWFkZXJzKVxuICAgIHRocm93SWZQcm94eUF1dGhJc1NlbnQoaGVhZGVycylcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICBob3N0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCB7IGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFJlcXVlc3RSZXRyeUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGlzRGlzdHVyYmVkLCBwYXJzZUhlYWRlcnMsIHBhcnNlUmFuZ2VIZWFkZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIgKHJldHJ5QWZ0ZXIpIHtcbiAgY29uc3QgY3VycmVudCA9IERhdGUubm93KClcbiAgY29uc3QgZGlmZiA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpLmdldFRpbWUoKSAtIGN1cnJlbnRcblxuICByZXR1cm4gZGlmZlxufVxuXG5jbGFzcyBSZXRyeUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcnMpIHtcbiAgICBjb25zdCB7IHJldHJ5T3B0aW9ucywgLi4uZGlzcGF0Y2hPcHRzIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgLy8gUmV0cnkgc2NvcGVkXG4gICAgICByZXRyeTogcmV0cnlGbixcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICAvLyBSZXNwb25zZSBzY29wZWRcbiAgICAgIG1ldGhvZHMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgcmV0cnlBZnRlcixcbiAgICAgIHN0YXR1c0NvZGVzXG4gICAgfSA9IHJldHJ5T3B0aW9ucyA/PyB7fVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGhhbmRsZXJzLmRpc3BhdGNoXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcnMuaGFuZGxlclxuICAgIHRoaXMub3B0cyA9IGRpc3BhdGNoT3B0c1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICB0aW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMuc3RhcnQgPSAwXG4gICAgdGhpcy5lbmQgPSBudWxsXG4gICAgdGhpcy5ldGFnID0gbnVsbFxuICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgLy8gSGFuZGxlIHBvc3NpYmxlIG9uQ29ubmVjdCBkdXBsaWNhdGlvblxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QocmVhc29uID0+IHtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcbiAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgIHRoaXMuYWJvcnQocmVhc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb25cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCgpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uVXBncmFkZSkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICB9XG5cbiAgc3RhdGljIFtrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSAoZXJyLCB7IHN0YXRlLCBvcHRzIH0sIGNiKSB7XG4gICAgY29uc3QgeyBzdGF0dXNDb2RlLCBjb2RlLCBoZWFkZXJzIH0gPSBlcnJcbiAgICBjb25zdCB7IG1ldGhvZCwgcmV0cnlPcHRpb25zIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIHN0YXR1c0NvZGVzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIG1ldGhvZHNcbiAgICB9ID0gcmV0cnlPcHRpb25zXG4gICAgbGV0IHsgY291bnRlciwgY3VycmVudFRpbWVvdXQgfSA9IHN0YXRlXG5cbiAgICBjdXJyZW50VGltZW91dCA9XG4gICAgICBjdXJyZW50VGltZW91dCAhPSBudWxsICYmIGN1cnJlbnRUaW1lb3V0ID4gMCA/IGN1cnJlbnRUaW1lb3V0IDogdGltZW91dFxuXG4gICAgLy8gQW55IGNvZGUgdGhhdCBpcyBub3QgYSBVbmRpY2kncyBvcmlnaW5hdGVkIGFuZCBhbGxvd2VkIHRvIHJldHJ5XG4gICAgaWYgKFxuICAgICAgY29kZSAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfUkVRX1JFVFJZJyAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJyAmJlxuICAgICAgIWVycm9yQ29kZXMuaW5jbHVkZXMoY29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIG1ldGhvZCBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRob2RzKSAmJiAhbWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBzdGF0dXMgY29kZSBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IHN0YXR1cyBjb2RlIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHN0YXR1c0NvZGUgIT0gbnVsbCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0dXNDb2RlcykgJiZcbiAgICAgICFzdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgbWF4IG51bWJlciBvZiByZXRyaWVzXG4gICAgaWYgKGNvdW50ZXIgPiBtYXhSZXRyaWVzKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgIT0gbnVsbCAmJiBoZWFkZXJzWydyZXRyeS1hZnRlciddXG4gICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHtcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBOdW1iZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBpc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKGN1cnJlbnRUaW1lb3V0ICogdGltZW91dEZhY3RvciAqKiBjb3VudGVyLCBtYXhUaW1lb3V0KVxuXG4gICAgc3RhdGUuY3VycmVudFRpbWVvdXQgPSByZXRyeVRpbWVvdXRcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gY2IobnVsbCksIHJldHJ5VGltZW91dClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ICs9IDFcblxuICAgIGlmIChzdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDYpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gTGV0J3Mgc3RhcnQgd2l0aCBhIHdlYWsgZXRhZyBjaGVja1xuICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsICYmIHRoaXMuZXRhZyAhPT0gaGVhZGVycy5ldGFnKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdFVGFnIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gcmFuZ2VcblxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgc3RhcnQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmIHRoaXMuc3RhcnQgIT09IHN0YXJ0LFxuICAgICAgICAgICdjb250ZW50LXJhbmdlIG1pc21hdGNoJ1xuICAgICAgICApXG4gICAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoc3RhcnQpKVxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgZW5kICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGVuZCkgJiYgdGhpcy5lbmQgIT09IGVuZCxcbiAgICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydFxuICAgICAgICB0aGlzLmVuZCA9IGVuZFxuICAgICAgfVxuXG4gICAgICAvLyBXZSBtYWtlIG91ciBiZXN0IHRvIGNoZWNrcG9pbnQgdGhlIGJvZHkgZm9yIGZ1cnRoZXIgcmFuZ2UgaGVhZGVyc1xuICAgICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgICAgICAgdGhpcy5lbmQgPSBjb250ZW50TGVuZ3RoICE9IG51bGwgPyBOdW1iZXIoY29udGVudExlbmd0aCkgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgIHJlc3VtZSxcbiAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlPcHRzLnJldHJ5KFxuICAgICAgZXJyLFxuICAgICAge1xuICAgICAgICBzdGF0ZTogeyBjb3VudGVyOiB0aGlzLnJldHJ5Q291bnQrKywgY3VycmVudFRpbWVvdXQ6IHRoaXMucmV0cnlBZnRlciB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cy5oZWFkZXJzLFxuICAgICAgICAgICAgcmFuZ2U6IGBieXRlcz0ke3RoaXMuc3RhcnR9LSR7dGhpcy5lbmQgPz8gJyd9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICBvbkNvbm5lY3QgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29ubmVjdCguLi5hcmdzKVxuICB9XG5cbiAgb25FcnJvciAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvciguLi5hcmdzKVxuICB9XG5cbiAgb25VcGdyYWRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoLi4uYXJncylcbiAgfVxuXG4gIG9uSGVhZGVycyAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKC4uLmFyZ3MpXG4gIH1cblxuICBvbkRhdGEgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YSguLi5hcmdzKVxuICB9XG5cbiAgb25Db21wbGV0ZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSguLi5hcmdzKVxuICB9XG5cbiAgb25Cb2R5U2VudCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudCguLi5hcmdzKVxuICB9XG59XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IGtHdWFyZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBrSGVhZGVyc01hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAnKVxuY29uc3Qga0hlYWRlcnNTb3J0ZWRNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwIHNvcnRlZCcpXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAweDAwYSB8fCBjb2RlID09PSAweDAwZCB8fCBjb2RlID09PSAweDAwOSB8fCBjb2RlID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLXZhbHVlLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGhlYWRlclZhbHVlTm9ybWFsaXplIChwb3RlbnRpYWxWYWx1ZSkge1xuICAvLyAgVG8gbm9ybWFsaXplIGEgYnl0ZSBzZXF1ZW5jZSBwb3RlbnRpYWxWYWx1ZSwgcmVtb3ZlXG4gIC8vICBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGJ5dGVzIGZyb21cbiAgLy8gIHBvdGVudGlhbFZhbHVlLlxuICBsZXQgaSA9IDA7IGxldCBqID0gcG90ZW50aWFsVmFsdWUubGVuZ3RoXG5cbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGogLSAxKSkpIC0talxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaSkpKSArK2lcblxuICByZXR1cm4gaSA9PT0gMCAmJiBqID09PSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGggPyBwb3RlbnRpYWxWYWx1ZSA6IHBvdGVudGlhbFZhbHVlLnN1YnN0cmluZyhpLCBqKVxufVxuXG5mdW5jdGlvbiBmaWxsIChoZWFkZXJzLCBvYmplY3QpIHtcbiAgLy8gVG8gZmlsbCBhIEhlYWRlcnMgb2JqZWN0IGhlYWRlcnMgd2l0aCBhIGdpdmVuIG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBzZXF1ZW5jZSwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gb2JqZWN0OlxuICAvLyBOb3RlOiB3ZWJpZGwgY29udmVyc2lvbiB0byBhcnJheSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaGVhZGVyID0gb2JqZWN0W2ldXG4gICAgICAvLyAxLiBJZiBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBleGFjdGx5IHR3byBpdGVtcywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChoZWFkZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgZXhwZWN0ZWQgbmFtZS92YWx1ZSBwYWlyIHRvIGJlIGxlbmd0aCAyLCBmb3VuZCAke2hlYWRlci5sZW5ndGh9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIChoZWFkZXJcdTIwMTlzIGZpcnN0IGl0ZW0sIGhlYWRlclx1MjAxOXMgc2Vjb25kIGl0ZW0pIHRvIGhlYWRlcnMuXG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywgaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIC8vIE5vdGU6IG51bGwgc2hvdWxkIHRocm93XG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIG9iamVjdCBpcyBhIHJlY29yZCwgdGhlbiBmb3IgZWFjaCBrZXkgXHUyMTkyIHZhbHVlIGluIG9iamVjdCxcbiAgICAvLyAgICBhcHBlbmQgKGtleSwgdmFsdWUpIHRvIGhlYWRlcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGtleXNbaV0sIG9iamVjdFtrZXlzW2ldXSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlcnMtYXBwZW5kXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZEhlYWRlciAoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgfSlcbiAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gNC4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9IGVsc2UgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCI6XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQobmFtZSwgdmFsdWUpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuY2xhc3MgSGVhZGVyc0xpc3Qge1xuICAvKiogQHR5cGUge1tzdHJpbmcsIHN0cmluZ11bXXxudWxsfSAqL1xuICBjb29raWVzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChpbml0KSB7XG4gICAgaWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXRba0hlYWRlcnNNYXBdKVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBpbml0W2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgdGhpcy5jb29raWVzID0gaW5pdC5jb29raWVzID09PSBudWxsID8gbnVsbCA6IFsuLi5pbml0LmNvb2tpZXNdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0KVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1saXN0LWNvbnRhaW5zXG4gIGNvbnRhaW5zIChuYW1lKSB7XG4gICAgLy8gQSBoZWFkZXIgbGlzdCBsaXN0IGNvbnRhaW5zIGEgaGVhZGVyIG5hbWUgbmFtZSBpZiBsaXN0XG4gICAgLy8gY29udGFpbnMgYSBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIG1hdGNoIGZvciBuYW1lLlxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTWFwXS5oYXMobmFtZSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgbmFtZSB0byB0aGUgZmlyc3Qgc3VjaFxuICAgIC8vICAgIGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgZXhpc3RzID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KGxvd2VyY2FzZU5hbWUpXG5cbiAgICAvLyAyLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGNvbnN0IGRlbGltaXRlciA9IGxvd2VyY2FzZU5hbWUgPT09ICdjb29raWUnID8gJzsgJyA6ICcsICdcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7XG4gICAgICAgIG5hbWU6IGV4aXN0cy5uYW1lLFxuICAgICAgICB2YWx1ZTogYCR7ZXhpc3RzLnZhbHVlfSR7ZGVsaW1pdGVyfSR7dmFsdWV9YFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgICB9XG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPz89IFtdXG4gICAgICB0aGlzLmNvb2tpZXMucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IFt2YWx1ZV1cbiAgICB9XG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IHRoZSB2YWx1ZSBvZlxuICAgIC8vICAgIHRoZSBmaXJzdCBzdWNoIGhlYWRlciB0byB2YWx1ZSBhbmQgcmVtb3ZlIHRoZVxuICAgIC8vICAgIG90aGVycy5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGFwcGVuZCBoZWFkZXIgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobmFtZS50b0xvd2VyQ2FzZSgpKVxuXG4gICAgLy8gMS4gSWYgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsXG4gICAgLy8gICAgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSAweDJDIDB4MjAsIGluIG9yZGVyLlxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlLnZhbHVlXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgW25hbWUsIHsgdmFsdWUgfV0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgIHlpZWxkIFtuYW1lLCB2YWx1ZV1cbiAgICB9XG4gIH1cblxuICBnZXQgZW50cmllcyAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSkge1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKCkpIHtcbiAgICAgICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVycy1jbGFzc1xuY2xhc3MgSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGluaXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0gPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgLy8gVGhlIG5ldyBIZWFkZXJzKGluaXQpIGNvbnN0cnVjdG9yIHN0ZXBzIGFyZTpcblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyBndWFyZCB0byBcIm5vbmVcIi5cbiAgICB0aGlzW2tHdWFyZF0gPSAnbm9uZSdcblxuICAgIC8vIDIuIElmIGluaXQgaXMgZ2l2ZW4sIHRoZW4gZmlsbCB0aGlzIHdpdGggaW5pdC5cbiAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQoaW5pdClcbiAgICAgIGZpbGwodGhpcywgaW5pdClcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuYXBwZW5kJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICByZXR1cm4gYXBwZW5kSGVhZGVyKHRoaXMsIG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmRlbGV0ZScsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCBuYW1lXG4gICAgLy8gICAgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyIG5hbWUsIGFuZFxuICAgIC8vICAgIG5hbWUgaXMgbm90IGEgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzXG4gICAgLy8gICAgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZ2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyXG4gICAgLy8gICAgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmdldChuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWhhc1xuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmhhcycsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIG5hbWU7XG4gICAgLy8gICAgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5zZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gICAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAgIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiBhbmRcbiAgICAvLyAgICBuYW1lL3ZhbHVlIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlcixcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDcuIFNldCAobmFtZSwgdmFsdWUpIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXNcbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uc2V0KG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldHNldGNvb2tpZVxuICBnZXRTZXRDb29raWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBTZXQtQ29va2llYCwgdGhlbiByZXR1cm4gXHUwMEFCIFx1MDBCQi5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgW3V0aWwuaW5zcGVjdC5jdXN0b21dOiB7XG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgZXh0cmFjdEJvZHksIGNsb25lQm9keSwgbWl4aW5Cb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxuY29uc3QgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtIHx8IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlLWNsYXNzXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8vIENyZWF0ZXMgbmV0d29yayBlcnJvciBSZXNwb25zZS5cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICAvLyBUT0RPXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlLWpzb25cbiAgc3RhdGljIGpzb24gKGRhdGEsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5qc29uJyB9KVxuXG4gICAgaWYgKGluaXQgIT09IG51bGwpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNlcmlhbGl6ZSBhIEphdmFTY3JpcHQgdmFsdWUgdG8gSlNPTiBieXRlcyBvbiBkYXRhLlxuICAgIGNvbnN0IGJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKFxuICAgICAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nKGRhdGEpXG4gICAgKVxuXG4gICAgLy8gMi4gTGV0IGJvZHkgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJ5dGVzLlxuICAgIGNvbnN0IGJvZHkgPSBleHRyYWN0Qm9keShieXRlcylcblxuICAgIC8vIDMuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyByZXNwb25zZSxcbiAgICAvLyAgICBcInJlc3BvbnNlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5yZWRpcmVjdCcgfSlcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgc3RhdHVzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oc3RhdHVzKVxuXG4gICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdXJsIHdpdGggY3VycmVudCBzZXR0aW5nc1xuICAgIC8vIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIFRPRE86IGJhc2UtVVJMP1xuICAgIGxldCBwYXJzZWRVUkxcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIGdldEdsb2JhbE9yaWdpbigpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIHVybCksIHtcbiAgICAgICAgY2F1c2U6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZSAnICsgc3RhdHVzKVxuICAgIH1cblxuICAgIC8vIDQuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIGEgbmV3IHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyBUT0RPXG4gICAgdGhpc1trUmVhbG1dID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIHJlc3BvbnNlIHRvIGEgbmV3IHJlc3BvbnNlLlxuICAgIHRoaXNba1N0YXRlXSA9IG1ha2VSZXNwb25zZSh7fSlcblxuICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZFxuICAgIC8vIGlzIFwicmVzcG9uc2VcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gdGhpc1trU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSBudWxsLlxuICAgIGxldCBib2R5V2l0aFR5cGUgPSBudWxsXG5cbiAgICAvLyA0LiBJZiBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBib2R5V2l0aFR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJvZHkuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIHR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGJvZHlXaXRoVHlwZSA9IHsgYm9keTogZXh0cmFjdGVkQm9keSwgdHlwZSB9XG4gICAgfVxuXG4gICAgLy8gNS4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gdGhpcywgaW5pdCwgYW5kIGJvZHlXaXRoVHlwZS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UodGhpcywgaW5pdCwgYm9keVdpdGhUeXBlKVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgdHlwZSwgZS5nLiwgXCJjb3JzXCIuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSB0eXBlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyB0eXBlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgVVJMLCBpZiBpdCBoYXMgb25lOyBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICBjb25zdCB1cmxMaXN0ID0gdGhpc1trU3RhdGVdLnVybExpc3RcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBVUkwgaXMgbnVsbDsgb3RoZXJ3aXNlIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkwsXG4gICAgLy8gc2VyaWFsaXplZCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnQgc2V0IHRvIHRydWUuXG4gICAgY29uc3QgdXJsID0gdXJsTGlzdFt1cmxMaXN0Lmxlbmd0aCAtIDFdID8/IG51bGxcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHVybCwgdHJ1ZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZSB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIHJlZGlyZWN0LlxuICBnZXQgcmVkaXJlY3RlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3RlZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkxcbiAgICAvLyBsaXN0IGhhcyBtb3JlIHRoYW4gb25lIGl0ZW07IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnVybExpc3QubGVuZ3RoID4gMVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICBnZXQgc3RhdHVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW4gb2sgc3RhdHVzLlxuICBnZXQgb2sgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIG9rIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhblxuICAgIC8vIG9rIHN0YXR1czsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW2tTdGF0ZV0uc3RhdHVzIDw9IDI5OVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UuXG4gIGdldCBzdGF0dXNUZXh0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXNUZXh0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXNcbiAgICAvLyBtZXNzYWdlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgaGVhZGVycyBhcyBIZWFkZXJzLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlc3BvbnNlLlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8ICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UuY2xvbmUnLFxuICAgICAgICBtZXNzYWdlOiAnQm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXNwb25zZS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuXG4gICAgLy8gY2xvbmVkUmVzcG9uc2UsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXNwb25zZVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICByZXR1cm4gY2xvbmVkUmVzcG9uc2VPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVzcG9uc2UpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuICB0eXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb2s6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0ZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1c1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1Jlc3BvbnNlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UsIHtcbiAganNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXNwb25zZSByZXNwb25zZSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2UsIHRoZW4gcmV0dXJuIGEgbmV3IGlkZW50aWNhbFxuICAvLyBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbCByZXNwb25zZSBpcyBhIGNsb25lIG9mIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZS5cbiAgaWYgKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmlsdGVyUmVzcG9uc2UoXG4gICAgICBjbG9uZVJlc3BvbnNlKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpLFxuICAgICAgcmVzcG9uc2UudHlwZVxuICAgIClcbiAgfVxuXG4gIC8vIDIuIExldCBuZXdSZXNwb25zZSBiZSBhIGNvcHkgb2YgcmVzcG9uc2UsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1Jlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgLi4ucmVzcG9uc2UsIGJvZHk6IG51bGwgfSlcblxuICAvLyAzLiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgbmV3UmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVzcG9uc2UuYm9keSA9IGNsb25lQm9keShyZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KCksXG4gICAgdXJsTGlzdDogaW5pdC51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG5mdW5jdGlvbiBtYWtlRmlsdGVyZWRSZXNwb25zZSAocmVzcG9uc2UsIHN0YXRlKSB7XG4gIHN0YXRlID0ge1xuICAgIGludGVybmFsUmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgIC4uLnN0YXRlXG4gIH1cblxuICByZXR1cm4gbmV3IFByb3h5KHJlc3BvbnNlLCB7XG4gICAgZ2V0ICh0YXJnZXQsIHApIHtcbiAgICAgIHJldHVybiBwIGluIHN0YXRlID8gc3RhdGVbcF0gOiB0YXJnZXRbcF1cbiAgICB9LFxuICAgIHNldCAodGFyZ2V0LCBwLCB2YWx1ZSkge1xuICAgICAgYXNzZXJ0KCEocCBpbiBzdGF0ZSkpXG4gICAgICB0YXJnZXRbcF0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWZpbHRlcmVkLXJlc3BvbnNlXG5mdW5jdGlvbiBmaWx0ZXJSZXNwb25zZSAocmVzcG9uc2UsIHR5cGUpIHtcbiAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgaWYgKHR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAvLyBBIGJhc2ljIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImJhc2ljXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZS5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcnMnKSB7XG4gICAgLy8gQSBDT1JTIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImNvcnNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyXG4gICAgLy8gbGlzdCB3aG9zZSBuYW1lIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZSwgZ2l2ZW5cbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdjb3JzJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZScpIHtcbiAgICAvLyBBbiBvcGFxdWUgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzXG4gICAgLy8gXCJvcGFxdWVcIiwgVVJMIGxpc3QgaXMgdGhlIGVtcHR5IGxpc3QsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZVxuICAgIC8vIGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZScsXG4gICAgICB1cmxMaXN0OiBPYmplY3QuZnJlZXplKFtdKSxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZXJlZGlyZWN0Jykge1xuICAgIC8vIEFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGVcbiAgICAvLyBpcyBcIm9wYXF1ZXJlZGlyZWN0XCIsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZSBpcyB0aGUgZW1wdHkgYnl0ZVxuICAgIC8vIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZXJlZGlyZWN0JyxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgaGVhZGVyc0xpc3Q6IFtdLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHByb3ByaWF0ZS1uZXR3b3JrLWVycm9yXG5mdW5jdGlvbiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IgKGZldGNoUGFyYW1zLCBlcnIgPSBudWxsKSB7XG4gIC8vIDEuIEFzc2VydDogZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQuXG4gIGFzc2VydChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpXG5cbiAgLy8gMi4gUmV0dXJuIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciBpZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkO1xuICAvLyBvdGhlcndpc2UgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgcmV0dXJuIGlzQWJvcnRlZChmZXRjaFBhcmFtcylcbiAgICA/IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJyksIHsgY2F1c2U6IGVyciB9KSlcbiAgICA6IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdSZXF1ZXN0IHdhcyBjYW5jZWxsZWQuJyksIHsgY2F1c2U6IGVyciB9KSlcbn1cblxuLy8gaHR0cHM6Ly93aGF0cHIub3JnL2ZldGNoLzEzOTIuaHRtbCNpbml0aWFsaXplLWEtcmVzcG9uc2VcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXNwb25zZSAocmVzcG9uc2UsIGluaXQsIGJvZHkpIHtcbiAgLy8gMS4gSWYgaW5pdFtcInN0YXR1c1wiXSBpcyBub3QgaW4gdGhlIHJhbmdlIDIwMCB0byA1OTksIGluY2x1c2l2ZSwgdGhlblxuICAvLyAgICB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gIGlmIChpbml0LnN0YXR1cyAhPT0gbnVsbCAmJiAoaW5pdC5zdGF0dXMgPCAyMDAgfHwgaW5pdC5zdGF0dXMgPiA1OTkpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luaXRbXCJzdGF0dXNcIl0gbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLicpXG4gIH1cblxuICAvLyAyLiBJZiBpbml0W1wic3RhdHVzVGV4dFwiXSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVhc29uLXBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICAvLyBTZWUsIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yOlxuICAgIC8vICAgcmVhc29uLXBocmFzZSAgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAgICBpZiAoIWlzVmFsaWRSZWFzb25QaHJhc2UoU3RyaW5nKGluaXQuc3RhdHVzVGV4dCkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0YXR1c1RleHQnKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byBpbml0W1wic3RhdHVzXCJdLlxuICBpZiAoJ3N0YXR1cycgaW4gaW5pdCAmJiBpbml0LnN0YXR1cyAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXMgPSBpbml0LnN0YXR1c1xuICB9XG5cbiAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gaW5pdFtcInN0YXR1c1RleHRcIl0uXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzVGV4dCA9IGluaXQuc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gNS4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIGZpbGwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgd2l0aCBpbml0W1wiaGVhZGVyc1wiXS5cbiAgaWYgKCdoZWFkZXJzJyBpbiBpbml0ICYmIGluaXQuaGVhZGVycyAhPSBudWxsKSB7XG4gICAgZmlsbChyZXNwb25zZVtrSGVhZGVyc10sIGluaXQuaGVhZGVycylcbiAgfVxuXG4gIC8vIDYuIElmIGJvZHkgd2FzIGdpdmVuLCB0aGVuOlxuICBpZiAoYm9keSkge1xuICAgIC8vIDEuIElmIHJlc3BvbnNlJ3Mgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlJ3MgYm9keSB0byBib2R5J3MgYm9keS5cbiAgICByZXNwb25zZVtrU3RhdGVdLmJvZHkgPSBib2R5LmJvZHlcblxuICAgIC8vIDMuIElmIGJvZHkncyB0eXBlIGlzIG5vbi1udWxsIGFuZCByZXNwb25zZSdzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW5cbiAgICAvLyAgICBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LVR5cGVgLCBib2R5J3MgdHlwZSkgdG8gcmVzcG9uc2UncyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoYm9keS50eXBlICE9IG51bGwgJiYgIXJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuY29udGFpbnMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICByZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC10eXBlJywgYm9keS50eXBlKVxuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKFYpIHx8IHR5cGVzLmlzVHlwZWRBcnJheShWKSB8fCB0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oVilcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZVJlc3BvbnNlLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBSZXNwb25zZSxcbiAgY2xvbmVSZXNwb25zZVxufVxuIiwgIi8qIGdsb2JhbHMgQWJvcnRDb250cm9sbGVyICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBtaXhpbkJvZHksIGNsb25lQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnZXZlbnRzJylcblxubGV0IFRyYW5zZm9ybVN0cmVhbSA9IGdsb2JhbFRoaXMuVHJhbnNmb3JtU3RyZWFtXG5cbmNvbnN0IGtBYm9ydENvbnRyb2xsZXIgPSBTeW1ib2woJ2Fib3J0Q29udHJvbGxlcicpXG5cbmNvbnN0IHJlcXVlc3RGaW5hbGl6ZXIgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHsgc2lnbmFsLCBhYm9ydCB9KSA9PiB7XG4gIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY2xhc3NcbmNsYXNzIFJlcXVlc3Qge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3RcbiAgY29uc3RydWN0b3IgKGlucHV0LCBpbml0ID0ge30pIHtcbiAgICBpZiAoaW5wdXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaW5wdXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhpbnB1dClcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdClcblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3RcbiAgICB0aGlzW2tSZWFsbV0gPSB7XG4gICAgICBzZXR0aW5nc09iamVjdDoge1xuICAgICAgICBiYXNlVXJsOiBnZXRHbG9iYWxPcmlnaW4oKSxcbiAgICAgICAgZ2V0IG9yaWdpbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybD8ub3JpZ2luXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeUNvbnRhaW5lcjogbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgbnVsbC5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuIExldCBmYWxsYmFja01vZGUgYmUgbnVsbC5cbiAgICBsZXQgZmFsbGJhY2tNb2RlID0gbnVsbFxuXG4gICAgLy8gMy4gTGV0IGJhc2VVUkwgYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNi4gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyA3LiBBc3NlcnQ6IGlucHV0IGlzIGEgUmVxdWVzdCBvYmplY3QuXG4gICAgICBhc3NlcnQoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdCB0byBpbnB1dFx1MjAxOXMgcmVxdWVzdC5cbiAgICAgIHJlcXVlc3QgPSBpbnB1dFtrU3RhdGVdXG5cbiAgICAgIC8vIDkuIFNldCBzaWduYWwgdG8gaW5wdXRcdTIwMTlzIHNpZ25hbC5cbiAgICAgIHNpZ25hbCA9IGlucHV0W2tTaWduYWxdXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IG9yaWdpbiBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIG9yaWdpbi5cbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3Qub3JpZ2luXG5cbiAgICAvLyA4LiBMZXQgd2luZG93IGJlIFwiY2xpZW50XCIuXG4gICAgbGV0IHdpbmRvdyA9ICdjbGllbnQnXG5cbiAgICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0IGFuZCBpdHMgb3JpZ2luXG4gICAgLy8gaXMgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW4sIHRoZW4gc2V0IHdpbmRvdyB0byByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC53aW5kb3c/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCcgJiZcbiAgICAgIHNhbWVPcmlnaW4ocmVxdWVzdC53aW5kb3csIG9yaWdpbilcbiAgICApIHtcbiAgICAgIHdpbmRvdyA9IHJlcXVlc3Qud2luZG93XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoaW5pdC53aW5kb3cgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJ3dpbmRvdycgb3B0aW9uICcke3dpbmRvd30nIG11c3QgYmUgbnVsbGApXG4gICAgfVxuXG4gICAgLy8gMTEuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzLCB0aGVuIHNldCB3aW5kb3cgdG8gXCJuby13aW5kb3dcIi5cbiAgICBpZiAoJ3dpbmRvdycgaW4gaW5pdCkge1xuICAgICAgd2luZG93ID0gJ25vLXdpbmRvdydcbiAgICB9XG5cbiAgICAvLyAxMi4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgICAgLy8gVVJMIHJlcXVlc3RcdTIwMTlzIFVSTC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB0aGlzIGlzIHNldCBhcyB0aGUgZmlyc3QgaXRlbSBpbiByZXF1ZXN0J3MgdXJsTGlzdCBpbiBtYWtlUmVxdWVzdFxuICAgICAgLy8gbWV0aG9kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAvLyBoZWFkZXIgbGlzdCBBIGNvcHkgb2YgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogaGVhZGVyc0xpc3QgaXMgY2xvbmVkIGluIG1ha2VSZXF1ZXN0XG4gICAgICBoZWFkZXJzTGlzdDogcmVxdWVzdC5oZWFkZXJzTGlzdCxcbiAgICAgIC8vIHVuc2FmZS1yZXF1ZXN0IGZsYWcgU2V0LlxuICAgICAgdW5zYWZlUmVxdWVzdDogcmVxdWVzdC51bnNhZmVSZXF1ZXN0LFxuICAgICAgLy8gY2xpZW50IFRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cbiAgICAgIGNsaWVudDogdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3RcdTIwMTlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc1x1MjAxOXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVyXHUyMDE5cyBuYW1lL2hlYWRlclx1MjAxOXMgdmFsdWUgdG8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXNcdTIwMTlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dFx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFsXHUyMDE5cyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3Nlclx1MjAxOXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3RcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVzcG9uc2UsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJylcbmNvbnN0IHtcbiAgYnl0ZXNNYXRjaCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIHJlcXVlc3RCYWRQb3J0LFxuICBUQU9DaGVjayxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGlzQmxvYkxpa2UsXG4gIHNhbWVPcmlnaW4sXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgdXJsSGFzSHR0cHNTY2hlbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHNhZmVseUV4dHJhY3RCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzU2V0LFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgc3VicmVzb3VyY2VTZXQsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgbm9kZU1ham9yLCBub2RlTWlub3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGRhdGFVUkxQcm9jZXNzb3IsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsgVHJhbnNmb3JtU3RyZWFtIH0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBHRVRfT1JfSEVBRCA9IFsnR0VUJywgJ0hFQUQnXVxuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gICAgLy8gMiB0ZXJtaW5hdGVkIGxpc3RlbmVycyBnZXQgYWRkZWQgcGVyIHJlcXVlc3QsXG4gICAgLy8gYnV0IG9ubHkgMSBnZXRzIHJlbW92ZWQuIElmIHRoZXJlIGFyZSAyMCByZWRpcmVjdHMsXG4gICAgLy8gMjEgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzExXG4gICAgLy8gVE9ETyAoZml4KTogRmluZCBhbmQgZml4IHJvb3QgY2F1c2UgZm9yIGxlYWtlZCBsaXN0ZW5lci5cbiAgICB0aGlzLnNldE1heExpc3RlbmVycygyMSlcbiAgfVxuXG4gIHRlcm1pbmF0ZSAocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICd0ZXJtaW5hdGVkJ1xuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShyZWFzb24pXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgcmVhc29uKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWNvbnRyb2xsZXItYWJvcnRcbiAgYWJvcnQgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHN0YXRlIHRvIFwiYWJvcnRlZFwiLlxuICAgIHRoaXMuc3RhdGUgPSAnYWJvcnRlZCdcblxuICAgIC8vIDIuIExldCBmYWxsYmFja0Vycm9yIGJlIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAvLyAzLiBTZXQgZXJyb3IgdG8gZmFsbGJhY2tFcnJvciBpZiBpdCBpcyBub3QgZ2l2ZW4uXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZXJyb3IpLlxuICAgIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCBjYXRjaCBpdCwgYW5kIGxldFxuICAgIC8vICAgIHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGZhbGxiYWNrRXJyb3IpLlxuXG4gICAgLy8gNS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIHRvIHNlcmlhbGl6ZWRFcnJvci5cbiAgICB0aGlzLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbiA9IGVycm9yXG5cbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3koZXJyb3IpXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgZXJyb3IpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLW1ldGhvZFxuZnVuY3Rpb24gZmV0Y2ggKGlucHV0LCBpbml0ID0ge30pIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dsb2JhbFRoaXMuZmV0Y2gnIH0pXG5cbiAgLy8gMS4gTGV0IHAgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IG51bGxcblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcbiAgICB9XG4gIClcblxuICAvLyAxMi4gTGV0IGhhbmRsZUZldGNoRG9uZSBnaXZlbiByZXNwb25zZSByZXNwb25zZSBiZSB0byBmaW5hbGl6ZSBhbmRcbiAgLy8gcmVwb3J0IHRpbWluZyB3aXRoIHJlc3BvbnNlLCBnbG9iYWxPYmplY3QsIGFuZCBcImZldGNoXCIuXG4gIGNvbnN0IGhhbmRsZUZldGNoRG9uZSA9IChyZXNwb25zZSkgPT5cbiAgICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyhyZXNwb25zZSwgJ2ZldGNoJylcblxuICAvLyAxMy4gU2V0IGNvbnRyb2xsZXIgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGZldGNoIGdpdmVuIHJlcXVlc3QsXG4gIC8vIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBoYW5kbGVGZXRjaERvbmUsIGFuZCBwcm9jZXNzUmVzcG9uc2VcbiAgLy8gZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3Vic3RlcHM6XG5cbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gMS4gSWYgbG9jYWxseUFib3J0ZWQgaXMgdHJ1ZSwgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChsb2NhbGx5QWJvcnRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgIC8vIDEuIExldCBkZXNlcmlhbGl6ZWRFcnJvciBiZSB0aGUgcmVzdWx0IG9mIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZFxuICAgICAgLy8gICAgYWJvcnQgcmVhc29uIGdpdmVuIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZFxuICAgICAgLy8gICAgcmVsZXZhbnRSZWFsbS5cblxuICAgICAgLy8gMi4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBhbmRcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplZEVycm9yLlxuXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBjb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbilcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDMuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWplY3QgcCB3aXRoIGEgVHlwZUVycm9yXG4gICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcC5yZWplY3QoXG4gICAgICAgIE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignZmV0Y2ggZmFpbGVkJyksIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VPYmplY3QgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHJlbGV2YW50UmVhbG0uXG4gICAgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdClcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHk6IGhhbmRsZUZldGNoRG9uZSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgZGlzcGF0Y2hlcjogaW5pdC5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSAvLyB1bmRpY2lcbiAgfSlcblxuICAvLyAxNC4gUmV0dXJuIHAuXG4gIHJldHVybiBwLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLWFuZC1yZXBvcnQtdGltaW5nXG5mdW5jdGlvbiBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyAocmVzcG9uc2UsIGluaXRpYXRvclR5cGUgPSAnb3RoZXInKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBudWxsIG9yIGVtcHR5LCB0aGVuIHJldHVybi5cbiAgaWYgKCFyZXNwb25zZS51cmxMaXN0Py5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDMuIExldCBvcmlnaW5hbFVSTCBiZSByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3RbMF0uXG4gIGNvbnN0IG9yaWdpbmFsVVJMID0gcmVzcG9uc2UudXJsTGlzdFswXVxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgbGV0IHRpbWluZ0luZm8gPSByZXNwb25zZS50aW1pbmdJbmZvXG5cbiAgLy8gNS4gTGV0IGNhY2hlU3RhdGUgYmUgcmVzcG9uc2VcdTIwMTlzIGNhY2hlIHN0YXRlLlxuICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAvLyA2LiBJZiBvcmlnaW5hbFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4uXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUob3JpZ2luYWxVUkwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA3LiBJZiB0aW1pbmdJbmZvIGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAodGltaW5nSW5mbyA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZyBpcyBub3Qgc2V0LCB0aGVuOlxuICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgLy8gIDEuIFNldCB0aW1pbmdJbmZvIHRvIGEgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8uXG4gICAgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG5cbiAgICAvLyAgMi4gU2V0IGNhY2hlU3RhdGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICBjYWNoZVN0YXRlID0gJydcbiAgfVxuXG4gIC8vIDkuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWVcbiAgLy8gZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICAvLyBUT0RPOiBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHk/XG4gIHRpbWluZ0luZm8uZW5kVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKClcblxuICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDExLiBNYXJrIHJlc291cmNlIHRpbWluZyBmb3IgdGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsXG4gIC8vIGdsb2JhbCwgYW5kIGNhY2hlU3RhdGUuXG4gIG1hcmtSZXNvdXJjZVRpbWluZyhcbiAgICB0aW1pbmdJbmZvLFxuICAgIG9yaWdpbmFsVVJMLFxuICAgIGluaXRpYXRvclR5cGUsXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBjYWNoZVN0YXRlXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Jlc291cmNlLXRpbWluZy8jZGZuLW1hcmstcmVzb3VyY2UtdGltaW5nXG5mdW5jdGlvbiBtYXJrUmVzb3VyY2VUaW1pbmcgKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKSB7XG4gIGlmIChub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMikpIHtcbiAgICBwZXJmb3JtYW5jZS5tYXJrUmVzb3VyY2VUaW1pbmcodGltaW5nSW5mbywgb3JpZ2luYWxVUkwuaHJlZiwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYWJvcnQtZmV0Y2hcbmZ1bmN0aW9uIGFib3J0RmV0Y2ggKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBlcnJvcikge1xuICAvLyBOb3RlOiBBYm9ydFNpZ25hbC5yZWFzb24gd2FzIGFkZGVkIGluIG5vZGUgdjE3LjIuMFxuICAvLyB3aGljaCB3b3VsZCBnaXZlIHVzIGFuIHVuZGVmaW5lZCBlcnJvciB0byByZWplY3Qgd2l0aC5cbiAgLy8gUmVtb3ZlIHRoaXMgb25jZSBub2RlIHYxNiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICBpZiAoIWVycm9yKSB7XG4gICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxuXG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIHAucmVqZWN0KGVycm9yKVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgLy8gdW5kaWNpXG59KSB7XG4gIC8vIDEuIExldCB0YXNrRGVzdGluYXRpb24gYmUgbnVsbC5cbiAgbGV0IHRhc2tEZXN0aW5hdGlvbiA9IG51bGxcblxuICAvLyAyLiBMZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgYmUgZmFsc2UuXG4gIGxldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9IGZhbHNlXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCB0YXNrRGVzdGluYXRpb24gdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICAgIHRhc2tEZXN0aW5hdGlvbiA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gICAgLy8gMi4gU2V0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgY3Jvc3Mtb3JpZ2luXG4gICAgLy8gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9XG4gICAgICByZXF1ZXN0LmNsaWVudC5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNC4gSWYgdXNlUGFyYWxsZWxRdWV1ZSBpcyB0cnVlLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIExldCB0aW1pbmdJbmZvIGJlIGEgbmV3IGZldGNoIHRpbWluZyBpbmZvIHdob3NlIHN0YXJ0IHRpbWUgYW5kXG4gIC8vIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSBhcmUgdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gIC8vIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBjdXJyZW5UaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICBzdGFydFRpbWU6IGN1cnJlblRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0Lm9yaWdpbiA9IHJlcXVlc3QuY2xpZW50Py5vcmlnaW5cbiAgfVxuXG4gIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgaXMgXCJjbGllbnRcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucG9saWN5Q29udGFpbmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5XG4gICAgLy8gY29udGFpbmVyIHRvIGEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyLiBbSFRNTF1cbiAgICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBjbG9uZVBvbGljeUNvbnRhaW5lcihcbiAgICAgICAgcmVxdWVzdC5jbGllbnQucG9saWN5Q29udGFpbmVyXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDIuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgdG8gYSBuZXcgcG9saWN5XG4gICAgICAvLyBjb250YWluZXIuXG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHRgLCB0aGVuOlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdCcpKSB7XG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIGAqLypgLlxuICAgIGNvbnN0IHZhbHVlID0gJyovKidcblxuICAgIC8vIDIuIEEgdXNlciBhZ2VudCBzaG91bGQgc2V0IHZhbHVlIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQsIGlmXG4gICAgLy8gYW55LCBzd2l0Y2hpbmcgb24gcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb246XG4gICAgLy8gXCJkb2N1bWVudFwiXG4gICAgLy8gXCJmcmFtZVwiXG4gICAgLy8gXCJpZnJhbWVcIlxuICAgIC8vIGB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjhgXG4gICAgLy8gXCJpbWFnZVwiXG4gICAgLy8gYGltYWdlL3BuZyxpbWFnZS9zdmcreG1sLGltYWdlLyo7cT0wLjgsKi8qO3E9MC41YFxuICAgIC8vIFwic3R5bGVcIlxuICAgIC8vIGB0ZXh0L2NzcywqLyo7cT0wLjFgXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMy4gQXBwZW5kIGBBY2NlcHRgL3ZhbHVlIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQnLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHQtTGFuZ3VhZ2VgLCB0aGVuXG4gIC8vIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYEFjY2VwdC1MYW5ndWFnZWAvYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG9cbiAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWxhbmd1YWdlJykpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWxhbmd1YWdlJywgJyonKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IGlzIG51bGwsIHRoZW4gdXNlIHJlcXVlc3RcdTIwMTlzIGluaXRpYXRvciBhbmRcbiAgLy8gZGVzdGluYXRpb24gYXBwcm9wcmlhdGVseSBpbiBzZXR0aW5nIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IHRvIGFcbiAgLy8gdXNlci1hZ2VudC1kZWZpbmVkIG9iamVjdC5cbiAgaWYgKHJlcXVlc3QucHJpb3JpdHkgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNS4gSWYgcmVxdWVzdCBpcyBhIHN1YnJlc291cmNlIHJlcXVlc3QsIHRoZW46XG4gIGlmIChzdWJyZXNvdXJjZVNldC5oYXMocmVxdWVzdC5kZXN0aW5hdGlvbikpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNi4gUnVuIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gIG1haW5GZXRjaChmZXRjaFBhcmFtcylcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycilcbiAgICB9KVxuXG4gIC8vIDE3LiBSZXR1cm4gZmV0Y2hQYXJhbSdzIGNvbnRyb2xsZXJcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWFpbi1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gbWFpbkZldGNoIChmZXRjaFBhcmFtcywgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBsb2NhbC1VUkxzLW9ubHkgZmxhZyBpcyBzZXQgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzXG4gIC8vIG5vdCBsb2NhbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5sb2NhbFVSTHNPbmx5ICYmICF1cmxJc0xvY2FsKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignbG9jYWwgVVJMcyBvbmx5JylcbiAgfVxuXG4gIC8vIDQuIFJ1biByZXBvcnQgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdmlvbGF0aW9ucyBmb3IgcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIFVwZ3JhZGUgcmVxdWVzdCB0byBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgaWYgYXBwcm9wcmlhdGUuXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTChyZXF1ZXN0KVxuXG4gIC8vIDYuIElmIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGEgYmFkIHBvcnQsIHNob3VsZCBmZXRjaGluZyByZXF1ZXN0XG4gIC8vIGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudCwgb3Igc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50XG4gIC8vIFNlY3VyaXR5IFBvbGljeSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3RCYWRQb3J0KHJlcXVlc3QpID09PSAnYmxvY2tlZCcpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2JhZCBwb3J0JylcbiAgfVxuICAvLyBUT0RPOiBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQ/XG4gIC8vIFRPRE86IHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3k/XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHBvbGljeSB0byByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyXHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5ID09PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSByZXF1ZXN0LnBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgbm90IFwibm8tcmVmZXJyZXJcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgdG8gdGhlIHJlc3VsdCBvZiBpbnZva2luZyBkZXRlcm1pbmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyICE9PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlciA9IGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIocmVxdWVzdClcbiAgfVxuXG4gIC8vIDkuIFNldCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIHRvIFwiaHR0cHNcIiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCJcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBpcyBhIGRvbWFpblxuICAvLyAtIE1hdGNoaW5nIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IHBlciBLbm93biBIU1RTIEhvc3QgRG9tYWluIE5hbWVcbiAgLy8gICBNYXRjaGluZyByZXN1bHRzIGluIGVpdGhlciBhIHN1cGVyZG9tYWluIG1hdGNoIHdpdGggYW4gYXNzZXJ0ZWRcbiAgLy8gICBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUgb3IgYSBjb25ncnVlbnQgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCBhblxuICAvLyAgIGFzc2VydGVkIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSkuIFtIU1RTXVxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlY3Vyc2l2ZSBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBpbiBwYXJhbGxlbC5cbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuIHNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgLy8gdGhlIHN0ZXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudDpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgb3JpZ2luLFxuICAgICAgICAvLyAgIGFuZCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImJhc2ljXCJcbiAgICAgICAgKHNhbWVPcmlnaW4oY3VycmVudFVSTCwgcmVxdWVzdC51cmwpICYmIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykgfHxcbiAgICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIlxuICAgICAgICAoY3VycmVudFVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgfHxcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiBvciBcIndlYnNvY2tldFwiXG4gICAgICAgIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JylcbiAgICAgICkge1xuICAgICAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJiYXNpY1wiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnYmFzaWMnXG5cbiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcInNhbWUtb3JpZ2luXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgICAgLy8gMS4gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3JlcXVlc3QgbW9kZSBjYW5ub3QgYmUgXCJzYW1lLW9yaWdpblwiJylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgbm90IFwiZm9sbG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdmb2xsb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAgICAgICAncmVkaXJlY3QgbW9kZSBjYW5ub3QgYmUgXCJmb2xsb3dcIiBmb3IgXCJuby1jb3JzXCIgcmVxdWVzdCdcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJvcGFxdWVcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ29wYXF1ZSdcblxuICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZVxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJylcbiAgICAgIH1cblxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZyBpcyBzZXRcbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdW5zYWZlLXJlcXVlc3QgZmxhZyBpcyBzZXQgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgICAgIC8vICAgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCBvciBDT1JTLXVuc2FmZSByZXF1ZXN0LWhlYWRlciBuYW1lcyB3aXRoXG4gICAgICAvLyAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGlzIG5vdCBlbXB0eVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgLy8gICAgMi4gTGV0IGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2hcbiAgICAgIC8vICAgIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICAgICAgLy8gICAgMy4gSWYgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gY2xlYXIgY2FjaGVcbiAgICAgIC8vICAgIGVudHJpZXMgdXNpbmcgcmVxdWVzdC5cbiAgICAgIC8vICAgIDQuIFJldHVybiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlLlxuICAgICAgLy8gVE9ET1xuXG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdjb3JzJ1xuXG4gICAgICAvLyAgICAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gYXdhaXQgaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIDEyLiBJZiByZWN1cnNpdmUgaXMgdHJ1ZSwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZFxuICAvLyByZXNwb25zZSwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJiAhcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiLCB0aGVuOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgLy8gMS4gTGV0IGhlYWRlck5hbWVzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgIC8vIGdpdmVuIGBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUgaXMgbm90IFwiaW5jbHVkZVwiIGFuZCBoZWFkZXJOYW1lc1xuICAgICAgLy8gY29udGFpbnMgYCpgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG9cbiAgICAgIC8vIGFsbCB1bmlxdWUgaGVhZGVyIG5hbWVzIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgaGVhZGVyTmFtZXMgaXMgbm90IG51bGwgb3IgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0byBoZWFkZXJOYW1lcy5cbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAgIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2Jhc2ljJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnY29ycycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnb3BhcXVlJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDE0LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgbGV0IGludGVybmFsUmVzcG9uc2UgPVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuXG4gIC8vIDE1LiBJZiBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eSwgdGhlbiBzZXQgaXQgdG8gYSBjbG9uZSBvZlxuICAvLyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgaWYgKGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QucHVzaCguLi5yZXF1ZXN0LnVybExpc3QpXG4gIH1cblxuICAvLyAxNi4gSWYgcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnIGlzIHVuc2V0LCB0aGVuIHNldFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcuXG4gIGlmICghcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCkge1xuICAgIHJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTcuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnNcbiAgLy8gYmxvY2tlZFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBpdHMgTUlNRSB0eXBlXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBub3NuaWZmXG4gIC8vIFRPRE9cblxuICAvLyAxOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHR5cGUgaXMgXCJvcGFxdWVcIiwgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDIwNixcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgcmFuZ2UtcmVxdWVzdGVkIGZsYWcgaXMgc2V0LCBhbmQgcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZSBhbmQgaW50ZXJuYWxSZXNwb25zZVxuICAvLyB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJyAmJlxuICAgIGludGVybmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkICYmXG4gICAgIXJlcXVlc3QuaGVhZGVycy5jb250YWlucygncmFuZ2UnKVxuICApIHtcbiAgICByZXNwb25zZSA9IGludGVybmFsUmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgfVxuXG4gIC8vIDE5LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gIC8vIGBIRUFEYCBvciBgQ09OTkVDVGAsIG9yIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsXG4gIC8vIHNldCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIG51bGwgYW5kIGRpc3JlZ2FyZCBhbnkgZW5xdWV1aW5nIHRvd2FyZFxuICAvLyBpdCAoaWYgYW55KS5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJlxuICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICBudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cykpXG4gICkge1xuICAgIGludGVybmFsUmVzcG9uc2UuYm9keSA9IG51bGxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXAgPSB0cnVlXG4gIH1cblxuICAvLyAyMC4gSWYgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICBpZiAocmVxdWVzdC5pbnRlZ3JpdHkpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXNcbiAgICAvLyBhbmQgYSBuZXR3b3JrIGVycm9yLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAocmVhc29uKSA9PlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIG1ha2VOZXR3b3JrRXJyb3IocmVhc29uKSlcblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwib3BhcXVlXCIsIG9yIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsXG4gICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzQm9keUVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKGJ5dGVzKSA9PiB7XG4gICAgICAvLyAxLiBJZiBieXRlcyBkbyBub3QgbWF0Y2ggcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLFxuICAgICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIFtTUkldXG4gICAgICBpZiAoIWJ5dGVzTWF0Y2goYnl0ZXMsIHJlcXVlc3QuaW50ZWdyaXR5KSkge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKCdpbnRlZ3JpdHkgbWlzbWF0Y2gnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGJ5dGVzIGFzIGEgYm9keS5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShieXRlcylbMF1cblxuICAgICAgLy8gMy4gUnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gNC4gRnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSBhbmQgcHJvY2Vzc0JvZHlFcnJvci5cbiAgICBhd2FpdCBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIDIxLiBPdGhlcndpc2UsIHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zY2hlbWUtZmV0Y2hcbi8vIGdpdmVuIGEgZmV0Y2ggcGFyYW1zIGZldGNoUGFyYW1zXG5mdW5jdGlvbiBzY2hlbWVGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gTm90ZTogc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkIG9uIHJlZGlyZWN0LCB3aGljaCBzZXRzIGZldGNoUGFyYW1zIHRvIGFcbiAgLy8gY2FuY2VsbGVkIHN0YXRlLCB3ZSBkbyBub3Qgd2FudCB0aGlzIGNvbmRpdGlvbiB0byB0cmlnZ2VyICp1bmxlc3MqIHRoZXJlIGhhdmUgYmVlblxuICAvLyBubyByZWRpcmVjdHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTc3NlxuICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpICYmIGZldGNoUGFyYW1zLnJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKSlcbiAgfVxuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCB7IHJlcXVlc3QgfSA9IGZldGNoUGFyYW1zXG5cbiAgY29uc3QgeyBwcm90b2NvbDogc2NoZW1lIH0gPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGFuZCBydW4gdGhlIGFzc29jaWF0ZWQgc3RlcHM6XG4gIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnYWJvdXQ6Jzoge1xuICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHBhdGggaXMgdGhlIHN0cmluZyBcImJsYW5rXCIsIHRoZW4gcmV0dXJuIGEgbmV3IHJlc3BvbnNlXG4gICAgICAvLyB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSBcdTAwQkIsXG4gICAgICAvLyBhbmQgYm9keSBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSBhcyBhIGJvZHkuXG5cbiAgICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignYWJvdXQgc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQnKSlcbiAgICB9XG4gICAgY2FzZSAnYmxvYjonOiB7XG4gICAgICBpZiAoIXJlc29sdmVPYmplY3RVUkwpIHtcbiAgICAgICAgcmVzb2x2ZU9iamVjdFVSTCA9IHJlcXVpcmUoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeU9iamVjdCA9IHJlc29sdmVPYmplY3RVUkwoYmxvYlVSTEVudHJ5LnRvU3RyaW5nKCkpXG5cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAsIGJsb2JVUkxFbnRyeSBpcyBudWxsLCBvciBibG9iVVJMRW50cnlcdTIwMTlzXG4gICAgICAvLyAgICBvYmplY3QgaXMgbm90IGEgQmxvYiBvYmplY3QsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgfHwgIWlzQmxvYkxpa2UoYmxvYlVSTEVudHJ5T2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ludmFsaWQgbWV0aG9kJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgdGhlIHJlc3VsdCBvZiBzYWZlbHkgZXh0cmFjdGluZyBibG9iVVJMRW50cnlcdTIwMTlzIG9iamVjdC5cbiAgICAgIGNvbnN0IGJvZHlXaXRoVHlwZSA9IHNhZmVseUV4dHJhY3RCb2R5KGJsb2JVUkxFbnRyeU9iamVjdClcblxuICAgICAgLy8gNC4gTGV0IGJvZHkgYmUgYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgY29uc3QgYm9keSA9IGJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAvLyA1LiBMZXQgbGVuZ3RoIGJlIGJvZHlcdTIwMTlzIGxlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgICAgY29uc3QgbGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtib2R5Lmxlbmd0aH1gKVxuXG4gICAgICAvLyA2LiBMZXQgdHlwZSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIHR5cGUgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICAgIGNvbnN0IHR5cGUgPSBib2R5V2l0aFR5cGVbMV0gPz8gJydcblxuICAgICAgLy8gNy4gUmV0dXJuIGEgbmV3IHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzXG4gICAgICAvLyAgICBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIGxlbmd0aCksIChgQ29udGVudC1UeXBlYCwgdHlwZSkgXHUwMEJCLCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN0XHUyMDE5cyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgbWltZVR5cGUpIFx1MDBCQixcbiAgICAgIC8vICAgIGFuZCBib2R5IGlzIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IG1pbWVUeXBlIH1dXG4gICAgICAgIF0sXG4gICAgICAgIGJvZHk6IHNhZmVseUV4dHJhY3RCb2R5KGRhdGFVUkxTdHJ1Y3QuYm9keSlbMF1cbiAgICAgIH0pKVxuICAgIH1cbiAgICBjYXNlICdmaWxlOic6IHtcbiAgICAgIC8vIEZvciBub3csIHVuZm9ydHVuYXRlIGFzIGl0IGlzLCBmaWxlIFVSTHMgYXJlIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG4gICAgICAvLyBXaGVuIGluIGRvdWJ0LCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdub3QgaW1wbGVtZW50ZWQuLi4geWV0Li4uJykpXG4gICAgfVxuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICBjYXNlICdodHRwczonOiB7XG4gICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG5cbiAgICAgIHJldHVybiBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiBtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigndW5rbm93biBzY2hlbWUnKSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLXJlc3BvbnNlXG5mdW5jdGlvbiBmaW5hbGl6ZVJlc3BvbnNlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAvLyAyLCBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGlzIG5vdCBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2hcbiAgLy8gdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBnaXZlbiByZXNwb25zZSwgd2l0aFxuICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUocmVzcG9uc2UpKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1maW5hbGVcbmZ1bmN0aW9uIGZldGNoRmluYWxlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuOlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gXHUwMEFCIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdFswXSBcdTAwQkIuXG4gICAgcmVzcG9uc2UudXJsTGlzdCA9IFtmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybExpc3RbMF1dXG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZ1xuICAgIC8vIGluZm8gZm9yIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICByZXNwb25zZS50aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IGZldGNoUGFyYW1zLnRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgIC8vIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZVxuICAgIC8vIGVuZC1vZi1ib2R5IGdpdmVuIHJlc3BvbnNlIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAhPSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFza1xuICAvLyB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSkpXG4gIH1cblxuICAvLyA0LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkoKVxuICB9IGVsc2Uge1xuICAvLyA1LiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgdHJhbnNmb3JtU3RyZWFtIGJlIGEgbmV3IGEgVHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgLy8gMi4gTGV0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB3aGljaCwgZ2l2ZW4gY2h1bmssXG4gICAgLy8gZW5xdWV1ZXMgY2h1bmsgaW4gdHJhbnNmb3JtU3RyZWFtLlxuICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG1cbiAgICAvLyBhbmQgZmx1c2hBbGdvcml0aG0gc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHJhbnNmb3JtOiBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSxcbiAgICAgIGZsdXNoOiBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHlcbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZSByZXN1bHQgb2YgcGlwaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5IHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuICAgIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbTogcmVzcG9uc2UuYm9keS5zdHJlYW0ucGlwZVRocm91Z2godHJhbnNmb3JtU3RyZWFtKSB9XG4gIH1cblxuICAvLyA2LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSAhPSBudWxsKSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIG51bGxPckJ5dGVzIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBudWxsT3JCeXRlcy5cbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChudWxsT3JCeXRlcykgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIG51bGxPckJ5dGVzKVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3NcbiAgICAvLyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIGZhaWx1cmUuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChmYWlsdXJlKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgZmFpbHVyZSlcblxuICAgIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keVxuICAgIC8vIGdpdmVuIG51bGwsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcHJvY2Vzc0JvZHkobnVsbCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcixcbiAgICAgIC8vIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICAgIHJldHVybiBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cEZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBhY3R1YWxSZXNwb25zZSBiZSBudWxsLlxuICBsZXQgYWN0dWFsUmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDUuIElmIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwiYWxsXCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID09PSAnYWxsJykge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIC8vIDEuIElmIG1ha2VDT1JTUHJlZmxpZ2h0IGlzIHRydWUgYW5kIG9uZSBvZiB0aGVzZSBjb25kaXRpb25zIGlzIHRydWU6XG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBcImZvbGxvd1wiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICAgIH1cblxuICAgIC8vIDMuIFNldCByZXNwb25zZSBhbmQgYWN0dWFsUmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgLy8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgIGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChmZXRjaFBhcmFtcylcblxuICAgIC8vIDQuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBhIENPUlMgY2hlY2tcbiAgICAvLyBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAgIGNvcnNDaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2NvcnMgZmFpbHVyZScpXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgdGhlIFRBTyBjaGVjayBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHNldFxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZy5cbiAgICBpZiAoVEFPQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gSWYgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIG9yIHJlc3BvbnNlXHUyMDE5cyB0eXBlXG4gIC8vIGlzIFwib3BhcXVlXCIsIGFuZCB0aGUgY3Jvc3Mtb3JpZ2luIHJlc291cmNlIHBvbGljeSBjaGVjayB3aXRoXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiwgcmVxdWVzdFx1MjAxOXMgY2xpZW50LCByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbixcbiAgLy8gYW5kIGFjdHVhbFJlc3BvbnNlIHJldHVybnMgYmxvY2tlZCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScpICYmXG4gICAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrKFxuICAgICAgcmVxdWVzdC5vcmlnaW4sXG4gICAgICByZXF1ZXN0LmNsaWVudCxcbiAgICAgIHJlcXVlc3QuZGVzdGluYXRpb24sXG4gICAgICBhY3R1YWxSZXNwb25zZVxuICAgICkgPT09ICdibG9ja2VkJ1xuICApIHtcbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignYmxvY2tlZCcpXG4gIH1cblxuICAvLyA4LiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuOlxuICBpZiAocmVkaXJlY3RTdGF0dXNTZXQuaGFzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAvLyAxLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gYW5kIHRoZSBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHVzZXIgYWdlbnRzIG1heSwgYW5kIGFyZSBldmVuXG4gICAgLy8gZW5jb3VyYWdlZCB0bywgdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODhcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBtYWtlUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgLy8gMi4gU2V0IGh0dHBGZXRjaFBhcmFtcyB0byBhIGNvcHkgb2YgZmV0Y2hQYXJhbXMuXG4gICAgaHR0cEZldGNoUGFyYW1zID0geyAuLi5mZXRjaFBhcmFtcyB9XG5cbiAgICAvLyAzLiBTZXQgaHR0cEZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0IHRvIGh0dHBSZXF1ZXN0LlxuICAgIGh0dHBGZXRjaFBhcmFtcy5yZXF1ZXN0ID0gaHR0cFJlcXVlc3RcbiAgfVxuXG4gIC8vICAgIDMuIExldCBpbmNsdWRlQ3JlZGVudGlhbHMgYmUgdHJ1ZSBpZiBvbmUgb2ZcbiAgY29uc3QgaW5jbHVkZUNyZWRlbnRpYWxzID1cbiAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScgfHxcbiAgICAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ3NhbWUtb3JpZ2luJyAmJlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKVxuXG4gIC8vICAgIDQuIExldCBjb250ZW50TGVuZ3RoIGJlIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBsZW5ndGgsIGlmIGh0dHBSZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBib2R5IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgbnVsbC5cbiAgY29uc3QgY29udGVudExlbmd0aCA9IGh0dHBSZXF1ZXN0LmJvZHkgPyBodHRwUmVxdWVzdC5ib2R5Lmxlbmd0aCA6IG51bGxcblxuICAvLyAgICA1LiBMZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGJlIG51bGwuXG4gIGxldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBudWxsXG5cbiAgLy8gICAgNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGAgb3JcbiAgLy8gICAgYFBVVGAsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBgMGAuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5ib2R5ID09IG51bGwgJiZcbiAgICBbJ1BPU1QnLCAnUFVUJ10uaW5jbHVkZXMoaHR0cFJlcXVlc3QubWV0aG9kKVxuICApIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSAnMCdcbiAgfVxuXG4gIC8vICAgIDcuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0b1xuICAvLyAgICBjb250ZW50TGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKGAke2NvbnRlbnRMZW5ndGh9YClcbiAgfVxuXG4gIC8vICAgIDguIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENvbnRlbnQtTGVuZ3RoYC9jb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBpZiAoY29udGVudExlbmd0aEhlYWRlclZhbHVlICE9IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtbGVuZ3RoJywgY29udGVudExlbmd0aEhlYWRlclZhbHVlKVxuICB9XG5cbiAgLy8gICAgOS4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtTGVuZ3RoYCxcbiAgLy8gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlKSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgMTAuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBodHRwUmVxdWVzdC5rZWVwYWxpdmUpIHtcbiAgICAvLyBOT1RFOiBrZWVwYWxpdmUgaXMgYSBub29wIG91dHNpZGUgb2YgYnJvd3NlciBjb250ZXh0LlxuICB9XG5cbiAgLy8gICAgMTEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBhIFVSTCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYFJlZmVyZXJgL2h0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLFxuICAvLyAgICAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3JlZmVyZXInLCBpc29tb3JwaGljRW5jb2RlKGh0dHBSZXF1ZXN0LnJlZmVycmVyLmhyZWYpKVxuICB9XG5cbiAgLy8gICAgMTIuIEFwcGVuZCBhIHJlcXVlc3QgYE9yaWdpbmAgaGVhZGVyIGZvciBodHRwUmVxdWVzdC5cbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcihodHRwUmVxdWVzdClcblxuICAvLyAgICAxMy4gQXBwZW5kIHRoZSBGZXRjaCBtZXRhZGF0YSBoZWFkZXJzIGZvciBodHRwUmVxdWVzdC4gW0ZFVENILU1FVEFEQVRBXVxuICBhcHBlbmRGZXRjaE1ldGFkYXRhKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDE0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgVXNlci1BZ2VudGAsIHRoZW5cbiAgLy8gICAgdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgVXNlci1BZ2VudGAvZGVmYXVsdCBgVXNlci1BZ2VudGAgdmFsdWUgdG9cbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd1c2VyLWFnZW50JykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3VzZXItYWdlbnQnLCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kaWNpJyA6ICdub2RlJylcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJykpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJylcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJylcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QubW9kZSAhPT0gJ25vLXN0b3JlJyAmJiBodHRwUmVxdWVzdC5tb2RlICE9PSAncmVsb2FkJykge1xuICAgIC8vIFRPRE86IGNhY2hlXG4gIH1cblxuICAvLyA5LiBJZiBhYm9ydGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIsIHRoZW4gcmV0dXJuIGFcbiAgICAvLyBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChodHRwUmVxdWVzdC5tb2RlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuYWJvcnQ/LihlcnIgPz8gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDQuIExldCBodHRwQ2FjaGUgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZSBwYXJ0aXRpb24sXG4gIC8vIGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE86IGNhY2hlXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA1LiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIHJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyA2LiBMZXQgbmV0d29ya1BhcnRpdGlvbktleSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBuZXR3b3JrXG4gIC8vIHBhcnRpdGlvbiBrZXkgZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDcuIExldCBuZXdDb25uZWN0aW9uIGJlIFwieWVzXCIgaWYgZm9yY2VOZXdDb25uZWN0aW9uIGlzIHRydWU7IG90aGVyd2lzZVxuICAvLyBcIm5vXCIuXG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSBmb3JjZU5ld0Nvbm5lY3Rpb24gPyAneWVzJyA6ICdubycgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8vIDguIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBtb2RlOlxuICBpZiAocmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sXG4gICAgLy8gZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgLy8gVE9ET1xuICB9IGVsc2Uge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgY29ubmVjdGlvbiwgZ2l2ZW5cbiAgICAvLyBuZXR3b3JrUGFydGl0aW9uS2V5LCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLFxuICAgIC8vIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGZvcmNlTmV3Q29ubmVjdGlvbi5cbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA5LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgY29ubmVjdGlvbiBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgMi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBjYWxsaW5nIGNsYW1wIGFuZCBjb2Fyc2VuIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gd2l0aCBjb25uZWN0aW9uXHUyMDE5c1xuICAvLyAgICB0aW1pbmcgaW5mbywgdGltaW5nSW5mb1x1MjAxOXMgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDMuIElmIGNvbm5lY3Rpb24gaXMgbm90IGFuIEhUVFAvMiBjb25uZWN0aW9uLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyAgICBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gYXBwZW5kIChgVHJhbnNmZXItRW5jb2RpbmdgLFxuICAvLyAgICBgY2h1bmtlZGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDQuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlcXVlc3Qgc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyAgICBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIG1ha2luZyBhbiBIVFRQIHJlcXVlc3Qgb3ZlciBjb25uZWN0aW9uXG4gIC8vICAgIHVzaW5nIHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNhdmVhdHM6XG5cbiAgLy8gICAgICAgIC0gRm9sbG93IHRoZSByZWxldmFudCByZXF1aXJlbWVudHMgZnJvbSBIVFRQLiBbSFRUUF0gW0hUVFAtU0VNQU5USUNTXVxuICAvLyAgICAgICAgW0hUVFAtQ09ORF0gW0hUVFAtQ0FDSElOR10gW0hUVFAtQVVUSF1cblxuICAvLyAgICAgICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsXG4gIC8vICAgICAgICB0aGVuIHRoZSB1c2VyIGFnZW50IG1heSBoYXZlIGEgYnVmZmVyIG9mIHVwIHRvIDY0IGtpYmlieXRlcyBhbmQgc3RvcmVcbiAgLy8gICAgICAgIGEgcGFydCBvZiByZXF1ZXN0XHUyMDE5cyBib2R5IGluIHRoYXQgYnVmZmVyLiBJZiB0aGUgdXNlciBhZ2VudCByZWFkcyBmcm9tXG4gIC8vICAgICAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGJleW9uZCB0aGF0IGJ1ZmZlclx1MjAxOXMgc2l6ZSBhbmQgdGhlIHVzZXIgYWdlbnQgbmVlZHMgdG9cbiAgLy8gICAgICAgIHJlc2VuZCByZXF1ZXN0LCB0aGVuIGluc3RlYWQgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAgICAgLSBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LFxuICAvLyAgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgYWdlbnRcdTIwMTlzIEhUVFAgcGFyc2VyIHJlY2VpdmVzIHRoZSBmaXJzdCBieXRlXG4gIC8vICAgICAgICBvZiB0aGUgcmVzcG9uc2UgKGUuZy4sIGZyYW1lIGhlYWRlciBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1c1xuICAvLyAgICAgICAgbGluZSBmb3IgSFRUUC8xLngpLlxuXG4gIC8vICAgICAgICAtIFdhaXQgdW50aWwgYWxsIHRoZSBoZWFkZXJzIGFyZSB0cmFuc21pdHRlZC5cblxuICAvLyAgICAgICAgLSBBbnkgcmVzcG9uc2VzIHdob3NlIHN0YXR1cyBpcyBpbiB0aGUgcmFuZ2UgMTAwIHRvIDE5OSwgaW5jbHVzaXZlLFxuICAvLyAgICAgICAgYW5kIGlzIG5vdCAxMDEsIGFyZSB0byBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiBzZXR0aW5nXG4gIC8vICAgICAgICB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgYWJvdmUuXG5cbiAgLy8gICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgVHJhbnNmZXItRW5jb2RpbmdgL2BjaHVua2VkYCBhbmRcbiAgLy8gICAgcmVzcG9uc2UgaXMgdHJhbnNmZXJyZWQgdmlhIEhUVFAvMS4wIG9yIG9sZGVyLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gICAgZXJyb3IuXG5cbiAgLy8gICAgLSBJZiB0aGUgSFRUUCByZXF1ZXN0IHJlc3VsdHMgaW4gYSBUTFMgY2xpZW50IGNlcnRpZmljYXRlIGRpYWxvZywgdGhlbjpcblxuICAvLyAgICAgICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCwgbWFrZSB0aGVcbiAgLy8gICAgICAgIGRpYWxvZyBhdmFpbGFibGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuXG4gIC8vICAgICAgICAyLiBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gVG8gdHJhbnNtaXQgcmVxdWVzdFx1MjAxOXMgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG4gIGxldCByZXF1ZXN0Qm9keSA9IG51bGxcbiAgLy8gMS4gSWYgYm9keSBpcyBudWxsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzXG4gIC8vIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0XG4gIC8vIGVuZC1vZi1ib2R5IGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKHJlcXVlc3QuYm9keSA9PSBudWxsICYmIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYm9keSBpcyBub24tbnVsbDpcblxuICAgIC8vICAgIDEuIExldCBwcm9jZXNzQm9keUNodW5rIGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5Q2h1bmsgPSBhc3luYyBmdW5jdGlvbiAqIChieXRlcykge1xuICAgICAgLy8gMS4gSWYgdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6IHRyYW5zbWl0IGJ5dGVzLlxuICAgICAgeWllbGQgYnl0ZXNcblxuICAgICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHJ1blxuICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGdpdmVuIGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aD8uKGJ5dGVzLmJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NFbmRPZkJvZHkgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0VuZE9mQm9keSA9ICgpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBub24tbnVsbCxcbiAgICAgIC8vIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkuXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keUVycm9yIGdpdmVuIGUgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChlKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGUgaXMgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLCB0aGVuIGFib3J0IGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJbmNyZW1lbnRhbGx5IHJlYWQgcmVxdWVzdFx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keUNodW5rLCBwcm9jZXNzRW5kT2ZCb2R5LFxuICAgIC8vIHByb2Nlc3NCb2R5RXJyb3IsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICByZXF1ZXN0Qm9keSA9IChhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgYnl0ZXMgb2YgcmVxdWVzdC5ib2R5LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcHJvY2Vzc0JvZHlDaHVuayhieXRlcylcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRW5kT2ZCb2R5KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKGVycilcbiAgICAgIH1cbiAgICB9KSgpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIHNvY2tldCBpcyBvbmx5IHByb3ZpZGVkIGZvciB3ZWJzb2NrZXRzXG4gICAgY29uc3QgeyBib2R5LCBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSA9IGF3YWl0IGRpc3BhdGNoKHsgYm9keTogcmVxdWVzdEJvZHkgfSlcblxuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gYm9keVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0ID0gKCkgPT4gaXRlcmF0b3IubmV4dCgpXG5cbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCB9KVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gMTAuIElmIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgIC8vIDEuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgICAgLy8gMi4gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMsIGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihlcnIpXG4gIH1cblxuICAvLyAxMS4gTGV0IHB1bGxBbGdvcml0aG0gYmUgYW4gYWN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgb25nb2luZyBmZXRjaFxuICAvLyBpZiBpdCBpcyBzdXNwZW5kZWQuXG4gIGNvbnN0IHB1bGxBbGdvcml0aG0gPSAoKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUoKVxuICB9XG5cbiAgLy8gMTIuIExldCBjYW5jZWxBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWJvcnRzIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyBjb250cm9sbGVyIHdpdGggcmVhc29uLCBnaXZlbiByZWFzb24uXG4gIGNvbnN0IGNhbmNlbEFsZ29yaXRobSA9IChyZWFzb24pID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgfVxuXG4gIC8vIDEzLiBMZXQgaGlnaFdhdGVyTWFyayBiZSBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiBudW1iZXIsIGNob3NlbiBieVxuICAvLyB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE0LiBMZXQgc2l6ZUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhY2NlcHRzIGEgY2h1bmsgb2JqZWN0XG4gIC8vIGFuZCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOLCBub24taW5maW5pdGUgbnVtYmVyLCBjaG9zZW4gYnkgdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNS4gTGV0IHN0cmVhbSBiZSBhIG5ldyBSZWFkYWJsZVN0cmVhbS5cbiAgLy8gMTYuIFNldCB1cCBzdHJlYW0gd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyBjYW5jZWxBbGdvcml0aG0gc2V0IHRvIGNhbmNlbEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyayBzZXQgdG9cbiAgLy8gaGlnaFdhdGVyTWFyaywgYW5kIHNpemVBbGdvcml0aG0gc2V0IHRvIHNpemVBbGdvcml0aG0uXG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0IChjb250cm9sbGVyKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGF3YWl0IHB1bGxBbGdvcml0aG0oY29udHJvbGxlcilcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBjYW5jZWxBbGdvcml0aG0ocmVhc29uKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaGlnaFdhdGVyTWFyazogMCxcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH1cbiAgKVxuXG4gIC8vIDE3LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGEgbmV3IGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbS5cbiAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5kZXNpcmVkU2l6ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAgICAyLiBJZiBhYm9ydGVkLCB0aGVuOlxuICBmdW5jdGlvbiBvbkFib3J0ZWQgKHJlYXNvbikge1xuICAgIC8vIDIuIElmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnLlxuICAgICAgcmVzcG9uc2UuYWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHN0cmVhbSB3aXRoIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgICAvLyAgICBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmQgYW5cbiAgICAgIC8vICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmVhbG0uXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihcbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvblxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgc3RyZWFtIGlzIHJlYWRhYmxlLCBlcnJvciBzdHJlYW0gd2l0aCBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ3Rlcm1pbmF0ZWQnLCB7XG4gICAgICAgICAgY2F1c2U6IGlzRXJyb3JMaWtlKHJlYXNvbikgPyByZWFzb24gOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgdGhlIHVzZXIgYWdlbnQgc2hvdWxkIGNsb3NlIGNvbm5lY3Rpb24gdW5sZXNzIGl0IHdvdWxkIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgdG8gZG8gc28uXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gMjAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2ggKHsgYm9keSB9KSB7XG4gICAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnLi4vLi4nKS5BZ2VudH0gKi9cbiAgICBjb25zdCBhZ2VudCA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlclxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGFnZW50LmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLFxuICAgICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGJvZHk6IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlci5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGFib3J0KG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIGFib3J0KVxuICAgICAgICAgICAgdGhpcy5hYm9ydCA9IGNvbm5lY3Rpb24uYWJvcnQgPSBhYm9ydFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvbkhlYWRlcnMgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgPCAyMDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjb2RpbmdzID0gW11cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIC8vIEZvciBIMiwgdGhlIGhlYWRlcnMgYXJlIGEgcGxhaW4gSlMgb2JqZWN0XG4gICAgICAgICAgLy8gV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtIGFuZCBpdGVyYXRlIGFjY29yZGluZ2x5XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc0xpc3QpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc0xpc3QpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W2tleV1cbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpLnJldmVyc2UoKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uICYmXG4gICAgICAgICAgICByZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKVxuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRW5jb2RpbmdcbiAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0NPTk5FQ1QnICYmICFudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhzdGF0dXMpICYmICF3aWxsRm9sbG93KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGluZyBvZiBjb2RpbmdzKSB7XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEyLmh0bWwjc2VjdGlvbi03LjJcbiAgICAgICAgICAgICAgaWYgKGNvZGluZyA9PT0gJ3gtZ3ppcCcgfHwgY29kaW5nID09PSAnZ3ppcCcpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlR3VuemlwKHtcbiAgICAgICAgICAgICAgICAgIC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuICAgICAgICAgICAgICAgICAgLy8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG4gICAgICAgICAgICAgICAgICAvLyBieSBjb21tb24gYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdkZWZsYXRlJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVJbmZsYXRlKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5sZW5ndGggPSAwXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBib2R5OiBkZWNvZGVycy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBwaXBlbGluZSh0aGlzLmJvZHksIC4uLmRlY29kZXJzLCAoKSA9PiB7IH0pXG4gICAgICAgICAgICAgIDogdGhpcy5ib2R5Lm9uKCdlcnJvcicsICgpID0+IHt9KVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmJvZHkucHVzaChudWxsKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHk/LmRlc3Ryb3koZXJyb3IpXG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnJvcilcblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcblxuICAgICAgICBvblVwZ3JhZGUgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcblxuICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnRJbml0RGljdC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgbG9hZGVkOiBldmVudEluaXREaWN0LmxvYWRlZCxcbiAgICAgIHRvdGFsOiBldmVudEluaXREaWN0LnRvdGFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aENvbXB1dGFibGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxlbmd0aENvbXB1dGFibGVcbiAgfVxuXG4gIGdldCBsb2FkZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxvYWRlZFxuICB9XG5cbiAgZ2V0IHRvdGFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50b3RhbFxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGVuZ3RoQ29tcHV0YWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2xvYWRlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0b3RhbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGxhYmVsXG4gKi9cbmZ1bmN0aW9uIGdldEVuY29kaW5nIChsYWJlbCkge1xuICBpZiAoIWxhYmVsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gbGFiZWwuXG4gIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgLy8gICAgbGFiZWxzIGxpc3RlZCBpbiB0aGUgdGFibGUgYmVsb3csIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBjb3JyZXNwb25kaW5nIGVuY29kaW5nOyBvdGhlcndpc2UgcmV0dXJuIGZhaWx1cmUuXG4gIHN3aXRjaCAobGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd1bmljb2RlLTEtMS11dGYtOCc6XG4gICAgY2FzZSAndW5pY29kZTExdXRmOCc6XG4gICAgY2FzZSAndW5pY29kZTIwdXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3gtdW5pY29kZTIwdXRmOCc6XG4gICAgICByZXR1cm4gJ1VURi04J1xuICAgIGNhc2UgJzg2Nic6XG4gICAgY2FzZSAnY3A4NjYnOlxuICAgIGNhc2UgJ2NzaWJtODY2JzpcbiAgICBjYXNlICdpYm04NjYnOlxuICAgICAgcmV0dXJuICdJQk04NjYnXG4gICAgY2FzZSAnY3Npc29sYXRpbjInOlxuICAgIGNhc2UgJ2lzby04ODU5LTInOlxuICAgIGNhc2UgJ2lzby1pci0xMDEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMic6XG4gICAgY2FzZSAnaXNvODg1OTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTI6MTk4Nyc6XG4gICAgY2FzZSAnbDInOlxuICAgIGNhc2UgJ2xhdGluMic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTInXG4gICAgY2FzZSAnY3Npc29sYXRpbjMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTMnOlxuICAgIGNhc2UgJ2lzby1pci0xMDknOlxuICAgIGNhc2UgJ2lzbzg4NTktMyc6XG4gICAgY2FzZSAnaXNvODg1OTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTM6MTk4OCc6XG4gICAgY2FzZSAnbDMnOlxuICAgIGNhc2UgJ2xhdGluMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTMnXG4gICAgY2FzZSAnY3Npc29sYXRpbjQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTQnOlxuICAgIGNhc2UgJ2lzby1pci0xMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTktNCc6XG4gICAgY2FzZSAnaXNvODg1OTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQ6MTk4OCc6XG4gICAgY2FzZSAnbDQnOlxuICAgIGNhc2UgJ2xhdGluNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbmN5cmlsbGljJzpcbiAgICBjYXNlICdjeXJpbGxpYyc6XG4gICAgY2FzZSAnaXNvLTg4NTktNSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0NCc6XG4gICAgY2FzZSAnaXNvODg1OS01JzpcbiAgICBjYXNlICdpc284ODU5NSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNToxOTg4JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNSdcbiAgICBjYXNlICdhcmFiaWMnOlxuICAgIGNhc2UgJ2FzbW8tNzA4JzpcbiAgICBjYXNlICdjc2lzbzg4NTk2ZSc6XG4gICAgY2FzZSAnY3Npc284ODU5NmknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5hcmFiaWMnOlxuICAgIGNhc2UgJ2VjbWEtMTE0JzpcbiAgICBjYXNlICdpc28tODg1OS02JzpcbiAgICBjYXNlICdpc28tODg1OS02LWUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtaSc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNyc6XG4gICAgY2FzZSAnaXNvODg1OS02JzpcbiAgICBjYXNlICdpc284ODU5Nic6XG4gICAgY2FzZSAnaXNvXzg4NTktNic6XG4gICAgY2FzZSAnaXNvXzg4NTktNjoxOTg3JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNidcbiAgICBjYXNlICdjc2lzb2xhdGluZ3JlZWsnOlxuICAgIGNhc2UgJ2VjbWEtMTE4JzpcbiAgICBjYXNlICdlbG90XzkyOCc6XG4gICAgY2FzZSAnZ3JlZWsnOlxuICAgIGNhc2UgJ2dyZWVrOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNyc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNic6XG4gICAgY2FzZSAnaXNvODg1OS03JzpcbiAgICBjYXNlICdpc284ODU5Nyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNzoxOTg3JzpcbiAgICBjYXNlICdzdW5fZXVfZ3JlZWsnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS03J1xuICAgIGNhc2UgJ2NzaXNvODg1OThlJzpcbiAgICBjYXNlICdjc2lzb2xhdGluaGVicmV3JzpcbiAgICBjYXNlICdoZWJyZXcnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtZSc6XG4gICAgY2FzZSAnaXNvLWlyLTEzOCc6XG4gICAgY2FzZSAnaXNvODg1OS04JzpcbiAgICBjYXNlICdpc284ODU5OCc6XG4gICAgY2FzZSAnaXNvXzg4NTktOCc6XG4gICAgY2FzZSAnaXNvXzg4NTktODoxOTg4JzpcbiAgICBjYXNlICd2aXN1YWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04J1xuICAgIGNhc2UgJ2NzaXNvODg1OThpJzpcbiAgICBjYXNlICdpc28tODg1OS04LWknOlxuICAgIGNhc2UgJ2xvZ2ljYWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04LUknXG4gICAgY2FzZSAnY3Npc29sYXRpbjYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTEwJzpcbiAgICBjYXNlICdpc28taXItMTU3JzpcbiAgICBjYXNlICdpc284ODU5LTEwJzpcbiAgICBjYXNlICdpc284ODU5MTAnOlxuICAgIGNhc2UgJ2w2JzpcbiAgICBjYXNlICdsYXRpbjYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMCdcbiAgICBjYXNlICdpc28tODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OTEzJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTMnXG4gICAgY2FzZSAnaXNvLTg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE0J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW45JzpcbiAgICBjYXNlICdpc28tODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OTE1JzpcbiAgICBjYXNlICdpc29fODg1OS0xNSc6XG4gICAgY2FzZSAnbDknOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNSdcbiAgICBjYXNlICdpc28tODg1OS0xNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE2J1xuICAgIGNhc2UgJ2Nza29pOHInOlxuICAgIGNhc2UgJ2tvaSc6XG4gICAgY2FzZSAna29pOCc6XG4gICAgY2FzZSAna29pOC1yJzpcbiAgICBjYXNlICdrb2k4X3InOlxuICAgICAgcmV0dXJuICdLT0k4LVInXG4gICAgY2FzZSAna29pOC1ydSc6XG4gICAgY2FzZSAna29pOC11JzpcbiAgICAgIHJldHVybiAnS09JOC1VJ1xuICAgIGNhc2UgJ2NzbWFjaW50b3NoJzpcbiAgICBjYXNlICdtYWMnOlxuICAgIGNhc2UgJ21hY2ludG9zaCc6XG4gICAgY2FzZSAneC1tYWMtcm9tYW4nOlxuICAgICAgcmV0dXJuICdtYWNpbnRvc2gnXG4gICAgY2FzZSAnaXNvLTg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMSc6XG4gICAgY2FzZSAndGlzLTYyMCc6XG4gICAgY2FzZSAnd2luZG93cy04NzQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTg3NCdcbiAgICBjYXNlICdjcDEyNTAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MCc6XG4gICAgY2FzZSAneC1jcDEyNTAnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTAnXG4gICAgY2FzZSAnY3AxMjUxJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTEnOlxuICAgIGNhc2UgJ3gtY3AxMjUxJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUxJ1xuICAgIGNhc2UgJ2Fuc2lfeDMuNC0xOTY4JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnY3AxMjUyJzpcbiAgICBjYXNlICdjcDgxOSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjEnOlxuICAgIGNhc2UgJ2libTgxOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgY2FzZSAnaXNvLWlyLTEwMCc6XG4gICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICBjYXNlICdpc284ODU5MSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICBjYXNlICdsMSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MidcbiAgICBjYXNlICdjcDEyNTMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Myc6XG4gICAgY2FzZSAneC1jcDEyNTMnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTMnXG4gICAgY2FzZSAnY3AxMjU0JzpcbiAgICBjYXNlICdjc2lzb2xhdGluNSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0OCc6XG4gICAgY2FzZSAnaXNvODg1OS05JzpcbiAgICBjYXNlICdpc284ODU5OSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOToxOTg5JzpcbiAgICBjYXNlICdsNSc6XG4gICAgY2FzZSAnbGF0aW41JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTQnOlxuICAgIGNhc2UgJ3gtY3AxMjU0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU0J1xuICAgIGNhc2UgJ2NwMTI1NSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU1JzpcbiAgICBjYXNlICd4LWNwMTI1NSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NSdcbiAgICBjYXNlICdjcDEyNTYnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nic6XG4gICAgY2FzZSAneC1jcDEyNTYnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnXG4gICAgY2FzZSAnY3AxMjU3JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTcnOlxuICAgIGNhc2UgJ3gtY3AxMjU3JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU3J1xuICAgIGNhc2UgJ2NwMTI1OCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU4JzpcbiAgICBjYXNlICd4LWNwMTI1OCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1OCdcbiAgICBjYXNlICd4LW1hYy1jeXJpbGxpYyc6XG4gICAgY2FzZSAneC1tYWMtdWtyYWluaWFuJzpcbiAgICAgIHJldHVybiAneC1tYWMtY3lyaWxsaWMnXG4gICAgY2FzZSAnY2hpbmVzZSc6XG4gICAgY2FzZSAnY3NnYjIzMTInOlxuICAgIGNhc2UgJ2NzaXNvNThnYjIzMTI4MCc6XG4gICAgY2FzZSAnZ2IyMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyLTgwJzpcbiAgICBjYXNlICdnYmsnOlxuICAgIGNhc2UgJ2lzby1pci01OCc6XG4gICAgY2FzZSAneC1nYmsnOlxuICAgICAgcmV0dXJuICdHQksnXG4gICAgY2FzZSAnZ2IxODAzMCc6XG4gICAgICByZXR1cm4gJ2diMTgwMzAnXG4gICAgY2FzZSAnYmlnNSc6XG4gICAgY2FzZSAnYmlnNS1oa3Njcyc6XG4gICAgY2FzZSAnY24tYmlnNSc6XG4gICAgY2FzZSAnY3NiaWc1JzpcbiAgICBjYXNlICd4LXgtYmlnNSc6XG4gICAgICByZXR1cm4gJ0JpZzUnXG4gICAgY2FzZSAnY3NldWNwa2RmbXRqYXBhbmVzZSc6XG4gICAgY2FzZSAnZXVjLWpwJzpcbiAgICBjYXNlICd4LWV1Yy1qcCc6XG4gICAgICByZXR1cm4gJ0VVQy1KUCdcbiAgICBjYXNlICdjc2lzbzIwMjJqcCc6XG4gICAgY2FzZSAnaXNvLTIwMjItanAnOlxuICAgICAgcmV0dXJuICdJU08tMjAyMi1KUCdcbiAgICBjYXNlICdjc3NoaWZ0amlzJzpcbiAgICBjYXNlICdtczkzMic6XG4gICAgY2FzZSAnbXNfa2FuamknOlxuICAgIGNhc2UgJ3NoaWZ0LWppcyc6XG4gICAgY2FzZSAnc2hpZnRfamlzJzpcbiAgICBjYXNlICdzamlzJzpcbiAgICBjYXNlICd3aW5kb3dzLTMxaic6XG4gICAgY2FzZSAneC1zamlzJzpcbiAgICAgIHJldHVybiAnU2hpZnRfSklTJ1xuICAgIGNhc2UgJ2NzZXVja3InOlxuICAgIGNhc2UgJ2Nza3NjNTYwMTE5ODcnOlxuICAgIGNhc2UgJ2V1Yy1rcic6XG4gICAgY2FzZSAnaXNvLWlyLTE0OSc6XG4gICAgY2FzZSAna29yZWFuJzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4Nyc6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODknOlxuICAgIGNhc2UgJ2tzYzU2MDEnOlxuICAgIGNhc2UgJ2tzY181NjAxJzpcbiAgICBjYXNlICd3aW5kb3dzLTk0OSc6XG4gICAgICByZXR1cm4gJ0VVQy1LUidcbiAgICBjYXNlICdjc2lzbzIwMjJrcic6XG4gICAgY2FzZSAnaHotZ2ItMjMxMic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24nOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuLWV4dCc6XG4gICAgY2FzZSAnaXNvLTIwMjIta3InOlxuICAgIGNhc2UgJ3JlcGxhY2VtZW50JzpcbiAgICAgIHJldHVybiAncmVwbGFjZW1lbnQnXG4gICAgY2FzZSAndW5pY29kZWZmZmUnOlxuICAgIGNhc2UgJ3V0Zi0xNmJlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2QkUnXG4gICAgY2FzZSAnY3N1bmljb2RlJzpcbiAgICBjYXNlICdpc28tMTA2NDYtdWNzLTInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1bmljb2RlJzpcbiAgICBjYXNlICd1bmljb2RlZmVmZic6XG4gICAgY2FzZSAndXRmLTE2JzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICAgIGNhc2UgJ3gtdXNlci1kZWZpbmVkJzpcbiAgICAgIHJldHVybiAneC11c2VyLWRlZmluZWQnXG4gICAgZGVmYXVsdDogcmV0dXJuICdmYWlsdXJlJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRFbmNvZGluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2JcdTIwMTlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ1x1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtFdmVudHMsXG4gIGtBYm9ydGVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trU3RhdGVdID0gJ2VtcHR5J1xuICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgdGhpc1trRXJyb3JdID0gbnVsbFxuICAgIHRoaXNba0V2ZW50c10gPSB7XG4gICAgICBsb2FkZW5kOiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBhYm9ydDogbnVsbCxcbiAgICAgIGxvYWQ6IG51bGwsXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICAgIGxvYWRzdGFydDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzQXJyYXlCdWZmZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0FycmF5QnVmZmVyIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQXJyYXlCdWZmZXIuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0JpbmFyeVN0cmluZ1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQmluYXJ5U3RyaW5nIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBCaW5hcnlTdHJpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQmluYXJ5U3RyaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNEYXRhVGV4dFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nXG4gICAqL1xuICByZWFkQXNUZXh0IChibG9iLCBlbmNvZGluZyA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RpbmcgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoZW5jb2RpbmcpXG4gICAgfVxuXG4gICAgLy8gVGhlIHJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIFRleHQgYW5kIGVuY29kaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ1RleHQnLCBlbmNvZGluZylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzRGF0YVVSTFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzRGF0YVVSTCAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzRGF0YVVSTChibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCwgbXVzdFxuICAgIC8vIGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBEYXRhVVJMLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0RhdGFVUkwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1hYm9ydFxuICAgKi9cbiAgYWJvcnQgKCkge1xuICAgIC8vIDEuIElmIHRoaXMncyBzdGF0ZSBpcyBcImVtcHR5XCIgb3IgaWYgdGhpcydzIHN0YXRlIGlzXG4gICAgLy8gICAgXCJkb25lXCIgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbCBhbmQgdGVybWluYXRlXG4gICAgLy8gICAgdGhpcyBhbGdvcml0aG0uXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2VtcHR5JyB8fCB0aGlzW2tTdGF0ZV0gPT09ICdkb25lJykge1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXMncyBzdGF0ZSBpcyBcImxvYWRpbmdcIiBzZXQgdGhpcydzIHN0YXRlIHRvXG4gICAgLy8gICAgXCJkb25lXCIgYW5kIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwuXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSAnZG9uZSdcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGFueSB0YXNrcyBmcm9tIHRoaXMgb24gdGhlIGZpbGUgcmVhZGluZ1xuICAgIC8vICAgIHRhc2sgc291cmNlIGluIGFuIGFmZmlsaWF0ZWQgdGFzayBxdWV1ZSwgdGhlbiByZW1vdmVcbiAgICAvLyAgICB0aG9zZSB0YXNrcyBmcm9tIHRoYXQgdGFzayBxdWV1ZS5cbiAgICB0aGlzW2tBYm9ydGVkXSA9IHRydWVcblxuICAgIC8vIDQuIFRlcm1pbmF0ZSB0aGUgYWxnb3JpdGhtIGZvciB0aGUgcmVhZCBtZXRob2QgYmVpbmcgcHJvY2Vzc2VkLlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDUuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgYWJvcnQgYXQgdGhpcy5cbiAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Fib3J0JywgdGhpcylcblxuICAgIC8vIDYuIElmIHRoaXMncyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoaXMuXG4gICAgaWYgKHRoaXNba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZWFkeXN0YXRlXG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHN3aXRjaCAodGhpc1trU3RhdGVdKSB7XG4gICAgICBjYXNlICdlbXB0eSc6IHJldHVybiB0aGlzLkVNUFRZXG4gICAgICBjYXNlICdsb2FkaW5nJzogcmV0dXJuIHRoaXMuTE9BRElOR1xuICAgICAgY2FzZSAnZG9uZSc6IHJldHVybiB0aGlzLkRPTkVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVzdWx0XG4gICAqL1xuICBnZXQgcmVzdWx0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIHJlc3VsdCBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyByZXN1bHQuXG4gICAgcmV0dXJuIHRoaXNba1Jlc3VsdF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lcnJvclxuICAgKi9cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIGVycm9yIGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIGVycm9yLlxuICAgIHJldHVybiB0aGlzW2tFcnJvcl1cbiAgfVxuXG4gIGdldCBvbmxvYWRlbmQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkZW5kXG4gIH1cblxuICBzZXQgb25sb2FkZW5kIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkZW5kKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCB0aGlzW2tFdmVudHNdLmxvYWRlbmQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpc1trRXZlbnRzXS5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2Fkc3RhcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnRcbiAgfVxuXG4gIHNldCBvbmxvYWRzdGFydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbnByb2dyZXNzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldCBvbnByb2dyZXNzIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5wcm9ncmVzcykge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRcbiAgfVxuXG4gIHNldCBvbmxvYWQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXNba0V2ZW50c10ubG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25hYm9ydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmFib3J0XG4gIH1cblxuICBzZXQgb25hYm9ydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uYWJvcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzW2tFdmVudHNdLmFib3J0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZW1wdHlcbkZpbGVSZWFkZXIuRU1QVFkgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5FTVBUWSA9IDBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1sb2FkaW5nXG5GaWxlUmVhZGVyLkxPQURJTkcgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5MT0FESU5HID0gMVxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWRvbmVcbkZpbGVSZWFkZXIuRE9ORSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkRPTkUgPSAyXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIucHJvdG90eXBlLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkQXNBcnJheUJ1ZmZlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzQmluYXJ5U3RyaW5nOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNEYXRhVVJMOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVzdWx0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2Fkc3RhcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ucHJvZ3Jlc3M6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25hYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZVJlYWRlcicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRmlsZVJlYWRlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0NvbnN0cnVjdDogcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJykua0NvbnN0cnVjdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB1cmxFcXVhbHMsIGZpZWxkVmFsdWVzOiBnZXRGaWVsZFZhbHVlcyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBSZXNwb25zZSwgY2xvbmVSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3N5bWJvbHMnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyB1cmxJc0h0dHBIdHRwc1NjaGVtZSwgY3JlYXRlRGVmZXJyZWRQcm9taXNlLCByZWFkQWxsQnl0ZXMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYXJndW1lbnRzWzFdXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIDIuMi4xXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXNwb25zZXMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIC8vIFdlIGRvbid0IGltcGxlbWVudCBDT1JzIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIHRoZSByZXNwb25zZXMsIHlheSFcblxuICAgIC8vIDUuNS4xXG4gICAgY29uc3QgcmVzcG9uc2VMaXN0ID0gW11cblxuICAgIC8vIDUuNS4yXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDUuNS4yLjFcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHk/LnNvdXJjZSA/PyBudWxsKVxuICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHkgPSBib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0KVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyB9KVxuXG4gICAgcmVxdWVzdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10ocmVxdWVzdHMpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVC4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIGZldGNoaW5nPltdfSAqL1xuICAgIGNvbnN0IGZldGNoQ29udHJvbGxlcnMgPSBbXVxuXG4gICAgLy8gNS5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIC8vIDUuMVxuICAgICAgY29uc3QgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cblxuICAgICAgLy8gNS4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZS4nXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNFxuICAgICAgci5pbml0aWF0b3IgPSAnZmV0Y2gnXG4gICAgICByLmRlc3RpbmF0aW9uID0gJ3N1YnJlc291cmNlJ1xuXG4gICAgICAvLyA1LjVcbiAgICAgIHJlcXVlc3RMaXN0LnB1c2gocilcblxuICAgICAgLy8gNS42XG4gICAgICBjb25zdCByZXNwb25zZVByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgICAvLyA1LjdcbiAgICAgIGZldGNoQ29udHJvbGxlcnMucHVzaChmZXRjaGluZyh7XG4gICAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICAgIGRpc3BhdGNoZXI6IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdDYWNoZS5wdXQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgaW5uZXJSZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlubmVyUmVxdWVzdCA9IHJlcXVlc3Rba1N0YXRlXVxuICAgIH0gZWxzZSB7IC8vIDMuXG4gICAgICBpbm5lclJlcXVlc3QgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGlubmVyUmVxdWVzdC51cmwpIHx8IGlubmVyUmVxdWVzdC5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0dvdCAyMDYgc3RhdHVzJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA3LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHtcbiAgICAgIC8vIDcuMS5cbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgLy8gNy4yLlxuICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgIC8vIDcuMi4xXG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0dvdCAqIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAmJiAoaXNEaXN0dXJiZWQoaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbSkgfHwgaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5kZWxldGUnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSZXF1ZXN0fVxuICAgICAqL1xuICAgIGxldCByID0gbnVsbFxuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKVxuXG4gICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgcmVxdWVzdDogcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG4gICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSghIXJlcXVlc3RSZXNwb25zZXM/Lmxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGUta2V5c1xuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVhZG9ubHkgUmVxdWVzdFtdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDIuMVxuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykgeyAvLyAyLjJcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXF1ZXN0cyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIC8vIDUuMi4xLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgLy8gNS4zLjIuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA1LjQuMVxuICAgICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgICAvLyA1LjQuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdCgnaHR0cHM6Ly9hJylcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrU3RhdGVdID0gcmVxdWVzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrUmVhbG1dID0gcmVxdWVzdC5jbGllbnRcblxuICAgICAgICAvLyA1LjQuMi4xXG4gICAgICAgIHJlcXVlc3RMaXN0LnB1c2gocmVxdWVzdE9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gNS40LjNcbiAgICAgIHByb21pc2UucmVzb2x2ZShPYmplY3QuZnJlZXplKHJlcXVlc3RMaXN0KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2JhdGNoLWNhY2hlLW9wZXJhdGlvbnMtYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSBvcGVyYXRpb25zXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2JhdGNoQ2FjaGVPcGVyYXRpb25zIChvcGVyYXRpb25zKSB7XG4gICAgLy8gMS5cbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgLy8gMi5cbiAgICBjb25zdCBiYWNrdXBDYWNoZSA9IFsuLi5jYWNoZV1cblxuICAgIC8vIDMuXG4gICAgY29uc3QgYWRkZWRJdGVtcyA9IFtdXG5cbiAgICAvLyA0LjFcbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIHRyeSB7XG4gICAgICAvLyA0LjJcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgLy8gNC4yLjFcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlICE9PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24udHlwZSAhPT0gJ3B1dCcpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ29wZXJhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIFwiZGVsZXRlXCIgb3IgXCJwdXRcIidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjJcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24ucmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjNcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zLCBhZGRlZEl0ZW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCc/Pz8nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjRcbiAgICAgICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgICAgICAvLyA0LjIuNVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgLy8gNC4yLjUuMVxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucylcblxuICAgICAgICAgIC8vIFRPRE86IHRoZSBzcGVjIGlzIHdyb25nLCB0aGlzIGlzIG5lZWRlZCB0byBwYXNzIFdQVHNcbiAgICAgICAgICBpZiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi41LjJcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNS4yLjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSAncHV0JykgeyAvLyA0LjIuNlxuICAgICAgICAgIC8vIDQuMi42LjFcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLnJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ3B1dCBvcGVyYXRpb24gc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuMlxuICAgICAgICAgIGNvbnN0IHIgPSBvcGVyYXRpb24ucmVxdWVzdFxuXG4gICAgICAgICAgLy8gNC4yLjYuM1xuICAgICAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdleHBlY3RlZCBodHRwIG9yIGh0dHBzIHNjaGVtZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNFxuICAgICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBnZXQgbWV0aG9kJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi41XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ29wdGlvbnMgbXVzdCBub3QgYmUgZGVmaW5lZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNlxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0KVxuXG4gICAgICAgICAgLy8gNC4yLjYuN1xuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi42LjcuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi44XG4gICAgICAgICAgY2FjaGUucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG5cbiAgICAgICAgICAvLyA0LjIuNi4xMFxuICAgICAgICAgIGFkZGVkSXRlbXMucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuN1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgfVxuXG4gICAgICAvLyA0LjNcbiAgICAgIHJldHVybiByZXN1bHRMaXN0XG4gICAgfSBjYXRjaCAoZSkgeyAvLyA1LlxuICAgICAgLy8gNS4xXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QubGVuZ3RoID0gMFxuXG4gICAgICAvLyA1LjJcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGJhY2t1cENhY2hlXG5cbiAgICAgIC8vIDUuM1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNxdWVyeS1jYWNoZVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gdGFyZ2V0U3RvcmFnZVxuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNxdWVyeUNhY2hlIChyZXF1ZXN0UXVlcnksIG9wdGlvbnMsIHRhcmdldFN0b3JhZ2UpIHtcbiAgICAvKiogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9ICovXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICBjb25zdCBzdG9yYWdlID0gdGFyZ2V0U3RvcmFnZSA/PyB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IFtjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZV0gPSByZXF1ZXN0UmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLiNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0ocmVxdWVzdFF1ZXJ5LCBjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3JlcXVlc3QtbWF0Y2hlcy1jYWNoZWQtaXRlbS1hbGdvcml0aG1cbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSAocmVxdWVzdFF1ZXJ5LCByZXF1ZXN0LCByZXNwb25zZSA9IG51bGwsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiAob3B0aW9ucz8uaWdub3JlTWV0aG9kID09PSBmYWxzZSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH1cblxuICAgIGNvbnN0IHF1ZXJ5VVJMID0gbmV3IFVSTChyZXF1ZXN0UXVlcnkudXJsKVxuXG4gICAgY29uc3QgY2FjaGVkVVJMID0gbmV3IFVSTChyZXF1ZXN0LnVybClcblxuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTZWFyY2gpIHtcbiAgICAgIGNhY2hlZFVSTC5zZWFyY2ggPSAnJ1xuXG4gICAgICBxdWVyeVVSTC5zZWFyY2ggPSAnJ1xuICAgIH1cblxuICAgIGlmICghdXJsRXF1YWxzKHF1ZXJ5VVJMLCBjYWNoZWRVUkwsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXNwb25zZSA9PSBudWxsIHx8XG4gICAgICBvcHRpb25zPy5pZ25vcmVWYXJ5IHx8XG4gICAgICAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0VmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcXVlc3RRdWVyeS5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcblxuICAgICAgLy8gSWYgb25lIGhhcyB0aGUgaGVhZGVyIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgb3Igb25lIGhhc1xuICAgICAgLy8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHJlcXVlc3RWYWx1ZSAhPT0gcXVlcnlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGlmIChvcHRpb25zLmNhY2hlTmFtZSAhPSBudWxsKSB7XG4gICAgICAvLyAxLjEuMS4xXG4gICAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhvcHRpb25zLmNhY2hlTmFtZSkpIHtcbiAgICAgICAgLy8gMS4xLjEuMS4xXG4gICAgICAgIGNvbnN0IGNhY2hlTGlzdCA9IHRoaXMuI2NhY2hlcy5nZXQob3B0aW9ucy5jYWNoZU5hbWUpXG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICByZXR1cm4gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyAyLlxuICAgICAgLy8gMi4yXG4gICAgICBmb3IgKGNvbnN0IGNhY2hlTGlzdCBvZiB0aGlzLiNjYWNoZXMudmFsdWVzKCkpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIC8vIDIuMi4xLjJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1oYXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGhhcyAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuaGFzJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm9wZW4nIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xXG4gICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKSkge1xuICAgICAgLy8gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJykgIT09IGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpXG5cbiAgICAgIC8vIDIuMS4xXG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuI2NhY2hlcy5nZXQoY2FjaGVOYW1lKVxuXG4gICAgICAvLyAyLjEuMS4xXG4gICAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICAgIH1cblxuICAgIC8vIDIuMlxuICAgIGNvbnN0IGNhY2hlID0gW11cblxuICAgIC8vIDIuM1xuICAgIHRoaXMuI2NhY2hlcy5zZXQoY2FjaGVOYW1lLCBjYWNoZSlcblxuICAgIC8vIDIuNFxuICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1kZWxldGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuZGVsZXRlJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuZGVsZXRlKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWtleXNcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgLy8gMi4xXG4gICAgY29uc3Qga2V5cyA9IHRoaXMuI2NhY2hlcy5rZXlzKClcblxuICAgIC8vIDIuMlxuICAgIHJldHVybiBbLi4ua2V5c11cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVN0b3JhZ2UucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZVN0b3JhZ2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVN0b3JhZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDVExFeGNsdWRpbmdIdGFiICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwIHx8IGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgfHwgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuYW1lKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPD0gMHgyMCB8fCBjb2RlID4gMHg3RikgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9J1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID09PSAweDIyIHx8XG4gICAgICBjb2RlID09PSAweDJDIHx8XG4gICAgICBjb2RlID09PSAweDNCIHx8XG4gICAgICBjb2RlID09PSAweDVDIHx8XG4gICAgICBjb2RlID4gMHg3RSAvLyBub24tYXNjaWlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZWFkZXIgdmFsdWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVQYXRoIChwYXRoKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBwYXRoKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKGNvZGUgPCAweDIxIHx8IGNoYXIgPT09ICc7Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBwYXRoJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJIGhhdmUgbm8gaWRlYSB3aHkgdGhlc2UgdmFsdWVzIGFyZW4ndCBhbGxvd2VkIHRvIGJlIGhvbmVzdCxcbiAqIGJ1dCBEZW5vIHRlc3RzIHRoZXNlLiAtIEtoYWZyYVxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIGlmIChcbiAgICBkb21haW4uc3RhcnRzV2l0aCgnLScpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCcuJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy0nKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICBjb25zdCBkYXlzID0gW1xuICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAgICdUaHUnLCAnRnJpJywgJ1NhdCdcbiAgXVxuXG4gIGNvbnN0IG1vbnRocyA9IFtcbiAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYydcbiAgXVxuXG4gIGNvbnN0IGRheU5hbWUgPSBkYXlzW2RhdGUuZ2V0VVRDRGF5KCldXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtb250aCA9IG1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgY29uc3QgaG91ciA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9IEdNVGBcbn1cblxuLyoqXG4gbWF4LWFnZS1hdiAgICAgICAgPSBcIk1heC1BZ2U9XCIgbm9uLXplcm8tZGlnaXQgKkRJR0lUXG4gICAgICAgICAgICAgICAgICAgICAgIDsgSW4gcHJhY3RpY2UsIGJvdGggZXhwaXJlcy1hdiBhbmQgbWF4LWFnZS1hdlxuICAgICAgICAgICAgICAgICAgICAgICA7IGFyZSBsaW1pdGVkIHRvIGRhdGVzIHJlcHJlc2VudGFibGUgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgIDsgdXNlciBhZ2VudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhBZ2VcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVNYXhBZ2UgKG1heEFnZSkge1xuICBpZiAobWF4QWdlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbWF4LWFnZScpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY1I3NlY3Rpb24tNC4xLjFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuQ29va2llfSBjb29raWVcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5IChjb29raWUpIHtcbiAgaWYgKGNvb2tpZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YWxpZGF0ZUNvb2tpZU5hbWUoY29va2llLm5hbWUpXG4gIHZhbGlkYXRlQ29va2llVmFsdWUoY29va2llLnZhbHVlKVxuXG4gIGNvbnN0IG91dCA9IFtgJHtjb29raWUubmFtZX09JHtjb29raWUudmFsdWV9YF1cblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjFcbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4yXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19Ib3N0LScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgICBjb29raWUuZG9tYWluID0gbnVsbFxuICAgIGNvb2tpZS5wYXRoID0gJy8nXG4gIH1cblxuICBpZiAoY29va2llLnNlY3VyZSkge1xuICAgIG91dC5wdXNoKCdTZWN1cmUnKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5odHRwT25seSkge1xuICAgIG91dC5wdXNoKCdIdHRwT25seScpXG4gIH1cblxuICBpZiAodHlwZW9mIGNvb2tpZS5tYXhBZ2UgPT09ICdudW1iZXInKSB7XG4gICAgdmFsaWRhdGVDb29raWVNYXhBZ2UoY29va2llLm1heEFnZSlcbiAgICBvdXQucHVzaChgTWF4LUFnZT0ke2Nvb2tpZS5tYXhBZ2V9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZG9tYWluKSB7XG4gICAgdmFsaWRhdGVDb29raWVEb21haW4oY29va2llLmRvbWFpbilcbiAgICBvdXQucHVzaChgRG9tYWluPSR7Y29va2llLmRvbWFpbn1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDb29raWVQYXRoKGNvb2tpZS5wYXRoKVxuICAgIG91dC5wdXNoKGBQYXRoPSR7Y29va2llLnBhdGh9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZXhwaXJlcyAmJiBjb29raWUuZXhwaXJlcy50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgIG91dC5wdXNoKGBFeHBpcmVzPSR7dG9JTUZEYXRlKGNvb2tpZS5leHBpcmVzKX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5zYW1lU2l0ZSkge1xuICAgIG91dC5wdXNoKGBTYW1lU2l0ZT0ke2Nvb2tpZS5zYW1lU2l0ZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGNvb2tpZS51bnBhcnNlZCkge1xuICAgIGlmICghcGFydC5pbmNsdWRlcygnPScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5wYXJzZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IFtrZXksIC4uLnZhbHVlXSA9IHBhcnQuc3BsaXQoJz0nKVxuXG4gICAgb3V0LnB1c2goYCR7a2V5LnRyaW0oKX09JHt2YWx1ZS5qb2luKCc9Jyl9YClcbiAgfVxuXG4gIHJldHVybiBvdXQuam9pbignOyAnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNDVExFeGNsdWRpbmdIdGFiLFxuICB2YWxpZGF0ZUNvb2tpZU5hbWUsXG4gIHZhbGlkYXRlQ29va2llUGF0aCxcbiAgdmFsaWRhdGVDb29raWVWYWx1ZSxcbiAgdG9JTUZEYXRlLFxuICBzdHJpbmdpZnlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwYXJzZVNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb29raWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZXxudW1iZXJ8dW5kZWZpbmVkfSBleHBpcmVzXG4gKiBAcHJvcGVydHkge251bWJlcnx1bmRlZmluZWR9IG1heEFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBkb21haW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gcGF0aFxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gc2VjdXJlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBodHRwT25seVxuICogQHByb3BlcnR5IHsnU3RyaWN0J3wnTGF4J3wnTm9uZSd9IHNhbWVTaXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSB1bnBhcnNlZFxuICovXG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWUgPSBoZWFkZXJzLmdldCgnY29va2llJylcbiAgY29uc3Qgb3V0ID0ge31cblxuICBpZiAoIWNvb2tpZSkge1xuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGZvciAoY29uc3QgcGllY2Ugb2YgY29va2llLnNwbGl0KCc7JykpIHtcbiAgICBjb25zdCBbbmFtZSwgLi4udmFsdWVdID0gcGllY2Uuc3BsaXQoJz0nKVxuXG4gICAgb3V0W25hbWUudHJpbSgpXSA9IHZhbHVlLmpvaW4oJz0nKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7eyBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcgfXx1bmRlZmluZWR9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWxldGVDb29raWUgKGhlYWRlcnMsIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ2RlbGV0ZUNvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKG5hbWUpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldFNldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVGhpcyBpcyBhIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIHVuaXF1ZSB1c2VkXG4vLyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBlbmRwb2ludCBhY2NlcHRzIHdlYnNvY2tldFxuLy8gY29ubmVjdGlvbnMuXG4vLyBTZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTEuM1xuY29uc3QgdWlkID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSdcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuY29uc3Qgc3RhdGVzID0ge1xuICBDT05ORUNUSU5HOiAwLFxuICBPUEVOOiAxLFxuICBDTE9TSU5HOiAyLFxuICBDTE9TRUQ6IDNcbn1cblxuY29uc3Qgb3Bjb2RlcyA9IHtcbiAgQ09OVElOVUFUSU9OOiAweDAsXG4gIFRFWFQ6IDB4MSxcbiAgQklOQVJZOiAweDIsXG4gIENMT1NFOiAweDgsXG4gIFBJTkc6IDB4OSxcbiAgUE9ORzogMHhBXG59XG5cbmNvbnN0IG1heFVuc2lnbmVkMTZCaXQgPSAyICoqIDE2IC0gMSAvLyA2NTUzNVxuXG5jb25zdCBwYXJzZXJTdGF0ZXMgPSB7XG4gIElORk86IDAsXG4gIFBBWUxPQURMRU5HVEhfMTY6IDIsXG4gIFBBWUxPQURMRU5HVEhfNjQ6IDMsXG4gIFJFQURfREFUQTogNFxufVxuXG5jb25zdCBlbXB0eUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtXZWJTb2NrZXRVUkw6IFN5bWJvbCgndXJsJyksXG4gIGtSZWFkeVN0YXRlOiBTeW1ib2woJ3JlYWR5IHN0YXRlJyksXG4gIGtDb250cm9sbGVyOiBTeW1ib2woJ2NvbnRyb2xsZXInKSxcbiAga1Jlc3BvbnNlOiBTeW1ib2woJ3Jlc3BvbnNlJyksXG4gIGtCaW5hcnlUeXBlOiBTeW1ib2woJ2JpbmFyeSB0eXBlJyksXG4gIGtTZW50Q2xvc2U6IFN5bWJvbCgnc2VudCBjbG9zZScpLFxuICBrUmVjZWl2ZWRDbG9zZTogU3ltYm9sKCdyZWNlaXZlZCBjbG9zZScpLFxuICBrQnl0ZVBhcnNlcjogU3ltYm9sKCdieXRlIHBhcnNlcicpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBNZXNzYWdlRXZlbnQsIEVycm9yRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0VzdGFibGlzaGVkICh3cykge1xuICAvLyBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGFzIHByb3ZpZGVkIGZvciBhYm92ZSwgaXQgaXNcbiAgLy8gc2FpZCB0aGF0IF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgRXN0YWJsaXNoZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBpbiB0aGUgT1BFTiBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLk9QRU5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2luZyAod3MpIHtcbiAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0lOR1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0V2ZW50SW5pdCB8IHVuZGVmaW5lZH0gZXZlbnRJbml0RGljdFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQgKGUsIHRhcmdldCwgZXZlbnRDb25zdHJ1Y3RvciA9IEV2ZW50LCBldmVudEluaXREaWN0KSB7XG4gIC8vIDEuIElmIGV2ZW50Q29uc3RydWN0b3IgaXMgbm90IGdpdmVuLCB0aGVuIGxldCBldmVudENvbnN0cnVjdG9yIGJlIEV2ZW50LlxuXG4gIC8vIDIuIExldCBldmVudCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGV2ZW50IGdpdmVuIGV2ZW50Q29uc3RydWN0b3IsXG4gIC8vICAgIGluIHRoZSByZWxldmFudCByZWFsbSBvZiB0YXJnZXQuXG4gIC8vIDMuIEluaXRpYWxpemUgZXZlbnRcdTIwMTlzIHR5cGUgYXR0cmlidXRlIHRvIGUuXG4gIGNvbnN0IGV2ZW50ID0gbmV3IGV2ZW50Q29uc3RydWN0b3IoZSwgZXZlbnRJbml0RGljdCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgLy8gNC4gSW5pdGlhbGl6ZSBhbnkgb3RoZXIgSURMIGF0dHJpYnV0ZXMgb2YgZXZlbnQgYXMgZGVzY3JpYmVkIGluIHRoZVxuICAvLyAgICBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLlxuXG4gIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGRpc3BhdGNoaW5nIGV2ZW50IGF0IHRhcmdldCwgd2l0aCBsZWdhY3kgdGFyZ2V0XG4gIC8vICAgIG92ZXJyaWRlIGZsYWcgc2V0IGlmIHNldC5cbiAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgT3Bjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBhcHBsaWNhdGlvbiBkYXRhXG4gKi9cbmZ1bmN0aW9uIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCAod3MsIHR5cGUsIGRhdGEpIHtcbiAgLy8gMS4gSWYgcmVhZHkgc3RhdGUgaXMgbm90IE9QRU4gKDEpLCB0aGVuIHJldHVybi5cbiAgaWYgKHdzW2tSZWFkeVN0YXRlXSAhPT0gc3RhdGVzLk9QRU4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIExldCBkYXRhRm9yRXZlbnQgYmUgZGV0ZXJtaW5lZCBieSBzd2l0Y2hpbmcgb24gdHlwZSBhbmQgYmluYXJ5IHR5cGU6XG4gIGxldCBkYXRhRm9yRXZlbnRcblxuICBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBUZXh0XG4gICAgLy8gICAgICBhIG5ldyBET01TdHJpbmcgY29udGFpbmluZyBkYXRhXG4gICAgdHJ5IHtcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShkYXRhKVxuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBpbnZhbGlkIFVURi04IGluIHRleHQgZnJhbWUuJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBvcGNvZGVzLkJJTkFSWSkge1xuICAgIGlmICh3c1trQmluYXJ5VHlwZV0gPT09ICdibG9iJykge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYmxvYlwiXG4gICAgICAvLyAgICAgIGEgbmV3IEJsb2Igb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICAgIG9iamVjdCwgdGhhdCByZXByZXNlbnRzIGRhdGEgYXMgaXRzIHJhdyBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgQmxvYihbZGF0YV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImFycmF5YnVmZmVyXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQXJyYXlCdWZmZXIgb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGVcbiAgICAgIC8vICAgICAgV2ViU29ja2V0IG9iamVjdCwgd2hvc2UgY29udGVudHMgYXJlIGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBVaW50OEFycmF5KGRhdGEpLmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgTWVzc2FnZUV2ZW50LCB7XG4gICAgb3JpZ2luOiB3c1trV2ViU29ja2V0VVJMXS5vcmlnaW4sXG4gICAgZGF0YTogZGF0YUZvckV2ZW50XG4gIH0pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyNjE2XG4gKiBAc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM5ODQwN1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3RvY29sXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJwcm90b2NvbCAocHJvdG9jb2wpIHtcbiAgLy8gSWYgcHJlc2VudCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMgb25lXG4gIC8vIG9yIG1vcmUgY29tbWEtc2VwYXJhdGVkIHN1YnByb3RvY29sIHRoZSBjbGllbnQgd2lzaGVzIHRvIHNwZWFrLFxuICAvLyBvcmRlcmVkIGJ5IHByZWZlcmVuY2UuICBUaGUgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGlzIHZhbHVlXG4gIC8vIE1VU1QgYmUgbm9uLWVtcHR5IHN0cmluZ3Mgd2l0aCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVKzAwMjEgdG9cbiAgLy8gVSswMDdFIG5vdCBpbmNsdWRpbmcgc2VwYXJhdG9yIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpblxuICAvLyBbUkZDMjYxNl0gYW5kIE1VU1QgYWxsIGJlIHVuaXF1ZSBzdHJpbmdzLlxuICBpZiAocHJvdG9jb2wubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgcHJvdG9jb2wpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fFxuICAgICAgY29kZSA+IDB4N0UgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9JyB8fFxuICAgICAgY29kZSA9PT0gMzIgfHwgLy8gU1BcbiAgICAgIGNvZGUgPT09IDkgLy8gSFRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LTRcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlIChjb2RlKSB7XG4gIGlmIChjb2RlID49IDEwMDAgJiYgY29kZSA8IDEwMTUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29kZSAhPT0gMTAwNCAmJiAvLyByZXNlcnZlZFxuICAgICAgY29kZSAhPT0gMTAwNSAmJiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICAgIGNvZGUgIT09IDEwMDYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICovXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiAod3MsIHJlYXNvbikge1xuICBjb25zdCB7IFtrQ29udHJvbGxlcl06IGNvbnRyb2xsZXIsIFtrUmVzcG9uc2VdOiByZXNwb25zZSB9ID0gd3NcblxuICBjb250cm9sbGVyLmFib3J0KClcblxuICBpZiAocmVzcG9uc2U/LnNvY2tldCAmJiAhcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3llZCkge1xuICAgIHJlc3BvbnNlLnNvY2tldC5kZXN0cm95KClcbiAgfVxuXG4gIGlmIChyZWFzb24pIHtcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsIEVycm9yRXZlbnQsIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IocmVhc29uKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNDbG9zZWQsXG4gIGZpcmVFdmVudCxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBpc1ZhbGlkU3RhdHVzQ29kZSxcbiAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sXG4gIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgdWlkLCBzdGF0ZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1JlYWR5U3RhdGUsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyLFxuICBrUmVjZWl2ZWRDbG9zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IENsb3NlRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcbmNvbnN0IHsgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5vcGVuID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpXG5jaGFubmVscy5jbG9zZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJylcbmNoYW5uZWxzLnNvY2tldEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnkpID0+IHZvaWR9IG9uRXN0YWJsaXNoXG4gKiBAcGFyYW0ge1BhcnRpYWw8aW1wb3J0KCcuLi8uLi90eXBlcy93ZWJzb2NrZXQnKS5XZWJTb2NrZXRJbml0Pn0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uICh1cmwsIHByb3RvY29scywgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ25vbmUnLFxuICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInLFxuICAgIG1vZGU6ICd3ZWJzb2NrZXQnLFxuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgY2FjaGU6ICduby1zdG9yZScsXG4gICAgcmVkaXJlY3Q6ICdlcnJvcidcbiAgfSlcblxuICAvLyBOb3RlOiB1bmRpY2kgZXh0ZW5zaW9uLCBhbGxvdyBzZXR0aW5nIGN1c3RvbSBoZWFkZXJzLlxuICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpW2tIZWFkZXJzTGlzdF1cblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIC8vIFRPRE86IGVuYWJsZSBvbmNlIHBlcm1lc3NhZ2UtZGVmbGF0ZSBpcyBzdXBwb3J0ZWRcbiAgY29uc3QgcGVybWVzc2FnZURlZmxhdGUgPSAnJyAvLyAncGVybWVzc2FnZS1kZWZsYXRlOyAxNSdcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yIG9yIGl0cyBzdGF0dXMgaXMgbm90IDEwMSxcbiAgICAgIC8vICAgIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBuZXR3b3JrIGVycm9yIG9yIG5vbi0xMDEgc3RhdHVzIGNvZGUuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHByb3RvY29scyBpcyBub3QgdGhlIGVtcHR5IGxpc3QgYW5kIGV4dHJhY3RpbmcgaGVhZGVyXG4gICAgICAvLyAgICBsaXN0IHZhbHVlcyBnaXZlbiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgYW5kIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgcmVzdWx0cyBpbiBudWxsLCBmYWlsdXJlLCBvciB0aGUgZW1wdHkgYnl0ZVxuICAgICAgLy8gICAgc2VxdWVuY2UsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gMCAmJiAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCByZXNwb25kIHdpdGggc2VudCBwcm90b2NvbHMuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEZvbGxvdyB0aGUgcmVxdWlyZW1lbnRzIHN0YXRlZCBzdGVwIDIgdG8gc3RlcCA2LCBpbmNsdXNpdmUsXG4gICAgICAvLyAgICBvZiB0aGUgbGFzdCBzZXQgb2Ygc3RlcHMgaW4gc2VjdGlvbiA0LjEgb2YgVGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgUHJvdG9jb2wgdG8gdmFsaWRhdGUgcmVzcG9uc2UuIFRoaXMgZWl0aGVyIHJlc3VsdHMgaW4gZmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIG9yIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpc1xuICAgICAgLy8gICAgZXN0YWJsaXNoZWQuXG5cbiAgICAgIC8vIDIuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhbiB8VXBncmFkZXwgaGVhZGVyIGZpZWxkIG9yIHRoZSB8VXBncmFkZXxcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIEFTQ0lJIGNhc2UtXG4gICAgICAvLyAgICBpbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwid2Vic29ja2V0XCIsIHRoZSBjbGllbnQgTVVTVFxuICAgICAgLy8gICAgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1VwZ3JhZGUnKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3dlYnNvY2tldCcpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgVXBncmFkZSBoZWFkZXIgdG8gXCJ3ZWJzb2NrZXRcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBvciB0aGVcbiAgICAgIC8vICAgIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgZG9lc24ndCBjb250YWluIGEgdG9rZW4gdGhhdCBpcyBhblxuICAgICAgLy8gICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwiVXBncmFkZVwiLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdDb25uZWN0aW9uJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd1cGdyYWRlJykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBDb25uZWN0aW9uIGhlYWRlciB0byBcInVwZ3JhZGVcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBoZWFkZXIgZmllbGQgb3JcbiAgICAgIC8vICAgIHRoZSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGNvbnRhaW5zIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGVcbiAgICAgIC8vICAgIGJhc2U2NC1lbmNvZGVkIFNIQS0xIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSB8U2VjLVdlYlNvY2tldC1cbiAgICAgIC8vICAgIEtleXwgKGFzIGEgc3RyaW5nLCBub3QgYmFzZTY0LWRlY29kZWQpIHdpdGggdGhlIHN0cmluZyBcIjI1OEVBRkE1LVxuICAgICAgLy8gICAgRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExXCIgYnV0IGlnbm9yaW5nIGFueSBsZWFkaW5nIGFuZFxuICAgICAgLy8gICAgdHJhaWxpbmcgd2hpdGVzcGFjZSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjV1NBY2NlcHQgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JylcbiAgICAgIGNvbnN0IGRpZ2VzdCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGtleVZhbHVlICsgdWlkKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICBpZiAoc2VjV1NBY2NlcHQgIT09IGRpZ2VzdCkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ0luY29ycmVjdCBoYXNoIHJlY2VpdmVkIGluIFNlYy1XZWJTb2NrZXQtQWNjZXB0IGhlYWRlci4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc3wgaGVhZGVyXG4gICAgICAvLyAgICBmaWVsZCBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYW4gZXh0ZW5zaW9uXG4gICAgICAvLyAgICB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhc1xuICAgICAgLy8gICAgaW5kaWNhdGVkIGFuIGV4dGVuc2lvbiBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uICAoVGhlIHBhcnNpbmcgb2YgdGhpc1xuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIHRvIGRldGVybWluZSB3aGljaCBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQgaXNcbiAgICAgIC8vICAgIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDkuMS4pXG4gICAgICBjb25zdCBzZWNFeHRlbnNpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycpXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwgJiYgc2VjRXh0ZW5zaW9uICE9PSBwZXJtZXNzYWdlRGVmbGF0ZSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGRpZmZlcmVudCBwZXJtZXNzYWdlLWRlZmxhdGUgdGhhbiB0aGUgb25lIHNldC4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtUHJvdG9jb2x8IGhlYWRlciBmaWVsZFxuICAgICAgLy8gICAgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGEgc3VicHJvdG9jb2wgdGhhdCB3YXNcbiAgICAgIC8vICAgIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzIGluZGljYXRlZCBhXG4gICAgICAvLyAgICBzdWJwcm90b2NvbCBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNQcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpXG5cbiAgICAgIGlmIChzZWNQcm90b2NvbCAhPT0gbnVsbCAmJiBzZWNQcm90b2NvbCAhPT0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1Byb3RvY29sIHdhcyBub3Qgc2V0IGluIHRoZSBvcGVuaW5nIGhhbmRzaGFrZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdkYXRhJywgb25Tb2NrZXREYXRhKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcblxuICAgICAgaWYgKGNoYW5uZWxzLm9wZW4uaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgY2hhbm5lbHMub3Blbi5wdWJsaXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5zb2NrZXQuYWRkcmVzcygpLFxuICAgICAgICAgIHByb3RvY29sOiBzZWNQcm90b2NvbCxcbiAgICAgICAgICBleHRlbnNpb25zOiBzZWNFeHRlbnNpb25cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgb25Fc3RhYmxpc2gocmVzcG9uc2UpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBjb250cm9sbGVyXG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICAvLyBJZiB0aGUgVENQIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBhZnRlciB0aGVcbiAgLy8gV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvblxuICAvLyBpcyBzYWlkIHRvIGhhdmUgYmVlbiBjbG9zZWQgX2NsZWFubHlfLlxuICBjb25zdCB3YXNDbGVhbiA9IHdzW2tTZW50Q2xvc2VdICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0KSB7XG4gICAgY29kZSA9IHJlc3VsdC5jb2RlID8/IDEwMDVcbiAgICByZWFzb24gPSByZXN1bHQucmVhc29uXG4gIH0gZWxzZSBpZiAoIXdzW2tTZW50Q2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgZmlyZUV2ZW50KCdjbG9zZScsIHdzLCBDbG9zZUV2ZW50LCB7XG4gICAgd2FzQ2xlYW4sIGNvZGUsIHJlYXNvblxuICB9KVxuXG4gIGlmIChjaGFubmVscy5jbG9zZS5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmNsb3NlLnB1Ymxpc2goe1xuICAgICAgd2Vic29ja2V0OiB3cyxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycm9yKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuXG4gIGlmIChjaGFubmVscy5zb2NrZXRFcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNvY2tldEVycm9yLnB1Ymxpc2goZXJyb3IpXG4gIH1cblxuICB0aGlzLmRlc3Ryb3koKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc1ZhbGlkU3RhdHVzQ29kZSwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcblxuLy8gVGhpcyBjb2RlIHdhcyBpbmZsdWVuY2VkIGJ5IHdzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxMSBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT5cbi8vIENvcHlyaWdodCAoYykgMjAxMyBBcm5vdXQgS2F6ZW1pZXIgYW5kIGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE2IEx1aWdpIFBpbmNhIGFuZCBjb250cmlidXRvcnNcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMucGluZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBpbmcnKVxuY2hhbm5lbHMucG9uZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKVxuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNieXRlT2Zmc2V0ID0gMFxuXG4gICNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgI2luZm8gPSB7fVxuICAjZnJhZ21lbnRzID0gW11cblxuICBjb25zdHJ1Y3RvciAod3MpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLndzID0gd3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcblxuICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlbmV2ZXIgYSBuZXcgY2h1bmsgaXMgcmVjZWl2ZWQuXG4gICAqIENhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgbm8gbW9yZSBjaHVua3MgYnVmZmVyaW5nLFxuICAgKiBvciBub3QgZW5vdWdoIGJ5dGVzIGFyZSBidWZmZXJlZCB0byBwYXJzZS5cbiAgICovXG4gIHJ1biAoY2FsbGJhY2spIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuSU5GTykge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGxlbmd0aCwgZXRjLlxuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5maW4gPSAoYnVmZmVyWzBdICYgMHg4MCkgIT09IDBcbiAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPSBidWZmZXJbMF0gJiAweDBGXG5cbiAgICAgICAgLy8gSWYgd2UgcmVjZWl2ZSBhIGZyYWdtZW50ZWQgbWVzc2FnZSwgd2UgdXNlIHRoZSB0eXBlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyBmcmFtZSB0byBwYXJzZSB0aGUgZnVsbCBtZXNzYWdlIGFzIGJpbmFyeS90ZXh0LCB3aGVuIGl0J3MgdGVybWluYXRlZFxuICAgICAgICB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlID8/PSB0aGlzLiNpbmZvLm9wY29kZVxuXG4gICAgICAgIHRoaXMuI2luZm8uZnJhZ21lbnRlZCA9ICF0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5DT05USU5VQVRJT05cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkJJTkFSWSAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZExlbmd0aCA9IGJ1ZmZlclsxXSAmIDB4N0ZcblxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8PSAxMjUpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBwYXlsb2FkTGVuZ3RoXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNlxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgcGF5bG9hZExlbmd0aCA+IDEyNSkge1xuICAgICAgICAgIC8vIEEgZnJhZ21lbnRlZCBmcmFtZSBjYW4ndCBiZSBmcmFnbWVudGVkIGl0c2VsZlxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdGcmFnbWVudGVkIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkgJiZcbiAgICAgICAgICBwYXlsb2FkTGVuZ3RoID4gMTI1XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWVzIGNhbiBoYXZlIGEgcGF5bG9hZCBsZW5ndGggb2YgMTI1IGJ5dGVzIE1BWFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdQYXlsb2FkIGxlbmd0aCBmb3IgY29udHJvbCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkge1xuICAgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgd2l0aCBhIDEtYnl0ZSBib2R5LicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNpbmZvLmNsb3NlSW5mbyA9IHRoaXMucGFyc2VDbG9zZUJvZHkoZmFsc2UsIGJvZHkpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1NlbnRDbG9zZV0pIHtcbiAgICAgICAgICAgIC8vIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgQ2xvc2UgZnJhbWUgYW5kIGRpZCBub3QgcHJldmlvdXNseSBzZW5kIGFcbiAgICAgICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAgICAgLy8gc2VuZGluZyBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLCB0aGUgZW5kcG9pbnQgdHlwaWNhbGx5IGVjaG9zIHRoZVxuICAgICAgICAgICAgLy8gc3RhdHVzIGNvZGUgaXQgcmVjZWl2ZWQuKVxuICAgICAgICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICAgICAgYm9keS53cml0ZVVJbnQxNkJFKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUsIDApXG4gICAgICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKFxuICAgICAgICAgICAgICBjbG9zZUZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMud3Nba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgICAgICB0aGlzLndzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmVuZCgpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HKSB7XG4gICAgICAgICAgLy8gVXBvbiByZWNlaXB0IG9mIGEgUGluZyBmcmFtZSwgYW4gZW5kcG9pbnQgTVVTVCBzZW5kIGEgUG9uZyBmcmFtZSBpblxuICAgICAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBzZW50IGluIHJlc3BvbnNlIHRvIGEgUGluZyBmcmFtZSBtdXN0IGhhdmUgaWRlbnRpY2FsXG4gICAgICAgICAgLy8gXCJBcHBsaWNhdGlvbiBkYXRhXCJcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuUE9ORykpXG5cbiAgICAgICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgIGNoYW5uZWxzLnBpbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcpIHtcbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgTUFZIGJlIHNlbnQgdW5zb2xpY2l0ZWQuICBUaGlzIHNlcnZlcyBhcyBhXG4gICAgICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAgICAgLy8gbm90IGV4cGVjdGVkLlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKGNoYW5uZWxzLnBvbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBidWZmZXIucmVhZFVJbnQxNkJFKDApXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCA4KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSg4KVxuICAgICAgICBjb25zdCB1cHBlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoMClcblxuICAgICAgICAvLyAyXjMxIGlzIHRoZSBtYXhpbmltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9ICh1cHBlciA8PCA4KSArIGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG1vcmUgZGF0YSBpbiB0aGlzIGNodW5rIHRoYXQgbmVlZHMgdG8gYmUgcmVhZFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYnl0ZU9mZnNldCA+PSB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIHNlbnQgbXVsdGlwbGUgZnJhbWVzIGluIGEgc2luZ2xlIGNodW5rXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGJvZHkpXG5cbiAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgdW5mcmFnbWVudGVkLCBvciBhIGZyYWdtZW50ZWQgZnJhbWUgd2FzIHRlcm1pbmF0ZWQsXG4gICAgICAgICAgLy8gYSBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICAgIGlmICghdGhpcy4jaW5mby5mcmFnbWVudGVkIHx8ICh0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DT05USU5VQVRJT04pKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IEJ1ZmZlci5jb25jYXQodGhpcy4jZnJhZ21lbnRzKVxuXG4gICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSwgZnVsbE1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHRoaXMuI2luZm8gPSB7fVxuICAgICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9IDBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ8bnVsbH1cbiAgICovXG4gIGNvbnN1bWUgKG4pIHtcbiAgICBpZiAobiA+IHRoaXMuI2J5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHlCdWZmZXJcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYnVmZmVyc1swXS5sZW5ndGggPT09IG4pIHtcbiAgICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gdGhpcy4jYnVmZmVyc1swXS5sZW5ndGhcbiAgICAgIHJldHVybiB0aGlzLiNidWZmZXJzLnNoaWZ0KClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgd2hpbGUgKG9mZnNldCAhPT0gbikge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuI2J1ZmZlcnNbMF1cbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBuZXh0XG5cbiAgICAgIGlmIChsZW5ndGggKyBvZmZzZXQgPT09IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoICsgb2Zmc2V0ID4gbikge1xuICAgICAgICBidWZmZXIuc2V0KG5leHQuc3ViYXJyYXkoMCwgbiAtIG9mZnNldCksIG9mZnNldClcbiAgICAgICAgdGhpcy4jYnVmZmVyc1swXSA9IG5leHQuc3ViYXJyYXkobiAtIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIG9mZnNldCArPSBuZXh0Lmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gblxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKG9ubHlDb2RlLCBkYXRhKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjVcbiAgICAvKiogQHR5cGUge251bWJlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzXG4gICAgICAvLyBkZWZpbmVkIGFzIHRoZSBzdGF0dXMgY29kZSAoU2VjdGlvbiA3LjQpIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQ2xvc2VcbiAgICAgIC8vIGNvbnRyb2wgZnJhbWUgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBjb2RlID0gZGF0YS5yZWFkVUludDE2QkUoMClcbiAgICB9XG5cbiAgICBpZiAob25seUNvZGUpIHtcbiAgICAgIGlmICghaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgY29kZSB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjZcbiAgICAvKiogQHR5cGUge0J1ZmZlcn0gKi9cbiAgICBsZXQgcmVhc29uID0gZGF0YS5zdWJhcnJheSgyKVxuXG4gICAgLy8gUmVtb3ZlIEJPTVxuICAgIGlmIChyZWFzb25bMF0gPT09IDB4RUYgJiYgcmVhc29uWzFdID09PSAweEJCICYmIHJlYXNvblsyXSA9PT0gMHhCRikge1xuICAgICAgcmVhc29uID0gcmVhc29uLnN1YmFycmF5KDMpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IG9wdGltaXplIHRoaXNcbiAgICAgIHJlYXNvbiA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShyZWFzb24pXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHJlYXNvbiB9XG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2NvbnN0YW50cycpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2dsb2JhbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgb3Bjb2RlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1dlYlNvY2tldFVSTCxcbiAga1JlYWR5U3RhdGUsXG4gIGtDb250cm9sbGVyLFxuICBrQmluYXJ5VHlwZSxcbiAga1Jlc3BvbnNlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlclxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzRXN0YWJsaXNoZWQsIGlzQ2xvc2luZywgaXNWYWxpZFN1YnByb3RvY29sLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgZmlyZUV2ZW50IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24nKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBCeXRlUGFyc2VyIH0gPSByZXF1aXJlKCcuL3JlY2VpdmVyJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5sZXQgZXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHByb3RvY29scyA9IFtdKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdXZWJTb2NrZXRzIGFyZSBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktV1MnXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scylcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgcHJvdG9jb2xzID0gb3B0aW9ucy5wcm90b2NvbHNcblxuICAgIC8vIDEuIExldCBiYXNlVVJMIGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QncyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVSTCA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICAvLyAxLiBMZXQgdXJsUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSTCBwYXJzZXIgdG8gdXJsIHdpdGggYmFzZVVSTC5cbiAgICBsZXQgdXJsUmVjb3JkXG5cbiAgICB0cnkge1xuICAgICAgdXJsUmVjb3JkID0gbmV3IFVSTCh1cmwsIGJhc2VVUkwpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gMy4gSWYgdXJsUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihlLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiLCB0aGVuIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzXCIuXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzOidcbiAgICB9IGVsc2UgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c3NcIi5cbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3c3M6J1xuICAgIH1cblxuICAgIC8vIDYuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcIndzXCIgb3IgXCJ3c3NcIiwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzOicgJiYgdXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3NzOicpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBFeHBlY3RlZCBhIHdzOiBvciB3c3M6IHByb3RvY29sLCBnb3QgJHt1cmxSZWNvcmQucHJvdG9jb2x9YCxcbiAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDcuIElmIHVybFJlY29yZFx1MjAxOXMgZnJhZ21lbnQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCJcbiAgICAvLyAgICBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5oYXNoIHx8IHVybFJlY29yZC5ocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0dvdCBmcmFnbWVudCcsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gOC4gSWYgcHJvdG9jb2xzIGlzIGEgc3RyaW5nLCBzZXQgcHJvdG9jb2xzIHRvIGEgc2VxdWVuY2UgY29uc2lzdGluZ1xuICAgIC8vICAgIG9mIGp1c3QgdGhhdCBzdHJpbmcuXG4gICAgaWYgKHR5cGVvZiBwcm90b2NvbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm90b2NvbHMgPSBbcHJvdG9jb2xzXVxuICAgIH1cblxuICAgIC8vIDkuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHByb3RvY29scyBvY2N1ciBtb3JlIHRoYW4gb25jZSBvciBvdGhlcndpc2VcbiAgICAvLyAgICBmYWlsIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgZm9yIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhlIHZhbHVlXG4gICAgLy8gICAgb2YgYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGZpZWxkcyBhcyBkZWZpbmVkIGJ5IFRoZSBXZWJTb2NrZXRcbiAgICAvLyAgICBwcm90b2NvbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IG5ldyBTZXQocHJvdG9jb2xzLm1hcChwID0+IHAudG9Mb3dlckNhc2UoKSkpLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggPiAwICYmICFwcm90b2NvbHMuZXZlcnkocCA9PiBpc1ZhbGlkU3VicHJvdG9jb2wocCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDEwLiBTZXQgdGhpcydzIHVybCB0byB1cmxSZWNvcmQuXG4gICAgdGhpc1trV2ViU29ja2V0VVJMXSA9IG5ldyBVUkwodXJsUmVjb3JkLmhyZWYpXG5cbiAgICAvLyAxMS4gTGV0IGNsaWVudCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICAvLyBUaGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBUaGUgcHJvdG9jb2wgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIGJpbmFyeSB0eXBlLCB3aGljaCBpcyBhXG4gICAgLy8gQmluYXJ5VHlwZS4gSW5pdGlhbGx5IGl0IG11c3QgYmUgXCJibG9iXCIuXG4gICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VcbiAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gICAqL1xuICBjbG9zZSAoY29kZSA9IHVuZGVmaW5lZCwgcmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29kZSA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKGNvZGUsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24pXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TSU5HIHx8IHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0VEKSB7XG4gICAgICAvLyBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ0xPU0lORyAoMikgb3IgQ0xPU0VEICgzKVxuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgICAgLy8gRmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gYW5kIHNldCB0aGlzJ3MgcmVhZHkgc3RhdGVcbiAgICAgIC8vIHRvIENMT1NJTkcgKDIpLlxuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcywgJ0Nvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgaXQgd2FzIGVzdGFibGlzaGVkLicpXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfSBlbHNlIGlmICghaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgICAgLy8gU3RhcnQgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBhbmQgc2V0IHRoaXMncyByZWFkeVxuICAgICAgLy8gc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vICAgbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgIC8vIC0gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIC8vIC0gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAvLyAgIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgLy8gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgICAgLy8gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAgIC8vIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgICAvLyB0aGUgYm9keSBNQVkgY29udGFpbiBVVEYtOC1lbmNvZGVkIGRhdGEgd2l0aCB2YWx1ZSAvcmVhc29uL1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gZW1wdHlCdWZmZXJcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgICAgc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgdGhpc1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LXNlbmRcbiAgICogQHBhcmFtIHtOb2RlSlMuVHlwZWRBcnJheXxBcnJheUJ1ZmZlcnxCbG9ifHN0cmluZ30gZGF0YVxuICAgKi9cbiAgc2VuZCAoZGF0YSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQuc2VuZCcgfSlcblxuICAgIGRhdGEgPSB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YShkYXRhKVxuXG4gICAgLy8gMS4gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENPTk5FQ1RJTkcsIHRoZW4gdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRTdGF0ZUVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NlbnQgYmVmb3JlIGNvbm5lY3RlZC4nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgIH1cblxuICAgIC8vIDIuIFJ1biB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTYuMVxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTUuMlxuXG4gICAgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpIHx8IGlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuVEVYVClcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkXG4gICAgICAvLyB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWdcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICAvLyBUaGUgZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIGRlc2NyaWJlZFxuICAgICAgLy8gYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdC4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhblxuICAgICAgLy8gQXJyYXlCdWZmZXIgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdFxuICAgICAgLy8gaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbGVuZ3RoIG9mIHRoZVxuICAgICAgLy8gQXJyYXlCdWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGVcbiAgICAgIC8vIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlclxuICAgICAgLy8gZGVzY3JpYmVkIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCBkYXRhIHJlZmVyZW5jZXMuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIHRoaXMga2luZCBvZiBhcmd1bWVudCB0aGF0IGRvZXNcbiAgICAgIC8vIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlXG4gICAgICAvLyBieSB0aGUgbGVuZ3RoIG9mIGRhdGFcdTIwMTlzIGJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgYWIgPSBCdWZmZXIuZnJvbShkYXRhLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGFiKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGFiLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gYWIuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YVxuICAgICAgLy8gdG8gYmUgc2VudCBpcyB0aGUgcmF3IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIEJsb2Igb2JqZWN0LiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhIEJsb2IgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvd1xuICAgICAgLy8gYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgc2l6ZVxuICAgICAgLy8gb2YgdGhlIEJsb2Igb2JqZWN0XHUyMDE5cyByYXcgZGF0YSwgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIGRhdGEuYXJyYXlCdWZmZXIoKS50aGVuKChhYikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGFiKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSB2YWx1ZVxuICAgICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgcmVhZHlTdGF0ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgcmVhZHkgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXNba1JlYWR5U3RhdGVdXG4gIH1cblxuICBnZXQgYnVmZmVyZWRBbW91bnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNidWZmZXJlZEFtb3VudFxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgdXJsLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1dlYlNvY2tldFVSTF0pXG4gIH1cblxuICBnZXQgZXh0ZW5zaW9ucyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V4dGVuc2lvbnNcbiAgfVxuXG4gIGdldCBwcm90b2NvbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI3Byb3RvY29sXG4gIH1cblxuICBnZXQgb25vcGVuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm9wZW5cbiAgfVxuXG4gIHNldCBvbm9wZW4gKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5vcGVuKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGlzLiNldmVudHMub3BlbilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLiNldmVudHMuZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmNsb3NlXG4gIH1cblxuICBzZXQgb25jbG9zZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmNsb3NlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy4jZXZlbnRzLmNsb3NlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25tZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm1lc3NhZ2VcbiAgfVxuXG4gIHNldCBvbm1lc3NhZ2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLiNldmVudHMubWVzc2FnZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGJpbmFyeVR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzW2tCaW5hcnlUeXBlXVxuICB9XG5cbiAgc2V0IGJpbmFyeVR5cGUgKHR5cGUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodHlwZSAhPT0gJ2Jsb2InICYmIHR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gdHlwZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gICAqL1xuICAjb25Db25uZWN0aW9uRXN0YWJsaXNoZWQgKHJlc3BvbnNlKSB7XG4gICAgLy8gcHJvY2Vzc1Jlc3BvbnNlIGlzIGNhbGxlZCB3aGVuIHRoZSBcInJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgaW5pdGlhbGl6ZWQuXCJcbiAgICAvLyBvbmNlIHRoaXMgaGFwcGVucywgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgIHRoaXNba1Jlc3BvbnNlXSA9IHJlc3BvbnNlXG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQnl0ZVBhcnNlcih0aGlzKVxuICAgIHBhcnNlci5vbignZHJhaW4nLCBmdW5jdGlvbiBvblBhcnNlckRyYWluICgpIHtcbiAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbiAgICB9KVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIE9QRU4gKDEpLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLk9QRU5cblxuICAgIC8vIDIuIENoYW5nZSB0aGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBleHRlbnNpb25zIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tOS4xXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJylcblxuICAgIGlmIChleHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIH1cblxuICAgIC8vIDMuIENoYW5nZSB0aGUgcHJvdG9jb2wgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgc3VicHJvdG9jb2wgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi0xLjlcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcpXG5cbiAgICBpZiAocHJvdG9jb2wgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI3Byb3RvY29sID0gcHJvdG9jb2xcbiAgICB9XG5cbiAgICAvLyA0LiBGaXJlIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gICAgZmlyZUV2ZW50KCdvcGVuJywgdGhpcylcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNvbm5lY3RpbmdcbldlYlNvY2tldC5DT05ORUNUSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DT05ORUNUSU5HID0gc3RhdGVzLkNPTk5FQ1RJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtb3BlblxuV2ViU29ja2V0Lk9QRU4gPSBXZWJTb2NrZXQucHJvdG90eXBlLk9QRU4gPSBzdGF0ZXMuT1BFTlxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zaW5nXG5XZWJTb2NrZXQuQ0xPU0lORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0lORyA9IHN0YXRlcy5DTE9TSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlZFxuV2ViU29ja2V0LkNMT1NFRCA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0VEID0gc3RhdGVzLkNMT1NFRFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQucHJvdG90eXBlLCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBidWZmZXJlZEFtb3VudDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25tZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBiaW5hcnlUeXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBleHRlbnNpb25zOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwcm90b2NvbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1dlYlNvY2tldCcsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgU3ltYm9sLml0ZXJhdG9yIGluIFYpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXShWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBUaGlzIGltcGxlbWVudHMgdGhlIHByb3BzYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnZGlzcGF0Y2hlcicsXG4gICAgY29udmVydGVyOiAoVikgPT4gVixcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBnZXRHbG9iYWxEaXNwYXRjaGVyKClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdClcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiBWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0KFYpXG4gIH1cblxuICByZXR1cm4geyBwcm90b2NvbHM6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fCB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2ViU29ja2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIvKipcbiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEJvdHRsZW5lY2sgbGlicmFyeSAoTUlUKSwgY29tcGlsZWQgdG8gRVMyMDE3LCBhbmQgd2l0aG91dCBDbHVzdGVyaW5nIHN1cHBvcnQuXG4gICogaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2tcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Cb3R0bGVuZWNrID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9O1xuXG5cdGZ1bmN0aW9uIGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UgKG4pIHtcblx0XHRyZXR1cm4gbiAmJiBuWydkZWZhdWx0J10gfHwgbjtcblx0fVxuXG5cdHZhciBsb2FkID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgcmVmLCB2O1xuXHQgIGZvciAoayBpbiBkZWZhdWx0cykge1xuXHQgICAgdiA9IGRlZmF1bHRzW2tdO1xuXHQgICAgb250b1trXSA9IChyZWYgPSByZWNlaXZlZFtrXSkgIT0gbnVsbCA/IHJlZiA6IHY7XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBvdmVyd3JpdGUgPSBmdW5jdGlvbihyZWNlaXZlZCwgZGVmYXVsdHMsIG9udG8gPSB7fSkge1xuXHQgIHZhciBrLCB2O1xuXHQgIGZvciAoayBpbiByZWNlaXZlZCkge1xuXHQgICAgdiA9IHJlY2VpdmVkW2tdO1xuXHQgICAgaWYgKGRlZmF1bHRzW2tdICE9PSB2b2lkIDApIHtcblx0ICAgICAgb250b1trXSA9IHY7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBwYXJzZXIgPSB7XG5cdFx0bG9hZDogbG9hZCxcblx0XHRvdmVyd3JpdGU6IG92ZXJ3cml0ZVxuXHR9O1xuXG5cdHZhciBETExpc3Q7XG5cblx0RExMaXN0ID0gY2xhc3MgRExMaXN0IHtcblx0ICBjb25zdHJ1Y3RvcihpbmNyLCBkZWNyKSB7XG5cdCAgICB0aGlzLmluY3IgPSBpbmNyO1xuXHQgICAgdGhpcy5kZWNyID0gZGVjcjtcblx0ICAgIHRoaXMuX2ZpcnN0ID0gbnVsbDtcblx0ICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgdGhpcy5sZW5ndGggPSAwO1xuXHQgIH1cblxuXHQgIHB1c2godmFsdWUpIHtcblx0ICAgIHZhciBub2RlO1xuXHQgICAgdGhpcy5sZW5ndGgrKztcblx0ICAgIGlmICh0eXBlb2YgdGhpcy5pbmNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgdGhpcy5pbmNyKCk7XG5cdCAgICB9XG5cdCAgICBub2RlID0ge1xuXHQgICAgICB2YWx1ZSxcblx0ICAgICAgcHJldjogdGhpcy5fbGFzdCxcblx0ICAgICAgbmV4dDogbnVsbFxuXHQgICAgfTtcblx0ICAgIGlmICh0aGlzLl9sYXN0ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5fbGFzdC5uZXh0ID0gbm9kZTtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG5vZGU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBzaGlmdCgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblx0ICAgIGlmICh0aGlzLl9maXJzdCA9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubGVuZ3RoLS07XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICB0aGlzLmRlY3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFsdWUgPSB0aGlzLl9maXJzdC52YWx1ZTtcblx0ICAgIGlmICgodGhpcy5fZmlyc3QgPSB0aGlzLl9maXJzdC5uZXh0KSAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2ZpcnN0LnByZXYgPSBudWxsO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXG5cdCAgZmlyc3QoKSB7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZ2V0QXJyYXkoKSB7XG5cdCAgICB2YXIgbm9kZSwgcmVmLCByZXN1bHRzO1xuXHQgICAgbm9kZSA9IHRoaXMuX2ZpcnN0O1xuXHQgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICByZXN1bHRzLnB1c2goKHJlZiA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQsIHJlZi52YWx1ZSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdCAgZm9yRWFjaFNoaWZ0KGNiKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIG5vZGUgPSB0aGlzLnNoaWZ0KCk7XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIChjYihub2RlKSwgbm9kZSA9IHRoaXMuc2hpZnQoKSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdm9pZCAwO1xuXHQgIH1cblxuXHQgIGRlYnVnKCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCB7XG5cdCAgICAgICAgdmFsdWU6IHJlZi52YWx1ZSxcblx0ICAgICAgICBwcmV2OiAocmVmMSA9IHJlZi5wcmV2KSAhPSBudWxsID8gcmVmMS52YWx1ZSA6IHZvaWQgMCxcblx0ICAgICAgICBuZXh0OiAocmVmMiA9IHJlZi5uZXh0KSAhPSBudWxsID8gcmVmMi52YWx1ZSA6IHZvaWQgMFxuXHQgICAgICB9KSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0cztcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRExMaXN0XzEgPSBETExpc3Q7XG5cblx0dmFyIEV2ZW50cztcblxuXHRFdmVudHMgPSBjbGFzcyBFdmVudHMge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIGlmICgodGhpcy5pbnN0YW5jZS5vbiAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5vbmNlICE9IG51bGwpIHx8ICh0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyAhPSBudWxsKSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBFbWl0dGVyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9iamVjdFwiKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuaW5zdGFuY2Uub24gPSAobmFtZSwgY2IpID0+IHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKG5hbWUsIFwibWFueVwiLCBjYik7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5vbmNlID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm9uY2VcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzID0gKG5hbWUgPSBudWxsKSA9PiB7XG5cdCAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgX2FkZExpc3RlbmVyKG5hbWUsIHN0YXR1cywgY2IpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKChiYXNlID0gdGhpcy5fZXZlbnRzKVtuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgIGJhc2VbbmFtZV0gPSBbXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX2V2ZW50c1tuYW1lXS5wdXNoKHtjYiwgc3RhdHVzfSk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcblx0ICB9XG5cblx0ICBsaXN0ZW5lckNvdW50KG5hbWUpIHtcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbmFtZV0gIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW25hbWVdLmxlbmd0aDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGFzeW5jIHRyaWdnZXIobmFtZSwgLi4uYXJncykge1xuXHQgICAgdmFyIGUsIHByb21pc2VzO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKG5hbWUgIT09IFwiZGVidWdcIikge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlcihcImRlYnVnXCIsIGBFdmVudCB0cmlnZ2VyZWQ6ICR7bmFtZX1gLCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gdGhpcy5fZXZlbnRzW25hbWVdLmZpbHRlcihmdW5jdGlvbihsaXN0ZW5lcikge1xuXHQgICAgICAgIHJldHVybiBsaXN0ZW5lci5zdGF0dXMgIT09IFwibm9uZVwiO1xuXHQgICAgICB9KTtcblx0ICAgICAgcHJvbWlzZXMgPSB0aGlzLl9ldmVudHNbbmFtZV0ubWFwKGFzeW5jKGxpc3RlbmVyKSA9PiB7XG5cdCAgICAgICAgdmFyIGUsIHJldHVybmVkO1xuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwibm9uZVwiKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwib25jZVwiKSB7XG5cdCAgICAgICAgICBsaXN0ZW5lci5zdGF0dXMgPSBcIm5vbmVcIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gdHlwZW9mIGxpc3RlbmVyLmNiID09PSBcImZ1bmN0aW9uXCIgPyBsaXN0ZW5lci5jYiguLi5hcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgKHJldHVybmVkICE9IG51bGwgPyByZXR1cm5lZC50aGVuIDogdm9pZCAwKSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoYXdhaXQgcmV0dXJuZWQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuICgoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKSkuZmluZChmdW5jdGlvbih4KSB7XG5cdCAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcblx0ICAgICAgfSk7XG5cdCAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICBlID0gZXJyb3I7XG5cdCAgICAgIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRXZlbnRzXzEgPSBFdmVudHM7XG5cblx0dmFyIERMTGlzdCQxLCBFdmVudHMkMSwgUXVldWVzO1xuXG5cdERMTGlzdCQxID0gRExMaXN0XzE7XG5cblx0RXZlbnRzJDEgPSBFdmVudHNfMTtcblxuXHRRdWV1ZXMgPSBjbGFzcyBRdWV1ZXMge1xuXHQgIGNvbnN0cnVjdG9yKG51bV9wcmlvcml0aWVzKSB7XG5cdCAgICB2YXIgaTtcblx0ICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQxKHRoaXMpO1xuXHQgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIHRoaXMuX2xpc3RzID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICB2YXIgaiwgcmVmLCByZXN1bHRzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoaSA9IGogPSAxLCByZWYgPSBudW1fcHJpb3JpdGllczsgKDEgPD0gcmVmID8gaiA8PSByZWYgOiBqID49IHJlZik7IGkgPSAxIDw9IHJlZiA/ICsraiA6IC0taikge1xuXHQgICAgICAgIHJlc3VsdHMucHVzaChuZXcgRExMaXN0JDEoKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmluY3IoKTtcblx0ICAgICAgICB9KSwgKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmRlY3IoKTtcblx0ICAgICAgICB9KSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgfSkuY2FsbCh0aGlzKTtcblx0ICB9XG5cblx0ICBpbmNyKCkge1xuXHQgICAgaWYgKHRoaXMuX2xlbmd0aCsrID09PSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwibGVmdHplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZGVjcigpIHtcblx0ICAgIGlmICgtLXRoaXMuX2xlbmd0aCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcHVzaChqb2IpIHtcblx0ICAgIHJldHVybiB0aGlzLl9saXN0c1tqb2Iub3B0aW9ucy5wcmlvcml0eV0ucHVzaChqb2IpO1xuXHQgIH1cblxuXHQgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgaWYgKHByaW9yaXR5ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xpc3RzW3ByaW9yaXR5XS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNoaWZ0QWxsKGZuKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG5cdCAgICAgIHJldHVybiBsaXN0LmZvckVhY2hTaGlmdChmbik7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBnZXRGaXJzdChhcnIgPSB0aGlzLl9saXN0cykge1xuXHQgICAgdmFyIGosIGxlbiwgbGlzdDtcblx0ICAgIGZvciAoaiA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGogPCBsZW47IGorKykge1xuXHQgICAgICBsaXN0ID0gYXJyW2pdO1xuXHQgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiBbXTtcblx0ICB9XG5cblx0ICBzaGlmdExhc3RGcm9tKHByaW9yaXR5KSB7XG5cdCAgICByZXR1cm4gdGhpcy5nZXRGaXJzdCh0aGlzLl9saXN0cy5zbGljZShwcmlvcml0eSkucmV2ZXJzZSgpKS5zaGlmdCgpO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBRdWV1ZXNfMSA9IFF1ZXVlcztcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yO1xuXG5cdEJvdHRsZW5lY2tFcnJvciA9IGNsYXNzIEJvdHRsZW5lY2tFcnJvciBleHRlbmRzIEVycm9yIHt9O1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3JfMSA9IEJvdHRsZW5lY2tFcnJvcjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDEsIERFRkFVTFRfUFJJT1JJVFksIEpvYiwgTlVNX1BSSU9SSVRJRVMsIHBhcnNlciQxO1xuXG5cdE5VTV9QUklPUklUSUVTID0gMTA7XG5cblx0REVGQVVMVF9QUklPUklUWSA9IDU7XG5cblx0cGFyc2VyJDEgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDEgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRKb2IgPSBjbGFzcyBKb2Ige1xuXHQgIGNvbnN0cnVjdG9yKHRhc2ssIGFyZ3MsIG9wdGlvbnMsIGpvYkRlZmF1bHRzLCByZWplY3RPbkRyb3AsIEV2ZW50cywgX3N0YXRlcywgUHJvbWlzZSkge1xuXHQgICAgdGhpcy50YXNrID0gdGFzaztcblx0ICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cdCAgICB0aGlzLnJlamVjdE9uRHJvcCA9IHJlamVjdE9uRHJvcDtcblx0ICAgIHRoaXMuRXZlbnRzID0gRXZlbnRzO1xuXHQgICAgdGhpcy5fc3RhdGVzID0gX3N0YXRlcztcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZXIkMS5sb2FkKG9wdGlvbnMsIGpvYkRlZmF1bHRzKTtcblx0ICAgIHRoaXMub3B0aW9ucy5wcmlvcml0eSA9IHRoaXMuX3Nhbml0aXplUHJpb3JpdHkodGhpcy5vcHRpb25zLnByaW9yaXR5KTtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuaWQgPT09IGpvYkRlZmF1bHRzLmlkKSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucy5pZCA9IGAke3RoaXMub3B0aW9ucy5pZH0tJHt0aGlzLl9yYW5kb21JbmRleCgpfWA7XG5cdCAgICB9XG5cdCAgICB0aGlzLnByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHQgICAgICB0aGlzLl9yZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHRoaXMuX3JlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cdCAgfVxuXG5cdCAgX3Nhbml0aXplUHJpb3JpdHkocHJpb3JpdHkpIHtcblx0ICAgIHZhciBzUHJvcGVydHk7XG5cdCAgICBzUHJvcGVydHkgPSB+fnByaW9yaXR5ICE9PSBwcmlvcml0eSA/IERFRkFVTFRfUFJJT1JJVFkgOiBwcmlvcml0eTtcblx0ICAgIGlmIChzUHJvcGVydHkgPCAwKSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfSBlbHNlIGlmIChzUHJvcGVydHkgPiBOVU1fUFJJT1JJVElFUyAtIDEpIHtcblx0ICAgICAgcmV0dXJuIE5VTV9QUklPUklUSUVTIC0gMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBzUHJvcGVydHk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXHQgIH1cblxuXHQgIGRvRHJvcCh7ZXJyb3IsIG1lc3NhZ2UgPSBcIlRoaXMgam9iIGhhcyBiZWVuIGRyb3BwZWQgYnkgQm90dGxlbmVja1wifSA9IHt9KSB7XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLnJlbW92ZSh0aGlzLm9wdGlvbnMuaWQpKSB7XG5cdCAgICAgIGlmICh0aGlzLnJlamVjdE9uRHJvcCkge1xuXHQgICAgICAgIHRoaXMuX3JlamVjdChlcnJvciAhPSBudWxsID8gZXJyb3IgOiBuZXcgQm90dGxlbmVja0Vycm9yJDEobWVzc2FnZSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkcm9wcGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgdGFzazogdGhpcy50YXNrLCBwcm9taXNlOiB0aGlzLnByb21pc2V9KTtcblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX2Fzc2VydFN0YXR1cyhleHBlY3RlZCkge1xuXHQgICAgdmFyIHN0YXR1cztcblx0ICAgIHN0YXR1cyA9IHRoaXMuX3N0YXRlcy5qb2JTdGF0dXModGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIGlmICghKHN0YXR1cyA9PT0gZXhwZWN0ZWQgfHwgKGV4cGVjdGVkID09PSBcIkRPTkVcIiAmJiBzdGF0dXMgPT09IG51bGwpKSkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDEoYEludmFsaWQgam9iIHN0YXR1cyAke3N0YXR1c30sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9LiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjay9pc3N1ZXNgKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBkb1JlY2VpdmUoKSB7XG5cdCAgICB0aGlzLl9zdGF0ZXMuc3RhcnQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmVjZWl2ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKSB7XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJSRUNFSVZFRFwiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInF1ZXVlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJlYWNoZWRIV00sIGJsb2NrZWR9KTtcblx0ICB9XG5cblx0ICBkb1J1bigpIHtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUVVFVUVEXCIpO1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJzY2hlZHVsZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgZG9FeGVjdXRlKGNoYWluZWQsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm8sIHBhc3NlZDtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUlVOTklOR1wiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIGV2ZW50SW5mbyA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgcmV0cnlDb3VudDogdGhpcy5yZXRyeUNvdW50fTtcblx0ICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJleGVjdXRpbmdcIiwgZXZlbnRJbmZvKTtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHBhc3NlZCA9IChhd2FpdCAoY2hhaW5lZCAhPSBudWxsID8gY2hhaW5lZC5zY2hlZHVsZSh0aGlzLm9wdGlvbnMsIHRoaXMudGFzaywgLi4udGhpcy5hcmdzKSA6IHRoaXMudGFzayguLi50aGlzLmFyZ3MpKSk7XG5cdCAgICAgIGlmIChjbGVhckdsb2JhbFN0YXRlKCkpIHtcblx0ICAgICAgICB0aGlzLmRvRG9uZShldmVudEluZm8pO1xuXHQgICAgICAgIGF3YWl0IGZyZWUodGhpcy5vcHRpb25zLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkRPTkVcIik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUocGFzc2VkKTtcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICByZXR1cm4gdGhpcy5fb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgZXJyb3IsIGV2ZW50SW5mbztcblx0ICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCA9PT0gXCJSVU5OSU5HXCIpKSB7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICBlcnJvciA9IG5ldyBCb3R0bGVuZWNrRXJyb3IkMShgVGhpcyBqb2IgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmV4cGlyYXRpb259IG1zLmApO1xuXHQgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgcmV0cnksIHJldHJ5QWZ0ZXI7XG5cdCAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgIHJldHJ5ID0gKGF3YWl0IHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJmYWlsZWRcIiwgZXJyb3IsIGV2ZW50SW5mbykpO1xuXHQgICAgICBpZiAocmV0cnkgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHJ5QWZ0ZXIgPSB+fnJldHJ5O1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJyZXRyeVwiLCBgUmV0cnlpbmcgJHt0aGlzLm9wdGlvbnMuaWR9IGFmdGVyICR7cmV0cnlBZnRlcn0gbXNgLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuXHQgICAgICAgIHJldHVybiBydW4ocmV0cnlBZnRlcik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyb3IpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9Eb25lKGV2ZW50SW5mbykge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZG9uZVwiLCBldmVudEluZm8pO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBKb2JfMSA9IEpvYjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDIsIExvY2FsRGF0YXN0b3JlLCBwYXJzZXIkMjtcblxuXHRwYXJzZXIkMiA9IHBhcnNlcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IkMiA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlID0gY2xhc3MgTG9jYWxEYXRhc3RvcmUge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHN0b3JlT3B0aW9ucztcblx0ICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmluc3RhbmNlLl9yYW5kb21JbmRleCgpO1xuXHQgICAgcGFyc2VyJDIubG9hZChzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHRoaXMpO1xuXHQgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IERhdGUubm93KCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX2RvbmUgPSAwO1xuXHQgICAgdGhpcy5fdW5ibG9ja1RpbWUgPSAwO1xuXHQgICAgdGhpcy5yZWFkeSA9IHRoaXMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB0aGlzLmNsaWVudHMgPSB7fTtcblx0ICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XG5cdCAgfVxuXG5cdCAgX3N0YXJ0SGVhcnRiZWF0KCkge1xuXHQgICAgdmFyIGJhc2U7XG5cdCAgICBpZiAoKHRoaXMuaGVhcnRiZWF0ID09IG51bGwpICYmICgoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudCAhPSBudWxsKSkgfHwgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmICh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUFtb3VudCAhPSBudWxsKSkpKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5oZWFydGJlYXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFtb3VudCwgaW5jciwgbWF4aW11bSwgbm93LCByZXNlcnZvaXI7XG5cdCAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiBub3cgPj0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoID0gbm93O1xuXHQgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudDtcblx0ICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSArIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICh7XG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBhbW91bnQsXG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbWF4aW11bSxcblx0ICAgICAgICAgICAgcmVzZXJ2b2lyXG5cdCAgICAgICAgICB9ID0gdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgICAgICAgdGhpcy5fbGFzdFJlc2Vydm9pckluY3JlYXNlID0gbm93O1xuXHQgICAgICAgICAgaW5jciA9IG1heGltdW0gIT0gbnVsbCA/IE1hdGgubWluKGFtb3VudCwgbWF4aW11bSAtIHJlc2Vydm9pcikgOiBhbW91bnQ7XG5cdCAgICAgICAgICBpZiAoaW5jciA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpKSkudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IGJhc2UudW5yZWYoKSA6IHZvaWQgMDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyBfX3B1Ymxpc2hfXyhtZXNzYWdlKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuRXZlbnRzLnRyaWdnZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19kaXNjb25uZWN0X18oZmx1c2gpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgIH1cblxuXHQgIHlpZWxkTG9vcCh0ID0gMCkge1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHQpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZVBlbmFsdHkoKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0b3JlT3B0aW9ucy5wZW5hbHR5KSAhPSBudWxsID8gcmVmIDogKDE1ICogdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZSkgfHwgNTAwMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX3VwZGF0ZVNldHRpbmdzX18ob3B0aW9ucykge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHBhcnNlciQyLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX3J1bm5pbmdfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fcnVubmluZztcblx0ICB9XG5cblx0ICBhc3luYyBfX3F1ZXVlZF9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnF1ZXVlZCgpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZG9uZV9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLl9kb25lO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZ3JvdXBDaGVja19fKHRpbWUpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gKHRoaXMuX25leHRSZXF1ZXN0ICsgdGhpcy50aW1lb3V0KSA8IHRpbWU7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZUNhcGFjaXR5KCkge1xuXHQgICAgdmFyIG1heENvbmN1cnJlbnQsIHJlc2Vydm9pcjtcblx0ICAgICh7bWF4Q29uY3VycmVudCwgcmVzZXJ2b2lyfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgIGlmICgobWF4Q29uY3VycmVudCAhPSBudWxsKSAmJiAocmVzZXJ2b2lyICE9IG51bGwpKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLm1pbihtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZywgcmVzZXJ2b2lyKTtcblx0ICAgIH0gZWxzZSBpZiAobWF4Q29uY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZztcblx0ICAgIH0gZWxzZSBpZiAocmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpIHtcblx0ICAgIHZhciBjYXBhY2l0eTtcblx0ICAgIGNhcGFjaXR5ID0gdGhpcy5jb21wdXRlQ2FwYWNpdHkoKTtcblx0ICAgIHJldHVybiAoY2FwYWNpdHkgPT0gbnVsbCkgfHwgd2VpZ2h0IDw9IGNhcGFjaXR5O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcikge1xuXHQgICAgdmFyIHJlc2Vydm9pcjtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXNlcnZvaXIgPSB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgKz0gaW5jcjtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBhc3luYyBfX2N1cnJlbnRSZXNlcnZvaXJfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyO1xuXHQgIH1cblxuXHQgIGlzQmxvY2tlZChub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLl91bmJsb2NrVGltZSA+PSBub3c7XG5cdCAgfVxuXG5cdCAgY2hlY2sod2VpZ2h0LCBub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpICYmICh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdykgPD0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX2NoZWNrX18od2VpZ2h0KSB7XG5cdCAgICB2YXIgbm93O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICByZXR1cm4gdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19yZWdpc3Rlcl9fKGluZGV4LCB3ZWlnaHQsIGV4cGlyYXRpb24pIHtcblx0ICAgIHZhciBub3csIHdhaXQ7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpKSB7XG5cdCAgICAgIHRoaXMuX3J1bm5pbmcgKz0gd2VpZ2h0O1xuXHQgICAgICBpZiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgLT0gd2VpZ2h0O1xuXHQgICAgICB9XG5cdCAgICAgIHdhaXQgPSBNYXRoLm1heCh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdywgMCk7XG5cdCAgICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gbm93ICsgd2FpdCArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgc3VjY2VzczogdHJ1ZSxcblx0ICAgICAgICB3YWl0LFxuXHQgICAgICAgIHJlc2Vydm9pcjogdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyXG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RyYXRlZ3lJc0Jsb2NrKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5ID09PSAzO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fc3VibWl0X18ocXVldWVMZW5ndGgsIHdlaWdodCkge1xuXHQgICAgdmFyIGJsb2NrZWQsIG5vdywgcmVhY2hlZEhXTTtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgd2VpZ2h0ID4gdGhpcy5zdG9yZU9wdGlvbnMubWF4Q29uY3VycmVudCkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDIoYEltcG9zc2libGUgdG8gYWRkIGEgam9iIGhhdmluZyBhIHdlaWdodCBvZiAke3dlaWdodH0gdG8gYSBsaW1pdGVyIGhhdmluZyBhIG1heENvbmN1cnJlbnQgc2V0dGluZyBvZiAke3RoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnR9YCk7XG5cdCAgICB9XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmVhY2hlZEhXTSA9ICh0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgIT0gbnVsbCkgJiYgcXVldWVMZW5ndGggPT09IHRoaXMuc3RvcmVPcHRpb25zLmhpZ2hXYXRlciAmJiAhdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgICBibG9ja2VkID0gdGhpcy5zdHJhdGVneUlzQmxvY2soKSAmJiAocmVhY2hlZEhXTSB8fCB0aGlzLmlzQmxvY2tlZChub3cpKTtcblx0ICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gbm93ICsgdGhpcy5jb21wdXRlUGVuYWx0eSgpO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IHRoaXMuX3VuYmxvY2tUaW1lICsgdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZS5fZHJvcEFsbFF1ZXVlZCgpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcmVhY2hlZEhXTSxcblx0ICAgICAgYmxvY2tlZCxcblx0ICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZnJlZV9fKGluZGV4LCB3ZWlnaHQpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nIC09IHdlaWdodDtcblx0ICAgIHRoaXMuX2RvbmUgKz0gd2VpZ2h0O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBydW5uaW5nOiB0aGlzLl9ydW5uaW5nXG5cdCAgICB9O1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBMb2NhbERhdGFzdG9yZV8xID0gTG9jYWxEYXRhc3RvcmU7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQzLCBTdGF0ZXM7XG5cblx0Qm90dGxlbmVja0Vycm9yJDMgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRTdGF0ZXMgPSBjbGFzcyBTdGF0ZXMge1xuXHQgIGNvbnN0cnVjdG9yKHN0YXR1czEpIHtcblx0ICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzMTtcblx0ICAgIHRoaXMuX2pvYnMgPSB7fTtcblx0ICAgIHRoaXMuY291bnRzID0gdGhpcy5zdGF0dXMubWFwKGZ1bmN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIG5leHQoaWQpIHtcblx0ICAgIHZhciBjdXJyZW50LCBuZXh0O1xuXHQgICAgY3VycmVudCA9IHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgbmV4dCA9IGN1cnJlbnQgKyAxO1xuXHQgICAgaWYgKChjdXJyZW50ICE9IG51bGwpICYmIG5leHQgPCB0aGlzLnN0YXR1cy5sZW5ndGgpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgdGhpcy5jb3VudHNbbmV4dF0rKztcblx0ICAgICAgcmV0dXJuIHRoaXMuX2pvYnNbaWRdKys7XG5cdCAgICB9IGVsc2UgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLmNvdW50c1tjdXJyZW50XS0tO1xuXHQgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXJ0KGlkKSB7XG5cdCAgICB2YXIgaW5pdGlhbDtcblx0ICAgIGluaXRpYWwgPSAwO1xuXHQgICAgdGhpcy5fam9ic1tpZF0gPSBpbml0aWFsO1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzW2luaXRpYWxdKys7XG5cdCAgfVxuXG5cdCAgcmVtb3ZlKGlkKSB7XG5cdCAgICB2YXIgY3VycmVudDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDtcblx0ICB9XG5cblx0ICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgIHZhciByZWY7XG5cdCAgICByZXR1cm4gKHJlZiA9IHRoaXMuc3RhdHVzW3RoaXMuX2pvYnNbaWRdXSkgIT0gbnVsbCA/IHJlZiA6IG51bGw7XG5cdCAgfVxuXG5cdCAgc3RhdHVzSm9icyhzdGF0dXMpIHtcblx0ICAgIHZhciBrLCBwb3MsIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xuXHQgICAgICBwb3MgPSB0aGlzLnN0YXR1cy5pbmRleE9mKHN0YXR1cyk7XG5cdCAgICAgIGlmIChwb3MgPCAwKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQzKGBzdGF0dXMgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLnN0YXR1cy5qb2luKCcsICcpfWApO1xuXHQgICAgICB9XG5cdCAgICAgIHJlZiA9IHRoaXMuX2pvYnM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgaWYgKHYgPT09IHBvcykge1xuXHQgICAgICAgICAgcmVzdWx0cy5wdXNoKGspO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9qb2JzKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0dXNDb3VudHMoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb3VudHMucmVkdWNlKCgoYWNjLCB2LCBpKSA9PiB7XG5cdCAgICAgIGFjY1t0aGlzLnN0YXR1c1tpXV0gPSB2O1xuXHQgICAgICByZXR1cm4gYWNjO1xuXHQgICAgfSksIHt9KTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3RhdGVzXzEgPSBTdGF0ZXM7XG5cblx0dmFyIERMTGlzdCQyLCBTeW5jO1xuXG5cdERMTGlzdCQyID0gRExMaXN0XzE7XG5cblx0U3luYyA9IGNsYXNzIFN5bmMge1xuXHQgIGNvbnN0cnVjdG9yKG5hbWUsIFByb21pc2UpIHtcblx0ICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgdGhpcy5Qcm9taXNlID0gUHJvbWlzZTtcblx0ICAgIHRoaXMuX3J1bm5pbmcgPSAwO1xuXHQgICAgdGhpcy5fcXVldWUgPSBuZXcgRExMaXN0JDIoKTtcblx0ICB9XG5cblx0ICBpc0VtcHR5KCkge1xuXHQgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfdHJ5VG9SdW4oKSB7XG5cdCAgICB2YXIgYXJncywgY2IsIGVycm9yLCByZWplY3QsIHJlc29sdmUsIHJldHVybmVkLCB0YXNrO1xuXHQgICAgaWYgKCh0aGlzLl9ydW5uaW5nIDwgMSkgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nKys7XG5cdCAgICAgICh7dGFzaywgYXJncywgcmVzb2x2ZSwgcmVqZWN0fSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCkpO1xuXHQgICAgICBjYiA9IChhd2FpdCAoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gKGF3YWl0IHRhc2soLi4uYXJncykpO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5lZCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pKCkpO1xuXHQgICAgICB0aGlzLl9ydW5uaW5nLS07XG5cdCAgICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICAgIHJldHVybiBjYigpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNjaGVkdWxlKHRhc2ssIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBwcm9taXNlLCByZWplY3QsIHJlc29sdmU7XG5cdCAgICByZXNvbHZlID0gcmVqZWN0ID0gbnVsbDtcblx0ICAgIHByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG5cdCAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcblx0ICAgICAgcmV0dXJuIHJlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuX3F1ZXVlLnB1c2goe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0pO1xuXHQgICAgdGhpcy5fdHJ5VG9SdW4oKTtcblx0ICAgIHJldHVybiBwcm9taXNlO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBTeW5jXzEgPSBTeW5jO1xuXG5cdHZhciB2ZXJzaW9uID0gXCIyLjE5LjVcIjtcblx0dmFyIHZlcnNpb24kMSA9IHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uXG5cdH07XG5cblx0dmFyIHZlcnNpb24kMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uLFxuXHRcdGRlZmF1bHQ6IHZlcnNpb24kMVxuXHR9KTtcblxuXHR2YXIgcmVxdWlyZSQkMiA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDMgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQ0ID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgRXZlbnRzJDIsIEdyb3VwLCBJT1JlZGlzQ29ubmVjdGlvbiQxLCBSZWRpc0Nvbm5lY3Rpb24kMSwgU2NyaXB0cyQxLCBwYXJzZXIkMztcblxuXHRwYXJzZXIkMyA9IHBhcnNlcjtcblxuXHRFdmVudHMkMiA9IEV2ZW50c18xO1xuXG5cdFJlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMjtcblxuXHRJT1JlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMztcblxuXHRTY3JpcHRzJDEgPSByZXF1aXJlJCQ0O1xuXG5cdEdyb3VwID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEdyb3VwIHtcblx0ICAgIGNvbnN0cnVjdG9yKGxpbWl0ZXJPcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5kZWxldGVLZXkgPSB0aGlzLmRlbGV0ZUtleS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLmxpbWl0ZXJPcHRpb25zID0gbGltaXRlck9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQzLmxvYWQodGhpcy5saW1pdGVyT3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQyKHRoaXMpO1xuXHQgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9O1xuXHQgICAgICB0aGlzLkJvdHRsZW5lY2sgPSBCb3R0bGVuZWNrXzE7XG5cdCAgICAgIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgdGhpcy5zaGFyZWRDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uICE9IG51bGw7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgUmVkaXNDb25uZWN0aW9uJDEoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5saW1pdGVyT3B0aW9ucywge0V2ZW50czogdGhpcy5FdmVudHN9KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJpb3JlZGlzXCIpIHtcblx0ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBJT1JlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBrZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuaW5zdGFuY2VzW2tleV0pICE9IG51bGwgPyByZWYgOiAoKCkgPT4ge1xuXHQgICAgICAgIHZhciBsaW1pdGVyO1xuXHQgICAgICAgIGxpbWl0ZXIgPSB0aGlzLmluc3RhbmNlc1trZXldID0gbmV3IHRoaXMuQm90dGxlbmVjayhPYmplY3QuYXNzaWduKHRoaXMubGltaXRlck9wdGlvbnMsIHtcblx0ICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke2tleX1gLFxuXHQgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuXHQgICAgICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uXG5cdCAgICAgICAgfSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJjcmVhdGVkXCIsIGxpbWl0ZXIsIGtleSk7XG5cdCAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGRlbGV0ZUtleShrZXkgPSBcIlwiKSB7XG5cdCAgICAgIHZhciBkZWxldGVkLCBpbnN0YW5jZTtcblx0ICAgICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG5cdCAgICAgICAgZGVsZXRlZCA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oWydkZWwnLCAuLi5TY3JpcHRzJDEuYWxsS2V5cyhgJHt0aGlzLmlkfS0ke2tleX1gKV0pKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuXHQgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICAgIGF3YWl0IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gKGluc3RhbmNlICE9IG51bGwpIHx8IGRlbGV0ZWQgPiAwO1xuXHQgICAgfVxuXG5cdCAgICBsaW1pdGVycygpIHtcblx0ICAgICAgdmFyIGssIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgcmVzdWx0cy5wdXNoKHtcblx0ICAgICAgICAgIGtleTogayxcblx0ICAgICAgICAgIGxpbWl0ZXI6IHZcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH1cblxuXHQgICAga2V5cygpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKTtcblx0ICAgIH1cblxuXHQgICAgYXN5bmMgY2x1c3RlcktleXMoKSB7XG5cdCAgICAgIHZhciBjdXJzb3IsIGVuZCwgZm91bmQsIGksIGssIGtleXMsIGxlbiwgbmV4dCwgc3RhcnQ7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0aGlzLmtleXMoKSk7XG5cdCAgICAgIH1cblx0ICAgICAga2V5cyA9IFtdO1xuXHQgICAgICBjdXJzb3IgPSBudWxsO1xuXHQgICAgICBzdGFydCA9IGBiXyR7dGhpcy5pZH0tYC5sZW5ndGg7XG5cdCAgICAgIGVuZCA9IFwiX3NldHRpbmdzXCIubGVuZ3RoO1xuXHQgICAgICB3aGlsZSAoY3Vyc29yICE9PSAwKSB7XG5cdCAgICAgICAgW25leHQsIGZvdW5kXSA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oW1wic2NhblwiLCBjdXJzb3IgIT0gbnVsbCA/IGN1cnNvciA6IDAsIFwibWF0Y2hcIiwgYGJfJHt0aGlzLmlkfS0qX3NldHRpbmdzYCwgXCJjb3VudFwiLCAxMDAwMF0pKTtcblx0ICAgICAgICBjdXJzb3IgPSB+fm5leHQ7XG5cdCAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgIGsgPSBmb3VuZFtpXTtcblx0ICAgICAgICAgIGtleXMucHVzaChrLnNsaWNlKHN0YXJ0LCAtZW5kKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBrZXlzO1xuXHQgICAgfVxuXG5cdCAgICBfc3RhcnRBdXRvQ2xlYW51cCgpIHtcblx0ICAgICAgdmFyIGJhc2U7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jKCkgPT4ge1xuXHQgICAgICAgIHZhciBlLCBrLCByZWYsIHJlc3VsdHMsIHRpbWUsIHY7XG5cdCAgICAgICAgdGltZSA9IERhdGUubm93KCk7XG5cdCAgICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBpZiAoKGF3YWl0IHYuX3N0b3JlLl9fZ3JvdXBDaGVja19fKHRpbWUpKSkge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlbGV0ZUtleShrKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIGUgPSBlcnJvcjtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHYuRXZlbnRzLnRyaWdnZXIoXCJlcnJvclwiLCBlKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgICB9LCB0aGlzLnRpbWVvdXQgLyAyKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9XG5cblx0ICAgIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHBhcnNlciQzLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLmxpbWl0ZXJPcHRpb25zKTtcblx0ICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICBpZiAoIXRoaXMuc2hhcmVkQ29ubmVjdGlvbikge1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5jb25uZWN0aW9uKSAhPSBudWxsID8gcmVmLmRpc2Nvbm5lY3QoZmx1c2gpIDogdm9pZCAwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgR3JvdXAucHJvdG90eXBlLmRlZmF1bHRzID0ge1xuXHQgICAgdGltZW91dDogMTAwMCAqIDYwICogNSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGwsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgaWQ6IFwiZ3JvdXAta2V5XCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEdyb3VwO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBHcm91cF8xID0gR3JvdXA7XG5cblx0dmFyIEJhdGNoZXIsIEV2ZW50cyQzLCBwYXJzZXIkNDtcblxuXHRwYXJzZXIkNCA9IHBhcnNlcjtcblxuXHRFdmVudHMkMyA9IEV2ZW50c18xO1xuXG5cdEJhdGNoZXIgPSAoZnVuY3Rpb24oKSB7XG5cdCAgY2xhc3MgQmF0Y2hlciB7XG5cdCAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0ICAgICAgcGFyc2VyJDQubG9hZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMyh0aGlzKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHRoaXMuX3Jlc2V0UHJvbWlzZSgpO1xuXHQgICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmVzZXRQcm9taXNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9IG5ldyB0aGlzLlByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUgPSByZXM7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZmx1c2goKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiYmF0Y2hcIiwgdGhpcy5fYXJyKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgIH1cblxuXHQgICAgYWRkKGRhdGEpIHtcblx0ICAgICAgdmFyIHJldDtcblx0ICAgICAgdGhpcy5fYXJyLnB1c2goZGF0YSk7XG5cdCAgICAgIHJldCA9IHRoaXMuX3Byb21pc2U7XG5cdCAgICAgIGlmICh0aGlzLl9hcnIubGVuZ3RoID09PSB0aGlzLm1heFNpemUpIHtcblx0ICAgICAgICB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICB9IGVsc2UgaWYgKCh0aGlzLm1heFRpbWUgIT0gbnVsbCkgJiYgdGhpcy5fYXJyLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICAgIH0sIHRoaXMubWF4VGltZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH1cblxuXHQgIH1cblx0ICBCYXRjaGVyLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIG1heFRpbWU6IG51bGwsXG5cdCAgICBtYXhTaXplOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZVxuXHQgIH07XG5cblx0ICByZXR1cm4gQmF0Y2hlcjtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgQmF0Y2hlcl8xID0gQmF0Y2hlcjtcblxuXHR2YXIgcmVxdWlyZSQkNCQxID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkOCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UodmVyc2lvbiQyKTtcblxuXHR2YXIgQm90dGxlbmVjaywgREVGQVVMVF9QUklPUklUWSQxLCBFdmVudHMkNCwgSm9iJDEsIExvY2FsRGF0YXN0b3JlJDEsIE5VTV9QUklPUklUSUVTJDEsIFF1ZXVlcyQxLCBSZWRpc0RhdGFzdG9yZSQxLCBTdGF0ZXMkMSwgU3luYyQxLCBwYXJzZXIkNSxcblx0ICBzcGxpY2UgPSBbXS5zcGxpY2U7XG5cblx0TlVNX1BSSU9SSVRJRVMkMSA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkkMSA9IDU7XG5cblx0cGFyc2VyJDUgPSBwYXJzZXI7XG5cblx0UXVldWVzJDEgPSBRdWV1ZXNfMTtcblxuXHRKb2IkMSA9IEpvYl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlJDEgPSBMb2NhbERhdGFzdG9yZV8xO1xuXG5cdFJlZGlzRGF0YXN0b3JlJDEgPSByZXF1aXJlJCQ0JDE7XG5cblx0RXZlbnRzJDQgPSBFdmVudHNfMTtcblxuXHRTdGF0ZXMkMSA9IFN0YXRlc18xO1xuXG5cdFN5bmMkMSA9IFN5bmNfMTtcblxuXHRCb3R0bGVuZWNrID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJvdHRsZW5lY2sge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5pbnZhbGlkKSB7XG5cdCAgICAgIHZhciBzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVPcHRpb25zO1xuXHQgICAgICB0aGlzLl9hZGRUb1F1ZXVlID0gdGhpcy5fYWRkVG9RdWV1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucywgaW52YWxpZCk7XG5cdCAgICAgIHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzID0gbmV3IFF1ZXVlcyQxKE5VTV9QUklPUklUSUVTJDEpO1xuXHQgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB7fTtcblx0ICAgICAgdGhpcy5fc3RhdGVzID0gbmV3IFN0YXRlcyQxKFtcIlJFQ0VJVkVEXCIsIFwiUVVFVUVEXCIsIFwiUlVOTklOR1wiLCBcIkVYRUNVVElOR1wiXS5jb25jYXQodGhpcy50cmFja0RvbmVTdGF0dXMgPyBbXCJET05FXCJdIDogW10pKTtcblx0ICAgICAgdGhpcy5fbGltaXRlciA9IG51bGw7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQ0KHRoaXMpO1xuXHQgICAgICB0aGlzLl9zdWJtaXRMb2NrID0gbmV3IFN5bmMkMShcInN1Ym1pdFwiLCB0aGlzLlByb21pc2UpO1xuXHQgICAgICB0aGlzLl9yZWdpc3RlckxvY2sgPSBuZXcgU3luYyQxKFwicmVnaXN0ZXJcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgc3RvcmVPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgdGhpcy5fc3RvcmUgPSAoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcInJlZGlzXCIgfHwgdGhpcy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiIHx8ICh0aGlzLmNvbm5lY3Rpb24gIT0gbnVsbCkpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnJlZGlzU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpc0RhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc3RvcmUgPT09IFwibG9jYWxcIikge1xuXHQgICAgICAgICAgc3RvcmVJbnN0YW5jZU9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMubG9jYWxTdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IExvY2FsRGF0YXN0b3JlJDEodGhpcywgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEludmFsaWQgZGF0YXN0b3JlIHR5cGU6ICR7dGhpcy5kYXRhc3RvcmV9YCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYWxsKHRoaXMpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJsZWZ0emVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYucmVmID09PSBcImZ1bmN0aW9uXCIgPyByZWYucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJ6ZXJvXCIsICgpID0+IHtcblx0ICAgICAgICB2YXIgcmVmO1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5fc3RvcmUuaGVhcnRiZWF0KSAhPSBudWxsID8gdHlwZW9mIHJlZi51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnVucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpIHtcblx0ICAgICAgaWYgKCEoKG9wdGlvbnMgIT0gbnVsbCkgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiYgaW52YWxpZC5sZW5ndGggPT09IDApKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcIkJvdHRsZW5lY2sgdjIgdGFrZXMgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjayN1cGdyYWRpbmctdG8tdjIgaWYgeW91J3JlIHVwZ3JhZGluZyBmcm9tIEJvdHRsZW5lY2sgdjEuXCIpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJlYWR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVhZHk7XG5cdCAgICB9XG5cblx0ICAgIGNsaWVudHMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5jbGllbnRzO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsKCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfWA7XG5cdCAgICB9XG5cblx0ICAgIGNoYW5uZWxfY2xpZW50KCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfV8ke3RoaXMuX3N0b3JlLmNsaWVudElkfWA7XG5cdCAgICB9XG5cblx0ICAgIHB1Ymxpc2gobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19wdWJsaXNoX18obWVzc2FnZSk7XG5cdCAgICB9XG5cblx0ICAgIGRpc2Nvbm5lY3QoZmx1c2ggPSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2Rpc2Nvbm5lY3RfXyhmbHVzaCk7XG5cdCAgICB9XG5cblx0ICAgIGNoYWluKF9saW1pdGVyKSB7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBfbGltaXRlcjtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnF1ZXVlZChwcmlvcml0eSk7XG5cdCAgICB9XG5cblx0ICAgIGNsdXN0ZXJRdWV1ZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3F1ZXVlZF9fKCk7XG5cdCAgICB9XG5cblx0ICAgIGVtcHR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWV1ZWQoKSA9PT0gMCAmJiB0aGlzLl9zdWJtaXRMb2NrLmlzRW1wdHkoKTtcblx0ICAgIH1cblxuXHQgICAgcnVubmluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcnVubmluZ19fKCk7XG5cdCAgICB9XG5cblx0ICAgIGRvbmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2RvbmVfXygpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5qb2JTdGF0dXMoaWQpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JzKHN0YXR1cykge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0pvYnMoc3RhdHVzKTtcblx0ICAgIH1cblxuXHQgICAgY291bnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0NvdW50cygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmFuZG9tSW5kZXgoKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICAgIH1cblxuXHQgICAgY2hlY2sod2VpZ2h0ID0gMSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jaGVja19fKHdlaWdodCk7XG5cdCAgICB9XG5cblx0ICAgIF9jbGVhckdsb2JhbFN0YXRlKGluZGV4KSB7XG5cdCAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRbaW5kZXhdICE9IG51bGwpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkW2luZGV4XS5leHBpcmF0aW9uKTtcblx0ICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkW2luZGV4XTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgYXN5bmMgX2ZyZWUoaW5kZXgsIGpvYiwgb3B0aW9ucywgZXZlbnRJbmZvKSB7XG5cdCAgICAgIHZhciBlLCBydW5uaW5nO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgICh7cnVubmluZ30gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19mcmVlX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRnJlZWQgJHtvcHRpb25zLmlkfWAsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgaWYgKHJ1bm5pbmcgPT09IDAgJiYgdGhpcy5lbXB0eSgpKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImlkbGVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlID0gZXJyb3IxO1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgX3J1bihpbmRleCwgam9iLCB3YWl0KSB7XG5cdCAgICAgIHZhciBjbGVhckdsb2JhbFN0YXRlLCBmcmVlLCBydW47XG5cdCAgICAgIGpvYi5kb1J1bigpO1xuXHQgICAgICBjbGVhckdsb2JhbFN0YXRlID0gdGhpcy5fY2xlYXJHbG9iYWxTdGF0ZS5iaW5kKHRoaXMsIGluZGV4KTtcblx0ICAgICAgcnVuID0gdGhpcy5fcnVuLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIGZyZWUgPSB0aGlzLl9mcmVlLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRbaW5kZXhdID0ge1xuXHQgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4ZWN1dGUodGhpcy5fbGltaXRlciwgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0KSxcblx0ICAgICAgICBleHBpcmF0aW9uOiBqb2Iub3B0aW9ucy5leHBpcmF0aW9uICE9IG51bGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4cGlyZShjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgICAgIH0sIHdhaXQgKyBqb2Iub3B0aW9ucy5leHBpcmF0aW9uKSA6IHZvaWQgMCxcblx0ICAgICAgICBqb2I6IGpvYlxuXHQgICAgICB9O1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5PbmUoY2FwYWNpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFyZ3MsIGluZGV4LCBuZXh0LCBvcHRpb25zLCBxdWV1ZTtcblx0ICAgICAgICBpZiAodGhpcy5xdWV1ZWQoKSA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZSA9IHRoaXMuX3F1ZXVlcy5nZXRGaXJzdCgpO1xuXHQgICAgICAgICh7b3B0aW9ucywgYXJnc30gPSBuZXh0ID0gcXVldWUuZmlyc3QoKSk7XG5cdCAgICAgICAgaWYgKChjYXBhY2l0eSAhPSBudWxsKSAmJiBvcHRpb25zLndlaWdodCA+IGNhcGFjaXR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRHJhaW5pbmcgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgaW5kZXggPSB0aGlzLl9yYW5kb21JbmRleCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3JlZ2lzdGVyX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0LCBvcHRpb25zLmV4cGlyYXRpb24pLnRoZW4oKHtzdWNjZXNzLCB3YWl0LCByZXNlcnZvaXJ9KSA9PiB7XG5cdCAgICAgICAgICB2YXIgZW1wdHk7XG5cdCAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluZWQgJHtvcHRpb25zLmlkfWAsIHtzdWNjZXNzLCBhcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuXHQgICAgICAgICAgICBxdWV1ZS5zaGlmdCgpO1xuXHQgICAgICAgICAgICBlbXB0eSA9IHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICAgICAgaWYgKGVtcHR5KSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImVtcHR5XCIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChyZXNlcnZvaXIgPT09IDApIHtcblx0ICAgICAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVwbGV0ZWRcIiwgZW1wdHkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3J1bihpbmRleCwgbmV4dCwgd2FpdCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShvcHRpb25zLndlaWdodCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5BbGwoY2FwYWNpdHksIHRvdGFsID0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZHJhaW5PbmUoY2FwYWNpdHkpLnRoZW4oKGRyYWluZWQpID0+IHtcblx0ICAgICAgICB2YXIgbmV3Q2FwYWNpdHk7XG5cdCAgICAgICAgaWYgKGRyYWluZWQgIT0gbnVsbCkge1xuXHQgICAgICAgICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0eSAhPSBudWxsID8gY2FwYWNpdHkgLSBkcmFpbmVkIDogY2FwYWNpdHk7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZHJhaW5BbGwobmV3Q2FwYWNpdHksIHRvdGFsICsgZHJhaW5lZCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0b3RhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJvcEFsbFF1ZXVlZChtZXNzYWdlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9xdWV1ZXMuc2hpZnRBbGwoZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5kb0Ryb3Aoe21lc3NhZ2V9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIHN0b3Aob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHZhciBkb25lLCB3YWl0Rm9yRXhlY3V0aW5nO1xuXHQgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3BEZWZhdWx0cyk7XG5cdCAgICAgIHdhaXRGb3JFeGVjdXRpbmcgPSAoYXQpID0+IHtcblx0ICAgICAgICB2YXIgZmluaXNoZWQ7XG5cdCAgICAgICAgZmluaXNoZWQgPSAoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgY291bnRzO1xuXHQgICAgICAgICAgY291bnRzID0gdGhpcy5fc3RhdGVzLmNvdW50cztcblx0ICAgICAgICAgIHJldHVybiAoY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdICsgY291bnRzWzNdKSA9PT0gYXQ7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oXCJkb25lXCIsICgpID0+IHtcblx0ICAgICAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkb25lXCIpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBkb25lID0gb3B0aW9ucy5kcm9wV2FpdGluZ0pvYnMgPyAodGhpcy5fcnVuID0gZnVuY3Rpb24oaW5kZXgsIG5leHQpIHtcblx0ICAgICAgICByZXR1cm4gbmV4dC5kb0Ryb3Aoe1xuXHQgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5kcm9wRXJyb3JNZXNzYWdlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0sIHRoaXMuX2RyYWluT25lID0gKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgfSwgdGhpcy5fcmVnaXN0ZXJMb2NrLnNjaGVkdWxlKCgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgaywgcmVmLCB2O1xuXHQgICAgICAgICAgcmVmID0gdGhpcy5fc2NoZWR1bGVkO1xuXHQgICAgICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXModi5qb2Iub3B0aW9ucy5pZCkgPT09IFwiUlVOTklOR1wiKSB7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYudGltZW91dCk7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYuZXhwaXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgdi5qb2IuZG9Ecm9wKHtcblx0ICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLl9kcm9wQWxsUXVldWVkKG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZSk7XG5cdCAgICAgICAgICByZXR1cm4gd2FpdEZvckV4ZWN1dGluZygwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSkpIDogdGhpcy5zY2hlZHVsZSh7XG5cdCAgICAgICAgcHJpb3JpdHk6IE5VTV9QUklPUklUSUVTJDEgLSAxLFxuXHQgICAgICAgIHdlaWdodDogMFxuXHQgICAgICB9LCAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9yZWNlaXZlID0gZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3Iob3B0aW9ucy5lbnF1ZXVlRXJyb3JNZXNzYWdlKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuc3RvcCA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKFwic3RvcCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkXCIpKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIGRvbmU7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9hZGRUb1F1ZXVlKGpvYikge1xuXHQgICAgICB2YXIgYXJncywgYmxvY2tlZCwgZXJyb3IsIG9wdGlvbnMsIHJlYWNoZWRIV00sIHNoaWZ0ZWQsIHN0cmF0ZWd5O1xuXHQgICAgICAoe2FyZ3MsIG9wdGlvbnN9ID0gam9iKTtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3JlYWNoZWRIV00sIGJsb2NrZWQsIHN0cmF0ZWd5fSA9IChhd2FpdCB0aGlzLl9zdG9yZS5fX3N1Ym1pdF9fKHRoaXMucXVldWVkKCksIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYENvdWxkIG5vdCBxdWV1ZSAke29wdGlvbnMuaWR9YCwge2FyZ3MsIG9wdGlvbnMsIGVycm9yfSk7XG5cdCAgICAgICAgam9iLmRvRHJvcCh7ZXJyb3J9KTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGJsb2NrZWQpIHtcblx0ICAgICAgICBqb2IuZG9Ecm9wKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVhY2hlZEhXTSkge1xuXHQgICAgICAgIHNoaWZ0ZWQgPSBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XX1BSSU9SSVRZID8gdGhpcy5fcXVldWVzLnNoaWZ0TGFzdEZyb20ob3B0aW9ucy5wcmlvcml0eSArIDEpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XID8gam9iIDogdm9pZCAwO1xuXHQgICAgICAgIGlmIChzaGlmdGVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIHNoaWZ0ZWQuZG9Ecm9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICgoc2hpZnRlZCA9PSBudWxsKSB8fCBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuT1ZFUkZMT1cpIHtcblx0ICAgICAgICAgIGlmIChzaGlmdGVkID09IG51bGwpIHtcblx0ICAgICAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGpvYi5kb1F1ZXVlKHJlYWNoZWRIV00sIGJsb2NrZWQpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMucHVzaChqb2IpO1xuXHQgICAgICBhd2FpdCB0aGlzLl9kcmFpbkFsbCgpO1xuXHQgICAgICByZXR1cm4gcmVhY2hlZEhXTTtcblx0ICAgIH1cblxuXHQgICAgX3JlY2VpdmUoam9iKSB7XG5cdCAgICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGpvYi5vcHRpb25zLmlkKSAhPSBudWxsKSB7XG5cdCAgICAgICAgam9iLl9yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihgQSBqb2Igd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cyAoaWQ9JHtqb2Iub3B0aW9ucy5pZH0pYCkpO1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBqb2IuZG9SZWNlaXZlKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUodGhpcy5fYWRkVG9RdWV1ZSwgam9iKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBzdWJtaXQoLi4uYXJncykge1xuXHQgICAgICB2YXIgY2IsIGZuLCBqb2IsIG9wdGlvbnMsIHJlZiwgcmVmMSwgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZWYgPSBhcmdzLCBbZm4sIC4uLmFyZ3NdID0gcmVmLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKHt9LCB0aGlzLmpvYkRlZmF1bHRzKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZWYxID0gYXJncywgW29wdGlvbnMsIGZuLCAuLi5hcmdzXSA9IHJlZjEsIFtjYl0gPSBzcGxpY2UuY2FsbChhcmdzLCAtMSk7XG5cdCAgICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGFzayA9ICguLi5hcmdzKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgZnVuY3Rpb24oLi4uYXJncykge1xuXHQgICAgICAgICAgICByZXR1cm4gKGFyZ3NbMF0gIT0gbnVsbCA/IHJlamVjdCA6IHJlc29sdmUpKGFyZ3MpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgam9iLnByb21pc2UudGhlbihmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGFyZ3MpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKGFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlKGpvYik7XG5cdCAgICB9XG5cblx0ICAgIHNjaGVkdWxlKC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGpvYiwgb3B0aW9ucywgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICBbdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBbb3B0aW9ucywgdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICB9XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgICByZXR1cm4gam9iLnByb21pc2U7XG5cdCAgICB9XG5cblx0ICAgIHdyYXAoZm4pIHtcblx0ICAgICAgdmFyIHNjaGVkdWxlLCB3cmFwcGVkO1xuXHQgICAgICBzY2hlZHVsZSA9IHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKTtcblx0ICAgICAgd3JhcHBlZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICByZXR1cm4gc2NoZWR1bGUoZm4uYmluZCh0aGlzKSwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHdyYXBwZWQud2l0aE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zLCAuLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKG9wdGlvbnMsIGZuLCAuLi5hcmdzKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIHdyYXBwZWQ7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5fX3VwZGF0ZVNldHRpbmdzX18ocGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuc3RvcmVEZWZhdWx0cykpO1xuXHQgICAgICBwYXJzZXIkNS5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGN1cnJlbnRSZXNlcnZvaXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2N1cnJlbnRSZXNlcnZvaXJfXygpO1xuXHQgICAgfVxuXG5cdCAgICBpbmNyZW1lbnRSZXNlcnZvaXIoaW5jciA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcik7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQm90dGxlbmVjay5kZWZhdWx0ID0gQm90dGxlbmVjaztcblxuXHQgIEJvdHRsZW5lY2suRXZlbnRzID0gRXZlbnRzJDQ7XG5cblx0ICBCb3R0bGVuZWNrLnZlcnNpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS52ZXJzaW9uID0gcmVxdWlyZSQkOC52ZXJzaW9uO1xuXG5cdCAgQm90dGxlbmVjay5zdHJhdGVneSA9IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5ID0ge1xuXHQgICAgTEVBSzogMSxcblx0ICAgIE9WRVJGTE9XOiAyLFxuXHQgICAgT1ZFUkZMT1dfUFJJT1JJVFk6IDQsXG5cdCAgICBCTE9DSzogM1xuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdCAgQm90dGxlbmVjay5Hcm91cCA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkdyb3VwID0gR3JvdXBfMTtcblxuXHQgIEJvdHRsZW5lY2suUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuUmVkaXNDb25uZWN0aW9uID0gcmVxdWlyZSQkMjtcblxuXHQgIEJvdHRsZW5lY2suSU9SZWRpc0Nvbm5lY3Rpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5JT1JlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDM7XG5cblx0ICBCb3R0bGVuZWNrLkJhdGNoZXIgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5CYXRjaGVyID0gQmF0Y2hlcl8xO1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuam9iRGVmYXVsdHMgPSB7XG5cdCAgICBwcmlvcml0eTogREVGQVVMVF9QUklPUklUWSQxLFxuXHQgICAgd2VpZ2h0OiAxLFxuXHQgICAgZXhwaXJhdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIlxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdG9yZURlZmF1bHRzID0ge1xuXHQgICAgbWF4Q29uY3VycmVudDogbnVsbCxcblx0ICAgIG1pblRpbWU6IDAsXG5cdCAgICBoaWdoV2F0ZXI6IG51bGwsXG5cdCAgICBzdHJhdGVneTogQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyxcblx0ICAgIHBlbmFsdHk6IG51bGwsXG5cdCAgICByZXNlcnZvaXI6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VNYXhpbXVtOiBudWxsXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmxvY2FsU3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIFByb21pc2U6IFByb21pc2UsXG5cdCAgICB0aW1lb3V0OiBudWxsLFxuXHQgICAgaGVhcnRiZWF0SW50ZXJ2YWw6IDI1MFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5yZWRpc1N0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxuXHQgICAgY2xpZW50VGltZW91dDogMTAwMDAsXG5cdCAgICBSZWRpczogbnVsbCxcblx0ICAgIGNsaWVudE9wdGlvbnM6IHt9LFxuXHQgICAgY2x1c3Rlck5vZGVzOiBudWxsLFxuXHQgICAgY2xlYXJEYXRhc3RvcmU6IGZhbHNlLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5pbnN0YW5jZURlZmF1bHRzID0ge1xuXHQgICAgZGF0YXN0b3JlOiBcImxvY2FsXCIsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgaWQ6IFwiPG5vLWlkPlwiLFxuXHQgICAgcmVqZWN0T25Ecm9wOiB0cnVlLFxuXHQgICAgdHJhY2tEb25lU3RhdHVzOiBmYWxzZSxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcERlZmF1bHRzID0ge1xuXHQgICAgZW5xdWV1ZUVycm9yTWVzc2FnZTogXCJUaGlzIGxpbWl0ZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgY2Fubm90IGFjY2VwdCBuZXcgam9icy5cIixcblx0ICAgIGRyb3BXYWl0aW5nSm9iczogdHJ1ZSxcblx0ICAgIGRyb3BFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQuXCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJvdHRsZW5lY2s7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJvdHRsZW5lY2tfMSA9IEJvdHRsZW5lY2s7XG5cblx0dmFyIGxpYiA9IEJvdHRsZW5lY2tfMTtcblxuXHRyZXR1cm4gbGliO1xuXG59KSkpO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBOdWxsT2JqZWN0ID0gZnVuY3Rpb24gTnVsbE9iamVjdCAoKSB7IH1cbk51bGxPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCAqKCBcIjtcIiBwYXJhbWV0ZXIgKSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIC8gcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICA9IFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCIgLyBcIidcIiAvIFwiKlwiXG4gKiAgICAgICAgICAgICAgIC8gXCIrXCIgLyBcIi1cIiAvIFwiLlwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiIC8gXCJ8XCIgLyBcIn5cIlxuICogICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEFcbiAqICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzXG4gKiBxdW90ZWQtc3RyaW5nID0gRFFVT1RFICooIHFkdGV4dCAvIHF1b3RlZC1wYWlyICkgRFFVT1RFXG4gKiBxZHRleHQgICAgICAgID0gSFRBQiAvIFNQIC8gJXgyMSAvICV4MjMtNUIgLyAleDVELTdFIC8gb2JzLXRleHRcbiAqIG9icy10ZXh0ICAgICAgPSAleDgwLUZGXG4gKiBxdW90ZWQtcGFpciAgID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKi9cbmNvbnN0IHBhcmFtUkUgPSAvOyAqKFshIyQlJicqKy5eXFx3YHx+LV0rKT0oXCIoPzpbXFx2XFx1MDAyMFxcdTAwMjFcXHUwMDIzLVxcdTAwNWJcXHUwMDVkLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdfFxcXFxbXFx2XFx1MDAyMC1cXHUwMGZmXSkqXCJ8WyEjJCUmJyorLl5cXHdgfH4tXSspICovZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggcXVvdGVkLXBhaXIgaW4gUkZDIDcyMzAgc2VjIDMuMi42XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqIG9icy10ZXh0ICAgID0gJXg4MC1GRlxuICovXG5jb25zdCBxdW90ZWRQYWlyUkUgPSAvXFxcXChbXFx2XFx1MDAyMC1cXHUwMGZmXSkvZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbmNvbnN0IG1lZGlhVHlwZVJFID0gL15bISMkJSYnKisuXlxcd3x+LV0rXFwvWyEjJCUmJyorLl5cXHd8fi1dKyQvdVxuXG4vLyBkZWZhdWx0IENvbnRlbnRUeXBlIHRvIHByZXZlbnQgcmVwZWF0ZWQgb2JqZWN0IGNyZWF0aW9uXG5jb25zdCBkZWZhdWx0Q29udGVudFR5cGUgPSB7IHR5cGU6ICcnLCBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpIH1cbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlLnBhcmFtZXRlcnMpXG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZSlcblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaGVhZGVyIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHNhZmVQYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSB7IHBhcnNlLCBzYWZlUGFyc2UgfVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuc2FmZVBhcnNlID0gc2FmZVBhcnNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGUgPSBkZWZhdWx0Q29udGVudFR5cGVcbiIsICJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCIgYXNzZXJ0IHsgdHlwZTogXCJqc29uXCIgfTtcblxuaW1wb3J0IHsgcmVhZFNlcnZlckluZm8gfSBmcm9tIFwiLi9yZWFkU2VydmVySW5mb1wiO1xuaW1wb3J0IHtcbiAgU2FuZGJveE1vZGUsXG4gIE91dHB1dFNjaGVtYVNvdXJjZSxcbiAgUHJvbXB0U291cmNlLFxuICBydW5Db2RleEV4ZWMsXG4gIFNhZmV0eVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGRyb3BTdWRvIH0gZnJvbSBcIi4vZHJvcFN1ZG9cIjtcbmltcG9ydCB7IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MgfSBmcm9tIFwiLi9jaGVja0FjdG9yUGVybWlzc2lvbnNcIjtcbmltcG9ydCBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgZnJvbSBcInN0cmluZy1hcmd2XCI7XG5pbXBvcnQgeyB3cml0ZVByb3h5Q29uZmlnIH0gZnJvbSBcIi4vd3JpdGVQcm94eUNvbmZpZ1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKFwiY29kZXgtYWN0aW9uXCIpXG4gICAgLnZlcnNpb24ocGtnLnZlcnNpb24pXG4gICAgLmRlc2NyaXB0aW9uKFwiTXVsdGl0b29sIHRvIHN1cHBvcnQgb3BlbmFpL2NvZGV4LWFjdGlvbi5cIik7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicmVhZC1zZXJ2ZXItaW5mb1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlJlYWQgc2VydmVyIGluZm8gZnJvbSB0aGUgcmVzcG9uc2VzIEFQSSBwcm94eVwiKVxuICAgIC5hcmd1bWVudChcIjxzZXJ2ZXJJbmZvRmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoc2VydmVySW5mb0ZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGUpO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlc29sdmUtY29kZXgtaG9tZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiUmVzb2x2ZSB0aGUgQ29kZXggaG9tZSBkaXJlY3Rvcnkgd2l0aCBwcmVjZWRlbmNlOiBpbnB1dCwgZW52LCBkZWZhdWx0ICh+Ly5jb2RleClcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZS1vdmVycmlkZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJPcHRpb25hbCBjb2RleC1ob21lIGlucHV0IHZhbHVlIChtYXkgYmUgZW1wdHkpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIHBpY2tpbmcgZGVmYXVsdHNcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiQ29kZXggdXNlciB0byBjb25zaWRlciB3aGVuIHNhZmV0eSBzdHJhdGVneSBpcyAndW5wcml2aWxlZ2VkLXVzZXInXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1naXRodWItcnVuLWlkIDxpZD5cIiwgXCJHaXRIdWIgcnVuIElEXCIpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZU92ZXJyaWRlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgICBnaXRodWJSdW5JZDogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGNvZGV4VXNlciA9IGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhVc2VyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ29kZXhIb21lKFxuICAgICAgICAgIGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhIb21lT3ZlcnJpZGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgICBvcHRpb25zLmdpdGh1YlJ1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRPdXRwdXQgfSA9IGF3YWl0IGltcG9ydChcIkBhY3Rpb25zL2NvcmVcIik7XG4gICAgICAgIHNldE91dHB1dChcImNvZGV4LWhvbWVcIiwgcmVzb2x2ZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgQ29kZXggaG9tZTogJHtyZXNvbHZlZH1gKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcIndyaXRlLXByb3h5LWNvbmZpZ1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiV3JpdGUgdGhlIE9wZW5BSSBQcm94eSBtb2RlbCBwcm92aWRlciBjb25maWcgaW50byBDT0RFWF9IT01FL2NvbmZpZy50b21sXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsIFwiUGF0aCB0byBDb2RleCBob21lIGRpcmVjdG9yeVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcG9ydCA8cG9ydD5cIiwgXCJQcm94eSBzZXJ2ZXIgcG9ydFwiLCBwYXJzZUludFN0cmljdClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBwb3J0OiBudW1iZXI7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmV0eVN0cmF0ZWd5ID0gdG9TYWZldHlTdHJhdGVneShvcHRpb25zLnNhZmV0eVN0cmF0ZWd5KTtcbiAgICAgICAgYXdhaXQgd3JpdGVQcm94eUNvbmZpZyhvcHRpb25zLmNvZGV4SG9tZSwgb3B0aW9ucy5wb3J0LCBzYWZldHlTdHJhdGVneSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLXJ1bm5lci1jcmVkZW50aWFscyA8anNvbj5cIiwgXCJpbnRlcm5hbFwiKS5oaWRlSGVscCgpKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAob3B0aW9uczoge1xuICAgICAgICB1c2VyOiBzdHJpbmc7XG4gICAgICAgIGdyb3VwOiBzdHJpbmc7XG4gICAgICAgIHJvb3RQaGFzZTogYm9vbGVhbjtcbiAgICAgICAgcnVubmVyQ3JlZGVudGlhbHM/OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGF3YWl0IGRyb3BTdWRvKHtcbiAgICAgICAgICB1c2VyOiBvcHRpb25zLnVzZXIsXG4gICAgICAgICAgZ3JvdXA6IG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgICAgcm9vdFBoYXNlOiBvcHRpb25zLnJvb3RQaGFzZSxcbiAgICAgICAgICBydW5uZXJDcmVkZW50aWFsczogb3B0aW9ucy5ydW5uZXJDcmVkZW50aWFscyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJydW4tY29kZXgtZXhlY1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIkludm9rZXMgYGNvZGV4IGV4ZWNgIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50c1wiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcHJvbXB0IDxwcm9tcHQ+XCIsIFwiUHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1wcm9tcHQtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiRmlsZSBjb250YWluaW5nIHRoZSBwcm9tcHQgdG8gcGFzcyB0byBgY29kZXggZXhlY2AuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LWhvbWUgPERJUkVDVE9SWT5cIixcbiAgICAgIFwiUGF0aCB0byB0aGUgQ29kZXggQ0xJIGhvbWUgZGlyZWN0b3J5ICh3aGVyZSBjb25maWcgZmlsZXMgYXJlIHN0b3JlZCkuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jZCA8RElSRUNUT1JZPlwiLCBcIldvcmtpbmcgZGlyZWN0b3J5IGZvciBDb2RleFwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1leHRyYS1hcmdzIDxhcmdzPlwiLFxuICAgICAgXCJBZGRpdGlvbmFsIGFyZ3MgdG8gcGFzcyB0aHJvdWdoIHRvIGBjb2RleCBleGVjYCBhcyBKU09OIGFycmF5IG9yIHNoZWxsIHN0cmluZy5cIixcbiAgICAgIHBhcnNlRXh0cmFBcmdzXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiUGF0aCB3aGVyZSB0aGUgZmluYWwgbWVzc2FnZSBmcm9tIGBjb2RleCBleGVjYCB3aWxsIGJlIHdyaXR0ZW4uXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1zY2hlbWEtZmlsZSA8RklMRT5cIixcbiAgICAgIFwiUGF0aCB0byBhIHNjaGVtYSBmaWxlIHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWMgLS1vdXRwdXQtc2NoZW1hYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LXNjaGVtYSA8U0NIRU1BPlwiLFxuICAgICAgXCJJbmxpbmUgc2NoZW1hIGNvbnRlbnRzIHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWMgLS1vdXRwdXQtc2NoZW1hYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FuZGJveCA8U0FOREJPWD5cIixcbiAgICAgIFwiTGVnYWN5IHNhbmRib3ggbW9kZSBvdmVycmlkZSB0byBwYXNzIHRvIGBjb2RleCBleGVjYCAobWF5IGJlIGVtcHR5KS5cIlxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLXBlcm1pc3Npb24tcHJvZmlsZSA8UFJPRklMRT5cIixcbiAgICAgIFwiUGVybWlzc2lvbiBwcm9maWxlIHRvIHNlbGVjdCB0aHJvdWdoIGBkZWZhdWx0X3Blcm1pc3Npb25zYCAobWF5IGJlIGVtcHR5KS5cIixcbiAgICAgIFwiXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1tb2RlbCA8bW9kZWw+XCIsIFwiTW9kZWwgdGhlIGFnZW50IHNob3VsZCB1c2VcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLWVmZm9ydCA8ZWZmb3J0PlwiLCBcIlJlYXNvbmluZyBlZmZvcnQgdGhlIGFnZW50IHNob3VsZCB1c2VcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LXVzZXIgPHVzZXI+XCIsXG4gICAgICBcIlVzZXIgdG8gcnVuIGNvZGV4IGV4ZWMgYXMgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIHByb21wdDogc3RyaW5nO1xuICAgICAgICBwcm9tcHRGaWxlOiBzdHJpbmc7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBjZDogc3RyaW5nO1xuICAgICAgICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG4gICAgICAgIG91dHB1dEZpbGU6IHN0cmluZztcbiAgICAgICAgb3V0cHV0U2NoZW1hRmlsZTogc3RyaW5nO1xuICAgICAgICBvdXRwdXRTY2hlbWE6IHN0cmluZztcbiAgICAgICAgc2FuZGJveDogc3RyaW5nO1xuICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZTogc3RyaW5nO1xuICAgICAgICBtb2RlbDogc3RyaW5nO1xuICAgICAgICBlZmZvcnQ6IHN0cmluZztcbiAgICAgICAgc2FmZXR5U3RyYXRlZ3k6IHN0cmluZztcbiAgICAgICAgY29kZXhVc2VyOiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwcm9tcHQsXG4gICAgICAgICAgcHJvbXB0RmlsZSxcbiAgICAgICAgICBvdXRwdXRGaWxlLFxuICAgICAgICAgIGNvZGV4SG9tZSxcbiAgICAgICAgICBjZCxcbiAgICAgICAgICBleHRyYUFyZ3MsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hLFxuICAgICAgICAgIG91dHB1dFNjaGVtYUZpbGUsXG4gICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBlZmZvcnQsXG4gICAgICAgICAgc2FmZXR5U3RyYXRlZ3ksXG4gICAgICAgICAgY29kZXhVc2VyLFxuICAgICAgICB9ID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0ID0gZW1wdHlBc051bGwocHJvbXB0KTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFByb21wdEZpbGUgPSBlbXB0eUFzTnVsbChwcm9tcHRGaWxlKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9tcHQgIT0gbnVsbCAmJiBub3JtYWxpemVkUHJvbXB0RmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJPbmx5IG9uZSBvZiBgcHJvbXB0YCBvciBgcHJvbXB0LWZpbGVgIG1heSBiZSBzcGVjaWZpZWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb21wdFNvdXJjZTogUHJvbXB0U291cmNlO1xuICAgICAgICBpZiAobm9ybWFsaXplZFByb21wdCAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbXB0U291cmNlID0geyB0eXBlOiBcImlubGluZVwiLCBjb250ZW50OiBub3JtYWxpemVkUHJvbXB0IH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFByb21wdEZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21wdFNvdXJjZSA9IHsgdHlwZTogXCJmaWxlXCIsIHBhdGg6IG5vcm1hbGl6ZWRQcm9tcHRGaWxlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFaXRoZXIgYHByb21wdGAgb3IgYHByb21wdC1maWxlYCBtdXN0IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgdG8gY29lcmNlcyB0byBudWxsIGRvZXMgbm90IHdvcmsgd2l0aFxuICAgICAgICAvLyBDb21tYW5kZXIuanMncyByZXF1aXJlZE9wdGlvbiwgc28gd2UgaGF2ZSB0byBwb3N0LXByb2Nlc3MgaGVyZS5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgPSBlbXB0eUFzTnVsbChvdXRwdXRTY2hlbWFGaWxlKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE91dHB1dFNjaGVtYSA9IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWFGaWxlICE9IG51bGwgJiZcbiAgICAgICAgICBub3JtYWxpemVkT3V0cHV0U2NoZW1hICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJPbmx5IG9uZSBvZiBgb3V0cHV0LXNjaGVtYWAgb3IgYG91dHB1dC1zY2hlbWEtZmlsZWAgbWF5IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3V0cHV0U2NoZW1hU291cmNlOiBPdXRwdXRTY2hlbWFTb3VyY2UgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYVNvdXJjZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICBjb250ZW50OiBub3JtYWxpemVkT3V0cHV0U2NoZW1hLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYVNvdXJjZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgcGF0aDogbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJ1bkNvZGV4RXhlYyh7XG4gICAgICAgICAgcHJvbXB0OiBwcm9tcHRTb3VyY2UsXG4gICAgICAgICAgY29kZXhIb21lOiBlbXB0eUFzTnVsbChjb2RleEhvbWUpLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBleHBsaWNpdE91dHB1dEZpbGU6IGVtcHR5QXNOdWxsKG91dHB1dEZpbGUpLFxuICAgICAgICAgIG91dHB1dFNjaGVtYTogb3V0cHV0U2NoZW1hU291cmNlLFxuICAgICAgICAgIHNhbmRib3g6IHRvT3B0aW9uYWxTYW5kYm94TW9kZShzYW5kYm94KSxcbiAgICAgICAgICBwZXJtaXNzaW9uUHJvZmlsZTogZW1wdHlBc051bGwocGVybWlzc2lvblByb2ZpbGUpLFxuICAgICAgICAgIG1vZGVsOiBlbXB0eUFzTnVsbChtb2RlbCksXG4gICAgICAgICAgZWZmb3J0OiBlbXB0eUFzTnVsbChlZmZvcnQpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5OiB0b1NhZmV0eVN0cmF0ZWd5KHNhZmV0eVN0cmF0ZWd5KSxcbiAgICAgICAgICBjb2RleFVzZXI6IGVtcHR5QXNOdWxsKGNvZGV4VXNlciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY2hlY2std3JpdGUtYWNjZXNzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJDaGVja3MgdGhhdCB0aGUgdHJpZ2dlcmluZyBhY3RvciBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5XCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3RzIDxib29sZWFuPlwiLFxuICAgICAgXCJBbGxvdyB0cnVzdGVkIEdpdEh1YiBib3QgYWN0b3JzIHRvIGJ5cGFzcyB0aGUgd3JpdGUtYWNjZXNzIGNoZWNrIChkZWZhdWx0OiBmYWxzZSkuXCIsXG4gICAgICBwYXJzZUJvb2xlYW4sXG4gICAgICBmYWxzZVxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLWFsbG93LXVzZXJzIDx1c2Vycz5cIixcbiAgICAgIFwiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgR2l0SHViIHVzZXJuYW1lcyB3aG8gY2FuIHJ1biB0aGlzIGFjdGlvbiwgb3IgJyonIHRvIGFsbG93IGFsbCB1c2Vycy5cIixcbiAgICAgIFwiXCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3QtdXNlcnMgPHVzZXJzPlwiLFxuICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBHaXRIdWIgYm90IHVzZXJuYW1lcyB0aGF0IGNhbiBieXBhc3MgdGhlIHdyaXRlLWFjY2VzcyBjaGVjay4gJyonIGlzIG5vdCBzdXBwb3J0ZWQuXCIsXG4gICAgICBcIlwiXG4gICAgKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAoe1xuICAgICAgICBhbGxvd0JvdHMsXG4gICAgICAgIGFsbG93VXNlcnMsXG4gICAgICAgIGFsbG93Qm90VXNlcnMsXG4gICAgICB9OiB7XG4gICAgICAgIGFsbG93Qm90czogYm9vbGVhbjtcbiAgICAgICAgYWxsb3dVc2Vyczogc3RyaW5nO1xuICAgICAgICBhbGxvd0JvdFVzZXJzOiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3Moe1xuICAgICAgICAgIGFsbG93Qm90QWN0b3JzOiBhbGxvd0JvdHMsXG4gICAgICAgICAgYWxsb3dVc2VycyxcbiAgICAgICAgICBhbGxvd0JvdFVzZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpdGNoIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBcImFwcHJvdmVkXCI6IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0b3IgJyR7cmVzdWx0LmFjdG9yfScgaXMgbm90IHBlcm1pdHRlZCB0byBydW4gdGhpcyBhY3Rpb246ICR7cmVzdWx0LnJlYXNvbn1gO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgaWYgKFxuICAgICAgIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fFxuICAgICAgIXBhcnNlZC5ldmVyeSgoYXJndW1lbnQpID0+IHR5cGVvZiBhcmd1bWVudCA9PT0gXCJzdHJpbmdcIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImBjb2RleC1hcmdzYCBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1NhZmV0eVN0cmF0ZWd5KHZhbHVlOiBzdHJpbmcpOiBTYWZldHlTdHJhdGVneSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwiZHJvcC1zdWRvXCI6XG4gICAgY2FzZSBcInJlYWQtb25seVwiOlxuICAgIGNhc2UgXCJ1bnByaXZpbGVnZWQtdXNlclwiOlxuICAgIGNhc2UgXCJ1bnNhZmVcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYWZldHkgc3RyYXRlZ3k6ICR7dmFsdWV9LiBNdXN0IGJlIG9uZSBvZiAnZHJvcC1zdWRvJywgJ3JlYWQtb25seScsICd1bnByaXZpbGVnZWQtdXNlcicsIG9yICd1bnNhZmUnLmBcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9PcHRpb25hbFNhbmRib3hNb2RlKHZhbHVlOiBzdHJpbmcpOiBTYW5kYm94TW9kZSB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkID0gZW1wdHlBc051bGwodmFsdWUpO1xuICBzd2l0Y2ggKG5vcm1hbGl6ZWQpIHtcbiAgICBjYXNlIG51bGw6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcIndvcmtzcGFjZS13cml0ZVwiOlxuICAgIGNhc2UgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjpcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhbmRib3g6ICR7bm9ybWFsaXplZH0uIE11c3QgYmUgb25lIG9mICdyZWFkLW9ubHknLCAnd29ya3NwYWNlLXdyaXRlJywgb3IgJ2Rhbmdlci1mdWxsLWFjY2VzcycuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUFzTnVsbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID09IDAgPyBudWxsIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwieVwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm5cIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbm1haW4oKTtcblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvZGV4SG9tZShcbiAgaW5wdXRDb2RleEhvbWU6IHN0cmluZyB8IG51bGwsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneSxcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsLFxuICBnaXRodWJSdW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoaW5wdXRDb2RleEhvbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBleHBhbmRUaWxkZShpbnB1dENvZGV4SG9tZSk7XG4gIH1cbiAgY29uc3QgZW52SG9tZSA9IGVtcHR5QXNOdWxsKHByb2Nlc3MuZW52LkNPREVYX0hPTUUgPz8gXCJcIik7XG4gIGlmIChlbnZIb21lICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW52SG9tZTtcbiAgfVxuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXgtdXNlciBpbnB1dCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgYW5kIG5vIGNvZGV4LWhvbWUgaXMgc3BlY2lmaWVkLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICAgICAgY29kZXhVc2VyLFxuICAgICAgZ2l0aHViUnVuSWRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvZGV4XCIpO1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzIGZvciBkb3duc3RyZWFtIHN0ZXBzIHRoYXQgd2lsbCB3cml0ZSBmaWxlcyBoZXJlLlxuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICB1c2VyOiBzdHJpbmcsXG4gIGdpdGh1YlJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhvbWUgPSAoXG4gICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIi11XCIsIHVzZXIsIFwiLS1cIiwgXCJwcmludGVudlwiLCBcIkhPTUVcIl0pXG4gICkudHJpbSgpO1xuICBpZiAoIWhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgaG9tZSBkaXJlY3RvcnkgZm9yIHVzZXIgJyR7dXNlcn0nLmApO1xuICB9XG4gIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihob21lLCBcIi5jb2RleFwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChjb2RleEhvbWUpO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIERpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBhbmQgbWF5IGNvbnRhaW4gYSBjb25maWcudG9tbCBjcmVhdGVkIGJ5IHRoZVxuICAgICAgLy8gdXNlciAob3IgYSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIGNvZGV4LWFjdGlvbiksIHNvIGFzc3VtZSBpdCdzXG4gICAgICAvLyBjb3JyZWN0bHkgcGVybWlzc2lvbmVkLlxuICAgICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBzdGF0IGVycm9ycyBhbmQgdHJ5IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5LlxuICB9XG5cbiAgLy8gV2UgbXVzdCB1c2Ugc3VkbyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGJlY2F1c2Ugd2VcbiAgLy8gYXJlIHdyaXRpbmcgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIGEgZGlmZmVyZW50IHVzZXIuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJta2RpclwiLCBjb2RleEhvbWVdKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNob3duXCIsIGAke3VzZXJ9YCwgY29kZXhIb21lXSk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjc1NVwiLCBjb2RleEhvbWVdKTtcblxuICAvLyBjb2RleC1yZXNwb25zZXMtYXBpLXByb3h5IHdpbGwgbmVlZCB0byB3cml0ZSB0aGUgc2VydmVyIGluZm8gZmlsZS5cbiAgY29uc3Qgc2VydmVySW5mb0ZpbGUgPSBwYXRoLmpvaW4oY29kZXhIb21lLCBgJHtnaXRodWJSdW5JZH0uanNvbmApO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwidG91Y2hcIiwgc2VydmVySW5mb0ZpbGVdKTtcbiAgLy8gTWFrZSB0aGUgZmlsZSB3b3JsZC13cml0YWJsZSBmb3IgdGhlIG1vbWVudCwgYnV0IHRoaXMgd2lsbCBiZSBsb2NrZWQgZG93blxuICAvLyB0byByZWFkLW9ubHkgYnkgcm9vdCBiZWZvcmUgdGhlIGFjdGlvbiBjb21wbGV0ZXMuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjY2NlwiLCBzZXJ2ZXJJbmZvRmlsZV0pO1xuXG4gIHJldHVybiBjb2RleEhvbWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRpbGRlKHA6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwID09PSBcIn5cIikge1xuICAgIHJldHVybiBvcy5ob21lZGlyKCk7XG4gIH1cbiAgaWYgKHAuc3RhcnRzV2l0aChcIn4vXCIpIHx8IHAuc3RhcnRzV2l0aChcIn5cXFxcXCIpKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihvcy5ob21lZGlyKCksIHAuc2xpY2UoMikpO1xuICB9XG4gIHJldHVybiBwO1xufVxuIiwgImltcG9ydCBjb21tYW5kZXIgZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8vIHdyYXBwZXIgdG8gcHJvdmlkZSBuYW1lZCBleHBvcnRzIGZvciBFU00uXG5leHBvcnQgY29uc3Qge1xuICBwcm9ncmFtLFxuICBjcmVhdGVDb21tYW5kLFxuICBjcmVhdGVBcmd1bWVudCxcbiAgY3JlYXRlT3B0aW9uLFxuICBDb21tYW5kZXJFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yLCAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gIENvbW1hbmQsXG4gIEFyZ3VtZW50LFxuICBPcHRpb24sXG4gIEhlbHAsXG59ID0gY29tbWFuZGVyO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwiQG9wZW5haS9jb2RleC1hY3Rpb25cIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjBcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkdpdEh1YiBBY3Rpb24gdG8gcnVuIGNvZGV4IGV4ZWMgdmlhIHRoZSBDb2RleCBDTEkgd2l0aCBhY2NvbXBhbnlpbmcgaGVscGVyIHN0ZXBzXCIsXG4gIFwicHJpdmF0ZVwiOiB0cnVlLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJlc2J1aWxkIHNyYy9tYWluLnRzIC0tc291cmNlbWFwPWlubGluZSAtLWZvcm1hdD1janMgLS1idW5kbGUgLS1wbGF0Zm9ybT1ub2RlIC0tdGFyZ2V0PW5vZGUyMCAtLW91dGRpcj1kaXN0XCIsXG4gICAgXCJjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwidGVzdFwiOiBcInBucG0gcnVuIGJ1aWxkICYmIG5vZGUgLS10ZXN0IHRlc3QvKi50ZXN0Lm1qc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhY3Rpb25zL2NvcmVcIjogXCJeMS4xMS4xXCIsXG4gICAgXCJAb2N0b2tpdC9ncmFwaHFsXCI6IFwiXjguMi4yXCIsXG4gICAgXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIjogXCJeNy4yLjFcIixcbiAgICBcIkBvY3Rva2l0L3Jlc3RcIjogXCJeMjEuMS4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjFcIixcbiAgICBcInN0cmluZy1hcmd2XCI6IFwiMC4zLjJcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMi43XCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMjMuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjQuNVwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjMzLjArc2hhNTEyLjEwNTY4YmI0YTZhZmI1OGM5ZWIzNjMwZGE5MGNjOTUxNjQxN2FiZWJkM2ZhYmJlNjczOWYwYWU3OTU3MjhkYTE0OTFlOWRiNWE1NDRjNzZhZDhlYjc1NzBmNWM0YmIzZDZjNjM3YjJjYjQxYmZkY2RiNDdmYTgyM2M4NjQ5MzE5XCJcbn1cbiIsICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCJAYWN0aW9ucy9jb3JlXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcblxuLyoqXG4gKiBJbiB0aGVvcnksIHRoaXMgaXMgbm90IGNhbGxlZCB1bnRpbCBgc2VydmVySW5mb0ZpbGVgIGlzIG5vbi1lbXB0eSwgYnV0IHdlXG4gKiB3aWxsIHBvbGwgaW4gdGhlIHJhcmUgY2FzZSB0aGF0IGl0IHdhcyBhIHBhcnRpYWwgd3JpdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2VydmVySW5mbyhzZXJ2ZXJJbmZvRmlsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMTAwOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShzZXJ2ZXJJbmZvRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgICAgaWYgKHR5cGVvZiBwb3J0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb3JlLnNldE91dHB1dChcInBvcnRcIiwgcG9ydC50b1N0cmluZygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVhZGluZyBzZXJ2ZXIgaW5mbzogJHtlcnJvcn1gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byByZWFkIHNlcnZlciBpbmZvIGZyb20gJHtzZXJ2ZXJJbmZvRmlsZX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjaG1vZCwgbWtkdGVtcCwgcmVhZEZpbGUsIHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzZXRPdXRwdXQgfSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuaW1wb3J0IHsgY2FwdHVyZUxpbnV4UnVubmVyQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi9saW51eENyZWRlbnRpYWxzXCI7XG5cbmNvbnN0IExJTlVYX0RST1BfU1VET19TQ1JJUFQgPSBTdHJpbmcucmF3YFxubm9kZT1cIiQxXCJcbmFjdGlvbj1cIiQyXCJcbnVzZXI9XCIkM1wiXG51aWQ9XCIkNFwiXG5ob21lPVwiJDVcIlxucnVubmVyX3BhdGg9XCIkNlwiXG5ub2RlX29wdGlvbnM9XCIkN1wiXG5ydW5uZXJfY3JlZGVudGlhbHM9XCIkOFwiXG5zaGlmdCA4XG5cbmlmIFsgISAteCAvdXNyL2Jpbi9zZXRwcml2IF07IHRoZW5cbiAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyByZXF1aXJlcyAvdXNyL2Jpbi9zZXRwcml2LlwiID4mMlxuICBleGl0IDFcbmZpXG5cbm5vYm9keV9naWQ9XCIkKC91c3IvYmluL2lkIC1nIG5vYm9keSAyPi9kZXYvbnVsbClcIiB8fCB7XG4gIGVjaG8gXCJMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgYW4gdW5wcml2aWxlZ2VkIG5vYm9keSBhY2NvdW50LlwiID4mMlxuICBleGl0IDFcbn1cbmNhc2UgXCIkbm9ib2R5X2dpZFwiIGluXG4gICcnfCpbITAtOV0qfDApXG4gICAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyBjb3VsZCBub3QgcmVzb2x2ZSBhIHNhZmUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gICAgZXhpdCAxXG4gICAgOztcbmVzYWNcbmdyb3VwX2VudHJ5PVwiJCgvdXNyL2Jpbi9nZXRlbnQgZ3JvdXAgXCIkbm9ib2R5X2dpZFwiIDI+L2Rldi9udWxsKVwiIHx8IHtcbiAgZWNobyBcIkxpbnV4IGRyb3Atc3VkbyBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gIGV4aXQgMVxufVxuY2FzZSBcIiRncm91cF9lbnRyeVwiIGluXG4gIG5vYm9keToqfG5vZ3JvdXA6KikgOztcbiAgKilcbiAgICBlY2hvIFwiTGludXggZHJvcC1zdWRvIHJlZnVzZXMgYW4gdW5leHBlY3RlZCBub2JvZHkgcHJpbWFyeSBncm91cC5cIiA+JjJcbiAgICBleGl0IDFcbiAgICA7O1xuZXNhY1xuXG4vdXNyL2Jpbi9lbnYgLXUgTk9ERV9PUFRJT05TIFwiJG5vZGVcIiBcIiRhY3Rpb25cIiBkcm9wLXN1ZG8gLS1yb290LXBoYXNlIC0tdXNlciBcIiR1c2VyXCIgLS1ncm91cCBzdWRvIC0tcnVubmVyLWNyZWRlbnRpYWxzIFwiJHJ1bm5lcl9jcmVkZW50aWFsc1wiIHx8IGV4aXQgJD9cbnVuc2FmZV9ub2JvZHlfc29ja2V0PVwiJCgvdXNyL2Jpbi9maW5kIC9ydW4gLXR5cGUgcyAtdWlkIDAgLWdpZCBcIiRub2JvZHlfZ2lkXCIgLXBlcm0gLTAyMCAtcHJpbnQgLXF1aXQpXCIgfHwge1xuICBlY2hvIFwiTGludXggZHJvcC1zdWRvIGNvdWxkIG5vdCB2ZXJpZnkgdGhlIG5vYm9keSBwcmltYXJ5IGdyb3VwLlwiID4mMlxuICBleGl0IDFcbn1cbmlmIFsgLW4gXCIkdW5zYWZlX25vYm9keV9zb2NrZXRcIiBdOyB0aGVuXG4gIGVjaG8gXCJMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhbiB1bnNhZmUgbm9ib2R5IHByaW1hcnkgZ3JvdXAuXCIgPiYyXG4gIGV4aXQgMVxuZmlcbmlmIC91c3IvYmluL3N1ZG8gLW4gLXUgXCIkdXNlclwiIC0tIC91c3IvYmluL3N1ZG8gLW4gdHJ1ZSAyPi9kZXYvbnVsbDsgdGhlblxuICBlY2hvIFwiRXhwZWN0ZWQgc3VkbyB0byBiZSBkaXNhYmxlZCwgYnV0IHN1ZG8gc3VjY2VlZGVkLlwiID4mMlxuICBleGl0IDFcbmZpXG5lY2hvIFwiQ29uZmlybWVkIHRoZSBzdGFuZGFyZCBzdWRvIHByb2JlIGlzIGRpc2FibGVkLlwiXG5cbnNldCAtLSAvdXNyL2Jpbi9zZXRwcml2IFxcXG4gIC0tcmV1aWQ9XCIkdWlkXCIgXFxcbiAgLS1yZWdpZD1cIiRub2JvZHlfZ2lkXCIgXFxcbiAgLS1jbGVhci1ncm91cHMgXFxcbiAgLS1uby1uZXctcHJpdnMgXFxcbiAgLS1ib3VuZGluZy1zZXQ9LWFsbCBcXFxuICAtLWluaC1jYXBzPS1hbGwgXFxcbiAgLS1hbWJpZW50LWNhcHM9LWFsbCBcXFxuICAtLSAvdXNyL2Jpbi9lbnYgXFxcbiAgLXUgU1VET19DT01NQU5EIC11IFNVRE9fVVNFUiAtdSBTVURPX1VJRCAtdSBTVURPX0dJRCBcXFxuICBcIkhPTUU9JGhvbWVcIiBcIlVTRVI9JHVzZXJcIiBcIkxPR05BTUU9JHVzZXJcIiBcIlBBVEg9JHJ1bm5lcl9wYXRoXCIgXFxcbiAgXCJOT0RFX09QVElPTlM9JG5vZGVfb3B0aW9uc1wiIFxcXG4gIFwiJEBcIlxuZWNobyBcIkxhdW5jaGluZyBDb2RleCB3aXRoIG5vX25ld19wcml2cyBhbmQgZW1wdHkgY2FwYWJpbGl0eSBzZXRzLlwiXG5leGVjIFwiJEBcIlxuYDtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImlubGluZVwiO1xuICAgICAgY29udGVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZldHlTdHJhdGVneSA9XG4gIHwgXCJkcm9wLXN1ZG9cIlxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcInVucHJpdmlsZWdlZC11c2VyXCJcbiAgfCBcInVuc2FmZVwiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94TW9kZSA9XG4gIHwgXCJyZWFkLW9ubHlcIlxuICB8IFwid29ya3NwYWNlLXdyaXRlXCJcbiAgfCBcImRhbmdlci1mdWxsLWFjY2Vzc1wiO1xuXG50eXBlIFBlcm1pc3Npb25TZWxlY3Rpb24gPVxuICB8IHsgdHlwZTogXCJzYW5kYm94XCI7IG1vZGU6IFNhbmRib3hNb2RlIH1cbiAgfCB7IHR5cGU6IFwicHJvZmlsZVwiOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcnVucyBhIGBjb2RleCBleGVjYCBjb21tYW5kLCB3cml0ZXMgdGhlIHByb21wdCB0byBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBwdWJsaXNoZXNcbiAqIHRoZSBjb21tYW5kJ3MgZmluYWwgbWVzc2FnZSBhcyB0aGUgYWN0aW9uIG91dHB1dC5cbiAqXG4gKiBBdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG91dHNpZGUgdGhpcyBmdW5jdGlvbi4gVGhlIGNvbXBvc2l0ZSBhY3Rpb24gc3RhcnRzIG9yIHJldXNlc1xuICogdGhlIFJlc3BvbnNlcyBBUEkgcHJveHkgYW5kIHdyaXRlcyB0aGUgY29ycmVzcG9uZGluZyBDb2RleCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbnZva2luZyB0aGlzXG4gKiBjb21tYW5kLiBLZWVwaW5nIHRoYXQgc2V0dXAgc2VwYXJhdGUgYWxzbyBsZXRzIHRlc3RzIHB1dCBhIGZha2UgYGNvZGV4YCBleGVjdXRhYmxlIG9uIGBQQVRIYCB0b1xuICogdmVyaWZ5IGNvbW1hbmQgY29uc3RydWN0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcgd2l0aG91dCBhbiBBUEkga2V5IG9yIG5ldHdvcmsgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgZXh0cmFBcmdzLFxuICBleHBsaWNpdE91dHB1dEZpbGUsXG4gIG91dHB1dFNjaGVtYSxcbiAgbW9kZWwsXG4gIGVmZm9ydCxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbiAgc2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG59OiB7XG4gIHByb21wdDogUHJvbXB0U291cmNlO1xuICBjb2RleEhvbWU6IHN0cmluZyB8IG51bGw7XG4gIGNkOiBzdHJpbmc7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBvdXRwdXRTY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBlZmZvcnQ6IHN0cmluZyB8IG51bGw7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsO1xuICBzYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaW5wdXQ6IHN0cmluZztcbiAgc3dpdGNoIChwcm9tcHQudHlwZSkge1xuICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgIGlucHV0ID0gcHJvbXB0LmNvbnRlbnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgaW5wdXQgPSBhd2FpdCByZWFkRmlsZShwcm9tcHQucGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGwgPVxuICAgIHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIgPyBjb2RleFVzZXIgOiBudWxsO1xuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSh7IHJ1bkFzVXNlciB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3V0cHV0U2NoZW1hID0gYXdhaXQgcmVzb2x2ZU91dHB1dFNjaGVtYShcbiAgICBvdXRwdXRTY2hlbWEsXG4gICAgcnVuQXNVc2VyXG4gICk7XG4gIGNvbnN0IHBlcm1pc3Npb25TZWxlY3Rpb24gPSBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgICBzYWZldHlTdHJhdGVneSxcbiAgICByZXF1ZXN0ZWRTYW5kYm94OiBzYW5kYm94LFxuICAgIHBlcm1pc3Npb25Qcm9maWxlLFxuICAgIGV4dHJhQXJncyxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGNvbnN0IGlzTGludXhEcm9wU3VkbyA9XG4gICAgc2FmZXR5U3RyYXRlZ3kgPT09IFwiZHJvcC1zdWRvXCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiO1xuICBsZXQgcGF0aFRvQ29kZXggPSBcImNvZGV4XCI7XG4gIGlmIChpc0xpbnV4RHJvcFN1ZG8pIHtcbiAgICBjb25zdCB1aWQgPSBwcm9jZXNzLmdldHVpZD8uKCk7XG4gICAgaWYgKHVpZCA9PSBudWxsIHx8IHVpZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIGEgbm9uLXJvb3QgcnVubmVyIHVzZXIuXCIpO1xuICAgIH1cbiAgICBjb25zdCBydW5uZXJDcmVkZW50aWFscyA9IGNhcHR1cmVMaW51eFJ1bm5lckNyZWRlbnRpYWxzKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wiL3Vzci9iaW4vc3Vkb1wiLCBcIi1uXCIsIFwidHJ1ZVwiXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHBhc3N3b3JkbGVzcyBzdWRvIGJlZm9yZSBDb2RleCBzdGFydHMuIEl0IGNhbm5vdCBydW4gYWdhaW4gYWZ0ZXIgc3VkbyBoYXMgYmVlbiByZW1vdmVkOyB1c2UgYSBzZXBhcmF0ZSBqb2IuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcGF0aFRvQ29kZXggPSAoYXdhaXQgY2hlY2tPdXRwdXQoW1wid2hpY2hcIiwgXCJjb2RleFwiXSkpLnRyaW0oKTtcbiAgICBpZiAoIXBhdGhUb0NvZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmluZCAnY29kZXgnIGluIFBBVEhcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlciA9IG9zLnVzZXJJbmZvKCk7XG4gICAgY29tbWFuZC5wdXNoKFxuICAgICAgXCIvdXNyL2Jpbi9zdWRvXCIsXG4gICAgICBcIi1uXCIsXG4gICAgICBcIi1FXCIsXG4gICAgICBcIi0tXCIsXG4gICAgICBcIi91c3IvYmluL2VudlwiLFxuICAgICAgXCItdVwiLFxuICAgICAgXCJFTlZcIixcbiAgICAgIFwiLXVcIixcbiAgICAgIFwiQkFTSF9FTlZcIixcbiAgICAgIFwiLXVcIixcbiAgICAgIFwiU0hFTExPUFRTXCIsXG4gICAgICBcIi9iaW4vc2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgIExJTlVYX0RST1BfU1VET19TQ1JJUFQsXG4gICAgICBcImNvZGV4LWFjdGlvbi1kcm9wLXN1ZG9cIixcbiAgICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAgICB1c2VyLnVzZXJuYW1lLFxuICAgICAgU3RyaW5nKHVpZCksXG4gICAgICBwcm9jZXNzLmVudi5IT01FID8/IHVzZXIuaG9tZWRpcixcbiAgICAgIHByb2Nlc3MuZW52LlBBVEggPz8gXCJcIixcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyA/PyBcIlwiLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocnVubmVyQ3JlZGVudGlhbHMpXG4gICAgKTtcbiAgfSBlbHNlIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXhVc2VyIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWQtdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhcyBhIHByaXZpbGVnZWQgdXNlciwgYnV0IGBjb2RleFVzZXJgIHdpbGwgcnVuXG4gICAgLy8gd2l0aCBhIGRpZmZlcmVudCAkUEFUSCB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBmaW5kIHRoZSBmdWxsIHBhdGggdG9cbiAgICAvLyBgY29kZXhgLlxuICAgIHBhdGhUb0NvZGV4ID0gKGF3YWl0IGNoZWNrT3V0cHV0KFtcIndoaWNoXCIsIFwiY29kZXhcIl0pKS50cmltKCk7XG4gICAgaWYgKCFwYXRoVG9Db2RleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGZpbmQgJ2NvZGV4JyBpbiBQQVRIXCIpO1xuICAgIH1cblxuICAgIGNvbW1hbmQucHVzaChcInN1ZG9cIiwgXCItdVwiLCBjb2RleFVzZXIsIFwiLS1cIik7XG4gIH1cblxuICBjb21tYW5kLnB1c2goXG4gICAgcGF0aFRvQ29kZXgsXG4gICAgXCJleGVjXCIsXG4gICAgXCItLXNraXAtZ2l0LXJlcG8tY2hlY2tcIixcbiAgICBcIi0tY2RcIixcbiAgICBjZCxcbiAgICBcIi0tb3V0cHV0LWxhc3QtbWVzc2FnZVwiLFxuICAgIG91dHB1dEZpbGUuZmlsZVxuICApO1xuXG4gIGlmIChyZXNvbHZlZE91dHB1dFNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29tbWFuZC5wdXNoKFwiLS1vdXRwdXQtc2NoZW1hXCIsIHJlc29sdmVkT3V0cHV0U2NoZW1hLmZpbGUpO1xuICB9XG5cbiAgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW1vZGVsXCIsIG1vZGVsKTtcbiAgfVxuXG4gIGlmIChlZmZvcnQgIT0gbnVsbCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvY29kZXgvYmxvYi8wMGRlYmI2Mzk5ZWI1MWM0YjkyNzNmMGJjMDEyOTEyYzQyZmU2YzkxL2RvY3MvY29uZmlnLm1kI2NvbmZpZ1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvY29kZXgvYmxvYi8wMGRlYmI2Mzk5ZWI1MWM0YjkyNzNmMGJjMDEyOTEyYzQyZmU2YzkxL2RvY3MvY29uZmlnLm1kI21vZGVsX3JlYXNvbmluZ19lZmZvcnRcbiAgICBjb21tYW5kLnB1c2goXCItLWNvbmZpZ1wiLCBgbW9kZWxfcmVhc29uaW5nX2VmZm9ydD1cIiR7ZWZmb3J0fVwiYCk7XG4gIH1cblxuICBjb21tYW5kLnB1c2goLi4uZXh0cmFBcmdzKTtcblxuICBzd2l0Y2ggKHBlcm1pc3Npb25TZWxlY3Rpb24udHlwZSkge1xuICAgIGNhc2UgXCJzYW5kYm94XCI6XG4gICAgICBjb21tYW5kLnB1c2goXCItLXNhbmRib3hcIiwgcGVybWlzc2lvblNlbGVjdGlvbi5tb2RlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJwcm9maWxlXCI6XG4gICAgICBjb21tYW5kLnB1c2goXG4gICAgICAgIFwiLS1jb25maWdcIixcbiAgICAgICAgYGRlZmF1bHRfcGVybWlzc2lvbnM9JHtKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9uU2VsZWN0aW9uLm5hbWUpfWBcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgaWYgKCFlbnYuQ09ERVhfSU5URVJOQUxfT1JJR0lOQVRPUl9PVkVSUklERSkge1xuICAgIGVudi5DT0RFWF9JTlRFUk5BTF9PUklHSU5BVE9SX09WRVJSSURFID0gXCJjb2RleF9naXRodWJfYWN0aW9uXCI7XG4gIH1cbiAgbGV0IGV4dHJhRW52ID0gXCJcIjtcbiAgaWYgKGNvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgZW52LkNPREVYX0hPTUUgPSBjb2RleEhvbWU7XG4gICAgZXh0cmFFbnYgPSBgQ09ERVhfSE9NRT0ke2NvZGV4SG9tZX0gYDtcbiAgfVxuXG4gIC8vIFNwbGl0IHRoZSBgcHJvZ3JhbWAgZnJvbSB0aGUgYGFyZ3NgIGZvciBgc3Bhd24oKWAuXG4gIGNvbnN0IHByb2dyYW0gPSBjb21tYW5kLnNoaWZ0KCkhO1xuICBjb25zb2xlLmxvZyhcbiAgICBgUnVubmluZzogJHtleHRyYUVudn0ke3Byb2dyYW19ICR7Y29tbWFuZFxuICAgICAgLm1hcCgoYSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkpXG4gICAgICAuam9pbihcIiBcIil9YFxuICApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvZ3JhbSwgY29tbWFuZCwge1xuICAgICAgICBlbnYsXG4gICAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICB9KTtcbiAgICAgIGNoaWxkLnN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0LCB7IGVuZDogZmFsc2UgfSk7XG4gICAgICBjaGlsZC5zdGRlcnIucGlwZShwcm9jZXNzLnN0ZGVyciwgeyBlbmQ6IGZhbHNlIH0pO1xuICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoaW5wdXQpO1xuICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICAgIGNvbnN0IGNsb3NlT3V0cHV0U3RyZWFtcyA9ICgpID0+IHtcbiAgICAgICAgY2hpbGQuc3Rkb3V0LnVucGlwZShwcm9jZXNzLnN0ZG91dCk7XG4gICAgICAgIGNoaWxkLnN0ZGVyci51bnBpcGUocHJvY2Vzcy5zdGRlcnIpO1xuICAgICAgICBjaGlsZC5zdGRvdXQuZGVzdHJveSgpO1xuICAgICAgICBjaGlsZC5zdGRlcnIuZGVzdHJveSgpO1xuICAgICAgfTtcblxuICAgICAgY2hpbGQub25jZShcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgY2xvc2VPdXRwdXRTdHJlYW1zKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgIGNsb3NlT3V0cHV0U3RyZWFtcygpO1xuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ3JhbX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUV4ZWN1dGlvbihcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgbGFzdE1lc3NhZ2U6IHN0cmluZztcbiAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwiY2F0XCIsXG4gICAgICAgIG91dHB1dEZpbGUuZmlsZSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBzZXRPdXRwdXQoXCJmaW5hbC1tZXNzYWdlXCIsIGxhc3RNZXNzYWdlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlLCBydW5Bc1VzZXIpO1xuICB9XG59XG5cbnR5cGUgT3V0cHV0RmlsZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9O1xuXG50eXBlIFJlc29sdmVkT3V0cHV0U2NoZW1hID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgZGlyOiBzdHJpbmc7XG4gICAgfTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcE91dHB1dEZpbGUoe1xuICBydW5Bc1VzZXIsXG59OiB7XG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPE91dHB1dEZpbGU+IHtcbiAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LWV4ZWMtXCIsIHJ1bkFzVXNlcik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgc3dpdGNoIChvdXRwdXRGaWxlLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIC8vIERvIG5vdCBkZWxldGUgdXNlci1zcGVjaWZpZWQgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6IHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3V0cHV0RmlsZTtcbiAgICAgIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcInJtXCIsIFwiLXJmXCIsIHBhdGguZGlybmFtZShmaWxlKV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogT3V0cHV0U2NoZW1hU291cmNlIHwgbnVsbCxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbD4ge1xuICBpZiAoc2NoZW1hID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIHsgdHlwZTogXCJleHBsaWNpdFwiLCBmaWxlOiBzY2hlbWEucGF0aCB9O1xuICAgIGNhc2UgXCJpbmxpbmVcIjoge1xuICAgICAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LW91dHB1dC1zY2hlbWEtXCIsIHJ1bkFzVXNlcik7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5qb2luKGRpciwgXCJzY2hlbWEuanNvblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlLCBzY2hlbWEuY29udGVudCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZSwgZGlyIH07XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogUmVzb2x2ZWRPdXRwdXRTY2hlbWEgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgIGNhc2UgXCJleHBsaWNpdFwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6XG4gICAgICBhd2FpdCBybShzY2hlbWEuZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcERpcihcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGF3YWl0IG1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCBwcmVmaXgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwibWt0ZW1wXCIsXG4gICAgICAgIFwiLWRcIixcbiAgICAgICAgXCItdFwiLFxuICAgICAgICBgJHtwcmVmaXh9LlhYWFhYWGAsXG4gICAgICBdKVxuICAgICkudHJpbSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZVBlcm1pc3Npb25TZWxlY3Rpb24oe1xuICBzYWZldHlTdHJhdGVneSxcbiAgcmVxdWVzdGVkU2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG4gIGV4dHJhQXJncyxcbn06IHtcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5O1xuICByZXF1ZXN0ZWRTYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG59KTogUGVybWlzc2lvblNlbGVjdGlvbiB7XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIHJlcXVlc3RlZFNhbmRib3ggIT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgYW5kIGBzYW5kYm94YCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBQZXJtaXNzaW9uIHByb2ZpbGVzIGRvIG5vdCBjb21wb3NlIHdpdGggbGVnYWN5IHNhbmRib3ggc2V0dGluZ3MuXCJcbiAgICApO1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIHNhZmV0eVN0cmF0ZWd5ID09PSBcInJlYWQtb25seVwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgcGVybWlzc2lvbi1wcm9maWxlYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCB0aGUgYHJlYWQtb25seWAgc2FmZXR5IHN0cmF0ZWd5IGJlY2F1c2UgdGhhdCBzdHJhdGVneSBmb3JjZXMgdGhlIGxlZ2FjeSByZWFkLW9ubHkgc2FuZGJveC5cIlxuICAgICk7XG4gIH1cbiAgY29uc3QgZWZmZWN0aXZlU2FuZGJveFJlYWRPbmx5ID1cbiAgICBzYWZldHlTdHJhdGVneSA9PT0gXCJyZWFkLW9ubHlcIiB8fCByZXF1ZXN0ZWRTYW5kYm94ID09PSBcInJlYWQtb25seVwiO1xuICBpZiAoXG4gICAgKHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwgfHwgZWZmZWN0aXZlU2FuZGJveFJlYWRPbmx5KSAmJlxuICAgIGV4dHJhQXJncy5zb21lKFxuICAgICAgKGFyZykgPT5cbiAgICAgICAgYXJnID09PSBcIi0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveFwiIHx8XG4gICAgICAgIGFyZyA9PT0gXCItLXlvbG9cIiB8fFxuICAgICAgICBhcmcgPT09IFwiLS1mdWxsLWF1dG9cIlxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgY29kZXgtYXJnc2AgY2Fubm90IGJ5cGFzcyBzYW5kYm94IHByb3RlY3Rpb25zIHdoZW4gYSBgcGVybWlzc2lvbi1wcm9maWxlYCBvciByZWFkLW9ubHkgc2FuZGJveCBpcyBzZWxlY3RlZC5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwgJiYgZXh0cmFBcmdzU2VsZWN0U2FuZGJveChleHRyYUFyZ3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgcGVybWlzc2lvbi1wcm9maWxlYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhIHNhbmRib3ggb3ZlcnJpZGUgaW4gYGNvZGV4LWFyZ3NgLlwiXG4gICAgKTtcbiAgfVxuICBjb25zdCBjdXN0b21QZXJtaXNzaW9uUHJvZmlsZSA9XG4gICAgcGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCAmJiAhcGVybWlzc2lvblByb2ZpbGUuc3RhcnRzV2l0aChcIjpcIik7XG4gIGlmIChcbiAgICBjdXN0b21QZXJtaXNzaW9uUHJvZmlsZSAmJlxuICAgIGV4dHJhQXJncy5zb21lKFxuICAgICAgKGFyZykgPT5cbiAgICAgICAgYXJnID09PSBcIi0taW1hZ2VcIiB8fFxuICAgICAgICBhcmcuc3RhcnRzV2l0aChcIi0taW1hZ2U9XCIpIHx8XG4gICAgICAgIChhcmcuc3RhcnRzV2l0aChcIi1pXCIpICYmICFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKVxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgY29kZXgtYXJnc2AgY2Fubm90IGF0dGFjaCBsb2NhbCBpbWFnZXMgd2l0aCBhIGN1c3RvbSBwZXJtaXNzaW9uIHByb2ZpbGUgYmVjYXVzZSBpbWFnZSBsb2FkaW5nIGRvZXMgbm90IGVuZm9yY2UgaXRzIGZpbGVzeXN0ZW0gcmVzdHJpY3Rpb25zLlwiXG4gICAgKTtcbiAgfVxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgIT09IFwidW5zYWZlXCIgfHwgcGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlUHJvdGVjdGVkRXh0cmFBcmdzKGV4dHJhQXJncywgY3VzdG9tUGVybWlzc2lvblByb2ZpbGUpO1xuICB9XG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJyZWFkLW9ubHlcIikge1xuICAgIHJldHVybiB7IHR5cGU6IFwic2FuZGJveFwiLCBtb2RlOiBcInJlYWQtb25seVwiIH07XG4gIH1cbiAgaWYgKHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInByb2ZpbGVcIiwgbmFtZTogcGVybWlzc2lvblByb2ZpbGUgfTtcbiAgfVxuICByZXR1cm4geyB0eXBlOiBcInNhbmRib3hcIiwgbW9kZTogcmVxdWVzdGVkU2FuZGJveCA/PyBcIndvcmtzcGFjZS13cml0ZVwiIH07XG59XG5cbmNvbnN0IFJFU1RSSUNURURfQ09ORklHX1JPT1RTID0gbmV3IFNldChbXG4gIFwiYWdlbnRzXCIsXG4gIFwiYXBwcm92YWxfcG9saWN5XCIsXG4gIFwiYXBwcm92YWxzX3Jldmlld2VyXCIsXG4gIFwiYXBwc19tY3BfcHJvZHVjdF9za3VcIixcbiAgXCJhdXRvX3Jldmlld1wiLFxuICBcImNoYXRncHRfYmFzZV91cmxcIixcbiAgXCJkZWJ1Z1wiLFxuICBcImRlZmF1bHRfcGVybWlzc2lvbnNcIixcbiAgXCJleHBlcmltZW50YWxfcmVhbHRpbWVfd2VicnRjX2NhbGxfYmFzZV91cmxcIixcbiAgXCJleHBlcmltZW50YWxfcmVhbHRpbWVfd3NfYmFzZV91cmxcIixcbiAgXCJob29rc1wiLFxuICBcIm1hcmtldHBsYWNlc1wiLFxuICBcIm1jcF9zZXJ2ZXJzXCIsXG4gIFwibW9kZWxfcHJvdmlkZXJcIixcbiAgXCJtb2RlbF9wcm92aWRlcnNcIixcbiAgXCJub3RpZnlcIixcbiAgXCJvcGVuYWlfYmFzZV91cmxcIixcbiAgXCJvc3NfcHJvdmlkZXJcIixcbiAgXCJvdGVsXCIsXG4gIFwicGVybWlzc2lvbnNcIixcbiAgXCJwbHVnaW5zXCIsXG4gIFwicHJvZmlsZVwiLFxuICBcInByb2ZpbGVzXCIsXG4gIFwicHJvamVjdHNcIixcbiAgXCJzYW5kYm94X21vZGVcIixcbiAgXCJzYW5kYm94X3dvcmtzcGFjZV93cml0ZVwiLFxuICBcInNoZWxsX2Vudmlyb25tZW50X3BvbGljeVwiLFxuICBcInVzZV9sZWdhY3lfbGFuZGxvY2tcIixcbl0pO1xuXG5jb25zdCBDVVNUT01fUFJPRklMRV9SRVNUUklDVEVEX0NPTkZJR19ST09UUyA9IG5ldyBTZXQoW1xuICBcImV4cGVyaW1lbnRhbF9jb21wYWN0X3Byb21wdF9maWxlXCIsXG4gIFwibW9kZWxfY2F0YWxvZ19qc29uXCIsXG4gIFwibW9kZWxfaW5zdHJ1Y3Rpb25zX2ZpbGVcIixcbl0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3RlY3RlZEV4dHJhQXJncyhcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgY3VzdG9tUGVybWlzc2lvblByb2ZpbGU6IGJvb2xlYW5cbik6IHZvaWQge1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcbiAgICBpZiAoXG4gICAgICBhcmcgPT09IFwiLS1kYW5nZXJvdXNseS1ieXBhc3MtaG9vay10cnVzdFwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tZGFuZ2Vyb3VzbHktYnlwYXNzLWhvb2stdHJ1c3Q9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1hcHByb3ZlLWZvci1tZVwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tYXBwcm92ZS1mb3ItbWU9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1ub3Qtc28teW9sb1wiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tbm90LXNvLXlvbG89XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1hZGQtZGlyXCIgfHxcbiAgICAgIGFyZy5zdGFydHNXaXRoKFwiLS1hZGQtZGlyPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tb3NzXCIgfHxcbiAgICAgIGFyZy5zdGFydHNXaXRoKFwiLS1vc3M9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1sb2NhbC1wcm92aWRlclwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tbG9jYWwtcHJvdmlkZXI9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLS1pZ25vcmUtdXNlci1jb25maWdcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLWlnbm9yZS11c2VyLWNvbmZpZz1cIikgfHxcbiAgICAgIGFyZyA9PT0gXCItLWlnbm9yZS1ydWxlc1wiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0taWdub3JlLXJ1bGVzPVwiKSB8fFxuICAgICAgYXJnID09PSBcIi0tcHJvZmlsZVwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tcHJvZmlsZT1cIikgfHxcbiAgICAgIChhcmcuc3RhcnRzV2l0aChcIi1wXCIpICYmICFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXFxgY29kZXgtYXJnc1xcYCBjYW5ub3QgdXNlICR7YXJnfSB3aXRoIGEgcHJvdGVjdGVkIHNhZmV0eSBzdHJhdGVneSBvciBwZXJtaXNzaW9uIHByb2ZpbGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnID09PSBcIi0tZW5hYmxlXCIgfHwgYXJnLnN0YXJ0c1dpdGgoXCItLWVuYWJsZT1cIikpIHtcbiAgICAgIGNvbnN0IGZlYXR1cmUgPVxuICAgICAgICBhcmcgPT09IFwiLS1lbmFibGVcIiA/IGFyZ3NbKytpbmRleF0gOiBhcmcuc2xpY2UoXCItLWVuYWJsZT1cIi5sZW5ndGgpO1xuICAgICAgaWYgKGZlYXR1cmUgIT09IFwidXNlX2xlZ2FjeV9sYW5kbG9ja1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImBjb2RleC1hcmdzYCBjYW4gb25seSBlbmFibGUgYHVzZV9sZWdhY3lfbGFuZGxvY2tgIHdpdGggYSBwcm90ZWN0ZWQgc2FmZXR5IHN0cmF0ZWd5IG9yIHBlcm1pc3Npb24gcHJvZmlsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhcmcgPT09IFwiLS1kaXNhYmxlXCIgfHwgYXJnLnN0YXJ0c1dpdGgoXCItLWRpc2FibGU9XCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYGNvZGV4LWFyZ3NgIGNhbm5vdCBkaXNhYmxlIENvZGV4IGZlYXR1cmVzIHdpdGggYSBwcm90ZWN0ZWQgc2FmZXR5IHN0cmF0ZWd5IG9yIHBlcm1pc3Npb24gcHJvZmlsZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgb3ZlcnJpZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYXJnID09PSBcIi0tY29uZmlnXCIgfHwgYXJnID09PSBcIi1jXCIpIHtcbiAgICAgIG92ZXJyaWRlID0gYXJnc1srK2luZGV4XTtcbiAgICB9IGVsc2UgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1jb25maWc9XCIpKSB7XG4gICAgICBvdmVycmlkZSA9IGFyZy5zbGljZShcIi0tY29uZmlnPVwiLmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChhcmcuc3RhcnRzV2l0aChcIi1jXCIpICYmICFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICBvdmVycmlkZSA9IGFyZy5zbGljZShcIi1jXCIubGVuZ3RoKTtcbiAgICAgIGlmIChvdmVycmlkZS5zdGFydHNXaXRoKFwiPVwiKSkge1xuICAgICAgICBvdmVycmlkZSA9IG92ZXJyaWRlLnNsaWNlKDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlcXVhbHNJbmRleCA9IG92ZXJyaWRlPy5pbmRleE9mKFwiPVwiKSA/PyAtMTtcbiAgICBjb25zdCBrZXkgPSBvdmVycmlkZT8uc2xpY2UoMCwgZXF1YWxzSW5kZXgpLnRyaW0oKTtcbiAgICBpZiAoXG4gICAgICBlcXVhbHNJbmRleCA8IDEgfHxcbiAgICAgIGtleSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAhL15bQS1aYS16X11bQS1aYS16MC05Xy1dKig/OlxcLltBLVphLXpfXVtBLVphLXowLTlfLV0qKSokLy50ZXN0KGtleSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgY29kZXgtYXJnc2AgY29udGFpbnMgYW4gaW52YWxpZCBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBvdmVycmlkZSBmb3IgYSBwcm90ZWN0ZWQgc2FmZXR5IHN0cmF0ZWd5IG9yIHBlcm1pc3Npb24gcHJvZmlsZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0ga2V5LnNwbGl0KFwiLlwiLCAxKVswXTtcbiAgICBpZiAoXG4gICAgICBSRVNUUklDVEVEX0NPTkZJR19ST09UUy5oYXMocm9vdCkgfHxcbiAgICAgIChjdXN0b21QZXJtaXNzaW9uUHJvZmlsZSAmJlxuICAgICAgICBDVVNUT01fUFJPRklMRV9SRVNUUklDVEVEX0NPTkZJR19ST09UUy5oYXMocm9vdCkpIHx8XG4gICAgICAocm9vdCA9PT0gXCJmZWF0dXJlc1wiICYmIGtleSAhPT0gXCJmZWF0dXJlcy51c2VfbGVnYWN5X2xhbmRsb2NrXCIpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcXGBjb2RleC1hcmdzXFxgIGNhbm5vdCBvdmVycmlkZSBcXGAke2tleX1cXGAgd2l0aCBhIHByb3RlY3RlZCBzYWZldHkgc3RyYXRlZ3kgb3IgcGVybWlzc2lvbiBwcm9maWxlLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhQXJnc1NlbGVjdFNhbmRib3goYXJnczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICByZXR1cm4gYXJncy5zb21lKChhcmcsIGluZGV4KSA9PiB7XG4gICAgaWYgKFxuICAgICAgYXJnID09PSBcIi0tc2FuZGJveFwiIHx8XG4gICAgICBhcmcuc3RhcnRzV2l0aChcIi0tc2FuZGJveD1cIikgfHxcbiAgICAgIChhcmcuc3RhcnRzV2l0aChcIi1zXCIpICYmICFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChhcmcgPT09IFwiLS1jb25maWdcIiB8fCBhcmcgPT09IFwiLWNcIikge1xuICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3goYXJnc1tpbmRleCArIDFdKTtcbiAgICB9XG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1jb25maWc9XCIpKSB7XG4gICAgICByZXR1cm4gY29uZmlnT3ZlcnJpZGVTZWxlY3RzU2FuZGJveChhcmcuc2xpY2UoXCItLWNvbmZpZz1cIi5sZW5ndGgpKTtcbiAgICB9XG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLWNcIikgJiYgIWFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gYXJnLnNsaWNlKFwiLWNcIi5sZW5ndGgpO1xuICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3goXG4gICAgICAgIG92ZXJyaWRlLnN0YXJ0c1dpdGgoXCI9XCIpID8gb3ZlcnJpZGUuc2xpY2UoMSkgOiBvdmVycmlkZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlnT3ZlcnJpZGVTZWxlY3RzU2FuZGJveChvdmVycmlkZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleSA9IG92ZXJyaWRlPy50cmltU3RhcnQoKS5zcGxpdCgvWz0uXS8sIDEpWzBdLnRyaW0oKTtcbiAgcmV0dXJuIGtleSA9PT0gXCJzYW5kYm94X21vZGVcIiB8fCBrZXkgPT09IFwic2FuZGJveF93b3Jrc3BhY2Vfd3JpdGVcIjtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja091dHB1dChjb21tYW5kOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW3Byb2csIC4uLmFyZ3NdID0gY29tbWFuZDtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihwcm9nLCBhcmdzLCB7XG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJpbmhlcml0XCJdLFxuICAgIH0pO1xuXG4gICAgcHJvYy5vbihcImVycm9yXCIsIHJlamVjdCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgICBwcm9jLnN0ZG91dC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBvdXRwdXQgKz0gY2h1bmsudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIHByb2Mub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgJHtwcm9nfSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIExpbnV4UnVubmVyQ3JlZGVudGlhbHMge1xuICB1c2VySWQ6IG51bWJlcjtcbiAgcHJpbWFyeUdyb3VwSWQ6IG51bWJlcjtcbiAgc3VwcGxlbWVudGFyeUdyb3VwSWRzOiBBcnJheTxudW1iZXI+O1xufVxuXG5mdW5jdGlvbiB2YWxpZElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiZcbiAgICBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJlxuICAgIHZhbHVlID49IDAgJiZcbiAgICB2YWx1ZSA8IDB4ZmZmZmZmZmZcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGludXhSdW5uZXJDcmVkZW50aWFscyhcbiAgdmFsdWU6IHN0cmluZ1xuKTogTGludXhSdW5uZXJDcmVkZW50aWFscyB7XG4gIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UodmFsdWUpO1xuICBpZiAocGFyc2VkID09IG51bGwgfHwgdHlwZW9mIHBhcnNlZCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3JpZ2luYWwgTGludXggcnVubmVyIGNyZWRlbnRpYWxzLlwiKTtcbiAgfVxuICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlZCBhcyBQYXJ0aWFsPExpbnV4UnVubmVyQ3JlZGVudGlhbHM+O1xuICBpZiAoXG4gICAgIXZhbGlkSWQoY3JlZGVudGlhbHMudXNlcklkKSB8fFxuICAgIGNyZWRlbnRpYWxzLnVzZXJJZCA9PT0gMCB8fFxuICAgICF2YWxpZElkKGNyZWRlbnRpYWxzLnByaW1hcnlHcm91cElkKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGNyZWRlbnRpYWxzLnN1cHBsZW1lbnRhcnlHcm91cElkcykgfHxcbiAgICBjcmVkZW50aWFscy5zdXBwbGVtZW50YXJ5R3JvdXBJZHMubGVuZ3RoID4gNjU1MzYgfHxcbiAgICAhY3JlZGVudGlhbHMuc3VwcGxlbWVudGFyeUdyb3VwSWRzLmV2ZXJ5KHZhbGlkSWQpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3JpZ2luYWwgTGludXggcnVubmVyIGNyZWRlbnRpYWxzLlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHVzZXJJZDogY3JlZGVudGlhbHMudXNlcklkLFxuICAgIHByaW1hcnlHcm91cElkOiBjcmVkZW50aWFscy5wcmltYXJ5R3JvdXBJZCxcbiAgICBzdXBwbGVtZW50YXJ5R3JvdXBJZHM6IFsuLi5uZXcgU2V0KGNyZWRlbnRpYWxzLnN1cHBsZW1lbnRhcnlHcm91cElkcyldLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUxpbnV4UnVubmVyQ3JlZGVudGlhbHMoKTogTGludXhSdW5uZXJDcmVkZW50aWFscyB7XG4gIGNvbnN0IHVzZXJJZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcbiAgY29uc3QgcHJpbWFyeUdyb3VwSWQgPSBwcm9jZXNzLmdldGdpZD8uKCk7XG4gIGNvbnN0IHN1cHBsZW1lbnRhcnlHcm91cElkcyA9IHByb2Nlc3MuZ2V0Z3JvdXBzPy4oKTtcbiAgaWYgKFxuICAgIHVzZXJJZCA9PSBudWxsIHx8XG4gICAgdXNlcklkID09PSAwIHx8XG4gICAgcHJpbWFyeUdyb3VwSWQgPT0gbnVsbCB8fFxuICAgIHN1cHBsZW1lbnRhcnlHcm91cElkcyA9PSBudWxsXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkxpbnV4IGRyb3Atc3VkbyByZXF1aXJlcyBhIG5vbi1yb290IHJ1bm5lciB1c2VyLlwiKTtcbiAgfVxuICByZXR1cm4geyB1c2VySWQsIHByaW1hcnlHcm91cElkLCBzdXBwbGVtZW50YXJ5R3JvdXBJZHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVBY2NvdW50R3JvdXBzKFxuICBvcmlnaW5hbDogTGludXhSdW5uZXJDcmVkZW50aWFscyxcbiAgYWNjb3VudFVzZXJJZDogbnVtYmVyLFxuICBhY2NvdW50R3JvdXBJZHM6IEFycmF5PG51bWJlcj5cbik6IExpbnV4UnVubmVyQ3JlZGVudGlhbHMge1xuICBpZiAob3JpZ2luYWwudXNlcklkICE9PSBhY2NvdW50VXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJPcmlnaW5hbCBydW5uZXIgVUlEIGRvZXMgbm90IG1hdGNoIHRoZSBhY2NvdW50IGJlaW5nIHJlc3RyaWN0ZWQuXCJcbiAgICApO1xuICB9XG4gIC8vIENoZWNraW5nIHRoZSB1bmlvbiBpcyBjb25zZXJ2YXRpdmU6IGl0IGNvdmVycyBib3RoIGV4aXN0aW5nIHByb2Nlc3NlcyBhbmRcbiAgLy8gZnJlc2ggcHJvY2Vzc2VzIHdob3NlIGdyb3VwcyBjb21lIGZyb20gdGhlIGN1cnJlbnQgYWNjb3VudCBkYXRhYmFzZS5cbiAgcmV0dXJuIHtcbiAgICAuLi5vcmlnaW5hbCxcbiAgICBzdXBwbGVtZW50YXJ5R3JvdXBJZHM6IFtcbiAgICAgIC4uLm5ldyBTZXQoWy4uLm9yaWdpbmFsLnN1cHBsZW1lbnRhcnlHcm91cElkcywgLi4uYWNjb3VudEdyb3VwSWRzXSksXG4gICAgXS5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gb3JpZ2luYWwucHJpbWFyeUdyb3VwSWQpLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY29uc3RhbnRzIGFzIGZzQ29uc3RhbnRzLCBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7XG4gIGNhcHR1cmVMaW51eFJ1bm5lckNyZWRlbnRpYWxzLFxuICBpbmNsdWRlQWNjb3VudEdyb3VwcyxcbiAgTGludXhSdW5uZXJDcmVkZW50aWFscyxcbiAgcGFyc2VMaW51eFJ1bm5lckNyZWRlbnRpYWxzLFxufSBmcm9tIFwiLi9saW51eENyZWRlbnRpYWxzXCI7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbiAgaW5oZXJpdGVkRmlsZURlc2NyaXB0b3I/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBFeGVjUmVzdWx0IHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFN1ZG9PcHRpb25zIHtcbiAgdXNlcjogc3RyaW5nO1xuICBncm91cDogc3RyaW5nO1xuICByb290UGhhc2U6IGJvb2xlYW47XG4gIHJ1bm5lckNyZWRlbnRpYWxzPzogc3RyaW5nO1xufVxuXG5jb25zdCBMSU5VWF9QTEFURk9STSA9IFwibGludXhcIjtcbmNvbnN0IE1BQ09TX1BMQVRGT1JNID0gXCJkYXJ3aW5cIjtcbmNvbnN0IExJTlVYX1JVTlRJTUVfRElSRUNUT1JZID0gXCIvcnVuXCI7XG5jb25zdCBMSU5VWF9PX1BBVEggPSAwbzEwMDAwMDAwO1xuXG5pbnRlcmZhY2UgTGludXhHcm91cCB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJpbWFyeTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFJvb3RTZXJ2aWNlU29ja2V0IHtcbiAgcGF0aDogc3RyaW5nO1xuICBncm91cElkOiBudW1iZXI7XG4gIGRldmljZTogbnVtYmVyO1xuICBpbm9kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTGludXhTb2NrZXRDcmVkZW50aWFscyBleHRlbmRzIExpbnV4UnVubmVyQ3JlZGVudGlhbHMge1xuICBmYWxsYmFja0dyb3VwSWQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcm9wU3VkbyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBpZiAoIVtMSU5VWF9QTEFURk9STSwgTUFDT1NfUExBVEZPUk1dLmluY2x1ZGVzKHBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwbGF0Zm9ybX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgcm9vdFBoYXNlIH0gPSBvcHRpb25zO1xuICBpZiAocm9vdFBoYXNlKSB7XG4gICAgYXdhaXQgZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBydW5uZXJDcmVkZW50aWFscyA9XG4gICAgcGxhdGZvcm0gPT09IExJTlVYX1BMQVRGT1JNXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KGNhcHR1cmVMaW51eFJ1bm5lckNyZWRlbnRpYWxzKCkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICBhd2FpdCBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk7XG4gIC8vIGBzdWRvIC1LYCBpbnZhbGlkYXRlcyBjYWNoZWQgY3JlZGVudGlhbHMgYnV0IGV4aXRzIG5vbi16ZXJvIHdoZW4gbm8gdGlja2V0XG4gIC8vIGV4aXN0cyB5ZXQuIElnbm9yZSB0aGF0IGZhaWx1cmUgc28gZnJlc2ggcnVubmVycyBkb24ndCBibG93IHVwLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBjb25zdCBleGVjQXJncyA9IFsuLi5wcm9jZXNzLmV4ZWNBcmd2XTtcbiAgY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndlsxXTtcbiAgLy8gUmUtZW50ZXIgdGhpcyBjb21tYW5kIHVuZGVyIHN1ZG8gc28gdGhlIHByaXZpbGVnZS1kcm9wcGluZyB3b3JrIGhhcHBlbnMgaW4gYVxuICAvLyBzaW5nbGUgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcbiAgICBcIi1uXCIsXG4gICAgXCJub2RlXCIsXG4gICAgLi4uZXhlY0FyZ3MsXG4gICAgc2NyaXB0UGF0aCxcbiAgICBcImRyb3Atc3Vkb1wiLFxuICAgIFwiLS1yb290LXBoYXNlXCIsXG4gICAgXCItLXVzZXJcIixcbiAgICBvcHRpb25zLnVzZXIsXG4gICAgXCItLWdyb3VwXCIsXG4gICAgb3B0aW9ucy5ncm91cCxcbiAgICAuLi4ocnVubmVyQ3JlZGVudGlhbHMgPT09IHVuZGVmaW5lZFxuICAgICAgPyBbXVxuICAgICAgOiBbXCItLXJ1bm5lci1jcmVkZW50aWFsc1wiLCBydW5uZXJDcmVkZW50aWFsc10pLFxuICBdKTtcblxuICAvLyBJbnZhbGlkYXRlIHRoZSBzdWRvIHRpY2tldCBhZ2FpbjsgaWdub3JlIGZhaWx1cmVzIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgLy8gYWJvdmUgKHNvbWUgZW52aXJvbm1lbnRzIHJldHVybiBhbiBlcnJvciB3aGVuIG5vIHRpbWVzdGFtcCBleGlzdHMpLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBpZiAocGxhdGZvcm0gPT09IExJTlVYX1BMQVRGT1JNKSB7XG4gICAgYXdhaXQgdmVyaWZ5UHJpdmlsZWdlZFNvY2tldHNSZXN0cmljdGVkKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzLmdldHVpZCA9PT0gXCJmdW5jdGlvblwiICYmIHByb2Nlc3MuZ2V0dWlkKCkgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wLXN1ZG8gcm9vdCBwaGFzZSBtdXN0IHJ1biBhcyByb290LlwiKTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlBBVEggPSBcIi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluXCI7XG5cbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgbGV0IG9yaWdpbmFsTGludXhHcm91cElkczogU2V0PG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gIGxldCBsaW51eFNvY2tldENyZWRlbnRpYWxzOiBMaW51eFNvY2tldENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChvcHRpb25zLnJ1bm5lckNyZWRlbnRpYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHRoZSBvcmlnaW5hbCBydW5uZXIgY3JlZGVudGlhbHMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yaWdpbmFsQ3JlZGVudGlhbHMgPSBwYXJzZUxpbnV4UnVubmVyQ3JlZGVudGlhbHMoXG4gICAgICAgIG9wdGlvbnMucnVubmVyQ3JlZGVudGlhbHNcbiAgICAgICk7XG4gICAgICBjb25zdCB1c2VyR3JvdXBzID0gYXdhaXQgZ2V0TGludXhHcm91cHMob3B0aW9ucy51c2VyKTtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLXVcIiwgb3B0aW9ucy51c2VyXSwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBsaW51eFNvY2tldENyZWRlbnRpYWxzID0gaW5jbHVkZUFjY291bnRHcm91cHMoXG4gICAgICAgIG9yaWdpbmFsQ3JlZGVudGlhbHMsXG4gICAgICAgIHBhcnNlTnVtZXJpY0lkKHVzZXJJZC5zdGRvdXQudHJpbSgpKSxcbiAgICAgICAgdXNlckdyb3Vwcy5tYXAoKHsgaWQgfSkgPT4gaWQpXG4gICAgICApO1xuICAgICAgb3JpZ2luYWxMaW51eEdyb3VwSWRzID0gbmV3IFNldChbXG4gICAgICAgIGxpbnV4U29ja2V0Q3JlZGVudGlhbHMucHJpbWFyeUdyb3VwSWQsXG4gICAgICAgIC4uLmxpbnV4U29ja2V0Q3JlZGVudGlhbHMuc3VwcGxlbWVudGFyeUdyb3VwSWRzLFxuICAgICAgXSk7XG4gICAgICBjb25zdCBmYWxsYmFja0dyb3VwID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItZ1wiLCBcIm5vYm9keVwiXSwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBpZiAoZmFsbGJhY2tHcm91cC5jb2RlID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrR3JvdXBJZCA9IHBhcnNlTnVtZXJpY0lkKGZhbGxiYWNrR3JvdXAuc3Rkb3V0LnRyaW0oKSk7XG4gICAgICAgIGlmIChmYWxsYmFja0dyb3VwSWQgIT09IDApIHtcbiAgICAgICAgICBvcmlnaW5hbExpbnV4R3JvdXBJZHMuYWRkKGZhbGxiYWNrR3JvdXBJZCk7XG4gICAgICAgICAgbGludXhTb2NrZXRDcmVkZW50aWFscy5mYWxsYmFja0dyb3VwSWQgPSBmYWxsYmFja0dyb3VwSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGdyb3Vwc0J5SWQgPSBuZXcgTWFwKHVzZXJHcm91cHMubWFwKChncm91cCkgPT4gW2dyb3VwLmlkLCBncm91cF0pKTtcbiAgICAgIGNvbnN0IHNlcnZpY2VTb2NrZXRzID0gYXdhaXQgZmluZFJvb3RTZXJ2aWNlU29ja2V0cyhcbiAgICAgICAgTElOVVhfUlVOVElNRV9ESVJFQ1RPUlksXG4gICAgICAgIG9yaWdpbmFsTGludXhHcm91cElkcyxcbiAgICAgICAgbGludXhTb2NrZXRDcmVkZW50aWFsc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBTZXQoW29wdGlvbnMuZ3JvdXBdKTtcbiAgICAgIGZvciAoY29uc3Qgc29ja2V0IG9mIHNlcnZpY2VTb2NrZXRzKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzQnlJZC5nZXQoc29ja2V0Lmdyb3VwSWQpO1xuICAgICAgICBpZiAoZ3JvdXAgJiYgIWdyb3VwLnByaW1hcnkpIHtcbiAgICAgICAgICBncm91cHMuYWRkKGdyb3VwLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICBpZiAoYXdhaXQgcmVtb3ZlVXNlckZyb21MaW51eEdyb3VwKG9wdGlvbnMudXNlciwgZ3JvdXApKSB7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgc29ja2V0IG9mIHNlcnZpY2VTb2NrZXRzKSB7XG4gICAgICAgIGlmIChhd2FpdCByZXN0cmljdFJvb3RTZXJ2aWNlU29ja2V0KHNvY2tldCkpIHtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgTUFDT1NfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkc2VkaXRncm91cFwiLCBbXG4gICAgICAgICAgXCItb1wiLFxuICAgICAgICAgIFwiZWRpdFwiLFxuICAgICAgICAgIFwiLWRcIixcbiAgICAgICAgICBvcHRpb25zLnVzZXIsXG4gICAgICAgICAgXCItdFwiLFxuICAgICAgICAgIFwidXNlclwiLFxuICAgICAgICAgIG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgVXNlZCAnZHNlZGl0Z3JvdXAgLW8gZWRpdCAtZCAke29wdGlvbnMudXNlcn0gLXQgdXNlciAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgKTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgT1MgZm9yIGRyb3Atc3VkbyBzYWZldHkgc3RyYXRlZ3k6ICR7cHJvY2Vzcy5wbGF0Zm9ybX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcmVtb3ZlVXNlckZyb21TdWRvZXJzRChvcHRpb25zLnVzZXIpO1xuICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gICAgfVxuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYE5vICR7b3B0aW9ucy51c2VyfSBlbnRyaWVzIGZvdW5kIGluIC9ldGMvc3Vkb2Vycy5kIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3Vkb2Vyc01lc3NhZ2UgPSBhd2FpdCBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gICAgXCIvZXRjL3N1ZG9lcnNcIixcbiAgICBvcHRpb25zLnVzZXJcbiAgKTtcbiAgaWYgKHN1ZG9lcnNNZXNzYWdlKSB7XG4gICAgY29uc29sZS5sb2coc3Vkb2Vyc01lc3NhZ2UpO1xuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYE5vICR7b3B0aW9ucy51c2VyfSBlbnRyaWVzIGZvdW5kIGluIC9ldGMvc3Vkb2VycyByZXF1aXJpbmcgY2hhbmdlcy5gXG4gICAgKTtcbiAgfVxuXG4gIGlmICghY2hhbmdlZCkge1xuICAgIGNvbnNvbGUubG9nKGAke29wdGlvbnMudXNlcn0gYWxyZWFkeSBsYWNrcyBzdWRvIHByaXZpbGVnZXMuYCk7XG4gIH1cblxuICBjb25zdCBncm91cHNBZnRlciA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLUduXCIsIG9wdGlvbnMudXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICB9KTtcbiAgY29uc29sZS5sb2coXG4gICAgYEdyb3VwcyBmb3IgJHtvcHRpb25zLnVzZXJ9IGFmdGVyIGNsZWFudXA6ICR7Z3JvdXBzQWZ0ZXIuc3Rkb3V0LnRyaW0oKX1gXG4gICk7XG5cbiAgaWYgKG9yaWdpbmFsTGludXhHcm91cElkcykge1xuICAgIGF3YWl0IHZlcmlmeVByaXZpbGVnZWRTb2NrZXRzUmVzdHJpY3RlZChcbiAgICAgIG9yaWdpbmFsTGludXhHcm91cElkcyxcbiAgICAgIGxpbnV4U29ja2V0Q3JlZGVudGlhbHNcbiAgICApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tTGludXhHcm91cChcbiAgdXNlcjogc3RyaW5nLFxuICBncm91cDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKCEoYXdhaXQgaXNVc2VySW5Hcm91cCh1c2VyLCBncm91cCkpKSB7XG4gICAgY29uc29sZS5sb2coYCR7dXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke2dyb3VwfSBncm91cC5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYXdhaXQgY29tbWFuZEV4aXN0cyhcImRlbHVzZXJcIikpIHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcImRlbHVzZXJcIiwgW3VzZXIsIGdyb3VwXSk7XG4gICAgY29uc29sZS5sb2coYFVzZWQgJ2RlbHVzZXIgJHt1c2VyfSAke2dyb3VwfScgdG8gZHJvcCBncm91cCBhY2Nlc3MuYCk7XG4gIH0gZWxzZSBpZiAoYXdhaXQgY29tbWFuZEV4aXN0cyhcImdwYXNzd2RcIikpIHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcImdwYXNzd2RcIiwgW1wiLWRcIiwgdXNlciwgZ3JvdXBdKTtcbiAgICBjb25zb2xlLmxvZyhgVXNlZCAnZ3Bhc3N3ZCAtZCAke3VzZXJ9ICR7Z3JvdXB9JyB0byBkcm9wIGdyb3VwIGFjY2Vzcy5gKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOZWl0aGVyIGRlbHVzZXIgbm9yIGdwYXNzd2QgYXZhaWxhYmxlLlwiKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMaW51eEdyb3Vwcyh1c2VyOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PExpbnV4R3JvdXA+PiB7XG4gIGNvbnN0IFtpZHNSZXN1bHQsIG5hbWVzUmVzdWx0LCBwcmltYXJ5UmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBleGVjQ29tbWFuZChcImlkXCIsIFtcIi1HXCIsIHVzZXJdLCB7IGNhcHR1cmU6IHRydWUgfSksXG4gICAgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgdXNlcl0sIHsgY2FwdHVyZTogdHJ1ZSB9KSxcbiAgICBleGVjQ29tbWFuZChcImlkXCIsIFtcIi1nXCIsIHVzZXJdLCB7IGNhcHR1cmU6IHRydWUgfSksXG4gIF0pO1xuICBjb25zdCBpZHMgPSBzcGxpdEZpZWxkcyhpZHNSZXN1bHQuc3Rkb3V0KS5tYXAocGFyc2VOdW1lcmljSWQpO1xuICBjb25zdCBuYW1lcyA9IHNwbGl0RmllbGRzKG5hbWVzUmVzdWx0LnN0ZG91dCk7XG4gIGNvbnN0IHByaW1hcnlJZCA9IHBhcnNlTnVtZXJpY0lkKHByaW1hcnlSZXN1bHQuc3Rkb3V0LnRyaW0oKSk7XG5cbiAgaWYgKGlkcy5sZW5ndGggIT09IG5hbWVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlc29sdmUgZ3JvdXAgbmFtZXMgZm9yICR7dXNlcn0uYCk7XG4gIH1cblxuICByZXR1cm4gaWRzLm1hcCgoaWQsIGluZGV4KSA9PiAoe1xuICAgIGlkLFxuICAgIG5hbWU6IG5hbWVzW2luZGV4XSxcbiAgICBwcmltYXJ5OiBpZCA9PT0gcHJpbWFyeUlkLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0RmllbGRzKHZhbHVlOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBwYXJzZU51bWVyaWNJZCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKCEvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBudW1lcmljIElEOiAke3ZhbHVlfWApO1xuICB9XG4gIHJldHVybiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFJvb3RTZXJ2aWNlU29ja2V0cyhcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4gIGdyb3VwSWRzOiBTZXQ8bnVtYmVyPixcbiAgY3JlZGVudGlhbHM/OiBMaW51eFNvY2tldENyZWRlbnRpYWxzLFxuICBpZ25vcmVVbnJlYWRhYmxlID0gZmFsc2UsXG4gIGRpc3BsYXlEaXJlY3RvcnkgPSBkaXJlY3Rvcnlcbik6IFByb21pc2U8QXJyYXk8Um9vdFNlcnZpY2VTb2NrZXQ+PiB7XG4gIGxldCBkaXJlY3RvcnlIYW5kbGU7XG4gIHRyeSB7XG4gICAgZGlyZWN0b3J5SGFuZGxlID0gYXdhaXQgZnMub3BlbihcbiAgICAgIGRpcmVjdG9yeSxcbiAgICAgIGZzQ29uc3RhbnRzLk9fUkRPTkxZIHwgZnNDb25zdGFudHMuT19ESVJFQ1RPUlkgfCBmc0NvbnN0YW50cy5PX05PRk9MTE9XXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBjb2RlID0gKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBcIkVOT0VOVFwiIHx8XG4gICAgICAoaWdub3JlVW5yZWFkYWJsZSAmJiAoY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBjb2RlID09PSBcIkVQRVJNXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0b3J5RGVzY3JpcHRvclBhdGggPSBgL3Byb2Mvc2VsZi9mZC8ke2RpcmVjdG9yeUhhbmRsZS5mZH1gO1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcmVjdG9yeURlc2NyaXB0b3JQYXRoLCB7XG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHNvY2tldHM6IEFycmF5PFJvb3RTZXJ2aWNlU29ja2V0PiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLmpvaW4oZGlyZWN0b3J5RGVzY3JpcHRvclBhdGgsIGVudHJ5Lm5hbWUpO1xuICAgICAgY29uc3QgZGlzcGxheVBhdGggPSBwYXRoLmpvaW4oZGlzcGxheURpcmVjdG9yeSwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBzb2NrZXRzLnB1c2goXG4gICAgICAgICAgLi4uKGF3YWl0IGZpbmRSb290U2VydmljZVNvY2tldHMoXG4gICAgICAgICAgICBlbnRyeVBhdGgsXG4gICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgaWdub3JlVW5yZWFkYWJsZSxcbiAgICAgICAgICAgIGRpc3BsYXlQYXRoXG4gICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWVudHJ5LmlzU29ja2V0KCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBzdGF0cztcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZW50cnlQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyb3VwV3JpdGFibGUgPVxuICAgICAgICAoc3RhdHMubW9kZSAmIDBvMDIwKSAhPT0gMCAmJiBncm91cElkcy5oYXMoc3RhdHMuZ2lkKTtcbiAgICAgIGNvbnN0IHdvcmxkV3JpdGFibGUgPSAoc3RhdHMubW9kZSAmIDBvMDAyKSAhPT0gMDtcbiAgICAgIGNvbnN0IGFjbFdyaXRhYmxlID1cbiAgICAgICAgIWdyb3VwV3JpdGFibGUgJiZcbiAgICAgICAgIXdvcmxkV3JpdGFibGUgJiZcbiAgICAgICAgKHN0YXRzLm1vZGUgJiAwbzAyMCkgIT09IDAgJiZcbiAgICAgICAgc3RhdHMuaXNTb2NrZXQoKSAmJlxuICAgICAgICBzdGF0cy51aWQgPT09IDAgJiZcbiAgICAgICAgKGF3YWl0IGhhc1dyaXRhYmxlU29ja2V0QWNsKGVudHJ5UGF0aCwgc3RhdHMsIGNyZWRlbnRpYWxzKSk7XG4gICAgICBpZiAoXG4gICAgICAgIHN0YXRzLmlzU29ja2V0KCkgJiZcbiAgICAgICAgc3RhdHMudWlkID09PSAwICYmXG4gICAgICAgIChncm91cFdyaXRhYmxlIHx8IHdvcmxkV3JpdGFibGUgfHwgYWNsV3JpdGFibGUpXG4gICAgICApIHtcbiAgICAgICAgc29ja2V0cy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBkaXNwbGF5UGF0aCxcbiAgICAgICAgICBncm91cElkOiBzdGF0cy5naWQsXG4gICAgICAgICAgZGV2aWNlOiBzdGF0cy5kZXYsXG4gICAgICAgICAgaW5vZGU6IHN0YXRzLmlubyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvY2tldHM7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGlyZWN0b3J5SGFuZGxlLmNsb3NlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzV3JpdGFibGVTb2NrZXRBY2woXG4gIHNvY2tldFBhdGg6IHN0cmluZyxcbiAgZXhwZWN0ZWRTdGF0czogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBmcy5sc3RhdD4+LFxuICBjcmVkZW50aWFscz86IExpbnV4U29ja2V0Q3JlZGVudGlhbHNcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhzb2NrZXRQYXRoLCBmc0NvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlID09PSBcIkVBQ0NFU1wiIHx8IGNvZGUgPT09IFwiRVBFUk1cIiB8fCBjb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNvY2tldEhhbmRsZSA9IGF3YWl0IGZzLm9wZW4oXG4gICAgc29ja2V0UGF0aCxcbiAgICBMSU5VWF9PX1BBVEggfCBmc0NvbnN0YW50cy5PX05PRk9MTE9XXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzb2NrZXRIYW5kbGUuc3RhdCgpO1xuICAgIGlmIChcbiAgICAgICFzdGF0cy5pc1NvY2tldCgpIHx8XG4gICAgICBzdGF0cy51aWQgIT09IDAgfHxcbiAgICAgIHN0YXRzLmRldiAhPT0gZXhwZWN0ZWRTdGF0cy5kZXYgfHxcbiAgICAgIHN0YXRzLmlubyAhPT0gZXhwZWN0ZWRTdGF0cy5pbm9cbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBwcml2aWxlZ2VkIHNlcnZpY2Ugc29ja2V0IGNoYW5nZWQgZHVyaW5nIGRpc2NvdmVyeS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZGVudGl0eUdyb3VwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgcHJpbWFyeUdyb3VwSWQ6IGNyZWRlbnRpYWxzLnByaW1hcnlHcm91cElkLFxuICAgICAgICBzdXBwbGVtZW50YXJ5R3JvdXBJZHM6IGNyZWRlbnRpYWxzLnN1cHBsZW1lbnRhcnlHcm91cElkcyxcbiAgICAgIH0sXG4gICAgICAuLi4oY3JlZGVudGlhbHMuZmFsbGJhY2tHcm91cElkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpbWFyeUdyb3VwSWQ6IGNyZWRlbnRpYWxzLmZhbGxiYWNrR3JvdXBJZCxcbiAgICAgICAgICAgICAgc3VwcGxlbWVudGFyeUdyb3VwSWRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgaWRlbnRpdHkgb2YgaWRlbnRpdHlHcm91cHMpIHtcbiAgICAgIGNvbnN0IGdyb3VwQXJndW1lbnQgPVxuICAgICAgICBpZGVudGl0eS5zdXBwbGVtZW50YXJ5R3JvdXBJZHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBcIi0tY2xlYXItZ3JvdXBzXCJcbiAgICAgICAgICA6IGAtLWdyb3Vwcz0ke2lkZW50aXR5LnN1cHBsZW1lbnRhcnlHcm91cElkcy5qb2luKFwiLFwiKX1gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXG4gICAgICAgIFwiL3Vzci9iaW4vc2V0cHJpdlwiLFxuICAgICAgICBbXG4gICAgICAgICAgYC0tcmV1aWQ9JHtjcmVkZW50aWFscy51c2VySWR9YCxcbiAgICAgICAgICBgLS1yZWdpZD0ke2lkZW50aXR5LnByaW1hcnlHcm91cElkfWAsXG4gICAgICAgICAgZ3JvdXBBcmd1bWVudCxcbiAgICAgICAgICBcIi0tXCIsXG4gICAgICAgICAgXCIvdXNyL2Jpbi90ZXN0XCIsXG4gICAgICAgICAgXCItd1wiLFxuICAgICAgICAgIFwiL3Byb2Mvc2VsZi9mZC8zXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gICAgICAgICAgaW5oZXJpdGVkRmlsZURlc2NyaXB0b3I6IHNvY2tldEhhbmRsZS5mZCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHQuY29kZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuY29kZSAhPT0gMSB8fCByZXN1bHQuc3RkZXJyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZlcmlmeSBhY2Nlc3MgdG8gYSBwcml2aWxlZ2VkIHNlcnZpY2Ugc29ja2V0LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzb2NrZXRIYW5kbGUuY2xvc2UoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0cmljdFJvb3RTZXJ2aWNlU29ja2V0KFxuICBzb2NrZXQ6IFJvb3RTZXJ2aWNlU29ja2V0XG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgbGV0IHNvY2tldEhhbmRsZTtcbiAgdHJ5IHtcbiAgICBzb2NrZXRIYW5kbGUgPSBhd2FpdCBmcy5vcGVuKFxuICAgICAgc29ja2V0LnBhdGgsXG4gICAgICBMSU5VWF9PX1BBVEggfCBmc0NvbnN0YW50cy5PX05PRk9MTE9XXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzb2NrZXRIYW5kbGUuc3RhdCgpO1xuICAgIGlmICghc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3NvY2tldC5wYXRofSB0byBiZSBhIHNvY2tldC5gKTtcbiAgICB9XG4gICAgaWYgKHN0YXRzLnVpZCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3NvY2tldC5wYXRofSB0byBiZSBvd25lZCBieSByb290LmApO1xuICAgIH1cbiAgICBpZiAoc3RhdHMuZGV2ICE9PSBzb2NrZXQuZGV2aWNlIHx8IHN0YXRzLmlubyAhPT0gc29ja2V0Lmlub2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c29ja2V0LnBhdGh9IGNoYW5nZWQgd2hpbGUgZHJvcHBpbmcgcHJpdmlsZWdlcy5gKTtcbiAgICB9XG4gICAgaWYgKChzdGF0cy5tb2RlICYgMG8wNzcpID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIHRvICR7c29ja2V0LnBhdGh9IGlzIGFscmVhZHkgcmVzdHJpY3RlZC5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy5jaG1vZChgL3Byb2Mvc2VsZi9mZC8ke3NvY2tldEhhbmRsZS5mZH1gLCBzdGF0cy5tb2RlICYgMG83MDApO1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRTdGF0cyA9IGF3YWl0IHNvY2tldEhhbmRsZS5zdGF0KCk7XG4gICAgaWYgKChyZXN0cmljdGVkU3RhdHMubW9kZSAmIDBvMDc3KSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVzdHJpY3QgYWNjZXNzIHRvICR7c29ja2V0LnBhdGh9LmApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgUmVzdHJpY3RlZCBhY2Nlc3MgdG8gJHtzb2NrZXQucGF0aH0uYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc29ja2V0SGFuZGxlLmNsb3NlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5UHJpdmlsZWdlZFNvY2tldHNSZXN0cmljdGVkKFxuICBvcmlnaW5hbEdyb3VwSWRzPzogU2V0PG51bWJlcj4sXG4gIGNyZWRlbnRpYWxzPzogTGludXhTb2NrZXRDcmVkZW50aWFsc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGdyb3VwSWRzID1cbiAgICBvcmlnaW5hbEdyb3VwSWRzID8/XG4gICAgbmV3IFNldCh0eXBlb2YgcHJvY2Vzcy5nZXRncm91cHMgPT09IFwiZnVuY3Rpb25cIiA/IHByb2Nlc3MuZ2V0Z3JvdXBzKCkgOiBbXSk7XG4gIGlmICghb3JpZ2luYWxHcm91cElkcyAmJiB0eXBlb2YgcHJvY2Vzcy5nZXRnaWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGdyb3VwSWRzLmFkZChwcm9jZXNzLmdldGdpZCgpKTtcbiAgfVxuXG4gIGNvbnN0IHNvY2tldHMgPSBhd2FpdCBmaW5kUm9vdFNlcnZpY2VTb2NrZXRzKFxuICAgIExJTlVYX1JVTlRJTUVfRElSRUNUT1JZLFxuICAgIGdyb3VwSWRzLFxuICAgIGNyZWRlbnRpYWxzLFxuICAgICFvcmlnaW5hbEdyb3VwSWRzXG4gICk7XG4gIGZvciAoY29uc3Qgc29ja2V0IG9mIHNvY2tldHMpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MuZ2V0dWlkID09PSBcImZ1bmN0aW9uXCIgJiYgcHJvY2Vzcy5nZXR1aWQoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkcm9wLXN1ZG8gZGlkIG5vdCByZXZva2UgYWNjZXNzIHRvICR7c29ja2V0LnBhdGh9LmApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3Moc29ja2V0LnBhdGgsIGZzQ29uc3RhbnRzLldfT0spO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlID09PSBcIkVBQ0NFU1wiIHx8IGNvZGUgPT09IFwiRVBFUk1cIiB8fCBjb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgZHJvcC1zdWRvIGRpZCBub3QgcmV2b2tlIGFjY2VzcyB0byAke3NvY2tldC5wYXRofS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNDb21tYW5kKFwic3Vkb1wiLCBbXCItblwiLCBcInRydWVcIl0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkOiBwYXNzd29yZGxlc3Mgc3VkbyBub3QgYXZhaWxhYmxlLlwiKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpc1VzZXJJbkdyb3VwKHVzZXI6IHN0cmluZywgZ3JvdXA6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjQ29tbWFuZChcImlkXCIsIFtcIi1uR1wiLCB1c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIGlmIChyZXN1bHQuY29kZSAhPT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBncm91cHMgPSByZXN1bHQuc3Rkb3V0XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLmxlbmd0aCA+IDApO1xuICByZXR1cm4gZ3JvdXBzLmluY2x1ZGVzKGdyb3VwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZEV4aXN0cyhiaW5hcnk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjQ29tbWFuZChcInNoXCIsIFtcIi1jXCIsIGBjb21tYW5kIC12ICR7YmluYXJ5fWBdLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdC5jb2RlID09PSAwO1xufVxuXG4vKipcbiAqIFN0cmlwcyBub24tY29tbWVudCBlbnRyaWVzIGdyYW50aW5nIHN1ZG8gdG8gYHVzZXJgIGFjcm9zcyBgL2V0Yy9zdWRvZXJzLmRgXG4gKiBmaWxlcy5cbiAqXG4gKiBTdHJhdGVneTpcbiAqICAgLSBlbnVtZXJhdGUgcmVndWxhciBmaWxlcyB1bmRlciBgL2V0Yy9zdWRvZXJzLmRgXG4gKiAgIC0gcmVtb3ZlIGxpbmVzIHdob3NlIGZpcnN0IHRva2VuIG1hdGNoZXMgdGhlIHRhcmdldCB1c2VyIHdoaWxlIGtlZXBpbmdcbiAqICAgICBjb21tZW50cy9ibGFuayBsaW5lcyBpbnRhY3RcbiAqICAgLSByZXdyaXRlIGZpbGVzIGluLXBsYWNlIHdpdGggb3JpZ2luYWwgbmV3bGluZSBzdHlsZSBhbmQgcGVybWlzc2lvbnNcbiAqICAgLSByZXBvcnQgd2hpY2ggZmlsZXMgd2VyZSBjaGFuZ2VkIHNvIGNhbGxlcnMgY2FuIHN1cmZhY2UgdXNlZnVsIGxvZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlVXNlckZyb21TdWRvZXJzRCh1c2VyOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgY29uc3Qgc3Vkb2Vyc0RpciA9IFwiL2V0Yy9zdWRvZXJzLmRcIjtcbiAgbGV0IGVudHJpZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJFbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcihzdWRvZXJzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZW50cmllcyA9IGRpckVudHJpZXNcbiAgICAgIC5maWx0ZXIoKGRpcmVudCkgPT4gZGlyZW50LmlzRmlsZSgpKVxuICAgICAgLm1hcCgoZGlyZW50KSA9PiBwYXRoLmpvaW4oc3Vkb2Vyc0RpciwgZGlyZW50Lm5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeVBhdGggb2YgZW50cmllcykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoZW50cnlQYXRoLCB1c2VyKTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgbWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVzc2FnZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgdXNlcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgbGV0IHN0YXRzO1xuICBsZXQgb3JpZ2luYWw6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgIG9yaWdpbmFsID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdsaW5lID0gb3JpZ2luYWwuaW5jbHVkZXMoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogXCJcXG5cIjtcbiAgY29uc3QgZW5kc1dpdGhOZXdsaW5lID1cbiAgICBvcmlnaW5hbC5lbmRzV2l0aChcIlxcblwiKSB8fCBvcmlnaW5hbC5lbmRzV2l0aChcIlxcclxcblwiKTtcbiAgY29uc3QgcmF3TGluZXMgPSBvcmlnaW5hbC5zcGxpdCgvXFxyP1xcbi8pO1xuICBpZiAocmF3TGluZXMubGVuZ3RoID4gMCAmJiByYXdMaW5lc1tyYXdMaW5lcy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xuICAgIHJhd0xpbmVzLnBvcCgpO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRMaW5lczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiByYXdMaW5lcykge1xuICAgIGNvbnN0IHRyaW1tZWRMZWFkaW5nID0gbGluZS50cmltU3RhcnQoKTtcbiAgICBpZiAodHJpbW1lZExlYWRpbmcuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgIGZpbHRlcmVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodHJpbW1lZExlYWRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gdHJpbW1lZExlYWRpbmcuc3BsaXQoL1xccysvKTtcbiAgICBpZiAodG9rZW5zWzBdID09PSB1c2VyKSB7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gIH1cblxuICBpZiAoIWNoYW5nZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJlYnVpbHQgPSBmaWx0ZXJlZExpbmVzLmpvaW4obmV3bGluZSkgKyAoZW5kc1dpdGhOZXdsaW5lID8gbmV3bGluZSA6IFwiXCIpO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgcmVidWlsdCwgXCJ1dGY4XCIpO1xuICAgIGF3YWl0IGZzLmNobW9kKGZpbGVQYXRoLCBzdGF0cy5tb2RlICYgMG83NzcpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBgUmVtb3ZlZCAke3VzZXJ9IGVudHJ5IGZyb20gJHtmaWxlUGF0aH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjQ29tbWFuZChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBBcnJheTxzdHJpbmc+LFxuICBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnMuY2FwdHVyZSA/PyBmYWxzZTtcbiAgY29uc3QgY2hpbGQgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IGNhcHR1cmVcbiAgICAgID8gb3B0aW9ucy5pbmhlcml0ZWRGaWxlRGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl1cbiAgICAgICAgOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiLCBvcHRpb25zLmluaGVyaXRlZEZpbGVEZXNjcmlwdG9yXVxuICAgICAgOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZG91dCkge1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZGVycikge1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxFeGVjUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMDtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhb3B0aW9ucy5pZ25vcmVGYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IChleGl0IGNvZGUgJHtleGl0Q29kZX0pYFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5jb2RlID0gZXhpdENvZGU7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZG91dCA9IHN0ZG91dDtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIEV4ZWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCI7XG5pbXBvcnQgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L3Jlc3RcIjtcblxuY29uc3QgUmV0cnlpbmdPY3Rva2l0ID0gT2N0b2tpdC5wbHVnaW4ocmV0cnkpO1xuXG5leHBvcnQgdHlwZSBXcml0ZUFjY2Vzc0NoZWNrID1cbiAgfCB7XG4gICAgICBzdGF0dXM6IFwiYXBwcm92ZWRcIjtcbiAgICAgIGFjdG9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIH07XG5cbnR5cGUgRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge1xuICBvY3Rva2l0PzogT2N0b2tpdDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGFjdG9yPzogc3RyaW5nO1xuICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0cnVzdGVkIEdpdEh1YiBib3QgYWN0b3JzIGFyZSBhbGxvd2VkIHdpdGhvdXQgY2hlY2tpbmdcbiAgICogY29sbGFib3JhdG9yIHBlcm1pc3Npb25zLiBPdGhlciBib3RzIG11c3QgcGFzcyB0aGUgc2FtZSBjaGVja3MgYXMgaHVtYW5cbiAgICogdXNlcnMuXG4gICAqL1xuICBhbGxvd0JvdEFjdG9ycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIEdpdEh1YiB1c2VybmFtZXMgb3IgJyonIHRvIGFsbG93IGFsbCB1c2Vycy5cbiAgICogQ2FzZS1pbnNlbnNpdGl2ZTsgZW1wdHkgc3RyaW5nIG9yIHVuZGVmaW5lZCBkaXNhYmxlcyB0aGlzIG92ZXJyaWRlLlxuICAgKi9cbiAgYWxsb3dVc2Vycz86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgR2l0SHViIGJvdCB1c2VybmFtZXMuICcqJyBpcyBub3Qgc3VwcG9ydGVkLlxuICAgKiBFbnRyaWVzIG1heSBpbmNsdWRlIG9yIG9taXQgdGhlIHRyYWlsaW5nIFtib3RdIHN1ZmZpeC5cbiAgICovXG4gIGFsbG93Qm90VXNlcnM/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IHRoZSBHaXRIdWIgYWN0b3Igd2hpY2ggdHJpZ2dlcmVkIHRoZSBjdXJyZW50IHdvcmtmbG93IGhhcyB3cml0ZVxuICogYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2VzcyhcbiAgb3B0aW9uczogRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFdyaXRlQWNjZXNzQ2hlY2s+IHtcbiAgY29uc3QgYWN0b3IgPSBvcHRpb25zLmFjdG9yID8/IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgY29uc3QgcmVwb3NpdG9yeSA9IG9wdGlvbnMucmVwb3NpdG9yeSA/PyBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWTtcbiAgY29uc3QgYWxsb3dCb3RBY3RvcnMgPSBvcHRpb25zLmFsbG93Qm90QWN0b3JzID8/IGZhbHNlO1xuXG4gIGlmICghYWN0b3IgfHwgYWN0b3IudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yOiBhY3RvciA/PyBcIjx1bmtub3duPlwiLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9BQ1RPUiBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRyaWdnZXJpbmcgdXNlci5cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyZXBvc2l0b3J5IHx8IHJlcG9zaXRvcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9SRVBPU0lUT1JZIGlzIG5vdCBzZXQ7IGNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHJlcG9zaXRvcnkuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFvd25lciB8fCAhcmVwbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgR0lUSFVCX1JFUE9TSVRPUlkgbXVzdCBiZSBpbiB0aGUgZm9ybWF0ICdvd25lci9yZXBvJywgcmVjZWl2ZWQ6ICcke3JlcG9zaXRvcnl9Jy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBHaXRIdWItYnVpbHQgd29ya2Zsb3dzIGRvIG5vdCBoYXZlIGEgbWVhbmluZ2Z1bCBjb2xsYWJvcmF0b3IgcGVybWlzc2lvblxuICAvLyBsZXZlbC4gT25seSB0cnVzdCB0aGUgYnVpbHQtaW4gYm90IGFjdG9ycyBHaXRIdWIgb3ducy5cbiAgaWYgKGFsbG93Qm90QWN0b3JzICYmIGlzVHJ1c3RlZEdpdEh1YkJvdEFjdG9yKGFjdG9yKSkge1xuICAgIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBpcyBhIHRydXN0ZWQgR2l0SHViIGJvdCBhY2NvdW50OyBza2lwcGluZyBleHBsaWNpdCBwZXJtaXNzaW9uIGNoZWNrLmApO1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZEJvdEFjdG9ycyA9IHBhcnNlQWxsb3dlZEJvdEFjdG9ycyhvcHRpb25zLmFsbG93Qm90VXNlcnMgPz8gXCJcIik7XG4gIGlmIChhbGxvd2VkQm90QWN0b3JzIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYWxsb3dlZEJvdEFjdG9ycy5tZXNzYWdlLFxuICAgIH07XG4gIH1cbiAgaWYgKGlzQm90QWN0b3IoYWN0b3IpICYmIGFsbG93ZWRCb3RBY3RvcnMuaGFzKG5vcm1hbGl6ZUJvdEFjdG9yKGFjdG9yKSkpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy1ib3QtdXNlcnMuYCk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICAvLyBBbGxvdy1saXN0IG92ZXJyaWRlOiBpZiBhbGxvd1VzZXJzIGlzICcqJyBhbGxvdyBhbGwgdXNlcnMuIElmIGl0IGlzIGFcbiAgLy8gY29tbWEtc2VwYXJhdGVkIGxpc3QsIGFsbG93IGxpc3RlZCB1c2VycyAoY2FzZS1pbnNlbnNpdGl2ZSkgd2l0aG91dCBjaGVja2luZ1xuICAvLyBjb2xsYWJvcmF0b3IgcGVybWlzc2lvbnMuXG4gIGNvbnN0IGFsbG93VXNlcnNTcGVjID0gKG9wdGlvbnMuYWxsb3dVc2VycyA/PyBcIlwiKS50cmltKCk7XG4gIGlmIChhbGxvd1VzZXJzU3BlYy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGFsbG93VXNlcnNTcGVjID09PSBcIipcIikge1xuICAgICAgY29yZS5pbmZvKFwiYWxsb3ctdXNlcnM9JyonIHNwZWNpZmllZDsgYWxsb3dpbmcgYWxsIHVzZXJzIHRvIHByb2NlZWQuXCIpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gICAgfVxuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgYWxsb3dVc2Vyc1NwZWNcbiAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApLFxuICAgICk7XG4gICAgaWYgKGFsbG93ZWQuaGFzKGFjdG9yLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy11c2Vycy5gKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlbiA/PyBnZXRUb2tlbkZyb21FbnYoKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkEgR2l0SHViIHRva2VuIGlzIHJlcXVpcmVkIHRvIGNoZWNrIHBlcm1pc3Npb25zIChzZXQgR0lUSFVCX1RPS0VOIG9yIEdIX1RPS0VOKS5cIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IHByb2Nlc3MuZW52LkdJVEhVQl9BUElfVVJMPy50cmltKCk7XG4gIGNvbnN0IG9jdG9raXQgPVxuICAgIG9wdGlvbnMub2N0b2tpdCA/P1xuICAgIG5ldyBSZXRyeWluZ09jdG9raXQoe1xuICAgICAgYXV0aDogdG9rZW4sXG4gICAgICAuLi4oYmFzZVVybCA/IHsgYmFzZVVybCB9IDoge30pLFxuICAgIH0pO1xuXG4gIGNvcmUuaW5mbyhgQ2hlY2tpbmcgd3JpdGUgYWNjZXNzIGZvciBhY3RvciAnJHthY3Rvcn0nIG9uICR7b3duZXJ9LyR7cmVwb31gKTtcblxuICBsZXQgcGVybWlzc2lvbjogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2N0b2tpdC5yZXBvcy5nZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWwoe1xuICAgICAgb3duZXIsXG4gICAgICByZXBvLFxuICAgICAgdXNlcm5hbWU6IGFjdG9yLFxuICAgIH0pO1xuICAgIHBlcm1pc3Npb24gPSByZXNwb25zZS5kYXRhLnBlcm1pc3Npb24gPz8gXCJub25lXCI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgICBhY3RvcixcbiAgICAgICAgcmVhc29uOiBgQWN0b3IgJyR7YWN0b3J9JyBpcyBub3QgYSBjb2xsYWJvcmF0b3Igb24gJHtvd25lcn0vJHtyZXBvfTsgd3JpdGUgYWNjZXNzIGlzIHJlcXVpcmVkLmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgOiBcIkZhaWxlZCB0byB2ZXJpZnkgcGVybWlzc2lvbnMgZm9yIGFjdG9yIGR1ZSB0byB1bmtub3duIGVycm9yLlwiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgYWN0b3IsXG4gICAgICByZWFzb246IGBGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciAnJHthY3Rvcn0nOiAke21lc3NhZ2V9YCxcbiAgICB9O1xuICB9XG5cbiAgY29yZS5pbmZvKGBBY3RvciAnJHthY3Rvcn0nIGhhcyBwZXJtaXNzaW9uIGxldmVsICcke3Blcm1pc3Npb259Jy5gKTtcblxuICBpZiAocGVybWlzc2lvbiA9PT0gXCJhZG1pblwiIHx8IHBlcm1pc3Npb24gPT09IFwid3JpdGVcIiB8fCBwZXJtaXNzaW9uID09PSBcIm1haW50YWluXCIpIHtcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgYWN0b3IsXG4gICAgcmVhc29uOiBgQWN0b3IgJyR7YWN0b3J9JyBtdXN0IGhhdmUgd3JpdGUgYWNjZXNzIHRvICR7b3duZXJ9LyR7cmVwb30uIERldGVjdGVkIHBlcm1pc3Npb246ICcke3Blcm1pc3Npb259Jy5gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbkZyb21FbnYoKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU4gPz8gcHJvY2Vzcy5lbnYuR0hfVE9LRU47XG4gIHJldHVybiB0b2tlbiAmJiB0b2tlbi50cmltKCkubGVuZ3RoID4gMCA/IHRva2VuIDogXCJcIjtcbn1cblxuY29uc3QgVFJVU1RFRF9HSVRIVUJfQk9UX0FDVE9SUyA9IG5ldyBTZXQoW1wiZ2l0aHViLWFjdGlvbnNbYm90XVwiXSk7XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZEdpdEh1YkJvdEFjdG9yKGFjdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzQm90QWN0b3IoYWN0b3IpICYmIFRSVVNURURfR0lUSFVCX0JPVF9BQ1RPUlMuaGFzKG5vcm1hbGl6ZUJvdEFjdG9yKGFjdG9yKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQWxsb3dlZEJvdEFjdG9ycyhhbGxvd0JvdFVzZXJzOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB8IEVycm9yIHtcbiAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFsbG93Qm90VXNlcnMuc3BsaXQoXCIsXCIpKSB7XG4gICAgY29uc3QgYm90ID0gZW50cnkudHJpbSgpO1xuICAgIGlmIChib3QubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGJvdC5pbmNsdWRlcyhcIipcIikpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJhbGxvdy1ib3QtdXNlcnMgZG9lcyBub3Qgc3VwcG9ydCAnKic7IGxpc3QgdHJ1c3RlZCBib3QgdXNlcm5hbWVzIGV4cGxpY2l0bHkuXCIpO1xuICAgIH1cbiAgICBhbGxvd2VkLmFkZChub3JtYWxpemVCb3RBY3Rvcihib3QpKTtcbiAgfVxuICByZXR1cm4gYWxsb3dlZDtcbn1cblxuZnVuY3Rpb24gaXNCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBhY3Rvci50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwiW2JvdF1cIik7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJvdEFjdG9yKGFjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gYWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGlzQm90QWN0b3Iobm9ybWFsaXplZCkgPyBub3JtYWxpemVkIDogYCR7bm9ybWFsaXplZH1bYm90XWA7XG59XG5cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNcIiBpbiBlcnJvciAmJiAoZXJyb3IgYXMgeyBzdGF0dXM/OiBudW1iZXIgfSkuc3RhdHVzID09PSA0MDQsXG4gICk7XG59XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3ItcmVxdWVzdC5qc1xuYXN5bmMgZnVuY3Rpb24gZXJyb3JSZXF1ZXN0KHN0YXRlLCBvY3Rva2l0LCBlcnJvciwgb3B0aW9ucykge1xuICBpZiAoIWVycm9yLnJlcXVlc3QgfHwgIWVycm9yLnJlcXVlc3QucmVxdWVzdCkge1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChlcnJvci5zdGF0dXMgPj0gNDAwICYmICFzdGF0ZS5kb05vdFJldHJ5LmluY2x1ZGVzKGVycm9yLnN0YXR1cykpIHtcbiAgICBjb25zdCByZXRyaWVzID0gb3B0aW9ucy5yZXF1ZXN0LnJldHJpZXMgIT0gbnVsbCA/IG9wdGlvbnMucmVxdWVzdC5yZXRyaWVzIDogc3RhdGUucmV0cmllcztcbiAgICBjb25zdCByZXRyeUFmdGVyID0gTWF0aC5wb3coKG9wdGlvbnMucmVxdWVzdC5yZXRyeUNvdW50IHx8IDApICsgMSwgMik7XG4gICAgdGhyb3cgb2N0b2tpdC5yZXRyeS5yZXRyeVJlcXVlc3QoZXJyb3IsIHJldHJpZXMsIHJldHJ5QWZ0ZXIpO1xuICB9XG4gIHRocm93IGVycm9yO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd3JhcC1yZXF1ZXN0LmpzXG5pbXBvcnQgQm90dGxlbmVjayBmcm9tIFwiYm90dGxlbmVjay9saWdodC5qc1wiO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIjtcbmFzeW5jIGZ1bmN0aW9uIHdyYXBSZXF1ZXN0KHN0YXRlLCBvY3Rva2l0LCByZXF1ZXN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQm90dGxlbmVjaygpO1xuICBsaW1pdGVyLm9uKFwiZmFpbGVkXCIsIGZ1bmN0aW9uKGVycm9yLCBpbmZvKSB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IH5+ZXJyb3IucmVxdWVzdC5yZXF1ZXN0LnJldHJpZXM7XG4gICAgY29uc3QgYWZ0ZXIgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyeUFmdGVyO1xuICAgIG9wdGlvbnMucmVxdWVzdC5yZXRyeUNvdW50ID0gaW5mby5yZXRyeUNvdW50ICsgMTtcbiAgICBpZiAobWF4UmV0cmllcyA+IGluZm8ucmV0cnlDb3VudCkge1xuICAgICAgcmV0dXJuIGFmdGVyICogc3RhdGUucmV0cnlBZnRlckJhc2VWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGltaXRlci5zY2hlZHVsZShcbiAgICByZXF1ZXN0V2l0aEdyYXBocWxFcnJvckhhbmRsaW5nLmJpbmQobnVsbCwgc3RhdGUsIG9jdG9raXQsIHJlcXVlc3QpLFxuICAgIG9wdGlvbnNcbiAgKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RXaXRoR3JhcGhxbEVycm9ySGFuZGxpbmcoc3RhdGUsIG9jdG9raXQsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMpO1xuICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmVycm9ycyAmJiByZXNwb25zZS5kYXRhLmVycm9ycy5sZW5ndGggPiAwICYmIC9Tb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBleGVjdXRpbmcgeW91ciBxdWVyeS8udGVzdChcbiAgICByZXNwb25zZS5kYXRhLmVycm9yc1swXS5tZXNzYWdlXG4gICkpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UuZGF0YS5lcnJvcnNbMF0ubWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiBvcHRpb25zLFxuICAgICAgcmVzcG9uc2VcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JSZXF1ZXN0KHN0YXRlLCBvY3Rva2l0LCBlcnJvciwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHJldHJ5KG9jdG9raXQsIG9jdG9raXRPcHRpb25zKSB7XG4gIGNvbnN0IHN0YXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgcmV0cnlBZnRlckJhc2VWYWx1ZTogMWUzLFxuICAgICAgZG9Ob3RSZXRyeTogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDEwLCA0MjIsIDQ1MV0sXG4gICAgICByZXRyaWVzOiAzXG4gICAgfSxcbiAgICBvY3Rva2l0T3B0aW9ucy5yZXRyeVxuICApO1xuICBpZiAoc3RhdGUuZW5hYmxlZCkge1xuICAgIG9jdG9raXQuaG9vay5lcnJvcihcInJlcXVlc3RcIiwgZXJyb3JSZXF1ZXN0LmJpbmQobnVsbCwgc3RhdGUsIG9jdG9raXQpKTtcbiAgICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgd3JhcFJlcXVlc3QuYmluZChudWxsLCBzdGF0ZSwgb2N0b2tpdCkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcmV0cnk6IHtcbiAgICAgIHJldHJ5UmVxdWVzdDogKGVycm9yLCByZXRyaWVzLCByZXRyeUFmdGVyKSA9PiB7XG4gICAgICAgIGVycm9yLnJlcXVlc3QucmVxdWVzdCA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9yLnJlcXVlc3QucmVxdWVzdCwge1xuICAgICAgICAgIHJldHJpZXMsXG4gICAgICAgICAgcmV0cnlBZnRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbnJldHJ5LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgVkVSU0lPTixcbiAgcmV0cnlcbn07XG4iLCAiY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lO1xuICAvKipcbiAgICogaHR0cCBzdGF0dXMgY29kZVxuICAgKi9cbiAgc3RhdHVzO1xuICAvKipcbiAgICogUmVxdWVzdCBvcHRpb25zIHRoYXQgbGVhZCB0byB0aGUgZXJyb3IuXG4gICAqL1xuICByZXF1ZXN0O1xuICAvKipcbiAgICogUmVzcG9uc2Ugb2JqZWN0IGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXG4gICAqL1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8oPzwhICkgLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtcbiAgICAgIHByb2Nlc3MuYXJjaFxuICAgIH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZSgoY2FsbGJhY2ssIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZSgobWV0aG9kLCByZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcCgocmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4vbGliL3JlZ2lzdGVyLmpzXCI7XG5pbXBvcnQgeyBhZGRIb29rIH0gZnJvbSBcIi4vbGliL2FkZC5qc1wiO1xuaW1wb3J0IHsgcmVtb3ZlSG9vayB9IGZyb20gXCIuL2xpYi9yZW1vdmUuanNcIjtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG5jb25zdCBiaW5kID0gRnVuY3Rpb24uYmluZDtcbmNvbnN0IGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIGNvbnN0IHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaCgoa2luZCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSBuYW1lID8gW3N0YXRlLCBraW5kLCBuYW1lXSA6IFtzdGF0ZSwga2luZF07XG4gICAgaG9va1traW5kXSA9IGhvb2suYXBpW2tpbmRdID0gYmluZGFibGUoYWRkSG9vaywgbnVsbCkuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTaW5ndWxhcigpIHtcbiAgY29uc3Qgc2luZ3VsYXJIb29rTmFtZSA9IFN5bWJvbChcIlNpbmd1bGFyXCIpO1xuICBjb25zdCBzaW5ndWxhckhvb2tTdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG4gIGNvbnN0IHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG5cbiAgY29uc3QgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBTaW5ndWxhciwgQ29sbGVjdGlvbiB9O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W157fX1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvKD86XlxcVyspfCg/Oig/PCFcXFcpXFxXKyQpL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgZGVmYXVsdHNfZGVmYXVsdCA9IHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tIFwiZmFzdC1jb250ZW50LXR5cGUtcGFyc2VcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpIDogcmVxdWVzdE9wdGlvbnMuYm9keTtcbiAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVxdWVzdE9wdGlvbnMuaGVhZGVycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgU3RyaW5nKHZhbHVlKVxuICAgIF0pXG4gICk7XG4gIGxldCBmZXRjaFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGZldGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5yZWRpcmVjdCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3Rpbml0LWR1cGxleC5cbiAgICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFwiVW5rbm93biBFcnJvclwiO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gNTAwO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiYgXCJjYXVzZVwiIGluIGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yLmNhdXNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RFcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJlcXVlc3RFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIHRocm93IHJlcXVlc3RFcnJvcjtcbiAgfVxuICBjb25zdCBzdGF0dXMgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZS51cmw7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmZXRjaFJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICByZXNwb25zZUhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IG9jdG9raXRSZXNwb25zZSA9IHtcbiAgICB1cmwsXG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICBkYXRhOiBcIlwiXG4gIH07XG4gIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gcmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3BvbnNlSGVhZGVycy5saW5rICYmIHJlc3BvbnNlSGVhZGVycy5saW5rLm1hdGNoKC88KFtePD5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgIGxvZy53YXJuKFxuICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke3Jlc3BvbnNlSGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2Uob2N0b2tpdFJlc3BvbnNlLmRhdGEpLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIG9jdG9raXRSZXNwb25zZS5kYXRhID0gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpIDogZmV0Y2hSZXNwb25zZS5ib2R5O1xuICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGNvbnN0IG1pbWV0eXBlID0gc2FmZVBhcnNlKGNvbnRlbnRUeXBlKTtcbiAgaWYgKGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc0pTT05SZXNwb25zZShtaW1ldHlwZSkge1xuICByZXR1cm4gbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIgfHwgbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9zY2ltK2pzb25cIjtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBcIlVua25vd24gZXJyb3JcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBkYXRhID8gYCAtICR7ZGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykgPyBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QyIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbiAgbmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgZXJyb3JzO1xuICBkYXRhO1xufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbnZhciBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcbiAgXCJtZXRob2RcIixcbiAgXCJiYXNlVXJsXCIsXG4gIFwidXJsXCIsXG4gIFwiaGVhZGVyc1wiLFxuICBcInJlcXVlc3RcIixcbiAgXCJxdWVyeVwiLFxuICBcIm1lZGlhVHlwZVwiLFxuICBcIm9wZXJhdGlvbk5hbWVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMocmVxdWVzdCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LWdyYXBocWwuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuZXhwb3J0IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwyIGFzIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pcy1qd3QuanNcbnZhciBiNjR1cmwgPSBcIig/OlthLXpBLVowLTlfLV0rKVwiO1xudmFyIHNlcCA9IFwiXFxcXC5cIjtcbnZhciBqd3RSRSA9IG5ldyBSZWdFeHAoYF4ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0kYCk7XG52YXIgaXNKV1QgPSBqd3RSRS50ZXN0LmJpbmQoand0UkUpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IGlzSldUKHRva2VuKTtcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSB0b2tlbi5zdGFydHNXaXRoKFwidjEuXCIpIHx8IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHNfXCIpO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHVfXCIpO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59O1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjYuMS42XCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwgImltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuaW1wb3J0IEhvb2sgZnJvbSBcImJlZm9yZS1hZnRlci1ob29rXCI7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IHdpdGhDdXN0b21SZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L2dyYXBocWxcIjtcbmltcG9ydCB7IGNyZWF0ZVRva2VuQXV0aCB9IGZyb20gXCJAb2N0b2tpdC9hdXRoLXRva2VuXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5jb25zdCBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3QgY29uc29sZUVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKGxvZ2dlciA9IHt9KSB7XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZGVidWcgPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5pbmZvID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci53YXJuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIud2FybiA9IGNvbnNvbGVXYXJuO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmVycm9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZXJyb3IgPSBjb25zb2xlRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmNvbnN0IHVzZXJBZ2VudFRyYWlsID0gYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbmNsYXNzIE9jdG9raXQge1xuICBzdGF0aWMgVkVSU0lPTiA9IFZFUlNJT047XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHBsdWdpbnMgPSBbXTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyBwbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IEhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gd2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gY3JlYXRlTG9nZ2VyKG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRoaXMuYXV0aCA9IGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgdHlwZTogXCJ1bmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBjcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxuICAvLyBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0b3JcbiAgcmVxdWVzdDtcbiAgZ3JhcGhxbDtcbiAgbG9nO1xuICBob29rO1xuICAvLyBUT0RPOiB0eXBlIGBvY3Rva2l0LmF1dGhgIGJhc2VkIG9uIHBhc3NlZCBvcHRpb25zLmF1dGhTdHJhdGVneVxuICBhdXRoO1xufVxuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI1LjMuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuZnVuY3Rpb24gcmVxdWVzdExvZyhvY3Rva2l0KSB7XG4gIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCAocmVxdWVzdCwgb3B0aW9ucykgPT4ge1xuICAgIG9jdG9raXQubG9nLmRlYnVnKFwicmVxdWVzdFwiLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQucGFyc2Uob3B0aW9ucyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnVybC5yZXBsYWNlKG9wdGlvbnMuYmFzZVVybCwgXCJcIik7XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdO1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yLnJlc3BvbnNlPy5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXSB8fCBcIlVOS05PV05cIjtcbiAgICAgIG9jdG9raXQubG9nLmVycm9yKFxuICAgICAgICBgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gd2l0aCBpZCAke3JlcXVlc3RJZH0gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydCB7XG4gIHJlcXVlc3RMb2dcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgLzwoW148Pl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzL2JyYW5jaGVzL3ticmFuY2h9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL2NvZGVcIixcbiAgXCJHRVQgL3NlYXJjaC9jb21taXRzXCIsXG4gIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvbGFiZWxzXCIsXG4gIFwiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdG9waWNzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdXNlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L21lbWJlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3JlcG9zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvaXNzdWVzXCIsXG4gIFwiR0VUIC91c2VyL2tleXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gIFwiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvdGVhbXNcIixcbiAgXCJHRVQgL3VzZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxMy41LjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzR2l0aHViT3duZWRJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2dpdGh1Yi1vd25lZFwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0xpbWl0c0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9saW1pdHNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNNYWNoaW5lU3BlY3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbWFjaGluZS1zaXplc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc1BhcnRuZXJJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL3BhcnRuZXJcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQbGF0Zm9ybXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvcGxhdGZvcm1zXCIsXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXSB9LFxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIixcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCIsXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0RW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdEdpdGh1Ykhvc3RlZFJ1bm5lcnNJbkdyb3VwRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiLFxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXZpZXdDdXN0b21HYXRlc0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVcIixcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHNldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBhY3Rpdml0eToge1xuICAgIGNoZWNrUmVwb0lzU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZVJlcG9TdWJzY3JpcHRpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGRlbGV0ZVRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIixcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFdmVudHM6IFtcIkdFVCAvZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JSZXBvTmV0d29yazogW1wiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RQdWJsaWNPcmdFdmVudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRQdWJsaWNFdmVudHNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBzdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1bnN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNoZWNrVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBjcmVhdGVGcm9tTWFuaWZlc3Q6IFtcIlBPU1QgL2FwcC1tYW5pZmVzdHMve2NvZGV9L2NvbnZlcnNpb25zXCJdLFxuICAgIGNyZWF0ZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXG4gICAgICBcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFVzZXJJbnN0YWxsYXRpb246IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiR0VUIC9hcHAvaG9vay9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW5TdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgICBdLFxuICAgIGxpc3RTdWl0ZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgcmVyZXF1ZXN0UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIixcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGNvbW1pdEF1dG9maXg6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeC9jb21taXRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXhcIixcbiAgICBdLFxuICAgIGNyZWF0ZVZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCIgfSB9LFxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIixcbiAgICBdLFxuICAgIGdldEF1dG9maXg6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBnZXRDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlcy97Y29kZXFsX3ZhcmlhbnRfYW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRWYXJpYW50QW5hbHlzaXNSZXBvVGFzazogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfS9yZXBvcy97cmVwb19vd25lcn0ve3JlcG9fbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGVmYXVsdFNldHVwOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2RlZmF1bHQtc2V0dXBcIixcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXSxcbiAgfSxcbiAgY29kZVNlY3VyaXR5OiB7XG4gICAgYXR0YWNoQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgYXR0YWNoRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29uZmlndXJhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRldGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGV0YWNoXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbkZvclJlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNlY3VyaXR5LWNvbmZpZ3VyYXRpb25cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIl0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0Q29uZmlndXJhdGlvbnNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0UmVwb3NpdG9yaWVzRm9yRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBnZXRTaW5nbGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0Q29uZmlndXJhdGlvbkFzRGVmYXVsdDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHRGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVFbnRlcnByaXNlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl0sXG4gIH0sXG4gIGNvZGVzcGFjZXM6IHtcbiAgICBhZGRSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiLFxuICAgIF0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHNcIixcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfSxcbiAgICBdLFxuICAgIGxpc3RJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcHJlRmxpZ2h0V2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbmV3XCIsXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIixcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiLFxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgfSxcbiAgY29waWxvdDoge1xuICAgIGFkZENvcGlsb3RTZWF0c0ZvclRlYW1zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCIsXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVXNlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIixcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiXSxcbiAgICB1c2FnZU1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCJdLFxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiLFxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGV4cG9ydFNib206IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zYm9tXCJdLFxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXSxcbiAgfSxcbiAgaG9zdGVkQ29tcHV0ZToge1xuICAgIGNyZWF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya1NldHRpbmdzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLXNldHRpbmdzL3tuZXR3b3JrX3NldHRpbmdzX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdE5ldHdvcmtDb25maWd1cmF0aW9uc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVN1Yklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZVwiLFxuICAgIF0sXG4gICAgcmVwcmlvcml0aXplU3ViSXNzdWU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzL3ByaW9yaXR5XCIsXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl0sXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9LFxuICAgIF0sXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRBbGxWZXJzaW9uczogW1wiR0VUIC92ZXJzaW9uc1wiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXSxcbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gICAgdW5sb2NrUmVwb0Zvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgfSxcbiAgb2lkYzoge1xuICAgIGdldE9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBhZGRTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5hZGRTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNhZGQtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhc3NpZ25UZWFtVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUludml0YXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgY3JlYXRlSXNzdWVUeXBlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL29yZ3Mve29yZ31cIl0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvb3JncyNlbmFibGUtb3ItZGlzYWJsZS1hLXNlY3VyaXR5LWZlYXR1cmUtZm9yLWFuLW9yZ2FuaXphdGlvblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9vcmdzL3tvcmd9XCJdLFxuICAgIGdldEFsbEN1c3RvbVByb3BlcnRpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYVwiXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldEhpc3Rvcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiXSxcbiAgICBnZXRPcmdSdWxlc2V0VmVyc2lvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdElzc3VlVHlwZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5saXN0U2VjdXJpdHlNYW5hZ2VyVGVhbXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2xpc3Qtc2VjdXJpdHktbWFuYWdlci10ZWFtc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlSXNzdWVUeXBlOiBbXCJQVVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3M6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfVwiXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3NlczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gIH0sXG4gIHByaXZhdGVSZWdpc3RyaWVzOiB7XG4gICAgY3JlYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICBkZWxldGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRPcmdQcml2YXRlUmVnaXN0cnk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMvcHVibGljLWtleVwiXSxcbiAgICBsaXN0T3JnUHJpdmF0ZVJlZ2lzdHJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgdXBkYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5hZGRDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2FkZC1wcm9qZWN0LWNvbGxhYm9yYXRvclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2NyZWF0ZS1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNjcmVhdGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtdXNlci1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvck9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hbi1vcmdhbml6YXRpb24tcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvclJlcG8oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYS1yZXBvc2l0b3J5LXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGU6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2RlbGV0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDYXJkOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNkZWxldGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDb2x1bW46IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2RlbGV0ZS1hLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNnZXQtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q2FyZDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZ2V0LWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q29sdW1uOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNnZXQtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRQZXJtaXNzaW9uRm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjZ2V0LXByb2plY3QtcGVybWlzc2lvbi1mb3ItYS11c2VyXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENhcmRzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjbGlzdC1wcm9qZWN0LWNhcmRzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbGxhYm9yYXRvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2xpc3QtcHJvamVjdC1jb2xsYWJvcmF0b3JzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbHVtbnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbHVtbnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2xpc3QtcHJvamVjdC1jb2x1bW5zXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LW9yZ2FuaXphdGlvbi1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1yZXBvc2l0b3J5LXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtdXNlci1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1vdmVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI21vdmUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ29sdW1uOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLm1vdmVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI21vdmUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnJlbW92ZUNvbGxhYm9yYXRvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjcmVtb3ZlLXVzZXItYXMtYS1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjdXBkYXRlLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy51cGRhdGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1xuICAgICAgXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyN1cGRhdGUtYW4tZXhpc3RpbmctcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2Rpc21pc3NhbHNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICB9LFxuICByYXRlTGltaXQ6IHsgZ2V0OiBbXCJHRVQgL3JhdGVfbGltaXRcIl0gfSxcbiAgcmVhY3Rpb25zOiB7XG4gICAgY3JlYXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvcklzc3VlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgY2FuY2VsUGFnZXNEZXBsb3ltZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBjaGVja1Z1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXR0ZXN0YXRpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc3BhdGNoRXZlbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Rpc3BhdGNoZXNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcmVwb3NcIl0sXG4gICAgY3JlYXRlRm9yazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgY3JlYXRlSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH0sXG4gICAgXSxcbiAgICBkb3dubG9hZFRhcmJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhcmJhbGwve3JlZn1cIl0sXG4gICAgZG93bmxvYWRaaXBiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCJdLFxuICAgIGVuYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzL3tydWxlX3N1aXRlX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0SGlzdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeS97dmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RBY3Rpdml0aWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCIsXG4gICAgXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvckNvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveUtleXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBsaXN0RGVwbG95bWVudEJyYW5jaFBvbGljaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIl0sXG4gICAgbGlzdFRlYW1zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9LFxuICAgIF0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluZm9ybWF0aW9uQWJvdXRQYWdlc1NpdGU6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgdXBkYXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvUnVsZXNldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwidXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uXCJdIH0sXG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiLFxuICAgIF0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsXG4gICAgICB7IGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIiB9LFxuICAgIF0sXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcbiAgICAgIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5zZWFyY2guaXNzdWVzQW5kUHVsbFJlcXVlc3RzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvc2VhcmNoL3NlYXJjaCNzZWFyY2gtaXNzdWVzLWFuZC1wdWxsLXJlcXVlc3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy9yZXBvcnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIixcbiAgICBdLFxuICAgIGdldEdsb2JhbEFkdmlzb3J5OiBbXCJHRVQgL2Fkdmlzb3JpZXMve2doc2FfaWR9XCJdLFxuICAgIGdldFJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zSW5PcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5OiBbXG4gICAgICBcIlBVVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9ucy1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjY2hlY2stdGVhbS1wZXJtaXNzaW9ucy1mb3ItYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdC1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmxpc3RQcm9qZWN0c0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzTGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNsaXN0LXRlYW0tcHJvamVjdHMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiREVMRVRFIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5yZW1vdmVQcm9qZWN0TGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbS1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2tleXNcIl0sXG4gICAgY3JlYXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgIF0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFbmRwb2ludHM7XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRPcHRpb25zLCBSZXF1ZXN0UGFyYW1ldGVycywgUm91dGUgfSBmcm9tIFwiQG9jdG9raXQvdHlwZXNcIjtcbmltcG9ydCBFTkRQT0lOVFMgZnJvbSBcIi4vZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL21ldGhvZC10eXBlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludERlY29yYXRpb25zIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLy8gVGhlIGZvbGxvd2luZyBjb2RlIHdhcyByZWZhY3RvcmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzLmpzL3B1bGwvNjIyXG4vLyB0byBvcHRpbWlzZSB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBvZiBPY3Rva2l0IGluaXRpYWxpemF0aW9uLlxuLy9cbi8vIFRoaXMgb3B0aW1pemF0aW9uIGludm9sdmVzIHR3byBrZXkgY2hhbmdlczpcbi8vIDEuIFByZS1Db21wdXRhdGlvbjogVGhlIGVuZHBvaW50IG1ldGhvZHMgYXJlIHByZS1jb21wdXRlZCBvbmNlIGF0IG1vZHVsZSBsb2FkXG4vLyAgICB0aW1lIGluc3RlYWQgb2YgZWFjaCBpbnZvY2F0aW9uIG9mIGBlbmRwb2ludHNUb01ldGhvZHMoKWAuXG4vLyAyLiBMYXp5IGluaXRpYWxpemF0aW9uIGFuZCBjYWNoaW5nOiBXZSB1c2UgYSBQcm94eSBmb3IgZWFjaCBzY29wZSB0byBvbmx5XG4vLyAgICBpbml0aWFsaXplIG1ldGhvZHMgdGhhdCBhcmUgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHJlZHVjZXMgcnVudGltZSBvdmVyaGVhZFxuLy8gICAgYXMgdGhlIGluaXRpYWxpemF0aW9uIGludm9sdmVzIGRlZXAgbWVyZ2luZyBvZiBvYmplY3RzLiBUaGUgaW5pdGlhbGl6ZWRcbi8vICAgIG1ldGhvZHMgYXJlIHRoZW4gY2FjaGVkIGZvciBmdXR1cmUgdXNlLlxuXG5jb25zdCBlbmRwb2ludE1ldGhvZHNNYXAgPSBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhFTkRQT0lOVFMpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzLFxuICAgICk7XG5cbiAgICBpZiAoIWVuZHBvaW50TWV0aG9kc01hcC5oYXMoc2NvcGUpKSB7XG4gICAgICBlbmRwb2ludE1ldGhvZHNNYXAuc2V0KHNjb3BlLCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxudHlwZSBQcm94eVRhcmdldCA9IHtcbiAgb2N0b2tpdDogT2N0b2tpdDtcbiAgc2NvcGU6IHN0cmluZztcbiAgY2FjaGU6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnlbXSkgPT4gYW55Pjtcbn07XG5cbmNvbnN0IGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLCAvLyBlbnN1cmVzIG1ldGhvZCBpcyBpbiB0aGUgY2FjaGVcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eShcbiAgICB0YXJnZXQ6IFByb3h5VGFyZ2V0LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4gICkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQuY2FjaGUsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBkZWxldGVQcm9wZXJ0eSh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBvd25LZXlzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQpIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlKTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyB9ID0gbWV0aG9kO1xuXG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBSZXN0RW5kcG9pbnRNZXRob2RzIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH07XG5cbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHMgYXMgUmVzdEVuZHBvaW50TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUoXG4gIG9jdG9raXQ6IE9jdG9raXQsXG4gIHNjb3BlOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgZGVmYXVsdHM6IEVuZHBvaW50T3B0aW9ucyxcbiAgZGVjb3JhdGlvbnM6IEVuZHBvaW50RGVjb3JhdGlvbnMsXG4pIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKFxuICAgIC4uLmFyZ3M6IFtSb3V0ZSwgUmVxdWVzdFBhcmFtZXRlcnM/XSB8IFtFbmRwb2ludE9wdGlvbnNdXG4gICkge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgIC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcbiAgICBpZiAoZGVjb3JhdGlvbnMubWFwVG9EYXRhKSB7XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICBkYXRhOiBvcHRpb25zW2RlY29yYXRpb25zLm1hcFRvRGF0YV0sXG4gICAgICAgIFtkZWNvcmF0aW9ucy5tYXBUb0RhdGFdOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgIGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykge1xuICAgICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgICBjb25zdCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgYWxpYXNdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICBkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycyxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgICAgICBgXCIke25hbWV9XCIgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgZm9yIFwib2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KClcIi4gVXNlIFwiJHthbGlhc31cIiBpbnN0ZWFkYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kVHlwZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvcGFyYW1ldGVycy1hbmQtcmVzcG9uc2UtdHlwZXMuanNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBlbmRwb2ludHNUb01ldGhvZHMgfSBmcm9tIFwiLi9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1wiO1xuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZm9yIGRvd25zdHJlYW0gdXNlcnMgaW4gb3JkZXIgdG8gZml4IGEgVHlwZVNjcmlwdCBlcnJvclxuLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ09jdG9raXQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICcuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy9kaXN0LXR5cGVzL3R5cGVzLmpzJy4gVGhpcyBpcyBsaWtlbHkgbm90IHBvcnRhYmxlLiBBIHR5cGUgYW5ub3RhdGlvbiBpcyBuZWNlc3NhcnkuXG5leHBvcnQgdHlwZSB7IEFwaSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGlbXCJyZXN0XCJdICYgQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmFwaSxcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjIxLjEuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBPY3Rva2l0IGFzIENvcmUgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZyB9IGZyb20gXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIjtcbmltcG9ydCB7XG4gIHBhZ2luYXRlUmVzdFxufSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIjtcbmltcG9ydCB7IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IE9jdG9raXQgPSBDb3JlLnBsdWdpbihyZXF1ZXN0TG9nLCBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLCBwYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKFxuICB7XG4gICAgdXNlckFnZW50OiBgb2N0b2tpdC1yZXN0LmpzLyR7VkVSU0lPTn1gXG4gIH1cbik7XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCB7IHBhcnNlQXJnc1N0cmluZ1RvQXJndiB9O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlLCBlbnYsIGZpbGUpIHtcbiAgICAvLyAoW15cXHMnXCJdKFteXFxzJ1wiXSooWydcIl0pKFteXFwzXSo/KVxcMykrW15cXHMnXCJdKikgTWF0Y2hlcyBuZXN0ZWQgcXVvdGVzIHVudGlsIHRoZSBmaXJzdCBzcGFjZSBvdXRzaWRlIG9mIHF1b3Rlc1xuICAgIC8vIFteXFxzJ1wiXSsgb3IgTWF0Y2ggaWYgbm90IGEgc3BhY2UgJyBvciBcIlxuICAgIC8vIChbJ1wiXSkoW15cXDVdKj8pXFw1IG9yIE1hdGNoIFwicXVvdGVkIHRleHRcIiB3aXRob3V0IHF1b3Rlc1xuICAgIC8vIGBcXDNgIGFuZCBgXFw1YCBhcmUgYSBiYWNrcmVmZXJlbmNlIHRvIHRoZSBxdW90ZSBzdHlsZSAoJyBvciBcIikgY2FwdHVyZWRcbiAgICB2YXIgbXlSZWdleHAgPSAvKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopfFteXFxzJ1wiXSt8KFsnXCJdKShbXlxcNV0qPylcXDUvZ2k7XG4gICAgdmFyIG15U3RyaW5nID0gdmFsdWU7XG4gICAgdmFyIG15QXJyYXkgPSBbXTtcbiAgICBpZiAoZW52KSB7XG4gICAgICAgIG15QXJyYXkucHVzaChlbnYpO1xuICAgIH1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgICBteUFycmF5LnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHZhciBtYXRjaDtcbiAgICBkbyB7XG4gICAgICAgIC8vIEVhY2ggY2FsbCB0byBleGVjIHJldHVybnMgdGhlIG5leHQgcmVnZXggbWF0Y2ggYXMgYW4gYXJyYXlcbiAgICAgICAgbWF0Y2ggPSBteVJlZ2V4cC5leGVjKG15U3RyaW5nKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJbmRleCAxIGluIHRoZSBhcnJheSBpcyB0aGUgY2FwdHVyZWQgZ3JvdXAgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAvLyBJbmRleCAwIGlzIHRoZSBtYXRjaGVkIHRleHQsIHdoaWNoIHdlIHVzZSBpZiBubyBjYXB0dXJlZCBncm91cCBleGlzdHNcbiAgICAgICAgICAgIG15QXJyYXkucHVzaChmaXJzdFN0cmluZyhtYXRjaFsxXSwgbWF0Y2hbNl0sIG1hdGNoWzBdKSk7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChtYXRjaCAhPT0gbnVsbCk7XG4gICAgcmV0dXJuIG15QXJyYXk7XG59XG4vLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzLCBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgYSBzdHJpbmdcbi8vIChldmVuIGFuIGVtcHR5IHN0cmluZylcbmZ1bmN0aW9uIGZpcnN0U3RyaW5nKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBTYWZldHlTdHJhdGVneSB9IGZyb20gXCIuL3J1bkNvZGV4RXhlY1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5jb25zdCBNT0RFTF9QUk9WSURFUiA9IFwiY29kZXgtYWN0aW9uLXJlc3BvbnNlcy1wcm94eVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVQcm94eUNvbmZpZyhcbiAgY29kZXhIb21lOiBzdHJpbmcsXG4gIHBvcnQ6IG51bWJlcixcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGguam9pbihjb2RleEhvbWUsIFwiY29uZmlnLnRvbWxcIik7XG5cbiAgbGV0IGV4aXN0aW5nID0gXCJcIjtcbiAgdHJ5IHtcbiAgICBleGlzdGluZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGNvbmZpZ1BhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgZXhpc3RpbmcgPSBcIlwiO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gYCMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxubW9kZWxfcHJvdmlkZXIgPSBcIiR7TU9ERUxfUFJPVklERVJ9XCJcblxuXG5gO1xuICBjb25zdCB0YWJsZSA9IGBcblxuIyBBZGRlZCBieSBjb2RleC1hY3Rpb24uXG5bbW9kZWxfcHJvdmlkZXJzLiR7TU9ERUxfUFJPVklERVJ9XVxubmFtZSA9IFwiQ29kZXggQWN0aW9uIFJlc3BvbnNlcyBQcm94eVwiXG5iYXNlX3VybCA9IFwiaHR0cDovLzEyNy4wLjAuMToke3BvcnR9L3YxXCJcbndpcmVfYXBpID0gXCJyZXNwb25zZXNcIlxuYDtcblxuICAvLyBQcmVwZW5kIG1vZGVsX3Byb3ZpZGVyIGF0IHRoZSB2ZXJ5IHRvcC5cbiAgbGV0IG91dHB1dCA9IGAke2hlYWRlcn0ke2V4aXN0aW5nfSR7dGFibGV9YDtcblxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwidW5wcml2aWxlZ2VkLXVzZXJcIikge1xuICAgIC8vIFdlIGtub3cgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIENPREVYX0hPTUUgZGlyZWN0b3J5LCBidXQgaXQgaXMgb3duZWRcbiAgICAvLyBieSBhbm90aGVyIHVzZXIsIHNvIHdlIG5lZWQgdG8gdXNlIHN1ZG8gdG8gd3JpdGUgdGhlIGZpbGUuXG4gICAgY29uc3QgdGVtcERpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCBcImNvZGV4LWNvbmZpZ1wiKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbXBDb25maWdQYXRoID0gcGF0aC5qb2luKHRlbXBEaXIsIFwiY29uZmlnLnRvbWxcIik7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcENvbmZpZ1BhdGgsIG91dHB1dCwgXCJ1dGY4XCIpO1xuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIm12XCIsIHRlbXBDb25maWdQYXRoLCBjb25maWdQYXRoXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJtKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZnMubWtkaXIoY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoY29uZmlnUGF0aCwgb3V0cHV0LCBcInV0ZjhcIik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNEVBQUFBLFVBQUE7QUFHQSxRQUFNQyxrQkFBTixjQUE2QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFPakMsWUFBWSxVQUFVLE1BQU0sU0FBUztBQUNuQyxjQUFNLE9BQU87QUFFYixjQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUM5QyxhQUFLLE9BQU8sS0FBSyxZQUFZO0FBQzdCLGFBQUssT0FBTztBQUNaLGFBQUssV0FBVztBQUNoQixhQUFLLGNBQWM7QUFBQSxNQUNyQjtB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LE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxhQUFTLElBQUksR0FBRyxJQUFJ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QUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25F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QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFB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QSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsUUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsYUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsMkJBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLG1CQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxnQkFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsYUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsa0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGlCQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxzQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsd0JBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLG9CQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxnQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsbUJBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLDJCQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEscUJBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLHFCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxpQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsbUJBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxPQUFBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLE9BQUFBLE9BQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBN0JZLFFBQUFDLFNBQUEsVUFBQUEsU0FBQSxRQUFLLENBQUEsRUFBQTtBQStCakIsUUFBWTtBQUFaLEtBQUEsU0FBWUMsT0FBSTtBQUNkLE1BQUFBLE1BQUFBLE1BQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsVUFBQSxJQUFBLENBQUEsSUFBQTtJQUNGLEdBSlksT0FBQUQsU0FBQSxTQUFBQSxTQUFBLE9BQUksQ0FBQSxFQUFBO0FBTWhCLFFBQVk7QUFBWixLQUFBLFNBQVlFLFFBQUs7QUFDZixNQUFBQSxPQUFBQSxPQUFBLHVCQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsb0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtJQUNGLEdBWFksUUFBQUYsU0FBQSxVQUFBQSxTQUFBLFFBQUssQ0FBQSxFQUFBO0FBYWpCLFFBQVk7QUFBWixLQUFBLFNBQVlHLGdCQUFhO0FBQ3ZCLE1BQUFBLGVBQUFBLGVBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLGVBQUFBLGVBQUEsZ0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxlQUFBQSxlQUFBLFlBQUEsSUFBQSxDQUFBLElBQUE7SUFDRixHQUpZLGdCQUFBSCxTQUFBLGtCQUFBQSxTQUFBLGdCQUFhLENBQUEsRUFBQTtBQU16QixRQUFZO0FBQVosS0FBQSxTQUFZSSxVQUFPO0FBQ2pCLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsYUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBMURZLFVBQUFKLFNBQUEsWUFBQUEsU0FBQSxVQUFPLENBQUEsRUFBQTtBQTRETixJQUFBQSxTQUFBLGVBQWU7TUFDMUIsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUSxVQUFVO01BQ2xCLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTs7TUFHUixRQUFROztBQUdHLElBQUFBLFNBQUEsY0FBYztNQUN6QixRQUFROztBQUdHLElBQUFBLFNBQUEsZUFBZTtNQUMxQixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7O01B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QUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFL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WUFBUztBQUNuQixNQUFBQSxXQUFBQSxXQUFBLElBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGlCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxrQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsbUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLG1CQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxZQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxjQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsV0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsa0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLDZCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxnQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsTUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsaUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLHFCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxnQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsWUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsb0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0lBQ0YsR0E1QlksY0FBU0MsU0FBQSxZQUFULFlBQVMsQ0FBQSxFQUFBO0FBOEJyQixRQUFZO0FBQVosS0FBQSxTQUFZQyxVQUFPO0FBQ2pCLE1BQUFBLFNBQUEsUUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQSxhQUFBLElBQUE7SUFDRixHQUhZLFlBQU9ELFNBQUEsVUFBUCxVQUFPLENBQUEsRUFBQTtBQUtuQixRQUFZO0FBQVosS0FBQSxTQUFZRSxhQUFVO0FBQ3BCLE1BQUFBLFlBQUEsaUJBQUEsSUFBQTtJQUNGLEdBRlksZUFBVUYsU0FBQSxhQUFWLGFBQVUsQ0FBQSxFQUFBO0FBUXRCLGFBQWdCLFlBQVksV0FBaUI7QUFDM0MsWUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ2xELGFBQU8sV0FBVyxTQUFTLE9BQU87SUFDcEM7QUFIQSxJQUFBQSxTQUFBLGNBQUE7QUFLQSxRQUFNLG9CQUE4QjtNQUNsQyxVQUFVO01BQ1YsVUFBVTtNQUNWLFVBQVU7TUFDVixVQUFVO01BQ1YsVUFBVTs7QUFFWixRQUFNLHlCQUFtQztNQUN2QyxVQUFVO01BQ1YsVUFBVTtNQUNWLFVBQVU7O0FBRVosUUFBTSxxQkFBK0IsQ0FBQyxXQUFXLE9BQU8sVUFBVSxNQUFNO0FBQ3hFLFFBQU0sNEJBQTRCO0FBQ2xDLFFBQU0sOEJBQThCO0FBRXBDLFFBQWEsa0JBQWIsTUFBYSx5QkFBd0IsTUFBSztNQUN4QyxZQUFZLFNBQWlCLFlBQWtCO0FBQzdDLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssYUFBYTtBQUNsQixlQUFPLGVBQWUsTUFBTSxpQkFBZ0IsU0FBUztNQUN2RDs7QUFORixJQUFBQSxTQUFBLGtCQUFBO0FBWUEsUUFBYSxxQkFBYixNQUErQjtNQUM3QixZQUFZLFNBQTZCO0FBQ3ZDLGFBQUssVUFBVTtNQUNqQjtNQUdNLFdBQVE7O0FBQ1osaUJBQU8sSUFBSSxRQUFnQixDQUFNLFlBQVUsVUFBQSxNQUFBLFFBQUEsUUFBQSxhQUFBO0FBQ3pDLGdCQUFJLFNBQVMsT0FBTyxNQUFNLENBQUM7QUFFM0IsaUJBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFpQjtBQUN4Qyx1QkFBUyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQztZQUN4QyxDQUFDO0FBRUQsaUJBQUssUUFBUSxHQUFHLE9BQU8sTUFBSztBQUMxQixzQkFBUSxPQUFPLFNBQVEsQ0FBRTtZQUMzQixDQUFDO1VBQ0gsQ0FBQyxDQUFBO1FBQ0gsQ0FBQzs7TUFFSyxpQkFBYzs7QUFDbEIsaUJBQU8sSUFBSSxRQUFnQixDQUFNLFlBQVUsVUFBQSxNQUFBLFFBQUEsUUFBQSxhQUFBO0FBQ3pDLGtCQUFNLFNBQW1CLENBQUE7QUFFekIsaUJBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFpQjtBQUN4QyxxQkFBTyxLQUFLLEtBQUs7WUFDbkIsQ0FBQztBQUVELGlCQUFLLFFBQVEsR0FBRyxPQUFPLE1BQUs7QUFDMUIsc0JBQVEsT0FBTyxPQUFPLE1BQU0sQ0FBQztZQUMvQixDQUFDO1VBQ0gsQ0FBQyxDQUFBO1FBQ0gsQ0FBQzs7O0FBaENILElBQUFBLFNBQUEscUJBQUE7QUFtQ0EsYUFBZ0IsUUFBUSxZQUFrQjtBQUN4QyxZQUFNLFlBQWlCLElBQUksSUFBSSxVQUFVO0FBQ3pDLGFBQU8sVUFBVSxhQUFhO0lBQ2hDO0FBSEEsSUFBQUEsU0FBQSxVQUFBO0FBS0EsUUFBYSxhQUFiLE1BQXVCO01Ba0JyQixZQUNFRyxZQUNBLFVBQ0EsZ0JBQW1DO0FBaEI3QixhQUFBLGtCQUFrQjtBQUVsQixhQUFBLGtCQUFrQjtBQUNsQixhQUFBLDBCQUEwQjtBQUMxQixhQUFBLGdCQUFnQjtBQUNoQixhQUFBLGdCQUFnQjtBQUNoQixhQUFBLGNBQWM7QUFJZCxhQUFBLGFBQWE7QUFDYixhQUFBLFlBQVk7QUFPbEIsYUFBSyxZQUFZQTtBQUNqQixhQUFLLFdBQVcsWUFBWSxDQUFBO0FBQzVCLGFBQUssaUJBQWlCO0FBQ3RCLFlBQUksZ0JBQWdCO0FBQ2xCLGNBQUksZUFBZSxrQkFBa0IsTUFBTTtBQUN6QyxpQkFBSyxrQkFBa0IsZUFBZTs7QUFHeEMsZUFBSyxpQkFBaUIsZUFBZTtBQUVyQyxjQUFJLGVBQWUsa0JBQWtCLE1BQU07QUFDekMsaUJBQUssa0JBQWtCLGVBQWU7O0FBR3hDLGNBQUksZUFBZSwwQkFBMEIsTUFBTTtBQUNqRCxpQkFBSywwQkFBMEIsZUFBZTs7QUFHaEQsY0FBSSxlQUFlLGdCQUFnQixNQUFNO0FBQ3ZDLGlCQUFLLGdCQUFnQixLQUFLLElBQUksZUFBZSxjQUFjLENBQUM7O0FBRzlELGNBQUksZUFBZSxhQUFhLE1BQU07QUFDcEMsaUJBQUssYUFBYSxlQUFlOztBQUduQyxjQUFJLGVBQWUsZ0JBQWdCLE1BQU07QUFDdkMsaUJBQUssZ0JBQWdCLGVBQWU7O0FBR3RDLGNBQUksZUFBZSxjQUFjLE1BQU07QUFDckMsaUJBQUssY0FBYyxlQUFlOzs7TUFHeEM7TUFFTSxRQUNKLFlBQ0EsbUJBQTRDOztBQUU1QyxpQkFBTyxLQUFLLFFBQVEsV0FBVyxZQUFZLE1BQU0scUJBQXFCLENBQUEsQ0FBRTtRQUMxRSxDQUFDOztNQUVLLElBQ0osWUFDQSxtQkFBNEM7O0FBRTVDLGlCQUFPLEtBQUssUUFBUSxPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQSxDQUFFO1FBQ3RFLENBQUM7O01BRUssSUFDSixZQUNBLG1CQUE0Qzs7QUFFNUMsaUJBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWSxNQUFNLHFCQUFxQixDQUFBLENBQUU7UUFDekUsQ0FBQzs7TUFFSyxLQUNKLFlBQ0EsTUFDQSxtQkFBNEM7O0FBRTVDLGlCQUFPLEtBQUssUUFBUSxRQUFRLFlBQVksTUFBTSxxQkFBcUIsQ0FBQSxDQUFFO1FBQ3ZFLENBQUM7O01BRUssTUFDSixZQUNBLE1BQ0EsbUJBQTRDOztBQUU1QyxpQkFBTyxLQUFLLFFBQVEsU0FBUyxZQUFZLE1BQU0scUJBQXFCLENBQUEsQ0FBRTtRQUN4RSxDQUFDOztNQUVLLElBQ0osWUFDQSxNQUNBLG1CQUE0Qzs7QUFFNUMsaUJBQU8sS0FBSyxRQUFRLE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFBLENBQUU7UUFDdEUsQ0FBQzs7TUFFSyxLQUNKLFlBQ0EsbUJBQTRDOztBQUU1QyxpQkFBTyxLQUFLLFFBQVEsUUFBUSxZQUFZLE1BQU0scUJBQXFCLENBQUEsQ0FBRTtRQUN2RSxDQUFDOztNQUVLLFdBQ0osTUFDQSxZQUNBLFFBQ0EsbUJBQTRDOztBQUU1QyxpQkFBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLFFBQVEsaUJBQWlCO1FBQ2pFLENBQUM7Ozs7OztNQU1LLFFBQ0osWUFDQSxvQkFBOEMsQ0FBQSxHQUFFOztBQUVoRCw0QkFBa0IsUUFBUSxNQUFNLElBQUksS0FBSyw0QkFDdkMsbUJBQ0EsUUFBUSxRQUNSLFdBQVcsZUFBZTtBQUU1QixnQkFBTSxNQUEwQixNQUFNLEtBQUssSUFDekMsWUFDQSxpQkFBaUI7QUFFbkIsaUJBQU8sS0FBSyxpQkFBb0IsS0FBSyxLQUFLLGNBQWM7UUFDMUQsQ0FBQzs7TUFFSyxTQUNKLFlBQ0EsS0FDQSxvQkFBOEMsQ0FBQSxHQUFFOztBQUVoRCxnQkFBTSxPQUFlLEtBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUNoRCw0QkFBa0IsUUFBUSxNQUFNLElBQUksS0FBSyw0QkFDdkMsbUJBQ0EsUUFBUSxRQUNSLFdBQVcsZUFBZTtBQUU1Qiw0QkFBa0IsUUFBUSxXQUFXLElBQUksS0FBSyw0QkFDNUMsbUJBQ0EsUUFBUSxhQUNSLFdBQVcsZUFBZTtBQUU1QixnQkFBTSxNQUEwQixNQUFNLEtBQUssS0FDekMsWUFDQSxNQUNBLGlCQUFpQjtBQUVuQixpQkFBTyxLQUFLLGlCQUFvQixLQUFLLEtBQUssY0FBYztRQUMxRCxDQUFDOztNQUVLLFFBQ0osWUFDQSxLQUNBLG9CQUE4QyxDQUFBLEdBQUU7O0FBRWhELGdCQUFNLE9BQWUsS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ2hELDRCQUFrQixRQUFRLE1BQU0sSUFBSSxLQUFLLDRCQUN2QyxtQkFDQSxRQUFRLFFBQ1IsV0FBVyxlQUFlO0FBRTVCLDRCQUFrQixRQUFRLFdBQVcsSUFBSSxLQUFLLDRCQUM1QyxtQkFDQSxRQUFRLGFBQ1IsV0FBVyxlQUFlO0FBRTVCLGdCQUFNLE1BQTBCLE1BQU0sS0FBSyxJQUN6QyxZQUNBLE1BQ0EsaUJBQWlCO0FBRW5CLGlCQUFPLEtBQUssaUJBQW9CLEtBQUssS0FBSyxjQUFjO1FBQzFELENBQUM7O01BRUssVUFDSixZQUNBLEtBQ0Esb0JBQThDLENBQUEsR0FBRTs7QUFFaEQsZ0JBQU0sT0FBZSxLQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDaEQsNEJBQWtCLFFBQVEsTUFBTSxJQUFJLEtBQUssNEJBQ3ZDLG1CQUNBLFFBQVEsUUFDUixXQUFXLGVBQWU7QUFFNUIsNEJBQWtCLFFBQVEsV0FBVyxJQUFJLEtBQUssNEJBQzVDLG1CQUNBLFFBQVEsYUFDUixXQUFXLGVBQWU7QUFFNUIsZ0JBQU0sTUFBMEIsTUFBTSxLQUFLLE1BQ3pDLFlBQ0EsTUFDQSxpQkFBaUI7QUFFbkIsaUJBQU8sS0FBSyxpQkFBb0IsS0FBSyxLQUFLLGNBQWM7UUFDMUQsQ0FBQzs7Ozs7OztNQU9LLFFBQ0osTUFDQSxZQUNBLE1BQ0EsU0FBa0M7O0FBRWxDLGNBQUksS0FBSyxXQUFXO0FBQ2xCLGtCQUFNLElBQUksTUFBTSxtQ0FBbUM7O0FBR3JELGdCQUFNLFlBQVksSUFBSSxJQUFJLFVBQVU7QUFDcEMsY0FBSUMsUUFBd0IsS0FBSyxnQkFBZ0IsTUFBTSxXQUFXLE9BQU87QUFHekUsZ0JBQU0sV0FDSixLQUFLLGlCQUFpQixtQkFBbUIsU0FBUyxJQUFJLElBQ2xELEtBQUssY0FBYyxJQUNuQjtBQUNOLGNBQUksV0FBVztBQUVmLGNBQUk7QUFDSixhQUFHO0FBQ0QsdUJBQVcsTUFBTSxLQUFLLFdBQVdBLE9BQU0sSUFBSTtBQUczQyxnQkFDRSxZQUNBLFNBQVMsV0FDVCxTQUFTLFFBQVEsZUFBZSxVQUFVLGNBQzFDO0FBQ0Esa0JBQUk7QUFFSix5QkFBV0MsWUFBVyxLQUFLLFVBQVU7QUFDbkMsb0JBQUlBLFNBQVEsd0JBQXdCLFFBQVEsR0FBRztBQUM3QywwQ0FBd0JBO0FBQ3hCOzs7QUFJSixrQkFBSSx1QkFBdUI7QUFDekIsdUJBQU8sc0JBQXNCLHFCQUFxQixNQUFNRCxPQUFNLElBQUk7cUJBQzdEO0FBR0wsdUJBQU87OztBQUlYLGdCQUFJLHFCQUE2QixLQUFLO0FBQ3RDLG1CQUNFLFNBQVMsUUFBUSxjQUNqQixrQkFBa0IsU0FBUyxTQUFTLFFBQVEsVUFBVSxLQUN0RCxLQUFLLG1CQUNMLHFCQUFxQixHQUNyQjtBQUNBLG9CQUFNLGNBQ0osU0FBUyxRQUFRLFFBQVEsVUFBVTtBQUNyQyxrQkFBSSxDQUFDLGFBQWE7QUFFaEI7O0FBRUYsb0JBQU0sb0JBQW9CLElBQUksSUFBSSxXQUFXO0FBQzdDLGtCQUNFLFVBQVUsYUFBYSxZQUN2QixVQUFVLGFBQWEsa0JBQWtCLFlBQ3pDLENBQUMsS0FBSyx5QkFDTjtBQUNBLHNCQUFNLElBQUksTUFDUiw4S0FBOEs7O0FBTWxMLG9CQUFNLFNBQVMsU0FBUTtBQUd2QixrQkFBSSxrQkFBa0IsYUFBYSxVQUFVLFVBQVU7QUFDckQsMkJBQVcsVUFBVSxTQUFTO0FBRTVCLHNCQUFJLE9BQU8sWUFBVyxNQUFPLGlCQUFpQjtBQUM1QywyQkFBTyxRQUFRLE1BQU07Ozs7QUFNM0IsY0FBQUEsUUFBTyxLQUFLLGdCQUFnQixNQUFNLG1CQUFtQixPQUFPO0FBQzVELHlCQUFXLE1BQU0sS0FBSyxXQUFXQSxPQUFNLElBQUk7QUFDM0M7O0FBR0YsZ0JBQ0UsQ0FBQyxTQUFTLFFBQVEsY0FDbEIsQ0FBQyx1QkFBdUIsU0FBUyxTQUFTLFFBQVEsVUFBVSxHQUM1RDtBQUVBLHFCQUFPOztBQUdULHdCQUFZO0FBRVosZ0JBQUksV0FBVyxVQUFVO0FBQ3ZCLG9CQUFNLFNBQVMsU0FBUTtBQUN2QixvQkFBTSxLQUFLLDJCQUEyQixRQUFROzttQkFFekMsV0FBVztBQUVwQixpQkFBTztRQUNULENBQUM7Ozs7O01BS0QsVUFBTztBQUNMLFlBQUksS0FBSyxRQUFRO0FBQ2YsZUFBSyxPQUFPLFFBQU87O0FBR3JCLGFBQUssWUFBWTtNQUNuQjs7Ozs7O01BT00sV0FDSkEsT0FDQSxNQUEyQzs7QUFFM0MsaUJBQU8sSUFBSSxRQUE0QixDQUFDLFNBQVMsV0FBVTtBQUN6RCxxQkFBUyxrQkFBa0IsS0FBYSxLQUF3QjtBQUM5RCxrQkFBSSxLQUFLO0FBQ1AsdUJBQU8sR0FBRzt5QkFDRCxDQUFDLEtBQUs7QUFFZix1QkFBTyxJQUFJLE1BQU0sZUFBZSxDQUFDO3FCQUM1QjtBQUNMLHdCQUFRLEdBQUc7O1lBRWY7QUFFQSxpQkFBSyx1QkFBdUJBLE9BQU0sTUFBTSxpQkFBaUI7VUFDM0QsQ0FBQztRQUNILENBQUM7Ozs7Ozs7O01BUUQsdUJBQ0VBLE9BQ0EsTUFDQSxVQUF5RDtBQUV6RCxZQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGNBQUksQ0FBQ0EsTUFBSyxRQUFRLFNBQVM7QUFDekIsWUFBQUEsTUFBSyxRQUFRLFVBQVUsQ0FBQTs7QUFFekIsVUFBQUEsTUFBSyxRQUFRLFFBQVEsZ0JBQWdCLElBQUksT0FBTyxXQUFXLE1BQU0sTUFBTTs7QUFHekUsWUFBSSxpQkFBaUI7QUFDckIsaUJBQVMsYUFBYSxLQUFhLEtBQXdCO0FBQ3pELGNBQUksQ0FBQyxnQkFBZ0I7QUFDbkIsNkJBQWlCO0FBQ2pCLHFCQUFTLEtBQUssR0FBRzs7UUFFckI7QUFFQSxjQUFNLE1BQTBCQSxNQUFLLFdBQVcsUUFDOUNBLE1BQUssU0FDTCxDQUFDLFFBQTZCO0FBQzVCLGdCQUFNLE1BQTBCLElBQUksbUJBQW1CLEdBQUc7QUFDMUQsdUJBQWEsUUFBVyxHQUFHO1FBQzdCLENBQUM7QUFHSCxZQUFJO0FBQ0osWUFBSSxHQUFHLFVBQVUsVUFBTztBQUN0QixtQkFBUztRQUNYLENBQUM7QUFHRCxZQUFJLFdBQVcsS0FBSyxrQkFBa0IsSUFBSSxLQUFPLE1BQUs7QUFDcEQsY0FBSSxRQUFRO0FBQ1YsbUJBQU8sSUFBRzs7QUFFWix1QkFBYSxJQUFJLE1BQU0sb0JBQW9CQSxNQUFLLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDakUsQ0FBQztBQUVELFlBQUksR0FBRyxTQUFTLFNBQVUsS0FBRztBQUczQix1QkFBYSxHQUFHO1FBQ2xCLENBQUM7QUFFRCxZQUFJLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDcEMsY0FBSSxNQUFNLE1BQU0sTUFBTTs7QUFHeEIsWUFBSSxRQUFRLE9BQU8sU0FBUyxVQUFVO0FBQ3BDLGVBQUssR0FBRyxTQUFTLFdBQUE7QUFDZixnQkFBSSxJQUFHO1VBQ1QsQ0FBQztBQUVELGVBQUssS0FBSyxHQUFHO2VBQ1I7QUFDTCxjQUFJLElBQUc7O01BRVg7Ozs7OztNQU9BLFNBQVMsV0FBaUI7QUFDeEIsY0FBTSxZQUFZLElBQUksSUFBSSxTQUFTO0FBQ25DLGVBQU8sS0FBSyxVQUFVLFNBQVM7TUFDakM7TUFFQSxtQkFBbUIsV0FBaUI7QUFDbEMsY0FBTSxZQUFZLElBQUksSUFBSSxTQUFTO0FBQ25DLGNBQU0sV0FBVyxHQUFHLFlBQVksU0FBUztBQUN6QyxjQUFNLFdBQVcsWUFBWSxTQUFTO0FBQ3RDLFlBQUksQ0FBQyxVQUFVO0FBQ2I7O0FBR0YsZUFBTyxLQUFLLHlCQUF5QixXQUFXLFFBQVE7TUFDMUQ7TUFFUSxnQkFDTixRQUNBLFlBQ0EsU0FBa0M7QUFFbEMsY0FBTUEsUUFBeUMsQ0FBQTtBQUUvQyxRQUFBQSxNQUFLLFlBQVk7QUFDakIsY0FBTSxXQUFvQkEsTUFBSyxVQUFVLGFBQWE7QUFDdEQsUUFBQUEsTUFBSyxhQUFhLFdBQVcsUUFBUTtBQUNyQyxjQUFNLGNBQXNCLFdBQVcsTUFBTTtBQUU3QyxRQUFBQSxNQUFLLFVBQStCLENBQUE7QUFDcEMsUUFBQUEsTUFBSyxRQUFRLE9BQU9BLE1BQUssVUFBVTtBQUNuQyxRQUFBQSxNQUFLLFFBQVEsT0FBT0EsTUFBSyxVQUFVLE9BQy9CLFNBQVNBLE1BQUssVUFBVSxJQUFJLElBQzVCO0FBQ0osUUFBQUEsTUFBSyxRQUFRLFFBQ1ZBLE1BQUssVUFBVSxZQUFZLE9BQU9BLE1BQUssVUFBVSxVQUFVO0FBQzlELFFBQUFBLE1BQUssUUFBUSxTQUFTO0FBQ3RCLFFBQUFBLE1BQUssUUFBUSxVQUFVLEtBQUssY0FBYyxPQUFPO0FBQ2pELFlBQUksS0FBSyxhQUFhLE1BQU07QUFDMUIsVUFBQUEsTUFBSyxRQUFRLFFBQVEsWUFBWSxJQUFJLEtBQUs7O0FBRzVDLFFBQUFBLE1BQUssUUFBUSxRQUFRLEtBQUssVUFBVUEsTUFBSyxTQUFTO0FBR2xELFlBQUksS0FBSyxVQUFVO0FBQ2pCLHFCQUFXQyxZQUFXLEtBQUssVUFBVTtBQUNuQyxZQUFBQSxTQUFRLGVBQWVELE1BQUssT0FBTzs7O0FBSXZDLGVBQU9BO01BQ1Q7TUFFUSxjQUNOLFNBQWtDO0FBRWxDLFlBQUksS0FBSyxrQkFBa0IsS0FBSyxlQUFlLFNBQVM7QUFDdEQsaUJBQU8sT0FBTyxPQUNaLENBQUEsR0FDQUUsZUFBYyxLQUFLLGVBQWUsT0FBTyxHQUN6Q0EsZUFBYyxXQUFXLENBQUEsQ0FBRSxDQUFDOztBQUloQyxlQUFPQSxlQUFjLFdBQVcsQ0FBQSxDQUFFO01BQ3BDO01BRVEsNEJBQ04sbUJBQ0EsUUFDQSxVQUFnQjtBQUVoQixZQUFJO0FBQ0osWUFBSSxLQUFLLGtCQUFrQixLQUFLLGVBQWUsU0FBUztBQUN0RCx5QkFBZUEsZUFBYyxLQUFLLGVBQWUsT0FBTyxFQUFFLE1BQU07O0FBRWxFLGVBQU8sa0JBQWtCLE1BQU0sS0FBSyxnQkFBZ0I7TUFDdEQ7TUFFUSxVQUFVLFdBQWM7QUFDOUIsWUFBSTtBQUNKLGNBQU0sV0FBVyxHQUFHLFlBQVksU0FBUztBQUN6QyxjQUFNLFdBQVcsWUFBWSxTQUFTO0FBRXRDLFlBQUksS0FBSyxjQUFjLFVBQVU7QUFDL0Isa0JBQVEsS0FBSzs7QUFHZixZQUFJLENBQUMsVUFBVTtBQUNiLGtCQUFRLEtBQUs7O0FBSWYsWUFBSSxPQUFPO0FBQ1QsaUJBQU87O0FBR1QsY0FBTSxXQUFXLFVBQVUsYUFBYTtBQUN4QyxZQUFJLGFBQWE7QUFDakIsWUFBSSxLQUFLLGdCQUFnQjtBQUN2Qix1QkFBYSxLQUFLLGVBQWUsY0FBYyxLQUFLLFlBQVk7O0FBSWxFLFlBQUksWUFBWSxTQUFTLFVBQVU7QUFDakMsZ0JBQU0sZUFBZTtZQUNuQjtZQUNBLFdBQVcsS0FBSztZQUNoQixPQUFLLE9BQUEsT0FBQSxPQUFBLE9BQUEsQ0FBQSxJQUNFLFNBQVMsWUFBWSxTQUFTLGFBQWE7Y0FDOUMsV0FBVyxHQUFHLFNBQVMsUUFBUSxJQUFJLFNBQVMsUUFBUTthQUNwRCxHQUFBLEVBQ0YsTUFBTSxTQUFTLFVBQ2YsTUFBTSxTQUFTLEtBQUksQ0FBQTs7QUFJdkIsY0FBSTtBQUNKLGdCQUFNLFlBQVksU0FBUyxhQUFhO0FBQ3hDLGNBQUksVUFBVTtBQUNaLDBCQUFjLFlBQVksT0FBTyxpQkFBaUIsT0FBTztpQkFDcEQ7QUFDTCwwQkFBYyxZQUFZLE9BQU8sZ0JBQWdCLE9BQU87O0FBRzFELGtCQUFRLFlBQVksWUFBWTtBQUNoQyxlQUFLLGNBQWM7O0FBSXJCLFlBQUksQ0FBQyxPQUFPO0FBQ1YsZ0JBQU0sVUFBVSxFQUFDLFdBQVcsS0FBSyxZQUFZLFdBQVU7QUFDdkQsa0JBQVEsV0FBVyxJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksSUFBSSxLQUFLLE1BQU0sT0FBTztBQUNwRSxlQUFLLFNBQVM7O0FBR2hCLFlBQUksWUFBWSxLQUFLLGlCQUFpQjtBQUlwQyxnQkFBTSxVQUFVLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQSxHQUFJO1lBQ2pELG9CQUFvQjtXQUNyQjs7QUFHSCxlQUFPO01BQ1Q7TUFFUSx5QkFBeUIsV0FBZ0IsVUFBYTtBQUM1RCxZQUFJO0FBRUosWUFBSSxLQUFLLFlBQVk7QUFDbkIsdUJBQWEsS0FBSzs7QUFJcEIsWUFBSSxZQUFZO0FBQ2QsaUJBQU87O0FBR1QsY0FBTSxXQUFXLFVBQVUsYUFBYTtBQUN4QyxxQkFBYSxJQUFJLFNBQUEsV0FBVSxPQUFBLE9BQUEsRUFDekIsS0FBSyxTQUFTLE1BQ2QsWUFBWSxDQUFDLEtBQUssYUFBYSxJQUFJLEVBQUMsSUFDL0IsU0FBUyxZQUFZLFNBQVMsYUFBYTtVQUM5QyxPQUFPLFNBQVMsT0FBTyxLQUNyQixHQUFHLFNBQVMsUUFBUSxJQUFJLFNBQVMsUUFBUSxFQUFFLEVBQzNDLFNBQVMsUUFBUSxDQUFDO1NBQ3BCLENBQUE7QUFFSixhQUFLLHdCQUF3QjtBQUU3QixZQUFJLFlBQVksS0FBSyxpQkFBaUI7QUFJcEMscUJBQVcsVUFBVSxPQUFPLE9BQU8sV0FBVyxRQUFRLGNBQWMsQ0FBQSxHQUFJO1lBQ3RFLG9CQUFvQjtXQUNyQjs7QUFHSCxlQUFPO01BQ1Q7TUFFYywyQkFBMkIsYUFBbUI7O0FBQzFELHdCQUFjLEtBQUssSUFBSSwyQkFBMkIsV0FBVztBQUM3RCxnQkFBTSxLQUFhLDhCQUE4QixLQUFLLElBQUksR0FBRyxXQUFXO0FBQ3hFLGlCQUFPLElBQUksUUFBUSxhQUFXLFdBQVcsTUFBTSxRQUFPLEdBQUksRUFBRSxDQUFDO1FBQy9ELENBQUM7O01BRWEsaUJBQ1osS0FDQSxTQUE0Qjs7QUFFNUIsaUJBQU8sSUFBSSxRQUE4QixDQUFPLFNBQVMsV0FBVSxVQUFBLE1BQUEsUUFBQSxRQUFBLGFBQUE7QUFDakUsa0JBQU0sYUFBYSxJQUFJLFFBQVEsY0FBYztBQUU3QyxrQkFBTSxXQUFpQztjQUNyQztjQUNBLFFBQVE7Y0FDUixTQUFTLENBQUE7O0FBSVgsZ0JBQUksZUFBZSxVQUFVLFVBQVU7QUFDckMsc0JBQVEsUUFBUTs7QUFLbEIscUJBQVMscUJBQXFCLEtBQVUsT0FBVTtBQUNoRCxrQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixzQkFBTSxJQUFJLElBQUksS0FBSyxLQUFLO0FBQ3hCLG9CQUFJLENBQUMsTUFBTSxFQUFFLFFBQU8sQ0FBRSxHQUFHO0FBQ3ZCLHlCQUFPOzs7QUFJWCxxQkFBTztZQUNUO0FBRUEsZ0JBQUk7QUFDSixnQkFBSTtBQUVKLGdCQUFJO0FBQ0YseUJBQVcsTUFBTSxJQUFJLFNBQVE7QUFDN0Isa0JBQUksWUFBWSxTQUFTLFNBQVMsR0FBRztBQUNuQyxvQkFBSSxXQUFXLFFBQVEsa0JBQWtCO0FBQ3ZDLHdCQUFNLEtBQUssTUFBTSxVQUFVLG9CQUFvQjt1QkFDMUM7QUFDTCx3QkFBTSxLQUFLLE1BQU0sUUFBUTs7QUFHM0IseUJBQVMsU0FBUzs7QUFHcEIsdUJBQVMsVUFBVSxJQUFJLFFBQVE7cUJBQ3hCLEtBQUs7O0FBS2QsZ0JBQUksYUFBYSxLQUFLO0FBQ3BCLGtCQUFJO0FBR0osa0JBQUksT0FBTyxJQUFJLFNBQVM7QUFDdEIsc0JBQU0sSUFBSTt5QkFDRCxZQUFZLFNBQVMsU0FBUyxHQUFHO0FBRTFDLHNCQUFNO3FCQUNEO0FBQ0wsc0JBQU0sb0JBQW9CLFVBQVU7O0FBR3RDLG9CQUFNLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxVQUFVO0FBQy9DLGtCQUFJLFNBQVMsU0FBUztBQUV0QixxQkFBTyxHQUFHO21CQUNMO0FBQ0wsc0JBQVEsUUFBUTs7VUFFcEIsQ0FBQyxDQUFBO1FBQ0gsQ0FBQzs7O0FBNXJCSCxJQUFBTixTQUFBLGFBQUE7QUErckJBLFFBQU1NLGlCQUFnQixDQUFDLFFBQ3JCLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQVEsT0FBUSxFQUFFLEVBQUUsWUFBVyxDQUFFLElBQUksSUFBSSxDQUFDLEdBQUksSUFBSSxDQUFBLENBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxekIvRSxRQUFhLHlCQUFiLE1BQW1DO01BSWpDLFlBQVksVUFBa0IsVUFBZ0I7QUFDNUMsYUFBSyxXQUFXO0FBQ2hCLGFBQUssV0FBVztNQUNsQjtNQUVBLGVBQWUsU0FBNEI7QUFDekMsWUFBSSxDQUFDLFFBQVEsU0FBUztBQUNwQixnQkFBTSxNQUFNLDRCQUE0Qjs7QUFFMUMsZ0JBQVEsUUFBUSxlQUFlLElBQUksU0FBUyxPQUFPLEtBQ2pELEdBQUcsS0FBSyxRQUFRLElBQUksS0FBSyxRQUFRLEVBQUUsRUFDbkMsU0FBUyxRQUFRLENBQUM7TUFDdEI7O01BR0EsMEJBQXVCO0FBQ3JCLGVBQU87TUFDVDtNQUVNLHVCQUFvQjs7QUFDeEIsZ0JBQU0sSUFBSSxNQUFNLGlCQUFpQjtRQUNuQyxDQUFDOzs7QUF6QkgsSUFBQUMsU0FBQSx5QkFBQTtBQTRCQSxRQUFhLDBCQUFiLE1BQW9DO01BR2xDLFlBQVksT0FBYTtBQUN2QixhQUFLLFFBQVE7TUFDZjs7O01BSUEsZUFBZSxTQUE0QjtBQUN6QyxZQUFJLENBQUMsUUFBUSxTQUFTO0FBQ3BCLGdCQUFNLE1BQU0sNEJBQTRCOztBQUUxQyxnQkFBUSxRQUFRLGVBQWUsSUFBSSxVQUFVLEtBQUssS0FBSztNQUN6RDs7TUFHQSwwQkFBdUI7QUFDckIsZUFBTztNQUNUO01BRU0sdUJBQW9COztBQUN4QixnQkFBTSxJQUFJLE1BQU0saUJBQWlCO1FBQ25DLENBQUM7OztBQXZCSCxJQUFBQSxTQUFBLDBCQUFBO0FBMEJBLFFBQWEsdUNBQWIsTUFBaUQ7TUFLL0MsWUFBWSxPQUFhO0FBQ3ZCLGFBQUssUUFBUTtNQUNmOzs7TUFJQSxlQUFlLFNBQTRCO0FBQ3pDLFlBQUksQ0FBQyxRQUFRLFNBQVM7QUFDcEIsZ0JBQU0sTUFBTSw0QkFBNEI7O0FBRTFDLGdCQUFRLFFBQVEsZUFBZSxJQUFJLFNBQVMsT0FBTyxLQUNqRCxPQUFPLEtBQUssS0FBSyxFQUFFLEVBQ25CLFNBQVMsUUFBUSxDQUFDO01BQ3RCOztNQUdBLDBCQUF1QjtBQUNyQixlQUFPO01BQ1Q7TUFFTSx1QkFBb0I7O0FBQ3hCLGdCQUFNLElBQUksTUFBTSxpQkFBaUI7UUFDbkMsQ0FBQzs7O0FBM0JILElBQUFBLFNBQUEsdUNBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2REEsUUFBQSxnQkFBQTtBQUNBLFFBQUEsU0FBQTtBQUNBLFFBQUEsU0FBQTtBQUtBLFFBQWEsYUFBYixNQUFhLFlBQVU7TUFDYixPQUFPLGlCQUNiLGFBQWEsTUFDYixXQUFXLElBQUU7QUFFYixjQUFNLGlCQUFpQztVQUNyQyxjQUFjO1VBQ2QsWUFBWTs7QUFHZCxlQUFPLElBQUksY0FBQSxXQUNULHVCQUNBLENBQUMsSUFBSSxPQUFBLHdCQUF3QixZQUFXLGdCQUFlLENBQUUsQ0FBQyxHQUMxRCxjQUFjO01BRWxCO01BRVEsT0FBTyxrQkFBZTtBQUM1QixjQUFNLFFBQVEsUUFBUSxJQUFJLGdDQUFnQztBQUMxRCxZQUFJLENBQUMsT0FBTztBQUNWLGdCQUFNLElBQUksTUFDUiwyREFBMkQ7O0FBRy9ELGVBQU87TUFDVDtNQUVRLE9BQU8sZ0JBQWE7QUFDMUIsY0FBTSxhQUFhLFFBQVEsSUFBSSw4QkFBOEI7QUFDN0QsWUFBSSxDQUFDLFlBQVk7QUFDZixnQkFBTSxJQUFJLE1BQU0seURBQXlEOztBQUUzRSxlQUFPO01BQ1Q7TUFFUSxPQUFhLFFBQVEsY0FBb0I7OztBQUMvQyxnQkFBTSxhQUFhLFlBQVcsaUJBQWdCO0FBRTlDLGdCQUFNLE1BQU0sTUFBTSxXQUNmLFFBQXVCLFlBQVksRUFDbkMsTUFBTSxXQUFRO0FBQ2Isa0JBQU0sSUFBSSxNQUNSOzt1QkFDYSxNQUFNLFVBQVU7O3lCQUNkLE1BQU0sT0FBTyxFQUFFO1VBRWxDLENBQUM7QUFFSCxnQkFBTSxZQUFXLEtBQUEsSUFBSSxZQUFNLFFBQUEsT0FBQSxTQUFBLFNBQUEsR0FBRTtBQUM3QixjQUFJLENBQUMsVUFBVTtBQUNiLGtCQUFNLElBQUksTUFBTSwrQ0FBK0M7O0FBRWpFLGlCQUFPOzs7TUFHVCxPQUFhLFdBQVcsVUFBaUI7O0FBQ3ZDLGNBQUk7QUFFRixnQkFBSSxlQUF1QixZQUFXLGNBQWE7QUFDbkQsZ0JBQUksVUFBVTtBQUNaLG9CQUFNLGtCQUFrQixtQkFBbUIsUUFBUTtBQUNuRCw2QkFBZSxHQUFHLFlBQVksYUFBYSxlQUFlOztBQUc1RCxhQUFBLEdBQUEsT0FBQSxPQUFNLG1CQUFtQixZQUFZLEVBQUU7QUFFdkMsa0JBQU0sV0FBVyxNQUFNLFlBQVcsUUFBUSxZQUFZO0FBQ3RELGFBQUEsR0FBQSxPQUFBLFdBQVUsUUFBUTtBQUNsQixtQkFBTzttQkFDQSxPQUFPO0FBQ2Qsa0JBQU0sSUFBSSxNQUFNLGtCQUFrQixNQUFNLE9BQU8sRUFBRTs7UUFFckQsQ0FBQzs7O0FBeEVILElBQUFDLFNBQUEsYUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBLFFBQUEsT0FBQSxRQUFBLElBQUE7QUFDQSxRQUFBLE9BQUEsUUFBQSxJQUFBO0FBQ0EsUUFBTSxFQUFDLFFBQVEsWUFBWSxXQUFBQyxXQUFTLElBQUksS0FBQTtBQUUzQixJQUFBQyxTQUFBLGtCQUFrQjtBQUNsQixJQUFBQSxTQUFBLG1CQUNYO0FBK0NGLFFBQU0sVUFBTixNQUFhO01BSVgsY0FBQTtBQUNFLGFBQUssVUFBVTtNQUNqQjs7Ozs7OztNQVFjLFdBQVE7O0FBQ3BCLGNBQUksS0FBSyxXQUFXO0FBQ2xCLG1CQUFPLEtBQUs7O0FBR2QsZ0JBQU0sY0FBYyxRQUFRLElBQUlBLFNBQUEsZUFBZTtBQUMvQyxjQUFJLENBQUMsYUFBYTtBQUNoQixrQkFBTSxJQUFJLE1BQ1IsNENBQTRDQSxTQUFBLGVBQWUsNkRBQTZEOztBQUk1SCxjQUFJO0FBQ0Ysa0JBQU0sT0FBTyxhQUFhLEtBQUEsVUFBVSxPQUFPLEtBQUEsVUFBVSxJQUFJO21CQUN6RCxJQUFNO0FBQ04sa0JBQU0sSUFBSSxNQUNSLG1DQUFtQyxXQUFXLDBEQUEwRDs7QUFJNUcsZUFBSyxZQUFZO0FBQ2pCLGlCQUFPLEtBQUs7UUFDZCxDQUFDOzs7Ozs7Ozs7OztNQVdPLEtBQ04sS0FDQSxTQUNBLFFBQXVDLENBQUEsR0FBRTtBQUV6QyxjQUFNLFlBQVksT0FBTyxRQUFRLEtBQUssRUFDbkMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQzFDLEtBQUssRUFBRTtBQUVWLFlBQUksQ0FBQyxTQUFTO0FBQ1osaUJBQU8sSUFBSSxHQUFHLEdBQUcsU0FBUzs7QUFHNUIsZUFBTyxJQUFJLEdBQUcsR0FBRyxTQUFTLElBQUksT0FBTyxLQUFLLEdBQUc7TUFDL0M7Ozs7Ozs7O01BU00sTUFBTSxTQUE2Qjs7QUFDdkMsZ0JBQU0sWUFBWSxDQUFDLEVBQUMsWUFBTyxRQUFQLFlBQU8sU0FBQSxTQUFQLFFBQVM7QUFDN0IsZ0JBQU0sV0FBVyxNQUFNLEtBQUssU0FBUTtBQUNwQyxnQkFBTSxZQUFZLFlBQVlELGFBQVk7QUFDMUMsZ0JBQU0sVUFBVSxVQUFVLEtBQUssU0FBUyxFQUFDLFVBQVUsT0FBTSxDQUFDO0FBQzFELGlCQUFPLEtBQUssWUFBVztRQUN6QixDQUFDOzs7Ozs7O01BT0ssUUFBSzs7QUFDVCxpQkFBTyxLQUFLLFlBQVcsRUFBRyxNQUFNLEVBQUMsV0FBVyxLQUFJLENBQUM7UUFDbkQsQ0FBQzs7Ozs7OztNQU9ELFlBQVM7QUFDUCxlQUFPLEtBQUs7TUFDZDs7Ozs7O01BT0EsZ0JBQWE7QUFDWCxlQUFPLEtBQUssUUFBUSxXQUFXO01BQ2pDOzs7Ozs7TUFPQSxjQUFXO0FBQ1QsYUFBSyxVQUFVO0FBQ2YsZUFBTztNQUNUOzs7Ozs7Ozs7TUFVQSxPQUFPLE1BQWMsU0FBUyxPQUFLO0FBQ2pDLGFBQUssV0FBVztBQUNoQixlQUFPLFNBQVMsS0FBSyxPQUFNLElBQUs7TUFDbEM7Ozs7OztNQU9BLFNBQU07QUFDSixlQUFPLEtBQUssT0FBTyxLQUFBLEdBQUc7TUFDeEI7Ozs7Ozs7OztNQVVBLGFBQWEsTUFBYyxNQUFhO0FBQ3RDLGNBQU0sUUFBSyxPQUFBLE9BQUEsQ0FBQSxHQUNMLFFBQVEsRUFBQyxLQUFJLENBQUU7QUFFckIsY0FBTSxVQUFVLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLO0FBQy9ELGVBQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxPQUFNO01BQ3BDOzs7Ozs7Ozs7TUFVQSxRQUFRLE9BQWlCLFVBQVUsT0FBSztBQUN0QyxjQUFNLE1BQU0sVUFBVSxPQUFPO0FBQzdCLGNBQU0sWUFBWSxNQUFNLElBQUksVUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFDbEUsY0FBTSxVQUFVLEtBQUssS0FBSyxLQUFLLFNBQVM7QUFDeEMsZUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU07TUFDcEM7Ozs7Ozs7O01BU0EsU0FBUyxNQUF1QjtBQUM5QixjQUFNLFlBQVksS0FDZixJQUFJLFNBQU07QUFDVCxnQkFBTSxRQUFRLElBQ1gsSUFBSSxVQUFPO0FBQ1YsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU8sS0FBSyxLQUFLLE1BQU0sSUFBSTs7QUFHN0Isa0JBQU0sRUFBQyxRQUFRLE1BQU0sU0FBUyxRQUFPLElBQUk7QUFDekMsa0JBQU0sTUFBTSxTQUFTLE9BQU87QUFDNUIsa0JBQU0sUUFBSyxPQUFBLE9BQUEsT0FBQSxPQUFBLENBQUEsR0FDTCxXQUFXLEVBQUMsUUFBTyxDQUFFLEdBQ3JCLFdBQVcsRUFBQyxRQUFPLENBQUU7QUFHM0IsbUJBQU8sS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLO1VBQ25DLENBQUMsRUFDQSxLQUFLLEVBQUU7QUFFVixpQkFBTyxLQUFLLEtBQUssTUFBTSxLQUFLO1FBQzlCLENBQUMsRUFDQSxLQUFLLEVBQUU7QUFFVixjQUFNLFVBQVUsS0FBSyxLQUFLLFNBQVMsU0FBUztBQUM1QyxlQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTTtNQUNwQzs7Ozs7Ozs7O01BVUEsV0FBVyxPQUFlLFNBQWU7QUFDdkMsY0FBTSxVQUFVLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssSUFBSSxPQUFPO0FBQzFFLGVBQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxPQUFNO01BQ3BDOzs7Ozs7Ozs7O01BV0EsU0FBUyxLQUFhLEtBQWEsU0FBNkI7QUFDOUQsY0FBTSxFQUFDLE9BQU8sT0FBTSxJQUFJLFdBQVcsQ0FBQTtBQUNuQyxjQUFNLFFBQUssT0FBQSxPQUFBLE9BQUEsT0FBQSxDQUFBLEdBQ0wsU0FBUyxFQUFDLE1BQUssQ0FBRSxHQUNqQixVQUFVLEVBQUMsT0FBTSxDQUFFO0FBR3pCLGNBQU0sVUFBVSxLQUFLLEtBQUssT0FBTyxNQUFJLE9BQUEsT0FBQSxFQUFHLEtBQUssSUFBRyxHQUFLLEtBQUssQ0FBQTtBQUMxRCxlQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTTtNQUNwQzs7Ozs7Ozs7O01BVUEsV0FBVyxNQUFjLE9BQXVCO0FBQzlDLGNBQU0sTUFBTSxJQUFJLEtBQUs7QUFDckIsY0FBTSxhQUFhLENBQUMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxTQUFTLEdBQUcsSUFDaEUsTUFDQTtBQUNKLGNBQU0sVUFBVSxLQUFLLEtBQUssWUFBWSxJQUFJO0FBQzFDLGVBQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxPQUFNO01BQ3BDOzs7Ozs7TUFPQSxlQUFZO0FBQ1YsY0FBTSxVQUFVLEtBQUssS0FBSyxNQUFNLElBQUk7QUFDcEMsZUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU07TUFDcEM7Ozs7OztNQU9BLFdBQVE7QUFDTixjQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUNwQyxlQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTTtNQUNwQzs7Ozs7Ozs7O01BVUEsU0FBUyxNQUFjLE1BQWE7QUFDbEMsY0FBTSxRQUFLLE9BQUEsT0FBQSxDQUFBLEdBQ0wsUUFBUSxFQUFDLEtBQUksQ0FBRTtBQUVyQixjQUFNLFVBQVUsS0FBSyxLQUFLLGNBQWMsTUFBTSxLQUFLO0FBQ25ELGVBQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxPQUFNO01BQ3BDOzs7Ozs7Ozs7TUFVQSxRQUFRLE1BQWMsTUFBWTtBQUNoQyxjQUFNLFVBQVUsS0FBSyxLQUFLLEtBQUssTUFBTSxFQUFDLEtBQUksQ0FBQztBQUMzQyxlQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTTtNQUNwQzs7QUFHRixRQUFNLFdBQVcsSUFBSSxRQUFPO0FBS2YsSUFBQUMsU0FBQSxrQkFBa0I7QUFDbEIsSUFBQUEsU0FBQSxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMVd2QixRQUFBQyxRQUFBLGFBQUEsUUFBQSxNQUFBLENBQUE7QUFTQSxhQUFnQixZQUFZLEtBQVc7QUFDckMsYUFBTyxJQUFJLFFBQVEsU0FBUyxHQUFHO0lBQ2pDO0FBRkEsSUFBQUMsU0FBQSxjQUFBO0FBV0EsYUFBZ0IsWUFBWSxLQUFXO0FBQ3JDLGFBQU8sSUFBSSxRQUFRLFFBQVEsSUFBSTtJQUNqQztBQUZBLElBQUFBLFNBQUEsY0FBQTtBQVlBLGFBQWdCLGVBQWUsS0FBVztBQUN4QyxhQUFPLElBQUksUUFBUSxVQUFVRCxNQUFLLEdBQUc7SUFDdkM7QUFGQSxJQUFBQyxTQUFBLGlCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaENBLFFBQUFDLE1BQUEsYUFBQSxRQUFBLElBQUEsQ0FBQTtBQUNBLFFBQUFDLFFBQUEsYUFBQSxRQUFBLE1BQUEsQ0FBQTtBQUVhLFNBY1RELElBQUcsVUFiTEUsU0FBQSxRQUFLLEdBQUEsT0FDTEEsU0FBQSxXQUFRLEdBQUEsVUFDUkEsU0FBQSxRQUFLLEdBQUEsT0FDTEEsU0FBQSxRQUFLLEdBQUEsT0FDTEEsU0FBQSxPQUFJLEdBQUEsTUFDSkEsU0FBQSxVQUFPLEdBQUEsU0FDUEEsU0FBQSxXQUFRLEdBQUEsVUFDUkEsU0FBQSxTQUFNLEdBQUEsUUFDTkEsU0FBQSxLQUFFLEdBQUEsSUFDRkEsU0FBQSxRQUFLLEdBQUEsT0FDTEEsU0FBQSxPQUFJLEdBQUEsTUFDSkEsU0FBQSxVQUFPLEdBQUEsU0FDUEEsU0FBQSxTQUFNLEdBQUE7QUFHSyxJQUFBQSxTQUFBLGFBQWEsUUFBUSxhQUFhO0FBRWxDLElBQUFBLFNBQUEsaUJBQWlCO0FBQ2pCLElBQUFBLFNBQUEsV0FBV0YsSUFBRyxVQUFVO0FBRXJDLGFBQXNCLE9BQU8sUUFBYzs7QUFDekMsWUFBSTtBQUNGLGdCQUFNRSxTQUFBLEtBQUssTUFBTTtpQkFDVixLQUFLO0FBQ1osY0FBSSxJQUFJLFNBQVMsVUFBVTtBQUN6QixtQkFBTzs7QUFHVCxnQkFBTTs7QUFHUixlQUFPO01BQ1QsQ0FBQzs7QUFaRCxJQUFBQSxTQUFBLFNBQUE7QUFjQSxhQUFzQixZQUNwQixRQUNBLFVBQVUsT0FBSzs7QUFFZixjQUFNLFFBQVEsVUFBVSxNQUFNQSxTQUFBLEtBQUssTUFBTSxJQUFJLE1BQU1BLFNBQUEsTUFBTSxNQUFNO0FBQy9ELGVBQU8sTUFBTSxZQUFXO01BQzFCLENBQUM7O0FBTkQsSUFBQUEsU0FBQSxjQUFBO0FBWUEsYUFBZ0IsU0FBUyxHQUFTO0FBQ2hDLFVBQUksb0JBQW9CLENBQUM7QUFDekIsVUFBSSxDQUFDLEdBQUc7QUFDTixjQUFNLElBQUksTUFBTSwwQ0FBMEM7O0FBRzVELFVBQUlBLFNBQUEsWUFBWTtBQUNkLGVBQ0UsRUFBRSxXQUFXLElBQUksS0FBSyxXQUFXLEtBQUssQ0FBQzs7QUFJM0MsYUFBTyxFQUFFLFdBQVcsR0FBRztJQUN6QjtBQWJBLElBQUFBLFNBQUEsV0FBQTtBQXFCQSxhQUFzQixxQkFDcEIsVUFDQSxZQUFvQjs7QUFFcEIsWUFBSSxRQUE4QjtBQUNsQyxZQUFJO0FBRUYsa0JBQVEsTUFBTUEsU0FBQSxLQUFLLFFBQVE7aUJBQ3BCLEtBQUs7QUFDWixjQUFJLElBQUksU0FBUyxVQUFVO0FBRXpCLG9CQUFRLElBQ04sdUVBQXVFLFFBQVEsTUFBTSxHQUFHLEVBQUU7OztBQUloRyxZQUFJLFNBQVMsTUFBTSxPQUFNLEdBQUk7QUFDM0IsY0FBSUEsU0FBQSxZQUFZO0FBRWQsa0JBQU0sV0FBV0QsTUFBSyxRQUFRLFFBQVEsRUFBRSxZQUFXO0FBQ25ELGdCQUFJLFdBQVcsS0FBSyxjQUFZLFNBQVMsWUFBVyxNQUFPLFFBQVEsR0FBRztBQUNwRSxxQkFBTzs7aUJBRUo7QUFDTCxnQkFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLHFCQUFPOzs7O0FBTWIsY0FBTSxtQkFBbUI7QUFDekIsbUJBQVcsYUFBYSxZQUFZO0FBQ2xDLHFCQUFXLG1CQUFtQjtBQUU5QixrQkFBUTtBQUNSLGNBQUk7QUFDRixvQkFBUSxNQUFNQyxTQUFBLEtBQUssUUFBUTttQkFDcEIsS0FBSztBQUNaLGdCQUFJLElBQUksU0FBUyxVQUFVO0FBRXpCLHNCQUFRLElBQ04sdUVBQXVFLFFBQVEsTUFBTSxHQUFHLEVBQUU7OztBQUtoRyxjQUFJLFNBQVMsTUFBTSxPQUFNLEdBQUk7QUFDM0IsZ0JBQUlBLFNBQUEsWUFBWTtBQUVkLGtCQUFJO0FBQ0Ysc0JBQU0sWUFBWUQsTUFBSyxRQUFRLFFBQVE7QUFDdkMsc0JBQU0sWUFBWUEsTUFBSyxTQUFTLFFBQVEsRUFBRSxZQUFXO0FBQ3JELDJCQUFXLGNBQWMsTUFBTUMsU0FBQSxRQUFRLFNBQVMsR0FBRztBQUNqRCxzQkFBSSxjQUFjLFdBQVcsWUFBVyxHQUFJO0FBQzFDLCtCQUFXRCxNQUFLLEtBQUssV0FBVyxVQUFVO0FBQzFDOzs7dUJBR0csS0FBSztBQUVaLHdCQUFRLElBQ04seUVBQXlFLFFBQVEsTUFBTSxHQUFHLEVBQUU7O0FBSWhHLHFCQUFPO21CQUNGO0FBQ0wsa0JBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQix1QkFBTzs7Ozs7QUFNZixlQUFPO01BQ1QsQ0FBQzs7QUE1RUQsSUFBQUMsU0FBQSx1QkFBQTtBQThFQSxhQUFTLG9CQUFvQixHQUFTO0FBQ3BDLFVBQUksS0FBSztBQUNULFVBQUlBLFNBQUEsWUFBWTtBQUVkLFlBQUksRUFBRSxRQUFRLE9BQU8sSUFBSTtBQUd6QixlQUFPLEVBQUUsUUFBUSxVQUFVLElBQUk7O0FBSWpDLGFBQU8sRUFBRSxRQUFRLFVBQVUsR0FBRztJQUNoQztBQUtBLGFBQVMsaUJBQWlCLE9BQWU7QUFDdkMsY0FDRyxNQUFNLE9BQU8sS0FBSyxNQUNqQixNQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sUUFBUSxRQUFRLE9BQU0sTUFDbkQsTUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLFFBQVEsUUFBUSxPQUFNO0lBRTFEO0FBR0EsYUFBZ0IsYUFBVTs7QUFDeEIsY0FBQUMsTUFBTyxRQUFRLElBQUksU0FBUyxPQUFDLFFBQUFBLFFBQUEsU0FBQUEsTUFBSTtJQUNuQztBQUZBLElBQUFELFNBQUEsYUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0tBLFFBQUEsV0FBQSxRQUFBLFFBQUE7QUFDQSxRQUFBRSxRQUFBLGFBQUEsUUFBQSxNQUFBLENBQUE7QUFDQSxRQUFBLFNBQUEsYUFBQSxpQkFBQTtBQThCQSxhQUFzQixHQUNwQixRQUNBLE1BQ0EsVUFBdUIsQ0FBQSxHQUFFOztBQUV6QixjQUFNLEVBQUMsT0FBTyxXQUFXLG9CQUFtQixJQUFJLGdCQUFnQixPQUFPO0FBRXZFLGNBQU0sWUFBWSxNQUFNLE9BQU8sT0FBTyxJQUFJLEtBQUssTUFBTSxPQUFPLEtBQUssSUFBSSxJQUFJO0FBRXpFLFlBQUksWUFBWSxTQUFTLE9BQU0sS0FBTSxDQUFDLE9BQU87QUFDM0M7O0FBSUYsY0FBTSxVQUNKLFlBQVksU0FBUyxZQUFXLEtBQU0sc0JBQ2xDQSxNQUFLLEtBQUssTUFBTUEsTUFBSyxTQUFTLE1BQU0sQ0FBQyxJQUNyQztBQUVOLFlBQUksRUFBRSxNQUFNLE9BQU8sT0FBTyxNQUFNLElBQUk7QUFDbEMsZ0JBQU0sSUFBSSxNQUFNLDhCQUE4QixNQUFNLEVBQUU7O0FBRXhELGNBQU0sYUFBYSxNQUFNLE9BQU8sS0FBSyxNQUFNO0FBRTNDLFlBQUksV0FBVyxZQUFXLEdBQUk7QUFDNUIsY0FBSSxDQUFDLFdBQVc7QUFDZCxrQkFBTSxJQUFJLE1BQ1IsbUJBQW1CLE1BQU0sNERBQTREO2lCQUVsRjtBQUNMLGtCQUFNLGVBQWUsUUFBUSxTQUFTLEdBQUcsS0FBSzs7ZUFFM0M7QUFDTCxjQUFJQSxNQUFLLFNBQVMsUUFBUSxPQUFPLE1BQU0sSUFBSTtBQUV6QyxrQkFBTSxJQUFJLE1BQU0sSUFBSSxPQUFPLFVBQVUsTUFBTSxxQkFBcUI7O0FBR2xFLGdCQUFNLFNBQVMsUUFBUSxTQUFTLEtBQUs7O01BRXpDLENBQUM7O0FBeENELElBQUFDLFNBQUEsS0FBQTtBQWlEQSxhQUFzQixHQUNwQixRQUNBLE1BQ0EsVUFBdUIsQ0FBQSxHQUFFOztBQUV6QixZQUFJLE1BQU0sT0FBTyxPQUFPLElBQUksR0FBRztBQUM3QixjQUFJLGFBQWE7QUFDakIsY0FBSSxNQUFNLE9BQU8sWUFBWSxJQUFJLEdBQUc7QUFFbEMsbUJBQU9ELE1BQUssS0FBSyxNQUFNQSxNQUFLLFNBQVMsTUFBTSxDQUFDO0FBQzVDLHlCQUFhLE1BQU0sT0FBTyxPQUFPLElBQUk7O0FBR3ZDLGNBQUksWUFBWTtBQUNkLGdCQUFJLFFBQVEsU0FBUyxRQUFRLFFBQVEsT0FBTztBQUMxQyxvQkFBTSxLQUFLLElBQUk7bUJBQ1Y7QUFDTCxvQkFBTSxJQUFJLE1BQU0sNEJBQTRCOzs7O0FBSWxELGNBQU0sT0FBT0EsTUFBSyxRQUFRLElBQUksQ0FBQztBQUMvQixjQUFNLE9BQU8sT0FBTyxRQUFRLElBQUk7TUFDbEMsQ0FBQzs7QUF2QkQsSUFBQUMsU0FBQSxLQUFBO0FBOEJBLGFBQXNCLEtBQUssV0FBaUI7O0FBQzFDLFlBQUksT0FBTyxZQUFZO0FBR3JCLGNBQUksVUFBVSxLQUFLLFNBQVMsR0FBRztBQUM3QixrQkFBTSxJQUFJLE1BQ1IsaUVBQWlFOzs7QUFJdkUsWUFBSTtBQUVGLGdCQUFNLE9BQU8sR0FBRyxXQUFXO1lBQ3pCLE9BQU87WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLFlBQVk7V0FDYjtpQkFDTSxLQUFLO0FBQ1osZ0JBQU0sSUFBSSxNQUFNLGlDQUFpQyxHQUFHLEVBQUU7O01BRTFELENBQUM7O0FBckJELElBQUFBLFNBQUEsT0FBQTtBQThCQSxhQUFzQixPQUFPLFFBQWM7O0FBQ3pDLGlCQUFBLEdBQUcsUUFBUSxrQ0FBa0M7QUFDN0MsY0FBTSxPQUFPLE1BQU0sUUFBUSxFQUFDLFdBQVcsS0FBSSxDQUFDO01BQzlDLENBQUM7O0FBSEQsSUFBQUEsU0FBQSxTQUFBO0FBYUEsYUFBc0IsTUFBTSxNQUFjLE9BQWU7O0FBQ3ZELFlBQUksQ0FBQyxNQUFNO0FBQ1QsZ0JBQU0sSUFBSSxNQUFNLDhCQUE4Qjs7QUFJaEQsWUFBSSxPQUFPO0FBQ1QsZ0JBQU0sU0FBaUIsTUFBTSxNQUFNLE1BQU0sS0FBSztBQUU5QyxjQUFJLENBQUMsUUFBUTtBQUNYLGdCQUFJLE9BQU8sWUFBWTtBQUNyQixvQkFBTSxJQUFJLE1BQ1IscUNBQXFDLElBQUksd01BQXdNO21CQUU5TztBQUNMLG9CQUFNLElBQUksTUFDUixxQ0FBcUMsSUFBSSxnTUFBZ007OztBQUsvTyxpQkFBTzs7QUFHVCxjQUFNLFVBQW9CLE1BQU0sV0FBVyxJQUFJO0FBRS9DLFlBQUksV0FBVyxRQUFRLFNBQVMsR0FBRztBQUNqQyxpQkFBTyxRQUFRLENBQUM7O0FBR2xCLGVBQU87TUFDVCxDQUFDOztBQS9CRCxJQUFBQSxTQUFBLFFBQUE7QUFzQ0EsYUFBc0IsV0FBVyxNQUFZOztBQUMzQyxZQUFJLENBQUMsTUFBTTtBQUNULGdCQUFNLElBQUksTUFBTSw4QkFBOEI7O0FBSWhELGNBQU0sYUFBdUIsQ0FBQTtBQUM3QixZQUFJLE9BQU8sY0FBYyxRQUFRLElBQUksU0FBUyxHQUFHO0FBQy9DLHFCQUFXLGFBQWEsUUFBUSxJQUFJLFNBQVMsRUFBRSxNQUFNRCxNQUFLLFNBQVMsR0FBRztBQUNwRSxnQkFBSSxXQUFXO0FBQ2IseUJBQVcsS0FBSyxTQUFTOzs7O0FBTS9CLFlBQUksT0FBTyxTQUFTLElBQUksR0FBRztBQUN6QixnQkFBTSxXQUFtQixNQUFNLE9BQU8scUJBQXFCLE1BQU0sVUFBVTtBQUUzRSxjQUFJLFVBQVU7QUFDWixtQkFBTyxDQUFDLFFBQVE7O0FBR2xCLGlCQUFPLENBQUE7O0FBSVQsWUFBSSxLQUFLLFNBQVNBLE1BQUssR0FBRyxHQUFHO0FBQzNCLGlCQUFPLENBQUE7O0FBU1QsY0FBTSxjQUF3QixDQUFBO0FBRTlCLFlBQUksUUFBUSxJQUFJLE1BQU07QUFDcEIscUJBQVcsS0FBSyxRQUFRLElBQUksS0FBSyxNQUFNQSxNQUFLLFNBQVMsR0FBRztBQUN0RCxnQkFBSSxHQUFHO0FBQ0wsMEJBQVksS0FBSyxDQUFDOzs7O0FBTXhCLGNBQU0sVUFBb0IsQ0FBQTtBQUUxQixtQkFBVyxhQUFhLGFBQWE7QUFDbkMsZ0JBQU0sV0FBVyxNQUFNLE9BQU8scUJBQzVCQSxNQUFLLEtBQUssV0FBVyxJQUFJLEdBQ3pCLFVBQVU7QUFFWixjQUFJLFVBQVU7QUFDWixvQkFBUSxLQUFLLFFBQVE7OztBQUl6QixlQUFPO01BQ1QsQ0FBQzs7QUE3REQsSUFBQUMsU0FBQSxhQUFBO0FBK0RBLGFBQVMsZ0JBQWdCLFNBQW9CO0FBQzNDLFlBQU0sUUFBUSxRQUFRLFNBQVMsT0FBTyxPQUFPLFFBQVE7QUFDckQsWUFBTSxZQUFZLFFBQVEsUUFBUSxTQUFTO0FBQzNDLFlBQU0sc0JBQ0osUUFBUSx1QkFBdUIsT0FDM0IsT0FDQSxRQUFRLFFBQVEsbUJBQW1CO0FBQ3pDLGFBQU8sRUFBQyxPQUFPLFdBQVcsb0JBQW1CO0lBQy9DO0FBRUEsYUFBZSxlQUNiLFdBQ0EsU0FDQSxjQUNBLE9BQWM7O0FBR2QsWUFBSSxnQkFBZ0I7QUFBSztBQUN6QjtBQUVBLGNBQU0sT0FBTyxPQUFPO0FBRXBCLGNBQU0sUUFBa0IsTUFBTSxPQUFPLFFBQVEsU0FBUztBQUV0RCxtQkFBVyxZQUFZLE9BQU87QUFDNUIsZ0JBQU0sVUFBVSxHQUFHLFNBQVMsSUFBSSxRQUFRO0FBQ3hDLGdCQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksUUFBUTtBQUN2QyxnQkFBTSxjQUFjLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFOUMsY0FBSSxZQUFZLFlBQVcsR0FBSTtBQUU3QixrQkFBTSxlQUFlLFNBQVMsVUFBVSxjQUFjLEtBQUs7aUJBQ3REO0FBQ0wsa0JBQU0sU0FBUyxTQUFTLFVBQVUsS0FBSzs7O0FBSzNDLGNBQU0sT0FBTyxNQUFNLFVBQVUsTUFBTSxPQUFPLEtBQUssU0FBUyxHQUFHLElBQUk7TUFDakUsQ0FBQzs7QUFHRCxhQUFlLFNBQ2IsU0FDQSxVQUNBLE9BQWM7O0FBRWQsYUFBSyxNQUFNLE9BQU8sTUFBTSxPQUFPLEdBQUcsZUFBYyxHQUFJO0FBRWxELGNBQUk7QUFDRixrQkFBTSxPQUFPLE1BQU0sUUFBUTtBQUMzQixrQkFBTSxPQUFPLE9BQU8sUUFBUTttQkFDckIsR0FBRztBQUVWLGdCQUFJLEVBQUUsU0FBUyxTQUFTO0FBQ3RCLG9CQUFNLE9BQU8sTUFBTSxVQUFVLE1BQU07QUFDbkMsb0JBQU0sT0FBTyxPQUFPLFFBQVE7OztBQU1oQyxnQkFBTSxjQUFzQixNQUFNLE9BQU8sU0FBUyxPQUFPO0FBQ3pELGdCQUFNLE9BQU8sUUFDWCxhQUNBLFVBQ0EsT0FBTyxhQUFhLGFBQWEsSUFBSTttQkFFOUIsRUFBRSxNQUFNLE9BQU8sT0FBTyxRQUFRLE1BQU0sT0FBTztBQUNwRCxnQkFBTSxPQUFPLFNBQVMsU0FBUyxRQUFROztNQUUzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdFVELFFBQUFDLE1BQUEsYUFBQSxRQUFBLElBQUEsQ0FBQTtBQUNBLFFBQUEsU0FBQSxhQUFBLFFBQUEsUUFBQSxDQUFBO0FBQ0EsUUFBQSxRQUFBLGFBQUEsUUFBQSxlQUFBLENBQUE7QUFDQSxRQUFBQyxRQUFBLGFBQUEsUUFBQSxNQUFBLENBQUE7QUFHQSxRQUFBLEtBQUEsYUFBQSxZQUFBO0FBQ0EsUUFBQSxTQUFBLGFBQUEsaUJBQUE7QUFDQSxRQUFBLFdBQUEsUUFBQSxRQUFBO0FBSUEsUUFBTSxhQUFhLFFBQVEsYUFBYTtBQUt4QyxRQUFhLGFBQWIsY0FBZ0MsT0FBTyxhQUFZO01BQ2pELFlBQVksVUFBa0IsTUFBaUIsU0FBd0I7QUFDckUsY0FBSztBQUVMLFlBQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQU0sSUFBSSxNQUFNLCtDQUErQzs7QUFHakUsYUFBSyxXQUFXO0FBQ2hCLGFBQUssT0FBTyxRQUFRLENBQUE7QUFDcEIsYUFBSyxVQUFVLFdBQVcsQ0FBQTtNQUM1QjtNQU1RLE9BQU8sU0FBZTtBQUM1QixZQUFJLEtBQUssUUFBUSxhQUFhLEtBQUssUUFBUSxVQUFVLE9BQU87QUFDMUQsZUFBSyxRQUFRLFVBQVUsTUFBTSxPQUFPOztNQUV4QztNQUVRLGtCQUNOLFNBQ0EsVUFBa0I7QUFFbEIsY0FBTSxXQUFXLEtBQUssa0JBQWlCO0FBQ3ZDLGNBQU0sT0FBTyxLQUFLLGNBQWMsT0FBTztBQUN2QyxZQUFJLE1BQU0sV0FBVyxLQUFLO0FBQzFCLFlBQUksWUFBWTtBQUVkLGNBQUksS0FBSyxXQUFVLEdBQUk7QUFDckIsbUJBQU87QUFDUCx1QkFBVyxLQUFLLE1BQU07QUFDcEIscUJBQU8sSUFBSSxDQUFDOztxQkFJUCxRQUFRLDBCQUEwQjtBQUN6QyxtQkFBTyxJQUFJLFFBQVE7QUFDbkIsdUJBQVcsS0FBSyxNQUFNO0FBQ3BCLHFCQUFPLElBQUksQ0FBQzs7aUJBSVg7QUFDSCxtQkFBTyxLQUFLLG9CQUFvQixRQUFRO0FBQ3hDLHVCQUFXLEtBQUssTUFBTTtBQUNwQixxQkFBTyxJQUFJLEtBQUssb0JBQW9CLENBQUMsQ0FBQzs7O2VBR3JDO0FBSUwsaUJBQU87QUFDUCxxQkFBVyxLQUFLLE1BQU07QUFDcEIsbUJBQU8sSUFBSSxDQUFDOzs7QUFJaEIsZUFBTztNQUNUO01BRVEsbUJBQ04sTUFDQSxXQUNBLFFBQThCO0FBRTlCLFlBQUk7QUFDRixjQUFJLElBQUksWUFBWSxLQUFLLFNBQVE7QUFDakMsY0FBSSxJQUFJLEVBQUUsUUFBUUQsSUFBRyxHQUFHO0FBRXhCLGlCQUFPLElBQUksSUFBSTtBQUNiLGtCQUFNLE9BQU8sRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUM3QixtQkFBTyxJQUFJO0FBR1gsZ0JBQUksRUFBRSxVQUFVLElBQUlBLElBQUcsSUFBSSxNQUFNO0FBQ2pDLGdCQUFJLEVBQUUsUUFBUUEsSUFBRyxHQUFHOztBQUd0QixpQkFBTztpQkFDQSxLQUFLO0FBRVosZUFBSyxPQUFPLDRDQUE0QyxHQUFHLEVBQUU7QUFFN0QsaUJBQU87O01BRVg7TUFFUSxvQkFBaUI7QUFDdkIsWUFBSSxZQUFZO0FBQ2QsY0FBSSxLQUFLLFdBQVUsR0FBSTtBQUNyQixtQkFBTyxRQUFRLElBQUksU0FBUyxLQUFLOzs7QUFJckMsZUFBTyxLQUFLO01BQ2Q7TUFFUSxjQUFjLFNBQXVCO0FBQzNDLFlBQUksWUFBWTtBQUNkLGNBQUksS0FBSyxXQUFVLEdBQUk7QUFDckIsZ0JBQUksVUFBVSxhQUFhLEtBQUssb0JBQW9CLEtBQUssUUFBUSxDQUFDO0FBQ2xFLHVCQUFXLEtBQUssS0FBSyxNQUFNO0FBQ3pCLHlCQUFXO0FBQ1gseUJBQVcsUUFBUSwyQkFDZixJQUNBLEtBQUssb0JBQW9CLENBQUM7O0FBR2hDLHVCQUFXO0FBQ1gsbUJBQU8sQ0FBQyxPQUFPOzs7QUFJbkIsZUFBTyxLQUFLO01BQ2Q7TUFFUSxVQUFVLEtBQWEsS0FBVztBQUN4QyxlQUFPLElBQUksU0FBUyxHQUFHO01BQ3pCO01BRVEsYUFBVTtBQUNoQixjQUFNLGdCQUF3QixLQUFLLFNBQVMsWUFBVztBQUN2RCxlQUNFLEtBQUssVUFBVSxlQUFlLE1BQU0sS0FDcEMsS0FBSyxVQUFVLGVBQWUsTUFBTTtNQUV4QztNQUVRLG9CQUFvQixLQUFXO0FBRXJDLFlBQUksQ0FBQyxLQUFLLFdBQVUsR0FBSTtBQUN0QixpQkFBTyxLQUFLLGVBQWUsR0FBRzs7QUFXaEMsWUFBSSxDQUFDLEtBQUs7QUFDUixpQkFBTzs7QUFJVCxjQUFNLGtCQUFrQjtVQUN0QjtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7QUFFRixZQUFJLGNBQWM7QUFDbEIsbUJBQVcsUUFBUSxLQUFLO0FBQ3RCLGNBQUksZ0JBQWdCLEtBQUssT0FBSyxNQUFNLElBQUksR0FBRztBQUN6QywwQkFBYztBQUNkOzs7QUFLSixZQUFJLENBQUMsYUFBYTtBQUNoQixpQkFBTzs7QUFrRFQsWUFBSSxVQUFVO0FBQ2QsWUFBSSxXQUFXO0FBQ2YsaUJBQVMsSUFBSSxJQUFJLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFFbkMscUJBQVcsSUFBSSxJQUFJLENBQUM7QUFDcEIsY0FBSSxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sTUFBTTtBQUNuQyx1QkFBVztxQkFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUs7QUFDN0IsdUJBQVc7QUFDWCx1QkFBVztpQkFDTjtBQUNMLHVCQUFXOzs7QUFJZixtQkFBVztBQUNYLGVBQU8sUUFDSixNQUFNLEVBQUUsRUFDUixRQUFPLEVBQ1AsS0FBSyxFQUFFO01BQ1o7TUFFUSxlQUFlLEtBQVc7QUE2QmhDLFlBQUksQ0FBQyxLQUFLO0FBRVIsaUJBQU87O0FBR1QsWUFBSSxDQUFDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBSSxLQUFLLENBQUMsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUVuRSxpQkFBTzs7QUFHVCxZQUFJLENBQUMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksU0FBUyxJQUFJLEdBQUc7QUFHN0MsaUJBQU8sSUFBSSxHQUFHOztBQW1CaEIsWUFBSSxVQUFVO0FBQ2QsWUFBSSxXQUFXO0FBQ2YsaUJBQVMsSUFBSSxJQUFJLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFFbkMscUJBQVcsSUFBSSxJQUFJLENBQUM7QUFDcEIsY0FBSSxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sTUFBTTtBQUNuQyx1QkFBVztxQkFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUs7QUFDN0IsdUJBQVc7QUFDWCx1QkFBVztpQkFDTjtBQUNMLHVCQUFXOzs7QUFJZixtQkFBVztBQUNYLGVBQU8sUUFDSixNQUFNLEVBQUUsRUFDUixRQUFPLEVBQ1AsS0FBSyxFQUFFO01BQ1o7TUFFUSxrQkFBa0IsU0FBd0I7QUFDaEQsa0JBQVUsV0FBMkIsQ0FBQTtBQUNyQyxjQUFNLFNBQXlDO1VBQzdDLEtBQUssUUFBUSxPQUFPLFFBQVEsSUFBRztVQUMvQixLQUFLLFFBQVEsT0FBTyxRQUFRO1VBQzVCLFFBQVEsUUFBUSxVQUFVO1VBQzFCLDBCQUEwQixRQUFRLDRCQUE0QjtVQUM5RCxjQUFjLFFBQVEsZ0JBQWdCO1VBQ3RDLGtCQUFrQixRQUFRLG9CQUFvQjtVQUM5QyxPQUFPLFFBQVEsU0FBUzs7QUFFMUIsZUFBTyxZQUFZLFFBQVEsYUFBOEIsUUFBUTtBQUNqRSxlQUFPLFlBQVksUUFBUSxhQUE4QixRQUFRO0FBQ2pFLGVBQU87TUFDVDtNQUVRLGlCQUNOLFNBQ0EsVUFBZ0I7QUFFaEIsa0JBQVUsV0FBMkIsQ0FBQTtBQUNyQyxjQUFNLFNBQTZCLENBQUE7QUFDbkMsZUFBTyxNQUFNLFFBQVE7QUFDckIsZUFBTyxNQUFNLFFBQVE7QUFDckIsZUFBTywwQkFBMEIsSUFDL0IsUUFBUSw0QkFBNEIsS0FBSyxXQUFVO0FBQ3JELFlBQUksUUFBUSwwQkFBMEI7QUFDcEMsaUJBQU8sUUFBUSxJQUFJLFFBQVE7O0FBRTdCLGVBQU87TUFDVDs7Ozs7Ozs7OztNQVdNLE9BQUk7O0FBRVIsY0FDRSxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsTUFDN0IsS0FBSyxTQUFTLFNBQVMsR0FBRyxLQUN4QixjQUFjLEtBQUssU0FBUyxTQUFTLElBQUksSUFDNUM7QUFFQSxpQkFBSyxXQUFXQyxNQUFLLFFBQ25CLFFBQVEsSUFBRyxHQUNYLEtBQUssUUFBUSxPQUFPLFFBQVEsSUFBRyxHQUMvQixLQUFLLFFBQVE7O0FBTWpCLGVBQUssV0FBVyxNQUFNLEdBQUcsTUFBTSxLQUFLLFVBQVUsSUFBSTtBQUVsRCxpQkFBTyxJQUFJLFFBQWdCLENBQU8sU0FBUyxXQUFVLFVBQUEsTUFBQSxRQUFBLFFBQUEsYUFBQTtBQUNuRCxpQkFBSyxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUU7QUFDekMsaUJBQUssT0FBTyxZQUFZO0FBQ3hCLHVCQUFXLE9BQU8sS0FBSyxNQUFNO0FBQzNCLG1CQUFLLE9BQU8sTUFBTSxHQUFHLEVBQUU7O0FBR3pCLGtCQUFNLGlCQUFpQixLQUFLLGtCQUFrQixLQUFLLE9BQU87QUFDMUQsZ0JBQUksQ0FBQyxlQUFlLFVBQVUsZUFBZSxXQUFXO0FBQ3RELDZCQUFlLFVBQVUsTUFDdkIsS0FBSyxrQkFBa0IsY0FBYyxJQUFJRCxJQUFHLEdBQUc7O0FBSW5ELGtCQUFNLFFBQVEsSUFBSSxVQUFVLGdCQUFnQixLQUFLLFFBQVE7QUFDekQsa0JBQU0sR0FBRyxTQUFTLENBQUMsWUFBbUI7QUFDcEMsbUJBQUssT0FBTyxPQUFPO1lBQ3JCLENBQUM7QUFFRCxnQkFBSSxLQUFLLFFBQVEsT0FBTyxFQUFFLE1BQU0sT0FBTyxPQUFPLEtBQUssUUFBUSxHQUFHLElBQUk7QUFDaEUscUJBQU8sT0FBTyxJQUFJLE1BQU0sWUFBWSxLQUFLLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQzs7QUFHekUsa0JBQU0sV0FBVyxLQUFLLGtCQUFpQjtBQUN2QyxrQkFBTSxLQUFLLE1BQU0sTUFDZixVQUNBLEtBQUssY0FBYyxjQUFjLEdBQ2pDLEtBQUssaUJBQWlCLEtBQUssU0FBUyxRQUFRLENBQUM7QUFHL0MsZ0JBQUksWUFBWTtBQUNoQixnQkFBSSxHQUFHLFFBQVE7QUFDYixpQkFBRyxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWdCO0FBQ3BDLG9CQUFJLEtBQUssUUFBUSxhQUFhLEtBQUssUUFBUSxVQUFVLFFBQVE7QUFDM0QsdUJBQUssUUFBUSxVQUFVLE9BQU8sSUFBSTs7QUFHcEMsb0JBQUksQ0FBQyxlQUFlLFVBQVUsZUFBZSxXQUFXO0FBQ3RELGlDQUFlLFVBQVUsTUFBTSxJQUFJOztBQUdyQyw0QkFBWSxLQUFLLG1CQUNmLE1BQ0EsV0FDQSxDQUFDLFNBQWdCO0FBQ2Ysc0JBQUksS0FBSyxRQUFRLGFBQWEsS0FBSyxRQUFRLFVBQVUsU0FBUztBQUM1RCx5QkFBSyxRQUFRLFVBQVUsUUFBUSxJQUFJOztnQkFFdkMsQ0FBQztjQUVMLENBQUM7O0FBR0gsZ0JBQUksWUFBWTtBQUNoQixnQkFBSSxHQUFHLFFBQVE7QUFDYixpQkFBRyxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWdCO0FBQ3BDLHNCQUFNLGdCQUFnQjtBQUN0QixvQkFBSSxLQUFLLFFBQVEsYUFBYSxLQUFLLFFBQVEsVUFBVSxRQUFRO0FBQzNELHVCQUFLLFFBQVEsVUFBVSxPQUFPLElBQUk7O0FBR3BDLG9CQUNFLENBQUMsZUFBZSxVQUNoQixlQUFlLGFBQ2YsZUFBZSxXQUNmO0FBQ0Esd0JBQU0sSUFBSSxlQUFlLGVBQ3JCLGVBQWUsWUFDZixlQUFlO0FBQ25CLG9CQUFFLE1BQU0sSUFBSTs7QUFHZCw0QkFBWSxLQUFLLG1CQUNmLE1BQ0EsV0FDQSxDQUFDLFNBQWdCO0FBQ2Ysc0JBQUksS0FBSyxRQUFRLGFBQWEsS0FBSyxRQUFRLFVBQVUsU0FBUztBQUM1RCx5QkFBSyxRQUFRLFVBQVUsUUFBUSxJQUFJOztnQkFFdkMsQ0FBQztjQUVMLENBQUM7O0FBR0gsZUFBRyxHQUFHLFNBQVMsQ0FBQyxRQUFjO0FBQzVCLG9CQUFNLGVBQWUsSUFBSTtBQUN6QixvQkFBTSxnQkFBZ0I7QUFDdEIsb0JBQU0sZ0JBQWdCO0FBQ3RCLG9CQUFNLGNBQWE7WUFDckIsQ0FBQztBQUVELGVBQUcsR0FBRyxRQUFRLENBQUMsU0FBZ0I7QUFDN0Isb0JBQU0sa0JBQWtCO0FBQ3hCLG9CQUFNLGdCQUFnQjtBQUN0QixtQkFBSyxPQUFPLGFBQWEsSUFBSSx3QkFBd0IsS0FBSyxRQUFRLEdBQUc7QUFDckUsb0JBQU0sY0FBYTtZQUNyQixDQUFDO0FBRUQsZUFBRyxHQUFHLFNBQVMsQ0FBQyxTQUFnQjtBQUM5QixvQkFBTSxrQkFBa0I7QUFDeEIsb0JBQU0sZ0JBQWdCO0FBQ3RCLG9CQUFNLGdCQUFnQjtBQUN0QixtQkFBSyxPQUFPLHVDQUF1QyxLQUFLLFFBQVEsR0FBRztBQUNuRSxvQkFBTSxjQUFhO1lBQ3JCLENBQUM7QUFFRCxrQkFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFjLGFBQW9CO0FBQ2xELGtCQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLHFCQUFLLEtBQUssV0FBVyxTQUFTOztBQUdoQyxrQkFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixxQkFBSyxLQUFLLFdBQVcsU0FBUzs7QUFHaEMsaUJBQUcsbUJBQWtCO0FBRXJCLGtCQUFJLE9BQU87QUFDVCx1QkFBTyxLQUFLO3FCQUNQO0FBQ0wsd0JBQVEsUUFBUTs7WUFFcEIsQ0FBQztBQUVELGdCQUFJLEtBQUssUUFBUSxPQUFPO0FBQ3RCLGtCQUFJLENBQUMsR0FBRyxPQUFPO0FBQ2Isc0JBQU0sSUFBSSxNQUFNLDZCQUE2Qjs7QUFHL0MsaUJBQUcsTUFBTSxJQUFJLEtBQUssUUFBUSxLQUFLOztVQUVuQyxDQUFDLENBQUE7UUFDSCxDQUFDOzs7QUFyaEJILElBQUFFLFNBQUEsYUFBQTtBQThoQkEsYUFBZ0IsaUJBQWlCLFdBQWlCO0FBQ2hELFlBQU0sT0FBaUIsQ0FBQTtBQUV2QixVQUFJLFdBQVc7QUFDZixVQUFJLFVBQVU7QUFDZCxVQUFJLE1BQU07QUFFVixlQUFTLE9BQU8sR0FBUztBQUV2QixZQUFJLFdBQVcsTUFBTSxLQUFLO0FBQ3hCLGlCQUFPOztBQUdULGVBQU87QUFDUCxrQkFBVTtNQUNaO0FBRUEsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN6QyxjQUFNLElBQUksVUFBVSxPQUFPLENBQUM7QUFFNUIsWUFBSSxNQUFNLEtBQUs7QUFDYixjQUFJLENBQUMsU0FBUztBQUNaLHVCQUFXLENBQUM7aUJBQ1A7QUFDTCxtQkFBTyxDQUFDOztBQUVWOztBQUdGLFlBQUksTUFBTSxRQUFRLFNBQVM7QUFDekIsaUJBQU8sQ0FBQztBQUNSOztBQUdGLFlBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsb0JBQVU7QUFDVjs7QUFHRixZQUFJLE1BQU0sT0FBTyxDQUFDLFVBQVU7QUFDMUIsY0FBSSxJQUFJLFNBQVMsR0FBRztBQUNsQixpQkFBSyxLQUFLLEdBQUc7QUFDYixrQkFBTTs7QUFFUjs7QUFHRixlQUFPLENBQUM7O0FBR1YsVUFBSSxJQUFJLFNBQVMsR0FBRztBQUNsQixhQUFLLEtBQUssSUFBSSxLQUFJLENBQUU7O0FBR3RCLGFBQU87SUFDVDtBQXZEQSxJQUFBQSxTQUFBLG1CQUFBO0FBeURBLFFBQU0sWUFBTixNQUFNLG1CQUFrQixPQUFPLGFBQVk7TUFDekMsWUFBWSxTQUF5QixVQUFnQjtBQUNuRCxjQUFLO0FBYVAsYUFBQSxnQkFBZ0I7QUFDaEIsYUFBQSxlQUFlO0FBQ2YsYUFBQSxrQkFBa0I7QUFDbEIsYUFBQSxnQkFBZ0I7QUFDaEIsYUFBQSxnQkFBZ0I7QUFDUixhQUFBLFFBQVE7QUFDUixhQUFBLE9BQU87QUFFUCxhQUFBLFVBQStCO0FBbkJyQyxZQUFJLENBQUMsVUFBVTtBQUNiLGdCQUFNLElBQUksTUFBTSw0QkFBNEI7O0FBRzlDLGFBQUssVUFBVTtBQUNmLGFBQUssV0FBVztBQUNoQixZQUFJLFFBQVEsT0FBTztBQUNqQixlQUFLLFFBQVEsUUFBUTs7TUFFekI7TUFhQSxnQkFBYTtBQUNYLFlBQUksS0FBSyxNQUFNO0FBQ2I7O0FBR0YsWUFBSSxLQUFLLGVBQWU7QUFDdEIsZUFBSyxXQUFVO21CQUNOLEtBQUssZUFBZTtBQUM3QixlQUFLLFVBQVUsU0FBQSxXQUFXLFdBQVUsZUFBZSxLQUFLLE9BQU8sSUFBSTs7TUFFdkU7TUFFUSxPQUFPLFNBQWU7QUFDNUIsYUFBSyxLQUFLLFNBQVMsT0FBTztNQUM1QjtNQUVRLGFBQVU7QUFFaEIsWUFBSTtBQUNKLFlBQUksS0FBSyxlQUFlO0FBQ3RCLGNBQUksS0FBSyxjQUFjO0FBQ3JCLG9CQUFRLElBQUksTUFDViw4REFBOEQsS0FBSyxRQUFRLDREQUE0RCxLQUFLLFlBQVksRUFBRTtxQkFFbkosS0FBSyxvQkFBb0IsS0FBSyxDQUFDLEtBQUssUUFBUSxrQkFBa0I7QUFDdkUsb0JBQVEsSUFBSSxNQUNWLGdCQUFnQixLQUFLLFFBQVEsMkJBQTJCLEtBQUssZUFBZSxFQUFFO3FCQUV2RSxLQUFLLGlCQUFpQixLQUFLLFFBQVEsY0FBYztBQUMxRCxvQkFBUSxJQUFJLE1BQ1YsZ0JBQWdCLEtBQUssUUFBUSxzRUFBc0U7OztBQU16RyxZQUFJLEtBQUssU0FBUztBQUNoQix1QkFBYSxLQUFLLE9BQU87QUFDekIsZUFBSyxVQUFVOztBQUdqQixhQUFLLE9BQU87QUFDWixhQUFLLEtBQUssUUFBUSxPQUFPLEtBQUssZUFBZTtNQUMvQztNQUVRLE9BQU8sY0FBYyxPQUFnQjtBQUMzQyxZQUFJLE1BQU0sTUFBTTtBQUNkOztBQUdGLFlBQUksQ0FBQyxNQUFNLGlCQUFpQixNQUFNLGVBQWU7QUFDL0MsZ0JBQU0sVUFBVSwwQ0FBMEMsTUFBTSxRQUM5RCxHQUFJLDRDQUNKLE1BQU0sUUFDUjtBQUNBLGdCQUFNLE9BQU8sT0FBTzs7QUFHdEIsY0FBTSxXQUFVO01BQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN3JCRixRQUFBLG1CQUFBLFFBQUEsZ0JBQUE7QUFFQSxRQUFBLEtBQUEsYUFBQSxvQkFBQTtBQWNBLGFBQXNCLEtBQ3BCLGFBQ0EsTUFDQSxTQUFxQjs7QUFFckIsY0FBTSxjQUFjLEdBQUcsaUJBQWlCLFdBQVc7QUFDbkQsWUFBSSxZQUFZLFdBQVcsR0FBRztBQUM1QixnQkFBTSxJQUFJLE1BQU0sa0RBQWtEOztBQUdwRSxjQUFNLFdBQVcsWUFBWSxDQUFDO0FBQzlCLGVBQU8sWUFBWSxNQUFNLENBQUMsRUFBRSxPQUFPLFFBQVEsQ0FBQSxDQUFFO0FBQzdDLGNBQU0sU0FBd0IsSUFBSSxHQUFHLFdBQVcsVUFBVSxNQUFNLE9BQU87QUFDdkUsZUFBTyxPQUFPLEtBQUk7TUFDcEIsQ0FBQzs7QUFkRCxJQUFBQyxTQUFBLE9BQUE7QUEyQkEsYUFBc0IsY0FDcEIsYUFDQSxNQUNBLFNBQXFCOzs7QUFFckIsWUFBSSxTQUFTO0FBQ2IsWUFBSSxTQUFTO0FBR2IsY0FBTSxnQkFBZ0IsSUFBSSxpQkFBQSxjQUFjLE1BQU07QUFDOUMsY0FBTSxnQkFBZ0IsSUFBSSxpQkFBQSxjQUFjLE1BQU07QUFFOUMsY0FBTSwwQkFBc0IsS0FBRyxZQUFPLFFBQVAsWUFBTyxTQUFBLFNBQVAsUUFBUyxlQUFTLFFBQUEsT0FBQSxTQUFBLFNBQUEsR0FBRTtBQUNuRCxjQUFNLDBCQUFzQixLQUFHLFlBQU8sUUFBUCxZQUFPLFNBQUEsU0FBUCxRQUFTLGVBQVMsUUFBQSxPQUFBLFNBQUEsU0FBQSxHQUFFO0FBRW5ELGNBQU0saUJBQWlCLENBQUMsU0FBc0I7QUFDNUMsb0JBQVUsY0FBYyxNQUFNLElBQUk7QUFDbEMsY0FBSSx3QkFBd0I7QUFDMUIsbUNBQXVCLElBQUk7O1FBRS9CO0FBRUEsY0FBTSxpQkFBaUIsQ0FBQyxTQUFzQjtBQUM1QyxvQkFBVSxjQUFjLE1BQU0sSUFBSTtBQUNsQyxjQUFJLHdCQUF3QjtBQUMxQixtQ0FBdUIsSUFBSTs7UUFFL0I7QUFFQSxjQUFNLFlBQVMsT0FBQSxPQUFBLE9BQUEsT0FBQSxDQUFBLEdBQ1YsWUFBTyxRQUFQLFlBQU8sU0FBQSxTQUFQLFFBQVMsU0FBUyxHQUFBLEVBQ3JCLFFBQVEsZ0JBQ1IsUUFBUSxlQUFjLENBQUE7QUFHeEIsY0FBTSxXQUFXLE1BQU0sS0FBSyxhQUFhLE1BQUksT0FBQSxPQUFBLE9BQUEsT0FBQSxDQUFBLEdBQU0sT0FBTyxHQUFBLEVBQUUsVUFBUyxDQUFBLENBQUE7QUFHckUsa0JBQVUsY0FBYyxJQUFHO0FBQzNCLGtCQUFVLGNBQWMsSUFBRztBQUUzQixlQUFPO1VBQ0w7VUFDQTtVQUNBOzs7O0FBNUNKLElBQUFBLFNBQUEsZ0JBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ0EsUUFBQSxPQUFBLGdCQUFBLFFBQUEsSUFBQSxDQUFBO0FBQ0EsUUFBQSxPQUFBLGFBQUEsY0FBQTtBQUVBLFFBQU0saUJBQWlCLE1BQXFELFVBQUEsUUFBQSxRQUFBLFFBQUEsYUFBQTtBQUMxRSxZQUFNLEVBQUMsUUFBUSxRQUFPLElBQUksTUFBTSxLQUFLLGNBQ25DLG9GQUNBLFFBQ0E7UUFDRSxRQUFRO09BQ1Q7QUFHSCxZQUFNLEVBQUMsUUFBUSxLQUFJLElBQUksTUFBTSxLQUFLLGNBQ2hDLG9GQUNBLFFBQ0E7UUFDRSxRQUFRO09BQ1Q7QUFHSCxhQUFPO1FBQ0wsTUFBTSxLQUFLLEtBQUk7UUFDZixTQUFTLFFBQVEsS0FBSTs7SUFFekIsQ0FBQztBQUVELFFBQU0sZUFBZSxNQUdoQixVQUFBLFFBQUEsUUFBQSxRQUFBLGFBQUE7O0FBQ0gsWUFBTSxFQUFDLE9BQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxXQUFXLFFBQVc7UUFDOUQsUUFBUTtPQUNUO0FBRUQsWUFBTSxXQUFVLE1BQUEsS0FBQSxPQUFPLE1BQU0sd0JBQXdCLE9BQUMsUUFBQSxPQUFBLFNBQUEsU0FBQSxHQUFHLENBQUMsT0FBQyxRQUFBLE9BQUEsU0FBQSxLQUFJO0FBQy9ELFlBQU0sUUFBTyxNQUFBLEtBQUEsT0FBTyxNQUFNLHFCQUFxQixPQUFDLFFBQUEsT0FBQSxTQUFBLFNBQUEsR0FBRyxDQUFDLE9BQUMsUUFBQSxPQUFBLFNBQUEsS0FBSTtBQUV6RCxhQUFPO1FBQ0w7UUFDQTs7SUFFSixDQUFDO0FBRUQsUUFBTSxlQUFlLE1BR2hCLFVBQUEsUUFBQSxRQUFBLFFBQUEsYUFBQTtBQUNILFlBQU0sRUFBQyxPQUFNLElBQUksTUFBTSxLQUFLLGNBQWMsZUFBZSxDQUFDLE1BQU0sTUFBTSxJQUFJLEdBQUc7UUFDM0UsUUFBUTtPQUNUO0FBRUQsWUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJLE9BQU8sS0FBSSxFQUFHLE1BQU0sSUFBSTtBQUVoRCxhQUFPO1FBQ0w7UUFDQTs7SUFFSixDQUFDO0FBRVksSUFBQUMsU0FBQSxXQUFXLEtBQUEsUUFBRyxTQUFRO0FBQ3RCLElBQUFBLFNBQUEsT0FBTyxLQUFBLFFBQUcsS0FBSTtBQUNkLElBQUFBLFNBQUEsWUFBWUEsU0FBQSxhQUFhO0FBQ3pCLElBQUFBLFNBQUEsVUFBVUEsU0FBQSxhQUFhO0FBQ3ZCLElBQUFBLFNBQUEsVUFBVUEsU0FBQSxhQUFhO0FBRXBDLGFBQXNCLGFBQVU7O0FBUzlCLGVBQUEsT0FBQSxPQUFBLE9BQUEsT0FBQSxDQUFBLEdBQ00sTUFBT0EsU0FBQSxZQUNQLGVBQWMsSUFDZEEsU0FBQSxVQUNBLGFBQVksSUFDWixhQUFZLENBQUksR0FBQTtVQUNwQixVQUFBQSxTQUFBO1VBQ0EsTUFBQUEsU0FBQTtVQUNBLFdBQUFBLFNBQUE7VUFDQSxTQUFBQSxTQUFBO1VBQ0EsU0FBQUEsU0FBQTtRQUFPLENBQUE7TUFFWCxDQUFDOztBQXJCRCxJQUFBQSxTQUFBLGFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRUEsUUFBQSxZQUFBO0FBQ0EsUUFBQSxpQkFBQTtBQUNBLFFBQUEsVUFBQTtBQUVBLFFBQUFDLE1BQUEsYUFBQSxRQUFBLElBQUEsQ0FBQTtBQUNBLFFBQUFDLFFBQUEsYUFBQSxRQUFBLE1BQUEsQ0FBQTtBQUVBLFFBQUEsZUFBQTtBQWdCQSxRQUFZO0FBQVosS0FBQSxTQUFZQyxXQUFRO0FBSWxCLE1BQUFBLFVBQUFBLFVBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUtBLE1BQUFBLFVBQUFBLFVBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtJQUNGLEdBVlksYUFBUUMsU0FBQSxXQUFSLFdBQVEsQ0FBQSxFQUFBO0FBMkRwQixhQUFnQixlQUFlLE1BQWMsS0FBUTtBQUNuRCxZQUFNLGdCQUFlLEdBQUEsUUFBQSxnQkFBZSxHQUFHO0FBQ3ZDLGNBQVEsSUFBSSxJQUFJLElBQUk7QUFFcEIsWUFBTSxXQUFXLFFBQVEsSUFBSSxZQUFZLEtBQUs7QUFDOUMsVUFBSSxVQUFVO0FBQ1osZ0JBQU8sR0FBQSxlQUFBLGtCQUFpQixRQUFPLEdBQUEsZUFBQSx3QkFBdUIsTUFBTSxHQUFHLENBQUM7O0FBR2xFLE9BQUEsR0FBQSxVQUFBLGNBQWEsV0FBVyxFQUFDLEtBQUksR0FBRyxZQUFZO0lBQzlDO0FBVkEsSUFBQUEsU0FBQSxpQkFBQTtBQWdCQSxhQUFnQixVQUFVLFFBQWM7QUFDdEMsT0FBQSxHQUFBLFVBQUEsY0FBYSxZQUFZLENBQUEsR0FBSSxNQUFNO0lBQ3JDO0FBRkEsSUFBQUEsU0FBQSxZQUFBO0FBUUEsYUFBZ0IsUUFBUSxXQUFpQjtBQUN2QyxZQUFNLFdBQVcsUUFBUSxJQUFJLGFBQWEsS0FBSztBQUMvQyxVQUFJLFVBQVU7QUFDWixTQUFBLEdBQUEsZUFBQSxrQkFBaUIsUUFBUSxTQUFTO2FBQzdCO0FBQ0wsU0FBQSxHQUFBLFVBQUEsY0FBYSxZQUFZLENBQUEsR0FBSSxTQUFTOztBQUV4QyxjQUFRLElBQUksTUFBTSxJQUFJLEdBQUcsU0FBUyxHQUFHRixNQUFLLFNBQVMsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDO0lBQzNFO0FBUkEsSUFBQUUsU0FBQSxVQUFBO0FBbUJBLGFBQWdCLFNBQVMsTUFBYyxTQUFzQjtBQUMzRCxZQUFNLE1BQ0osUUFBUSxJQUFJLFNBQVMsS0FBSyxRQUFRLE1BQU0sR0FBRyxFQUFFLFlBQVcsQ0FBRSxFQUFFLEtBQUs7QUFDbkUsVUFBSSxXQUFXLFFBQVEsWUFBWSxDQUFDLEtBQUs7QUFDdkMsY0FBTSxJQUFJLE1BQU0sb0NBQW9DLElBQUksRUFBRTs7QUFHNUQsVUFBSSxXQUFXLFFBQVEsbUJBQW1CLE9BQU87QUFDL0MsZUFBTzs7QUFHVCxhQUFPLElBQUksS0FBSTtJQUNqQjtBQVpBLElBQUFBLFNBQUEsV0FBQTtBQXNCQSxhQUFnQixrQkFDZCxNQUNBLFNBQXNCO0FBRXRCLFlBQU0sU0FBbUIsU0FBUyxNQUFNLE9BQU8sRUFDNUMsTUFBTSxJQUFJLEVBQ1YsT0FBTyxPQUFLLE1BQU0sRUFBRTtBQUV2QixVQUFJLFdBQVcsUUFBUSxtQkFBbUIsT0FBTztBQUMvQyxlQUFPOztBQUdULGFBQU8sT0FBTyxJQUFJLFdBQVMsTUFBTSxLQUFJLENBQUU7SUFDekM7QUFiQSxJQUFBQSxTQUFBLG9CQUFBO0FBeUJBLGFBQWdCLGdCQUFnQixNQUFjLFNBQXNCO0FBQ2xFLFlBQU0sWUFBWSxDQUFDLFFBQVEsUUFBUSxNQUFNO0FBQ3pDLFlBQU0sYUFBYSxDQUFDLFNBQVMsU0FBUyxPQUFPO0FBQzdDLFlBQU0sTUFBTSxTQUFTLE1BQU0sT0FBTztBQUNsQyxVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQUcsZUFBTztBQUNwQyxVQUFJLFdBQVcsU0FBUyxHQUFHO0FBQUcsZUFBTztBQUNyQyxZQUFNLElBQUksVUFDUiw2REFBNkQsSUFBSTsyRUFDYTtJQUVsRjtBQVZBLElBQUFBLFNBQUEsa0JBQUE7QUFtQkEsYUFBZ0JDLFdBQVUsTUFBYyxPQUFVO0FBQ2hELFlBQU0sV0FBVyxRQUFRLElBQUksZUFBZSxLQUFLO0FBQ2pELFVBQUksVUFBVTtBQUNaLGdCQUFPLEdBQUEsZUFBQSxrQkFBaUIsV0FBVSxHQUFBLGVBQUEsd0JBQXVCLE1BQU0sS0FBSyxDQUFDOztBQUd2RSxjQUFRLE9BQU8sTUFBTUosSUFBRyxHQUFHO0FBQzNCLE9BQUEsR0FBQSxVQUFBLGNBQWEsY0FBYyxFQUFDLEtBQUksSUFBRyxHQUFBLFFBQUEsZ0JBQWUsS0FBSyxDQUFDO0lBQzFEO0FBUkEsSUFBQUcsU0FBQSxZQUFBQztBQWVBLGFBQWdCLGVBQWUsU0FBZ0I7QUFDN0MsT0FBQSxHQUFBLFVBQUEsT0FBTSxRQUFRLFVBQVUsT0FBTyxLQUFLO0lBQ3RDO0FBRkEsSUFBQUQsU0FBQSxpQkFBQTtBQWFBLGFBQWdCLFVBQVUsU0FBdUI7QUFDL0MsY0FBUSxXQUFXLFNBQVM7QUFFNUIsWUFBTSxPQUFPO0lBQ2Y7QUFKQSxJQUFBQSxTQUFBLFlBQUE7QUFhQSxhQUFnQixVQUFPO0FBQ3JCLGFBQU8sUUFBUSxJQUFJLGNBQWMsTUFBTTtJQUN6QztBQUZBLElBQUFBLFNBQUEsVUFBQTtBQVFBLGFBQWdCLE1BQU0sU0FBZTtBQUNuQyxPQUFBLEdBQUEsVUFBQSxjQUFhLFNBQVMsQ0FBQSxHQUFJLE9BQU87SUFDbkM7QUFGQSxJQUFBQSxTQUFBLFFBQUE7QUFTQSxhQUFnQixNQUNkLFNBQ0EsYUFBbUMsQ0FBQSxHQUFFO0FBRXJDLE9BQUEsR0FBQSxVQUFBLGNBQ0UsVUFDQSxHQUFBLFFBQUEscUJBQW9CLFVBQVUsR0FDOUIsbUJBQW1CLFFBQVEsUUFBUSxTQUFRLElBQUssT0FBTztJQUUzRDtBQVRBLElBQUFBLFNBQUEsUUFBQTtBQWdCQSxhQUFnQixRQUNkLFNBQ0EsYUFBbUMsQ0FBQSxHQUFFO0FBRXJDLE9BQUEsR0FBQSxVQUFBLGNBQ0UsWUFDQSxHQUFBLFFBQUEscUJBQW9CLFVBQVUsR0FDOUIsbUJBQW1CLFFBQVEsUUFBUSxTQUFRLElBQUssT0FBTztJQUUzRDtBQVRBLElBQUFBLFNBQUEsVUFBQTtBQWdCQSxhQUFnQixPQUNkLFNBQ0EsYUFBbUMsQ0FBQSxHQUFFO0FBRXJDLE9BQUEsR0FBQSxVQUFBLGNBQ0UsV0FDQSxHQUFBLFFBQUEscUJBQW9CLFVBQVUsR0FDOUIsbUJBQW1CLFFBQVEsUUFBUSxTQUFRLElBQUssT0FBTztJQUUzRDtBQVRBLElBQUFBLFNBQUEsU0FBQTtBQWVBLGFBQWdCRSxNQUFLLFNBQWU7QUFDbEMsY0FBUSxPQUFPLE1BQU0sVUFBVUwsSUFBRyxHQUFHO0lBQ3ZDO0FBRkEsSUFBQUcsU0FBQSxPQUFBRTtBQVdBLGFBQWdCLFdBQVcsTUFBWTtBQUNyQyxPQUFBLEdBQUEsVUFBQSxPQUFNLFNBQVMsSUFBSTtJQUNyQjtBQUZBLElBQUFGLFNBQUEsYUFBQTtBQU9BLGFBQWdCLFdBQVE7QUFDdEIsT0FBQSxHQUFBLFVBQUEsT0FBTSxVQUFVO0lBQ2xCO0FBRkEsSUFBQUEsU0FBQSxXQUFBO0FBWUEsYUFBc0IsTUFBUyxNQUFjLElBQW9COztBQUMvRCxtQkFBVyxJQUFJO0FBRWYsWUFBSTtBQUVKLFlBQUk7QUFDRixtQkFBUyxNQUFNLEdBQUU7O0FBRWpCLG1CQUFROztBQUdWLGVBQU87TUFDVCxDQUFDOztBQVpELElBQUFBLFNBQUEsUUFBQTtBQXlCQSxhQUFnQixVQUFVLE1BQWMsT0FBVTtBQUNoRCxZQUFNLFdBQVcsUUFBUSxJQUFJLGNBQWMsS0FBSztBQUNoRCxVQUFJLFVBQVU7QUFDWixnQkFBTyxHQUFBLGVBQUEsa0JBQWlCLFVBQVMsR0FBQSxlQUFBLHdCQUF1QixNQUFNLEtBQUssQ0FBQzs7QUFHdEUsT0FBQSxHQUFBLFVBQUEsY0FBYSxjQUFjLEVBQUMsS0FBSSxJQUFHLEdBQUEsUUFBQSxnQkFBZSxLQUFLLENBQUM7SUFDMUQ7QUFQQSxJQUFBQSxTQUFBLFlBQUE7QUFlQSxhQUFnQixTQUFTLE1BQVk7QUFDbkMsYUFBTyxRQUFRLElBQUksU0FBUyxJQUFJLEVBQUUsS0FBSztJQUN6QztBQUZBLElBQUFBLFNBQUEsV0FBQTtBQUlBLGFBQXNCLFdBQVcsS0FBWTs7QUFDM0MsZUFBTyxNQUFNLGFBQUEsV0FBVyxXQUFXLEdBQUc7TUFDeEMsQ0FBQzs7QUFGRCxJQUFBQSxTQUFBLGFBQUE7QUFPQSxRQUFBLFlBQUE7QUFBUSxXQUFBLGVBQUFBLFVBQUEsV0FBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxhQUFBLFVBQUE7SUFBTyxFQUFBLENBQUE7QUFLZixRQUFBLFlBQUE7QUFBUSxXQUFBLGVBQUFBLFVBQUEsbUJBQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsYUFBQSxVQUFBO0lBQWUsRUFBQSxDQUFBO0FBS3ZCLFFBQUEsZUFBQTtBQUFRLFdBQUEsZUFBQUEsVUFBQSxlQUFBLEVBQUEsWUFBQSxNQUFBLEtBQUEsV0FBQTtBQUFBLGFBQUEsYUFBQTtJQUFXLEVBQUEsQ0FBQTtBQUFFLFdBQUEsZUFBQUEsVUFBQSxlQUFBLEVBQUEsWUFBQSxNQUFBLEtBQUEsV0FBQTtBQUFBLGFBQUEsYUFBQTtJQUFXLEVBQUEsQ0FBQTtBQUFFLFdBQUEsZUFBQUEsVUFBQSxrQkFBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxhQUFBLGFBQUE7SUFBYyxFQUFBLENBQUE7QUFLaEQsSUFBQUEsU0FBQSxXQUFBLGFBQUEsa0JBQUE7Ozs7O0FDeFlBO0FBQUEsMEVBQUFHLFVBQUFDLFNBQUE7QUFJQSxLQUFDLFNBQVVDLFNBQVEsU0FBUztBQUMzQixhQUFPRixhQUFZLFlBQVksT0FBT0MsWUFBVyxjQUFjQSxRQUFPLFVBQVUsUUFBUSxJQUN4RixPQUFPLFdBQVcsY0FBYyxPQUFPLE1BQU0sT0FBTyxPQUFPLElBQzFEQyxRQUFPLGFBQWEsUUFBUTtBQUFBLElBQzlCLEdBQUVGLFVBQU8sV0FBWTtBQUFFO0FBRXRCLFVBQUksaUJBQWlCLE9BQU8sZUFBZSxjQUFjLGFBQWEsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFdBQVcsY0FBYyxTQUFTLE9BQU8sU0FBUyxjQUFjLE9BQU8sQ0FBQztBQUU5TCxlQUFTLDBCQUEyQixHQUFHO0FBQ3RDLGVBQU8sS0FBSyxFQUFFLFNBQVMsS0FBSztBQUFBLE1BQzdCO0FBRUEsVUFBSSxPQUFPLFNBQVMsVUFBVSxVQUFVLE9BQU8sQ0FBQyxHQUFHO0FBQ2pELFlBQUksR0FBRyxLQUFLO0FBQ1osYUFBSyxLQUFLLFVBQVU7QUFDbEIsY0FBSSxTQUFTLENBQUM7QUFDZCxlQUFLLENBQUMsS0FBSyxNQUFNLFNBQVMsQ0FBQyxNQUFNLE9BQU8sTUFBTTtBQUFBLFFBQ2hEO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLFlBQVksU0FBUyxVQUFVLFVBQVUsT0FBTyxDQUFDLEdBQUc7QUFDdEQsWUFBSSxHQUFHO0FBQ1AsYUFBSyxLQUFLLFVBQVU7QUFDbEIsY0FBSSxTQUFTLENBQUM7QUFDZCxjQUFJLFNBQVMsQ0FBQyxNQUFNLFFBQVE7QUFDMUIsaUJBQUssQ0FBQyxJQUFJO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksU0FBUztBQUFBLFFBQ1o7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUVBLFVBQUk7QUFFSixlQUFTLE1BQU0sT0FBTztBQUFBLFFBQ3BCLFlBQVksTUFBTSxNQUFNO0FBQ3RCLGVBQUssT0FBTztBQUNaLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUNkLGVBQUssUUFBUTtBQUNiLGVBQUssU0FBUztBQUFBLFFBQ2hCO0FBQUEsUUFFQSxLQUFLLE9BQU87QUFDVixjQUFJO0FBQ0osZUFBSztBQUNMLGNBQUksT0FBTyxLQUFLLFNBQVMsWUFBWTtBQUNuQyxpQkFBSyxLQUFLO0FBQUEsVUFDWjtBQUNBLGlCQUFPO0FBQUEsWUFDTDtBQUFBLFlBQ0EsTUFBTSxLQUFLO0FBQUEsWUFDWCxNQUFNO0FBQUEsVUFDUjtBQUNBLGNBQUksS0FBSyxTQUFTLE1BQU07QUFDdEIsaUJBQUssTUFBTSxPQUFPO0FBQ2xCLGlCQUFLLFFBQVE7QUFBQSxVQUNmLE9BQU87QUFDTCxpQkFBSyxTQUFTLEtBQUssUUFBUTtBQUFBLFVBQzdCO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxRQUFRO0FBQ04sY0FBSTtBQUNKLGNBQUksS0FBSyxVQUFVLE1BQU07QUFDdkI7QUFBQSxVQUNGLE9BQU87QUFDTCxpQkFBSztBQUNMLGdCQUFJLE9BQU8sS0FBSyxTQUFTLFlBQVk7QUFDbkMsbUJBQUssS0FBSztBQUFBLFlBQ1o7QUFBQSxVQUNGO0FBQ0Esa0JBQVEsS0FBSyxPQUFPO0FBQ3BCLGVBQUssS0FBSyxTQUFTLEtBQUssT0FBTyxTQUFTLE1BQU07QUFDNUMsaUJBQUssT0FBTyxPQUFPO0FBQUEsVUFDckIsT0FBTztBQUNMLGlCQUFLLFFBQVE7QUFBQSxVQUNmO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxRQUFRO0FBQ04sY0FBSSxLQUFLLFVBQVUsTUFBTTtBQUN2QixtQkFBTyxLQUFLLE9BQU87QUFBQSxVQUNyQjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFdBQVc7QUFDVCxjQUFJLE1BQU0sS0FBSztBQUNmLGlCQUFPLEtBQUs7QUFDWixvQkFBVSxDQUFDO0FBQ1gsaUJBQU8sUUFBUSxNQUFNO0FBQ25CLG9CQUFRLE1BQU0sTUFBTSxNQUFNLE9BQU8sS0FBSyxNQUFNLElBQUksTUFBTTtBQUFBLFVBQ3hEO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxhQUFhLElBQUk7QUFDZixjQUFJO0FBQ0osaUJBQU8sS0FBSyxNQUFNO0FBQ2xCLGlCQUFPLFFBQVEsTUFBTTtBQUNuQixZQUFDLEdBQUcsSUFBSSxHQUFHLE9BQU8sS0FBSyxNQUFNO0FBQUEsVUFDL0I7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLFFBQVE7QUFDTixjQUFJLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFDM0IsaUJBQU8sS0FBSztBQUNaLG9CQUFVLENBQUM7QUFDWCxpQkFBTyxRQUFRLE1BQU07QUFDbkIsb0JBQVEsTUFBTSxNQUFNLE1BQU0sT0FBTyxLQUFLLE1BQU07QUFBQSxjQUMxQyxPQUFPLElBQUk7QUFBQSxjQUNYLE9BQU8sT0FBTyxJQUFJLFNBQVMsT0FBTyxLQUFLLFFBQVE7QUFBQSxjQUMvQyxPQUFPLE9BQU8sSUFBSSxTQUFTLE9BQU8sS0FBSyxRQUFRO0FBQUEsWUFDakQsRUFBRTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUVGO0FBRUEsVUFBSSxXQUFXO0FBRWYsVUFBSTtBQUVKLGVBQVMsTUFBTSxPQUFPO0FBQUEsUUFDcEIsWUFBWSxVQUFVO0FBQ3BCLGVBQUssV0FBVztBQUNoQixlQUFLLFVBQVUsQ0FBQztBQUNoQixjQUFLLEtBQUssU0FBUyxNQUFNLFFBQVUsS0FBSyxTQUFTLFFBQVEsUUFBVSxLQUFLLFNBQVMsc0JBQXNCLE1BQU87QUFDNUcsa0JBQU0sSUFBSSxNQUFNLDJDQUEyQztBQUFBLFVBQzdEO0FBQ0EsZUFBSyxTQUFTLEtBQUssQ0FBQyxNQUFNLE9BQU87QUFDL0IsbUJBQU8sS0FBSyxhQUFhLE1BQU0sUUFBUSxFQUFFO0FBQUEsVUFDM0M7QUFDQSxlQUFLLFNBQVMsT0FBTyxDQUFDLE1BQU0sT0FBTztBQUNqQyxtQkFBTyxLQUFLLGFBQWEsTUFBTSxRQUFRLEVBQUU7QUFBQSxVQUMzQztBQUNBLGVBQUssU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLFNBQVM7QUFDbEQsZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFPLE9BQU8sS0FBSyxRQUFRLElBQUk7QUFBQSxZQUNqQyxPQUFPO0FBQ0wscUJBQU8sS0FBSyxVQUFVLENBQUM7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFFQSxhQUFhLE1BQU0sUUFBUSxJQUFJO0FBQzdCLGNBQUk7QUFDSixlQUFLLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxNQUFNO0FBQ3ZDLGlCQUFLLElBQUksSUFBSSxDQUFDO0FBQUEsVUFDaEI7QUFDQSxlQUFLLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBQyxJQUFJLE9BQU0sQ0FBQztBQUNwQyxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLFFBRUEsY0FBYyxNQUFNO0FBQ2xCLGNBQUksS0FBSyxRQUFRLElBQUksS0FBSyxNQUFNO0FBQzlCLG1CQUFPLEtBQUssUUFBUSxJQUFJLEVBQUU7QUFBQSxVQUM1QixPQUFPO0FBQ0wsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLFFBRUEsTUFBTSxRQUFRLFNBQVMsTUFBTTtBQUMzQixjQUFJLEdBQUc7QUFDUCxjQUFJO0FBQ0YsZ0JBQUksU0FBUyxTQUFTO0FBQ3BCLG1CQUFLLFFBQVEsU0FBUyxvQkFBb0IsSUFBSSxJQUFJLElBQUk7QUFBQSxZQUN4RDtBQUNBLGdCQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssTUFBTTtBQUM5QjtBQUFBLFlBQ0Y7QUFDQSxpQkFBSyxRQUFRLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxFQUFFLE9BQU8sU0FBUyxVQUFVO0FBQ2hFLHFCQUFPLFNBQVMsV0FBVztBQUFBLFlBQzdCLENBQUM7QUFDRCx1QkFBVyxLQUFLLFFBQVEsSUFBSSxFQUFFLElBQUksT0FBTSxhQUFhO0FBQ25ELGtCQUFJRyxJQUFHO0FBQ1Asa0JBQUksU0FBUyxXQUFXLFFBQVE7QUFDOUI7QUFBQSxjQUNGO0FBQ0Esa0JBQUksU0FBUyxXQUFXLFFBQVE7QUFDOUIseUJBQVMsU0FBUztBQUFBLGNBQ3BCO0FBQ0Esa0JBQUk7QUFDRiwyQkFBVyxPQUFPLFNBQVMsT0FBTyxhQUFhLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSTtBQUN0RSxvQkFBSSxRQUFRLFlBQVksT0FBTyxTQUFTLE9BQU8sWUFBWSxZQUFZO0FBQ3JFLHlCQUFRLE1BQU07QUFBQSxnQkFDaEIsT0FBTztBQUNMLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNGLFNBQVMsT0FBTztBQUNkLGdCQUFBQSxLQUFJO0FBQ0o7QUFDRSx1QkFBSyxRQUFRLFNBQVNBLEVBQUM7QUFBQSxnQkFDekI7QUFDQSx1QkFBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGLENBQUM7QUFDRCxvQkFBUyxNQUFNLFFBQVEsSUFBSSxRQUFRLEdBQUksS0FBSyxTQUFTLEdBQUc7QUFDdEQscUJBQU8sS0FBSztBQUFBLFlBQ2QsQ0FBQztBQUFBLFVBQ0gsU0FBUyxPQUFPO0FBQ2QsZ0JBQUk7QUFDSjtBQUNFLG1CQUFLLFFBQVEsU0FBUyxDQUFDO0FBQUEsWUFDekI7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFFRjtBQUVBLFVBQUksV0FBVztBQUVmLFVBQUksVUFBVSxVQUFVO0FBRXhCLGlCQUFXO0FBRVgsaUJBQVc7QUFFWCxlQUFTLE1BQU0sT0FBTztBQUFBLFFBQ3BCLFlBQVksZ0JBQWdCO0FBQzFCLGNBQUk7QUFDSixlQUFLLFNBQVMsSUFBSSxTQUFTLElBQUk7QUFDL0IsZUFBSyxVQUFVO0FBQ2YsZUFBSyxTQUFVLFdBQVc7QUFDeEIsZ0JBQUksR0FBRyxLQUFLO0FBQ1osc0JBQVUsQ0FBQztBQUNYLGlCQUFLLElBQUksSUFBSSxHQUFHLE1BQU0sZ0JBQWlCLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxLQUFNLElBQUksS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDaEcsc0JBQVEsS0FBSyxJQUFJLFNBQVUsTUFBTTtBQUMvQix1QkFBTyxLQUFLLEtBQUs7QUFBQSxjQUNuQixHQUFLLE1BQU07QUFDVCx1QkFBTyxLQUFLLEtBQUs7QUFBQSxjQUNuQixDQUFFLENBQUM7QUFBQSxZQUNMO0FBQ0EsbUJBQU87QUFBQSxVQUNULEVBQUcsS0FBSyxJQUFJO0FBQUEsUUFDZDtBQUFBLFFBRUEsT0FBTztBQUNMLGNBQUksS0FBSyxjQUFjLEdBQUc7QUFDeEIsbUJBQU8sS0FBSyxPQUFPLFFBQVEsVUFBVTtBQUFBLFVBQ3ZDO0FBQUEsUUFDRjtBQUFBLFFBRUEsT0FBTztBQUNMLGNBQUksRUFBRSxLQUFLLFlBQVksR0FBRztBQUN4QixtQkFBTyxLQUFLLE9BQU8sUUFBUSxNQUFNO0FBQUEsVUFDbkM7QUFBQSxRQUNGO0FBQUEsUUFFQSxLQUFLLEtBQUs7QUFDUixpQkFBTyxLQUFLLE9BQU8sSUFBSSxRQUFRLFFBQVEsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUNuRDtBQUFBLFFBRUEsT0FBTyxVQUFVO0FBQ2YsY0FBSSxZQUFZLE1BQU07QUFDcEIsbUJBQU8sS0FBSyxPQUFPLFFBQVEsRUFBRTtBQUFBLFVBQy9CLE9BQU87QUFDTCxtQkFBTyxLQUFLO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFNBQVMsSUFBSTtBQUNYLGlCQUFPLEtBQUssT0FBTyxRQUFRLFNBQVMsTUFBTTtBQUN4QyxtQkFBTyxLQUFLLGFBQWEsRUFBRTtBQUFBLFVBQzdCLENBQUM7QUFBQSxRQUNIO0FBQUEsUUFFQSxTQUFTLE1BQU0sS0FBSyxRQUFRO0FBQzFCLGNBQUksR0FBRyxLQUFLO0FBQ1osZUFBSyxJQUFJLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLEtBQUs7QUFDMUMsbUJBQU8sSUFBSSxDQUFDO0FBQ1osZ0JBQUksS0FBSyxTQUFTLEdBQUc7QUFDbkIscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUNBLGlCQUFPLENBQUM7QUFBQSxRQUNWO0FBQUEsUUFFQSxjQUFjLFVBQVU7QUFDdEIsaUJBQU8sS0FBSyxTQUFTLEtBQUssT0FBTyxNQUFNLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNO0FBQUEsUUFDcEU7QUFBQSxNQUVGO0FBRUEsVUFBSSxXQUFXO0FBRWYsVUFBSTtBQUVKLHdCQUFrQixNQUFNLHdCQUF3QixNQUFNO0FBQUEsTUFBQztBQUV2RCxVQUFJLG9CQUFvQjtBQUV4QixVQUFJLG1CQUFtQixrQkFBa0IsS0FBSyxnQkFBZ0I7QUFFOUQsdUJBQWlCO0FBRWpCLHlCQUFtQjtBQUVuQixpQkFBVztBQUVYLDBCQUFvQjtBQUVwQixZQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ2QsWUFBWSxNQUFNLE1BQU0sU0FBUyxhQUFhLGNBQWNDLFNBQVEsU0FBU0MsVUFBUztBQUNwRixlQUFLLE9BQU87QUFDWixlQUFLLE9BQU87QUFDWixlQUFLLGVBQWU7QUFDcEIsZUFBSyxTQUFTRDtBQUNkLGVBQUssVUFBVTtBQUNmLGVBQUssVUFBVUM7QUFDZixlQUFLLFVBQVUsU0FBUyxLQUFLLFNBQVMsV0FBVztBQUNqRCxlQUFLLFFBQVEsV0FBVyxLQUFLLGtCQUFrQixLQUFLLFFBQVEsUUFBUTtBQUNwRSxjQUFJLEtBQUssUUFBUSxPQUFPLFlBQVksSUFBSTtBQUN0QyxpQkFBSyxRQUFRLEtBQUssR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQUEsVUFDN0Q7QUFDQSxlQUFLLFVBQVUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxVQUFVLFlBQVk7QUFDckQsaUJBQUssV0FBVztBQUNoQixpQkFBSyxVQUFVO0FBQUEsVUFDakIsQ0FBQztBQUNELGVBQUssYUFBYTtBQUFBLFFBQ3BCO0FBQUEsUUFFQSxrQkFBa0IsVUFBVTtBQUMxQixjQUFJO0FBQ0osc0JBQVksQ0FBQyxDQUFDLGFBQWEsV0FBVyxtQkFBbUI7QUFDekQsY0FBSSxZQUFZLEdBQUc7QUFDakIsbUJBQU87QUFBQSxVQUNULFdBQVcsWUFBWSxpQkFBaUIsR0FBRztBQUN6QyxtQkFBTyxpQkFBaUI7QUFBQSxVQUMxQixPQUFPO0FBQ0wsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLFFBRUEsZUFBZTtBQUNiLGlCQUFPLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUFBLFFBQzNDO0FBQUEsUUFFQSxPQUFPLEVBQUMsT0FBTyxVQUFVLDBDQUF5QyxJQUFJLENBQUMsR0FBRztBQUN4RSxjQUFJLEtBQUssUUFBUSxPQUFPLEtBQUssUUFBUSxFQUFFLEdBQUc7QUFDeEMsZ0JBQUksS0FBSyxjQUFjO0FBQ3JCLG1CQUFLLFFBQVEsU0FBUyxPQUFPLFFBQVEsSUFBSSxrQkFBa0IsT0FBTyxDQUFDO0FBQUEsWUFDckU7QUFDQSxpQkFBSyxPQUFPLFFBQVEsV0FBVyxFQUFDLE1BQU0sS0FBSyxNQUFNLFNBQVMsS0FBSyxTQUFTLE1BQU0sS0FBSyxNQUFNLFNBQVMsS0FBSyxRQUFPLENBQUM7QUFDL0csbUJBQU87QUFBQSxVQUNULE9BQU87QUFDTCxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsUUFFQSxjQUFjLFVBQVU7QUFDdEIsY0FBSTtBQUNKLG1CQUFTLEtBQUssUUFBUSxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQy9DLGNBQUksRUFBRSxXQUFXLFlBQWEsYUFBYSxVQUFVLFdBQVcsT0FBUTtBQUN0RSxrQkFBTSxJQUFJLGtCQUFrQixzQkFBc0IsTUFBTSxjQUFjLFFBQVEseUVBQXlFO0FBQUEsVUFDeko7QUFBQSxRQUNGO0FBQUEsUUFFQSxZQUFZO0FBQ1YsZUFBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLEVBQUU7QUFDbEMsaUJBQU8sS0FBSyxPQUFPLFFBQVEsWUFBWSxFQUFDLE1BQU0sS0FBSyxNQUFNLFNBQVMsS0FBSyxRQUFPLENBQUM7QUFBQSxRQUNqRjtBQUFBLFFBRUEsUUFBUSxZQUFZLFNBQVM7QUFDM0IsZUFBSyxjQUFjLFVBQVU7QUFDN0IsZUFBSyxRQUFRLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDakMsaUJBQU8sS0FBSyxPQUFPLFFBQVEsVUFBVSxFQUFDLE1BQU0sS0FBSyxNQUFNLFNBQVMsS0FBSyxTQUFTLFlBQVksUUFBTyxDQUFDO0FBQUEsUUFDcEc7QUFBQSxRQUVBLFFBQVE7QUFDTixjQUFJLEtBQUssZUFBZSxHQUFHO0FBQ3pCLGlCQUFLLGNBQWMsUUFBUTtBQUMzQixpQkFBSyxRQUFRLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFBQSxVQUNuQyxPQUFPO0FBQ0wsaUJBQUssY0FBYyxXQUFXO0FBQUEsVUFDaEM7QUFDQSxpQkFBTyxLQUFLLE9BQU8sUUFBUSxhQUFhLEVBQUMsTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLFFBQU8sQ0FBQztBQUFBLFFBQ2xGO0FBQUEsUUFFQSxNQUFNLFVBQVUsU0FBUyxrQkFBa0IsS0FBSyxNQUFNO0FBQ3BELGNBQUksT0FBTyxXQUFXO0FBQ3RCLGNBQUksS0FBSyxlQUFlLEdBQUc7QUFDekIsaUJBQUssY0FBYyxTQUFTO0FBQzVCLGlCQUFLLFFBQVEsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUFBLFVBQ25DLE9BQU87QUFDTCxpQkFBSyxjQUFjLFdBQVc7QUFBQSxVQUNoQztBQUNBLHNCQUFZLEVBQUMsTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsWUFBWSxLQUFLLFdBQVU7QUFDaEYsZUFBSyxPQUFPLFFBQVEsYUFBYSxTQUFTO0FBQzFDLGNBQUk7QUFDRixxQkFBVSxPQUFPLFdBQVcsT0FBTyxRQUFRLFNBQVMsS0FBSyxTQUFTLEtBQUssTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEtBQUssSUFBSTtBQUNuSCxnQkFBSSxpQkFBaUIsR0FBRztBQUN0QixtQkFBSyxPQUFPLFNBQVM7QUFDckIsb0JBQU0sS0FBSyxLQUFLLFNBQVMsU0FBUztBQUNsQyxtQkFBSyxjQUFjLE1BQU07QUFDekIscUJBQU8sS0FBSyxTQUFTLE1BQU07QUFBQSxZQUM3QjtBQUFBLFVBQ0YsU0FBUyxRQUFRO0FBQ2Ysb0JBQVE7QUFDUixtQkFBTyxLQUFLLFdBQVcsT0FBTyxXQUFXLGtCQUFrQixLQUFLLElBQUk7QUFBQSxVQUN0RTtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFNBQVMsa0JBQWtCLEtBQUssTUFBTTtBQUNwQyxjQUFJLE9BQU87QUFDWCxjQUFJLEtBQUssUUFBUSxVQUFVLEtBQUssUUFBUSxPQUFPLFNBQVMsR0FBRztBQUN6RCxpQkFBSyxRQUFRLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFBQSxVQUNuQztBQUNBLGVBQUssY0FBYyxXQUFXO0FBQzlCLHNCQUFZLEVBQUMsTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsWUFBWSxLQUFLLFdBQVU7QUFDaEYsa0JBQVEsSUFBSSxrQkFBa0IsNEJBQTRCLEtBQUssUUFBUSxVQUFVLE1BQU07QUFDdkYsaUJBQU8sS0FBSyxXQUFXLE9BQU8sV0FBVyxrQkFBa0IsS0FBSyxJQUFJO0FBQUEsUUFDdEU7QUFBQSxRQUVBLE1BQU0sV0FBVyxPQUFPLFdBQVcsa0JBQWtCLEtBQUssTUFBTTtBQUM5RCxjQUFJQyxRQUFPO0FBQ1gsY0FBSSxpQkFBaUIsR0FBRztBQUN0QixZQUFBQSxTQUFTLE1BQU0sS0FBSyxPQUFPLFFBQVEsVUFBVSxPQUFPLFNBQVM7QUFDN0QsZ0JBQUlBLFVBQVMsTUFBTTtBQUNqQiwyQkFBYSxDQUFDLENBQUNBO0FBQ2YsbUJBQUssT0FBTyxRQUFRLFNBQVMsWUFBWSxLQUFLLFFBQVEsRUFBRSxVQUFVLFVBQVUsT0FBTyxTQUFTO0FBQzVGLG1CQUFLO0FBQ0wscUJBQU8sSUFBSSxVQUFVO0FBQUEsWUFDdkIsT0FBTztBQUNMLG1CQUFLLE9BQU8sU0FBUztBQUNyQixvQkFBTSxLQUFLLEtBQUssU0FBUyxTQUFTO0FBQ2xDLG1CQUFLLGNBQWMsTUFBTTtBQUN6QixxQkFBTyxLQUFLLFFBQVEsS0FBSztBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLE9BQU8sV0FBVztBQUNoQixlQUFLLGNBQWMsV0FBVztBQUM5QixlQUFLLFFBQVEsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUNqQyxpQkFBTyxLQUFLLE9BQU8sUUFBUSxRQUFRLFNBQVM7QUFBQSxRQUM5QztBQUFBLE1BRUY7QUFFQSxVQUFJLFFBQVE7QUFFWixVQUFJLG1CQUFtQixnQkFBZ0I7QUFFdkMsaUJBQVc7QUFFWCwwQkFBb0I7QUFFcEIsdUJBQWlCLE1BQU0sZUFBZTtBQUFBLFFBQ3BDLFlBQVksVUFBVSxjQUFjLHNCQUFzQjtBQUN4RCxlQUFLLFdBQVc7QUFDaEIsZUFBSyxlQUFlO0FBQ3BCLGVBQUssV0FBVyxLQUFLLFNBQVMsYUFBYTtBQUMzQyxtQkFBUyxLQUFLLHNCQUFzQixzQkFBc0IsSUFBSTtBQUM5RCxlQUFLLGVBQWUsS0FBSyx3QkFBd0IsS0FBSyx5QkFBeUIsS0FBSyxJQUFJO0FBQ3hGLGVBQUssV0FBVztBQUNoQixlQUFLLFFBQVE7QUFDYixlQUFLLGVBQWU7QUFDcEIsZUFBSyxRQUFRLEtBQUssUUFBUSxRQUFRO0FBQ2xDLGVBQUssVUFBVSxDQUFDO0FBQ2hCLGVBQUssZ0JBQWdCO0FBQUEsUUFDdkI7QUFBQSxRQUVBLGtCQUFrQjtBQUNoQixjQUFJO0FBQ0osY0FBSyxLQUFLLGFBQWEsU0FBWSxLQUFLLGFBQWEsNEJBQTRCLFFBQVUsS0FBSyxhQUFhLDBCQUEwQixRQUFZLEtBQUssYUFBYSw2QkFBNkIsUUFBVSxLQUFLLGFBQWEsMkJBQTJCLE9BQVM7QUFDaFEsbUJBQU8sUUFBUSxPQUFRLEtBQUssWUFBWSxZQUFZLE1BQU07QUFDeEQsa0JBQUksUUFBUSxNQUFNLFNBQVMsS0FBSztBQUNoQyxvQkFBTSxLQUFLLElBQUk7QUFDZixrQkFBSyxLQUFLLGFBQWEsNEJBQTRCLFFBQVMsT0FBTyxLQUFLLHdCQUF3QixLQUFLLGFBQWEsMEJBQTBCO0FBQzFJLHFCQUFLLHdCQUF3QjtBQUM3QixxQkFBSyxhQUFhLFlBQVksS0FBSyxhQUFhO0FBQ2hELHFCQUFLLFNBQVMsVUFBVSxLQUFLLGdCQUFnQixDQUFDO0FBQUEsY0FDaEQ7QUFDQSxrQkFBSyxLQUFLLGFBQWEsNkJBQTZCLFFBQVMsT0FBTyxLQUFLLHlCQUF5QixLQUFLLGFBQWEsMkJBQTJCO0FBQzdJLGlCQUFDO0FBQUEsa0JBQ0MseUJBQXlCO0FBQUEsa0JBQ3pCLDBCQUEwQjtBQUFBLGtCQUMxQjtBQUFBLGdCQUNGLElBQUksS0FBSztBQUNULHFCQUFLLHlCQUF5QjtBQUM5Qix1QkFBTyxXQUFXLE9BQU8sS0FBSyxJQUFJLFFBQVEsVUFBVSxTQUFTLElBQUk7QUFDakUsb0JBQUksT0FBTyxHQUFHO0FBQ1osdUJBQUssYUFBYSxhQUFhO0FBQy9CLHlCQUFPLEtBQUssU0FBUyxVQUFVLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxnQkFDdkQ7QUFBQSxjQUNGO0FBQUEsWUFDRixHQUFHLEtBQUssaUJBQWlCLEdBQUksVUFBVSxhQUFhLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDckUsT0FBTztBQUNMLG1CQUFPLGNBQWMsS0FBSyxTQUFTO0FBQUEsVUFDckM7QUFBQSxRQUNGO0FBQUEsUUFFQSxNQUFNLFlBQVksU0FBUztBQUN6QixnQkFBTSxLQUFLLFVBQVU7QUFDckIsaUJBQU8sS0FBSyxTQUFTLE9BQU8sUUFBUSxXQUFXLFFBQVEsU0FBUyxDQUFDO0FBQUEsUUFDbkU7QUFBQSxRQUVBLE1BQU0sZUFBZSxPQUFPO0FBQzFCLGdCQUFNLEtBQUssVUFBVTtBQUNyQix3QkFBYyxLQUFLLFNBQVM7QUFDNUIsaUJBQU8sS0FBSyxRQUFRLFFBQVE7QUFBQSxRQUM5QjtBQUFBLFFBRUEsVUFBVSxJQUFJLEdBQUc7QUFDZixpQkFBTyxJQUFJLEtBQUssUUFBUSxTQUFTLFNBQVMsUUFBUTtBQUNoRCxtQkFBTyxXQUFXLFNBQVMsQ0FBQztBQUFBLFVBQzlCLENBQUM7QUFBQSxRQUNIO0FBQUEsUUFFQSxpQkFBaUI7QUFDZixjQUFJO0FBQ0osa0JBQVEsTUFBTSxLQUFLLGFBQWEsWUFBWSxPQUFPLE1BQU8sS0FBSyxLQUFLLGFBQWEsV0FBWTtBQUFBLFFBQy9GO0FBQUEsUUFFQSxNQUFNLG1CQUFtQixTQUFTO0FBQ2hDLGdCQUFNLEtBQUssVUFBVTtBQUNyQixtQkFBUyxVQUFVLFNBQVMsU0FBUyxLQUFLLFlBQVk7QUFDdEQsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxTQUFTLFVBQVUsS0FBSyxnQkFBZ0IsQ0FBQztBQUM5QyxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLE1BQU0sY0FBYztBQUNsQixnQkFBTSxLQUFLLFVBQVU7QUFDckIsaUJBQU8sS0FBSztBQUFBLFFBQ2Q7QUFBQSxRQUVBLE1BQU0sYUFBYTtBQUNqQixnQkFBTSxLQUFLLFVBQVU7QUFDckIsaUJBQU8sS0FBSyxTQUFTLE9BQU87QUFBQSxRQUM5QjtBQUFBLFFBRUEsTUFBTSxXQUFXO0FBQ2YsZ0JBQU0sS0FBSyxVQUFVO0FBQ3JCLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsUUFFQSxNQUFNLGVBQWUsTUFBTTtBQUN6QixnQkFBTSxLQUFLLFVBQVU7QUFDckIsaUJBQVEsS0FBSyxlQUFlLEtBQUssVUFBVztBQUFBLFFBQzlDO0FBQUEsUUFFQSxrQkFBa0I7QUFDaEIsY0FBSSxlQUFlO0FBQ25CLFdBQUMsRUFBQyxlQUFlLFVBQVMsSUFBSSxLQUFLO0FBQ25DLGNBQUssaUJBQWlCLFFBQVUsYUFBYSxNQUFPO0FBQ2xELG1CQUFPLEtBQUssSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLFNBQVM7QUFBQSxVQUMxRCxXQUFXLGlCQUFpQixNQUFNO0FBQ2hDLG1CQUFPLGdCQUFnQixLQUFLO0FBQUEsVUFDOUIsV0FBVyxhQUFhLE1BQU07QUFDNUIsbUJBQU87QUFBQSxVQUNULE9BQU87QUFDTCxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsUUFFQSxnQkFBZ0IsUUFBUTtBQUN0QixjQUFJO0FBQ0oscUJBQVcsS0FBSyxnQkFBZ0I7QUFDaEMsaUJBQVEsWUFBWSxRQUFTLFVBQVU7QUFBQSxRQUN6QztBQUFBLFFBRUEsTUFBTSx1QkFBdUIsTUFBTTtBQUNqQyxjQUFJO0FBQ0osZ0JBQU0sS0FBSyxVQUFVO0FBQ3JCLHNCQUFZLEtBQUssYUFBYSxhQUFhO0FBQzNDLGVBQUssU0FBUyxVQUFVLEtBQUssZ0JBQWdCLENBQUM7QUFDOUMsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxNQUFNLHVCQUF1QjtBQUMzQixnQkFBTSxLQUFLLFVBQVU7QUFDckIsaUJBQU8sS0FBSyxhQUFhO0FBQUEsUUFDM0I7QUFBQSxRQUVBLFVBQVUsS0FBSztBQUNiLGlCQUFPLEtBQUssZ0JBQWdCO0FBQUEsUUFDOUI7QUFBQSxRQUVBLE1BQU0sUUFBUSxLQUFLO0FBQ2pCLGlCQUFPLEtBQUssZ0JBQWdCLE1BQU0sS0FBTSxLQUFLLGVBQWUsT0FBUTtBQUFBLFFBQ3RFO0FBQUEsUUFFQSxNQUFNLFVBQVUsUUFBUTtBQUN0QixjQUFJO0FBQ0osZ0JBQU0sS0FBSyxVQUFVO0FBQ3JCLGdCQUFNLEtBQUssSUFBSTtBQUNmLGlCQUFPLEtBQUssTUFBTSxRQUFRLEdBQUc7QUFBQSxRQUMvQjtBQUFBLFFBRUEsTUFBTSxhQUFhLE9BQU8sUUFBUSxZQUFZO0FBQzVDLGNBQUksS0FBSztBQUNULGdCQUFNLEtBQUssVUFBVTtBQUNyQixnQkFBTSxLQUFLLElBQUk7QUFDZixjQUFJLEtBQUssZ0JBQWdCLE1BQU0sR0FBRztBQUNoQyxpQkFBSyxZQUFZO0FBQ2pCLGdCQUFJLEtBQUssYUFBYSxhQUFhLE1BQU07QUFDdkMsbUJBQUssYUFBYSxhQUFhO0FBQUEsWUFDakM7QUFDQSxtQkFBTyxLQUFLLElBQUksS0FBSyxlQUFlLEtBQUssQ0FBQztBQUMxQyxpQkFBSyxlQUFlLE1BQU0sT0FBTyxLQUFLLGFBQWE7QUFDbkQsbUJBQU87QUFBQSxjQUNMLFNBQVM7QUFBQSxjQUNUO0FBQUEsY0FDQSxXQUFXLEtBQUssYUFBYTtBQUFBLFlBQy9CO0FBQUEsVUFDRixPQUFPO0FBQ0wsbUJBQU87QUFBQSxjQUNMLFNBQVM7QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLGtCQUFrQjtBQUNoQixpQkFBTyxLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ3hDO0FBQUEsUUFFQSxNQUFNLFdBQVcsYUFBYSxRQUFRO0FBQ3BDLGNBQUksU0FBUyxLQUFLO0FBQ2xCLGdCQUFNLEtBQUssVUFBVTtBQUNyQixjQUFLLEtBQUssYUFBYSxpQkFBaUIsUUFBUyxTQUFTLEtBQUssYUFBYSxlQUFlO0FBQ3pGLGtCQUFNLElBQUksa0JBQWtCLDhDQUE4QyxNQUFNLG1EQUFtRCxLQUFLLGFBQWEsYUFBYSxFQUFFO0FBQUEsVUFDdEs7QUFDQSxnQkFBTSxLQUFLLElBQUk7QUFDZix1QkFBYyxLQUFLLGFBQWEsYUFBYSxRQUFTLGdCQUFnQixLQUFLLGFBQWEsYUFBYSxDQUFDLEtBQUssTUFBTSxRQUFRLEdBQUc7QUFDNUgsb0JBQVUsS0FBSyxnQkFBZ0IsTUFBTSxjQUFjLEtBQUssVUFBVSxHQUFHO0FBQ3JFLGNBQUksU0FBUztBQUNYLGlCQUFLLGVBQWUsTUFBTSxLQUFLLGVBQWU7QUFDOUMsaUJBQUssZUFBZSxLQUFLLGVBQWUsS0FBSyxhQUFhO0FBQzFELGlCQUFLLFNBQVMsZUFBZTtBQUFBLFVBQy9CO0FBQ0EsaUJBQU87QUFBQSxZQUNMO0FBQUEsWUFDQTtBQUFBLFlBQ0EsVUFBVSxLQUFLLGFBQWE7QUFBQSxVQUM5QjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLE1BQU0sU0FBUyxPQUFPLFFBQVE7QUFDNUIsZ0JBQU0sS0FBSyxVQUFVO0FBQ3JCLGVBQUssWUFBWTtBQUNqQixlQUFLLFNBQVM7QUFDZCxlQUFLLFNBQVMsVUFBVSxLQUFLLGdCQUFnQixDQUFDO0FBQzlDLGlCQUFPO0FBQUEsWUFDTCxTQUFTLEtBQUs7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFBQSxNQUVGO0FBRUEsVUFBSSxtQkFBbUI7QUFFdkIsVUFBSSxtQkFBbUI7QUFFdkIsMEJBQW9CO0FBRXBCLGVBQVMsTUFBTSxPQUFPO0FBQUEsUUFDcEIsWUFBWSxTQUFTO0FBQ25CLGVBQUssU0FBUztBQUNkLGVBQUssUUFBUSxDQUFDO0FBQ2QsZUFBSyxTQUFTLEtBQUssT0FBTyxJQUFJLFdBQVc7QUFDdkMsbUJBQU87QUFBQSxVQUNULENBQUM7QUFBQSxRQUNIO0FBQUEsUUFFQSxLQUFLLElBQUk7QUFDUCxjQUFJLFNBQVM7QUFDYixvQkFBVSxLQUFLLE1BQU0sRUFBRTtBQUN2QixpQkFBTyxVQUFVO0FBQ2pCLGNBQUssV0FBVyxRQUFTLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFDbEQsaUJBQUssT0FBTyxPQUFPO0FBQ25CLGlCQUFLLE9BQU8sSUFBSTtBQUNoQixtQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFVBQ3RCLFdBQVcsV0FBVyxNQUFNO0FBQzFCLGlCQUFLLE9BQU8sT0FBTztBQUNuQixtQkFBTyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBQUEsUUFFQSxNQUFNLElBQUk7QUFDUixjQUFJO0FBQ0osb0JBQVU7QUFDVixlQUFLLE1BQU0sRUFBRSxJQUFJO0FBQ2pCLGlCQUFPLEtBQUssT0FBTyxPQUFPO0FBQUEsUUFDNUI7QUFBQSxRQUVBLE9BQU8sSUFBSTtBQUNULGNBQUk7QUFDSixvQkFBVSxLQUFLLE1BQU0sRUFBRTtBQUN2QixjQUFJLFdBQVcsTUFBTTtBQUNuQixpQkFBSyxPQUFPLE9BQU87QUFDbkIsbUJBQU8sS0FBSyxNQUFNLEVBQUU7QUFBQSxVQUN0QjtBQUNBLGlCQUFPLFdBQVc7QUFBQSxRQUNwQjtBQUFBLFFBRUEsVUFBVSxJQUFJO0FBQ1osY0FBSTtBQUNKLGtCQUFRLE1BQU0sS0FBSyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUMsTUFBTSxPQUFPLE1BQU07QUFBQSxRQUM3RDtBQUFBLFFBRUEsV0FBVyxRQUFRO0FBQ2pCLGNBQUksR0FBRyxLQUFLLEtBQUssU0FBUztBQUMxQixjQUFJLFVBQVUsTUFBTTtBQUNsQixrQkFBTSxLQUFLLE9BQU8sUUFBUSxNQUFNO0FBQ2hDLGdCQUFJLE1BQU0sR0FBRztBQUNYLG9CQUFNLElBQUksa0JBQWtCLHlCQUF5QixLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRTtBQUFBLFlBQy9FO0FBQ0Esa0JBQU0sS0FBSztBQUNYLHNCQUFVLENBQUM7QUFDWCxpQkFBSyxLQUFLLEtBQUs7QUFDYixrQkFBSSxJQUFJLENBQUM7QUFDVCxrQkFBSSxNQUFNLEtBQUs7QUFDYix3QkFBUSxLQUFLLENBQUM7QUFBQSxjQUNoQjtBQUFBLFlBQ0Y7QUFDQSxtQkFBTztBQUFBLFVBQ1QsT0FBTztBQUNMLG1CQUFPLE9BQU8sS0FBSyxLQUFLLEtBQUs7QUFBQSxVQUMvQjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLGVBQWU7QUFDYixpQkFBTyxLQUFLLE9BQU8sT0FBUSxDQUFDLEtBQUssR0FBRyxNQUFNO0FBQ3hDLGdCQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSTtBQUN0QixtQkFBTztBQUFBLFVBQ1QsR0FBSSxDQUFDLENBQUM7QUFBQSxRQUNSO0FBQUEsTUFFRjtBQUVBLFVBQUksV0FBVztBQUVmLFVBQUksVUFBVTtBQUVkLGlCQUFXO0FBRVgsYUFBTyxNQUFNLEtBQUs7QUFBQSxRQUNoQixZQUFZLE1BQU1ELFVBQVM7QUFDekIsZUFBSyxXQUFXLEtBQUssU0FBUyxLQUFLLElBQUk7QUFDdkMsZUFBSyxPQUFPO0FBQ1osZUFBSyxVQUFVQTtBQUNmLGVBQUssV0FBVztBQUNoQixlQUFLLFNBQVMsSUFBSSxTQUFTO0FBQUEsUUFDN0I7QUFBQSxRQUVBLFVBQVU7QUFDUixpQkFBTyxLQUFLLE9BQU8sV0FBVztBQUFBLFFBQ2hDO0FBQUEsUUFFQSxNQUFNLFlBQVk7QUFDaEIsY0FBSSxNQUFNLElBQUksT0FBTyxRQUFRLFNBQVMsVUFBVTtBQUNoRCxjQUFLLEtBQUssV0FBVyxLQUFNLEtBQUssT0FBTyxTQUFTLEdBQUc7QUFDakQsaUJBQUs7QUFDTCxhQUFDLEVBQUMsTUFBTSxNQUFNLFNBQVMsT0FBTSxJQUFJLEtBQUssT0FBTyxNQUFNO0FBQ25ELGlCQUFNLE1BQU8saUJBQWlCO0FBQzVCLGtCQUFJO0FBQ0YsMkJBQVksTUFBTSxLQUFLLEdBQUcsSUFBSTtBQUM5Qix1QkFBTyxXQUFXO0FBQ2hCLHlCQUFPLFFBQVEsUUFBUTtBQUFBLGdCQUN6QjtBQUFBLGNBQ0YsU0FBUyxRQUFRO0FBQ2Ysd0JBQVE7QUFDUix1QkFBTyxXQUFXO0FBQ2hCLHlCQUFPLE9BQU8sS0FBSztBQUFBLGdCQUNyQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLEVBQUc7QUFDSCxpQkFBSztBQUNMLGlCQUFLLFVBQVU7QUFDZixtQkFBTyxHQUFHO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFNBQVMsU0FBUyxNQUFNO0FBQ3RCLGNBQUksU0FBUyxRQUFRO0FBQ3JCLG9CQUFVLFNBQVM7QUFDbkIsb0JBQVUsSUFBSSxLQUFLLFFBQVEsU0FBUyxVQUFVLFNBQVM7QUFDckQsc0JBQVU7QUFDVixtQkFBTyxTQUFTO0FBQUEsVUFDbEIsQ0FBQztBQUNELGVBQUssT0FBTyxLQUFLLEVBQUMsTUFBTSxNQUFNLFNBQVMsT0FBTSxDQUFDO0FBQzlDLGVBQUssVUFBVTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BRUY7QUFFQSxVQUFJLFNBQVM7QUFFYixVQUFJLFVBQVU7QUFDZCxVQUFJLFlBQVk7QUFBQSxRQUNmO0FBQUEsTUFDRDtBQUVBLFVBQUksWUFBeUIsdUJBQU8sT0FBTztBQUFBLFFBQzFDO0FBQUEsUUFDQSxTQUFTO0FBQUEsTUFDVixDQUFDO0FBRUQsVUFBSSxhQUFhLE1BQU0sUUFBUSxJQUFJLDhFQUE4RTtBQUVqSCxVQUFJLGFBQWEsTUFBTSxRQUFRLElBQUksOEVBQThFO0FBRWpILFVBQUksYUFBYSxNQUFNLFFBQVEsSUFBSSw4RUFBOEU7QUFFakgsVUFBSSxVQUFVLE9BQU8scUJBQXFCLG1CQUFtQixXQUFXO0FBRXhFLGlCQUFXO0FBRVgsaUJBQVc7QUFFWCwwQkFBb0I7QUFFcEIsNEJBQXNCO0FBRXRCLGtCQUFZO0FBRVosY0FBUyxXQUFXO0FBQUEsUUFDbEIsTUFBTUUsT0FBTTtBQUFBLFVBQ1YsWUFBWSxpQkFBaUIsQ0FBQyxHQUFHO0FBQy9CLGlCQUFLLFlBQVksS0FBSyxVQUFVLEtBQUssSUFBSTtBQUN6QyxpQkFBSyxpQkFBaUI7QUFDdEIscUJBQVMsS0FBSyxLQUFLLGdCQUFnQixLQUFLLFVBQVUsSUFBSTtBQUN0RCxpQkFBSyxTQUFTLElBQUksU0FBUyxJQUFJO0FBQy9CLGlCQUFLLFlBQVksQ0FBQztBQUNsQixpQkFBSyxhQUFhO0FBQ2xCLGlCQUFLLGtCQUFrQjtBQUN2QixpQkFBSyxtQkFBbUIsS0FBSyxjQUFjO0FBQzNDLGdCQUFJLEtBQUssY0FBYyxNQUFNO0FBQzNCLGtCQUFJLEtBQUssZUFBZSxjQUFjLFNBQVM7QUFDN0MscUJBQUssYUFBYSxJQUFJLGtCQUFrQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLEVBQUMsUUFBUSxLQUFLLE9BQU0sQ0FBQyxDQUFDO0FBQUEsY0FDdkcsV0FBVyxLQUFLLGVBQWUsY0FBYyxXQUFXO0FBQ3RELHFCQUFLLGFBQWEsSUFBSSxvQkFBb0IsT0FBTyxPQUFPLENBQUMsR0FBRyxLQUFLLGdCQUFnQixFQUFDLFFBQVEsS0FBSyxPQUFNLENBQUMsQ0FBQztBQUFBLGNBQ3pHO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxVQUVBLElBQUksTUFBTSxJQUFJO0FBQ1osZ0JBQUk7QUFDSixvQkFBUSxNQUFNLEtBQUssVUFBVSxHQUFHLE1BQU0sT0FBTyxPQUFPLE1BQU07QUFDeEQsa0JBQUk7QUFDSix3QkFBVSxLQUFLLFVBQVUsR0FBRyxJQUFJLElBQUksS0FBSyxXQUFXLE9BQU8sT0FBTyxLQUFLLGdCQUFnQjtBQUFBLGdCQUNyRixJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRztBQUFBLGdCQUNyQixTQUFTLEtBQUs7QUFBQSxnQkFDZCxZQUFZLEtBQUs7QUFBQSxjQUNuQixDQUFDLENBQUM7QUFDRixtQkFBSyxPQUFPLFFBQVEsV0FBVyxTQUFTLEdBQUc7QUFDM0MscUJBQU87QUFBQSxZQUNULEdBQUc7QUFBQSxVQUNMO0FBQUEsVUFFQSxNQUFNLFVBQVUsTUFBTSxJQUFJO0FBQ3hCLGdCQUFJLFNBQVM7QUFDYix1QkFBVyxLQUFLLFVBQVUsR0FBRztBQUM3QixnQkFBSSxLQUFLLFlBQVk7QUFDbkIsd0JBQVcsTUFBTSxLQUFLLFdBQVcsZUFBZSxDQUFDLE9BQU8sR0FBRyxVQUFVLFFBQVEsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsWUFDcEc7QUFDQSxnQkFBSSxZQUFZLE1BQU07QUFDcEIscUJBQU8sS0FBSyxVQUFVLEdBQUc7QUFDekIsb0JBQU0sU0FBUyxXQUFXO0FBQUEsWUFDNUI7QUFDQSxtQkFBUSxZQUFZLFFBQVMsVUFBVTtBQUFBLFVBQ3pDO0FBQUEsVUFFQSxXQUFXO0FBQ1QsZ0JBQUksR0FBRyxLQUFLLFNBQVM7QUFDckIsa0JBQU0sS0FBSztBQUNYLHNCQUFVLENBQUM7QUFDWCxpQkFBSyxLQUFLLEtBQUs7QUFDYixrQkFBSSxJQUFJLENBQUM7QUFDVCxzQkFBUSxLQUFLO0FBQUEsZ0JBQ1gsS0FBSztBQUFBLGdCQUNMLFNBQVM7QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNIO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsVUFFQSxPQUFPO0FBQ0wsbUJBQU8sT0FBTyxLQUFLLEtBQUssU0FBUztBQUFBLFVBQ25DO0FBQUEsVUFFQSxNQUFNLGNBQWM7QUFDbEIsZ0JBQUksUUFBUSxLQUFLLE9BQU8sR0FBRyxHQUFHLE1BQU0sS0FBSyxNQUFNO0FBQy9DLGdCQUFJLEtBQUssY0FBYyxNQUFNO0FBQzNCLHFCQUFPLEtBQUssUUFBUSxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQUEsWUFDekM7QUFDQSxtQkFBTyxDQUFDO0FBQ1IscUJBQVM7QUFDVCxvQkFBUSxLQUFLLEtBQUssRUFBRSxJQUFJO0FBQ3hCLGtCQUFNLFlBQVk7QUFDbEIsbUJBQU8sV0FBVyxHQUFHO0FBQ25CLGVBQUMsTUFBTSxLQUFLLElBQUssTUFBTSxLQUFLLFdBQVcsZUFBZSxDQUFDLFFBQVEsVUFBVSxPQUFPLFNBQVMsR0FBRyxTQUFTLEtBQUssS0FBSyxFQUFFLGVBQWUsU0FBUyxHQUFLLENBQUM7QUFDL0ksdUJBQVMsQ0FBQyxDQUFDO0FBQ1gsbUJBQUssSUFBSSxHQUFHLE1BQU0sTUFBTSxRQUFRLElBQUksS0FBSyxLQUFLO0FBQzVDLG9CQUFJLE1BQU0sQ0FBQztBQUNYLHFCQUFLLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFBQSxjQUNoQztBQUFBLFlBQ0Y7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxVQUVBLG9CQUFvQjtBQUNsQixnQkFBSTtBQUNKLDBCQUFjLEtBQUssUUFBUTtBQUMzQixtQkFBTyxRQUFRLE9BQVEsS0FBSyxXQUFXLFlBQVksWUFBVztBQUM1RCxrQkFBSSxHQUFHLEdBQUcsS0FBSyxTQUFTLE1BQU07QUFDOUIscUJBQU8sS0FBSyxJQUFJO0FBQ2hCLG9CQUFNLEtBQUs7QUFDWCx3QkFBVSxDQUFDO0FBQ1gsbUJBQUssS0FBSyxLQUFLO0FBQ2Isb0JBQUksSUFBSSxDQUFDO0FBQ1Qsb0JBQUk7QUFDRixzQkFBSyxNQUFNLEVBQUUsT0FBTyxlQUFlLElBQUksR0FBSTtBQUN6Qyw0QkFBUSxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUM7QUFBQSxrQkFDaEMsT0FBTztBQUNMLDRCQUFRLEtBQUssTUFBTTtBQUFBLGtCQUNyQjtBQUFBLGdCQUNGLFNBQVMsT0FBTztBQUNkLHNCQUFJO0FBQ0osMEJBQVEsS0FBSyxFQUFFLE9BQU8sUUFBUSxTQUFTLENBQUMsQ0FBQztBQUFBLGdCQUMzQztBQUFBLGNBQ0Y7QUFDQSxxQkFBTztBQUFBLFlBQ1QsR0FBRyxLQUFLLFVBQVUsQ0FBQyxHQUFJLFVBQVUsYUFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQy9EO0FBQUEsVUFFQSxlQUFlLFVBQVUsQ0FBQyxHQUFHO0FBQzNCLHFCQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsSUFBSTtBQUMvQyxxQkFBUyxVQUFVLFNBQVMsU0FBUyxLQUFLLGNBQWM7QUFDeEQsZ0JBQUksUUFBUSxXQUFXLE1BQU07QUFDM0IscUJBQU8sS0FBSyxrQkFBa0I7QUFBQSxZQUNoQztBQUFBLFVBQ0Y7QUFBQSxVQUVBLFdBQVcsUUFBUSxNQUFNO0FBQ3ZCLGdCQUFJO0FBQ0osZ0JBQUksQ0FBQyxLQUFLLGtCQUFrQjtBQUMxQixzQkFBUSxNQUFNLEtBQUssZUFBZSxPQUFPLElBQUksV0FBVyxLQUFLLElBQUk7QUFBQSxZQUNuRTtBQUFBLFVBQ0Y7QUFBQSxRQUVGO0FBQ0EsUUFBQUEsT0FBTSxVQUFVLFdBQVc7QUFBQSxVQUN6QixTQUFTLE1BQU8sS0FBSztBQUFBLFVBQ3JCLFlBQVk7QUFBQSxVQUNaO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTjtBQUVBLGVBQU9BO0FBQUEsTUFFVCxFQUFHLEtBQUssY0FBYztBQUV0QixVQUFJLFVBQVU7QUFFZCxVQUFJLFNBQVMsVUFBVTtBQUV2QixpQkFBVztBQUVYLGlCQUFXO0FBRVgsZ0JBQVcsV0FBVztBQUFBLFFBQ3BCLE1BQU1DLFNBQVE7QUFBQSxVQUNaLFlBQVksVUFBVSxDQUFDLEdBQUc7QUFDeEIsaUJBQUssVUFBVTtBQUNmLHFCQUFTLEtBQUssS0FBSyxTQUFTLEtBQUssVUFBVSxJQUFJO0FBQy9DLGlCQUFLLFNBQVMsSUFBSSxTQUFTLElBQUk7QUFDL0IsaUJBQUssT0FBTyxDQUFDO0FBQ2IsaUJBQUssY0FBYztBQUNuQixpQkFBSyxhQUFhLEtBQUssSUFBSTtBQUFBLFVBQzdCO0FBQUEsVUFFQSxnQkFBZ0I7QUFDZCxtQkFBTyxLQUFLLFdBQVcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLFFBQVE7QUFDcEQscUJBQU8sS0FBSyxXQUFXO0FBQUEsWUFDekIsQ0FBQztBQUFBLFVBQ0g7QUFBQSxVQUVBLFNBQVM7QUFDUCx5QkFBYSxLQUFLLFFBQVE7QUFDMUIsaUJBQUssYUFBYSxLQUFLLElBQUk7QUFDM0IsaUJBQUssU0FBUztBQUNkLGlCQUFLLE9BQU8sUUFBUSxTQUFTLEtBQUssSUFBSTtBQUN0QyxpQkFBSyxPQUFPLENBQUM7QUFDYixtQkFBTyxLQUFLLGNBQWM7QUFBQSxVQUM1QjtBQUFBLFVBRUEsSUFBSSxNQUFNO0FBQ1IsZ0JBQUk7QUFDSixpQkFBSyxLQUFLLEtBQUssSUFBSTtBQUNuQixrQkFBTSxLQUFLO0FBQ1gsZ0JBQUksS0FBSyxLQUFLLFdBQVcsS0FBSyxTQUFTO0FBQ3JDLG1CQUFLLE9BQU87QUFBQSxZQUNkLFdBQVksS0FBSyxXQUFXLFFBQVMsS0FBSyxLQUFLLFdBQVcsR0FBRztBQUMzRCxtQkFBSyxXQUFXLFdBQVcsTUFBTTtBQUMvQix1QkFBTyxLQUFLLE9BQU87QUFBQSxjQUNyQixHQUFHLEtBQUssT0FBTztBQUFBLFlBQ2pCO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFFRjtBQUNBLFFBQUFBLFNBQVEsVUFBVSxXQUFXO0FBQUEsVUFDM0IsU0FBUztBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBRUEsZUFBT0E7QUFBQSxNQUVULEVBQUcsS0FBSyxjQUFjO0FBRXRCLFVBQUksWUFBWTtBQUVoQixVQUFJLGVBQWUsTUFBTSxRQUFRLElBQUksOEVBQThFO0FBRW5ILFVBQUksYUFBYSwwQkFBMEIsU0FBUztBQUVwRCxVQUFJQyxhQUFZLG9CQUFvQixVQUFVLE9BQU8sa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixVQUFVLFFBQVEsVUFDckksU0FBUyxDQUFDLEVBQUU7QUFFZCx5QkFBbUI7QUFFbkIsMkJBQXFCO0FBRXJCLGlCQUFXO0FBRVgsaUJBQVc7QUFFWCxjQUFRO0FBRVIseUJBQW1CO0FBRW5CLHlCQUFtQjtBQUVuQixpQkFBVztBQUVYLGlCQUFXO0FBRVgsZUFBUztBQUVULE1BQUFBLGNBQWMsV0FBVztBQUFBLFFBQ3ZCLE1BQU1BLFlBQVc7QUFBQSxVQUNmLFlBQVksVUFBVSxDQUFDLE1BQU0sU0FBUztBQUNwQyxnQkFBSSxzQkFBc0I7QUFDMUIsaUJBQUssY0FBYyxLQUFLLFlBQVksS0FBSyxJQUFJO0FBQzdDLGlCQUFLLGlCQUFpQixTQUFTLE9BQU87QUFDdEMscUJBQVMsS0FBSyxTQUFTLEtBQUssa0JBQWtCLElBQUk7QUFDbEQsaUJBQUssVUFBVSxJQUFJLFNBQVMsZ0JBQWdCO0FBQzVDLGlCQUFLLGFBQWEsQ0FBQztBQUNuQixpQkFBSyxVQUFVLElBQUksU0FBUyxDQUFDLFlBQVksVUFBVSxXQUFXLFdBQVcsRUFBRSxPQUFPLEtBQUssa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILGlCQUFLLFdBQVc7QUFDaEIsaUJBQUssU0FBUyxJQUFJLFNBQVMsSUFBSTtBQUMvQixpQkFBSyxjQUFjLElBQUksT0FBTyxVQUFVLEtBQUssT0FBTztBQUNwRCxpQkFBSyxnQkFBZ0IsSUFBSSxPQUFPLFlBQVksS0FBSyxPQUFPO0FBQ3hELDJCQUFlLFNBQVMsS0FBSyxTQUFTLEtBQUssZUFBZSxDQUFDLENBQUM7QUFDNUQsaUJBQUssU0FBVSxXQUFXO0FBQ3hCLGtCQUFJLEtBQUssY0FBYyxXQUFXLEtBQUssY0FBYyxhQUFjLEtBQUssY0FBYyxNQUFPO0FBQzNGLHVDQUF1QixTQUFTLEtBQUssU0FBUyxLQUFLLG9CQUFvQixDQUFDLENBQUM7QUFDekUsdUJBQU8sSUFBSSxpQkFBaUIsTUFBTSxjQUFjLG9CQUFvQjtBQUFBLGNBQ3RFLFdBQVcsS0FBSyxjQUFjLFNBQVM7QUFDckMsdUNBQXVCLFNBQVMsS0FBSyxTQUFTLEtBQUssb0JBQW9CLENBQUMsQ0FBQztBQUN6RSx1QkFBTyxJQUFJLGlCQUFpQixNQUFNLGNBQWMsb0JBQW9CO0FBQUEsY0FDdEUsT0FBTztBQUNMLHNCQUFNLElBQUlBLFlBQVcsVUFBVSxnQkFBZ0IsMkJBQTJCLEtBQUssU0FBUyxFQUFFO0FBQUEsY0FDNUY7QUFBQSxZQUNGLEVBQUcsS0FBSyxJQUFJO0FBQ1osaUJBQUssUUFBUSxHQUFHLFlBQVksTUFBTTtBQUNoQyxrQkFBSTtBQUNKLHNCQUFRLE1BQU0sS0FBSyxPQUFPLGNBQWMsT0FBTyxPQUFPLElBQUksUUFBUSxhQUFhLElBQUksSUFBSSxJQUFJLFNBQVM7QUFBQSxZQUN0RyxDQUFDO0FBQ0QsaUJBQUssUUFBUSxHQUFHLFFBQVEsTUFBTTtBQUM1QixrQkFBSTtBQUNKLHNCQUFRLE1BQU0sS0FBSyxPQUFPLGNBQWMsT0FBTyxPQUFPLElBQUksVUFBVSxhQUFhLElBQUksTUFBTSxJQUFJLFNBQVM7QUFBQSxZQUMxRyxDQUFDO0FBQUEsVUFDSDtBQUFBLFVBRUEsaUJBQWlCLFNBQVMsU0FBUztBQUNqQyxnQkFBSSxFQUFHLFdBQVcsUUFBUyxPQUFPLFlBQVksWUFBWSxRQUFRLFdBQVcsSUFBSTtBQUMvRSxvQkFBTSxJQUFJQSxZQUFXLFVBQVUsZ0JBQWdCLHVKQUF1SjtBQUFBLFlBQ3hNO0FBQUEsVUFDRjtBQUFBLFVBRUEsUUFBUTtBQUNOLG1CQUFPLEtBQUssT0FBTztBQUFBLFVBQ3JCO0FBQUEsVUFFQSxVQUFVO0FBQ1IsbUJBQU8sS0FBSyxPQUFPO0FBQUEsVUFDckI7QUFBQSxVQUVBLFVBQVU7QUFDUixtQkFBTyxLQUFLLEtBQUssRUFBRTtBQUFBLFVBQ3JCO0FBQUEsVUFFQSxpQkFBaUI7QUFDZixtQkFBTyxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRO0FBQUEsVUFDN0M7QUFBQSxVQUVBLFFBQVEsU0FBUztBQUNmLG1CQUFPLEtBQUssT0FBTyxZQUFZLE9BQU87QUFBQSxVQUN4QztBQUFBLFVBRUEsV0FBVyxRQUFRLE1BQU07QUFDdkIsbUJBQU8sS0FBSyxPQUFPLGVBQWUsS0FBSztBQUFBLFVBQ3pDO0FBQUEsVUFFQSxNQUFNLFVBQVU7QUFDZCxpQkFBSyxXQUFXO0FBQ2hCLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBRUEsT0FBTyxVQUFVO0FBQ2YsbUJBQU8sS0FBSyxRQUFRLE9BQU8sUUFBUTtBQUFBLFVBQ3JDO0FBQUEsVUFFQSxnQkFBZ0I7QUFDZCxtQkFBTyxLQUFLLE9BQU8sV0FBVztBQUFBLFVBQ2hDO0FBQUEsVUFFQSxRQUFRO0FBQ04sbUJBQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxLQUFLLFlBQVksUUFBUTtBQUFBLFVBQ3pEO0FBQUEsVUFFQSxVQUFVO0FBQ1IsbUJBQU8sS0FBSyxPQUFPLFlBQVk7QUFBQSxVQUNqQztBQUFBLFVBRUEsT0FBTztBQUNMLG1CQUFPLEtBQUssT0FBTyxTQUFTO0FBQUEsVUFDOUI7QUFBQSxVQUVBLFVBQVUsSUFBSTtBQUNaLG1CQUFPLEtBQUssUUFBUSxVQUFVLEVBQUU7QUFBQSxVQUNsQztBQUFBLFVBRUEsS0FBSyxRQUFRO0FBQ1gsbUJBQU8sS0FBSyxRQUFRLFdBQVcsTUFBTTtBQUFBLFVBQ3ZDO0FBQUEsVUFFQSxTQUFTO0FBQ1AsbUJBQU8sS0FBSyxRQUFRLGFBQWE7QUFBQSxVQUNuQztBQUFBLFVBRUEsZUFBZTtBQUNiLG1CQUFPLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUFBLFVBQzNDO0FBQUEsVUFFQSxNQUFNLFNBQVMsR0FBRztBQUNoQixtQkFBTyxLQUFLLE9BQU8sVUFBVSxNQUFNO0FBQUEsVUFDckM7QUFBQSxVQUVBLGtCQUFrQixPQUFPO0FBQ3ZCLGdCQUFJLEtBQUssV0FBVyxLQUFLLEtBQUssTUFBTTtBQUNsQywyQkFBYSxLQUFLLFdBQVcsS0FBSyxFQUFFLFVBQVU7QUFDOUMscUJBQU8sS0FBSyxXQUFXLEtBQUs7QUFDNUIscUJBQU87QUFBQSxZQUNULE9BQU87QUFDTCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsVUFFQSxNQUFNLE1BQU0sT0FBTyxLQUFLLFNBQVMsV0FBVztBQUMxQyxnQkFBSSxHQUFHO0FBQ1AsZ0JBQUk7QUFDRixlQUFDLEVBQUMsUUFBTyxJQUFLLE1BQU0sS0FBSyxPQUFPLFNBQVMsT0FBTyxRQUFRLE1BQU07QUFDOUQsbUJBQUssT0FBTyxRQUFRLFNBQVMsU0FBUyxRQUFRLEVBQUUsSUFBSSxTQUFTO0FBQzdELGtCQUFJLFlBQVksS0FBSyxLQUFLLE1BQU0sR0FBRztBQUNqQyx1QkFBTyxLQUFLLE9BQU8sUUFBUSxNQUFNO0FBQUEsY0FDbkM7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUNmLGtCQUFJO0FBQ0oscUJBQU8sS0FBSyxPQUFPLFFBQVEsU0FBUyxDQUFDO0FBQUEsWUFDdkM7QUFBQSxVQUNGO0FBQUEsVUFFQSxLQUFLLE9BQU8sS0FBSyxNQUFNO0FBQ3JCLGdCQUFJLGtCQUFrQixNQUFNO0FBQzVCLGdCQUFJLE1BQU07QUFDViwrQkFBbUIsS0FBSyxrQkFBa0IsS0FBSyxNQUFNLEtBQUs7QUFDMUQsa0JBQU0sS0FBSyxLQUFLLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFDckMsbUJBQU8sS0FBSyxNQUFNLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFDdkMsbUJBQU8sS0FBSyxXQUFXLEtBQUssSUFBSTtBQUFBLGNBQzlCLFNBQVMsV0FBVyxNQUFNO0FBQ3hCLHVCQUFPLElBQUksVUFBVSxLQUFLLFVBQVUsa0JBQWtCLEtBQUssSUFBSTtBQUFBLGNBQ2pFLEdBQUcsSUFBSTtBQUFBLGNBQ1AsWUFBWSxJQUFJLFFBQVEsY0FBYyxPQUFPLFdBQVcsV0FBVztBQUNqRSx1QkFBTyxJQUFJLFNBQVMsa0JBQWtCLEtBQUssSUFBSTtBQUFBLGNBQ2pELEdBQUcsT0FBTyxJQUFJLFFBQVEsVUFBVSxJQUFJO0FBQUEsY0FDcEM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFVBRUEsVUFBVSxVQUFVO0FBQ2xCLG1CQUFPLEtBQUssY0FBYyxTQUFTLE1BQU07QUFDdkMsa0JBQUksTUFBTSxPQUFPLE1BQU0sU0FBUztBQUNoQyxrQkFBSSxLQUFLLE9BQU8sTUFBTSxHQUFHO0FBQ3ZCLHVCQUFPLEtBQUssUUFBUSxRQUFRLElBQUk7QUFBQSxjQUNsQztBQUNBLHNCQUFRLEtBQUssUUFBUSxTQUFTO0FBQzlCLGVBQUMsRUFBQyxTQUFTLEtBQUksSUFBSSxPQUFPLE1BQU0sTUFBTTtBQUN0QyxrQkFBSyxZQUFZLFFBQVMsUUFBUSxTQUFTLFVBQVU7QUFDbkQsdUJBQU8sS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLGNBQ2xDO0FBQ0EsbUJBQUssT0FBTyxRQUFRLFNBQVMsWUFBWSxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0sUUFBTyxDQUFDO0FBQ3RFLHNCQUFRLEtBQUssYUFBYTtBQUMxQixxQkFBTyxLQUFLLE9BQU8sYUFBYSxPQUFPLFFBQVEsUUFBUSxRQUFRLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBQyxTQUFTLE1BQU0sVUFBUyxNQUFNO0FBQzlHLG9CQUFJO0FBQ0oscUJBQUssT0FBTyxRQUFRLFNBQVMsV0FBVyxRQUFRLEVBQUUsSUFBSSxFQUFDLFNBQVMsTUFBTSxRQUFPLENBQUM7QUFDOUUsb0JBQUksU0FBUztBQUNYLHdCQUFNLE1BQU07QUFDWiwwQkFBUSxLQUFLLE1BQU07QUFDbkIsc0JBQUksT0FBTztBQUNULHlCQUFLLE9BQU8sUUFBUSxPQUFPO0FBQUEsa0JBQzdCO0FBQ0Esc0JBQUksY0FBYyxHQUFHO0FBQ25CLHlCQUFLLE9BQU8sUUFBUSxZQUFZLEtBQUs7QUFBQSxrQkFDdkM7QUFDQSx1QkFBSyxLQUFLLE9BQU8sTUFBTSxJQUFJO0FBQzNCLHlCQUFPLEtBQUssUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUFBLGdCQUM1QyxPQUFPO0FBQ0wseUJBQU8sS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLGdCQUNsQztBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUFBLFVBQ0g7QUFBQSxVQUVBLFVBQVUsVUFBVSxRQUFRLEdBQUc7QUFDN0IsbUJBQU8sS0FBSyxVQUFVLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWTtBQUNoRCxrQkFBSTtBQUNKLGtCQUFJLFdBQVcsTUFBTTtBQUNuQiw4QkFBYyxZQUFZLE9BQU8sV0FBVyxVQUFVO0FBQ3RELHVCQUFPLEtBQUssVUFBVSxhQUFhLFFBQVEsT0FBTztBQUFBLGNBQ3BELE9BQU87QUFDTCx1QkFBTyxLQUFLLFFBQVEsUUFBUSxLQUFLO0FBQUEsY0FDbkM7QUFBQSxZQUNGLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNkLHFCQUFPLEtBQUssT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUFBLFlBQ3ZDLENBQUM7QUFBQSxVQUNIO0FBQUEsVUFFQSxlQUFlLFNBQVM7QUFDdEIsbUJBQU8sS0FBSyxRQUFRLFNBQVMsU0FBUyxLQUFLO0FBQ3pDLHFCQUFPLElBQUksT0FBTyxFQUFDLFFBQU8sQ0FBQztBQUFBLFlBQzdCLENBQUM7QUFBQSxVQUNIO0FBQUEsVUFFQSxLQUFLLFVBQVUsQ0FBQyxHQUFHO0FBQ2pCLGdCQUFJLE1BQU07QUFDVixzQkFBVSxTQUFTLEtBQUssU0FBUyxLQUFLLFlBQVk7QUFDbEQsK0JBQW1CLENBQUMsT0FBTztBQUN6QixrQkFBSTtBQUNKLHlCQUFXLE1BQU07QUFDZixvQkFBSTtBQUNKLHlCQUFTLEtBQUssUUFBUTtBQUN0Qix1QkFBUSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTztBQUFBLGNBQzdEO0FBQ0EscUJBQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDM0Msb0JBQUksU0FBUyxHQUFHO0FBQ2QseUJBQU8sUUFBUTtBQUFBLGdCQUNqQixPQUFPO0FBQ0wseUJBQU8sS0FBSyxHQUFHLFFBQVEsTUFBTTtBQUMzQix3QkFBSSxTQUFTLEdBQUc7QUFDZCwyQkFBSyxtQkFBbUIsTUFBTTtBQUM5Qiw2QkFBTyxRQUFRO0FBQUEsb0JBQ2pCO0FBQUEsa0JBQ0YsQ0FBQztBQUFBLGdCQUNIO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUNBLG1CQUFPLFFBQVEsbUJBQW1CLEtBQUssT0FBTyxTQUFTLE9BQU8sTUFBTTtBQUNsRSxxQkFBTyxLQUFLLE9BQU87QUFBQSxnQkFDakIsU0FBUyxRQUFRO0FBQUEsY0FDbkIsQ0FBQztBQUFBLFlBQ0gsR0FBRyxLQUFLLFlBQVksTUFBTTtBQUN4QixxQkFBTyxLQUFLLFFBQVEsUUFBUSxJQUFJO0FBQUEsWUFDbEMsR0FBRyxLQUFLLGNBQWMsU0FBUyxNQUFNO0FBQ25DLHFCQUFPLEtBQUssWUFBWSxTQUFTLE1BQU07QUFDckMsb0JBQUksR0FBRyxLQUFLO0FBQ1osc0JBQU0sS0FBSztBQUNYLHFCQUFLLEtBQUssS0FBSztBQUNiLHNCQUFJLElBQUksQ0FBQztBQUNULHNCQUFJLEtBQUssVUFBVSxFQUFFLElBQUksUUFBUSxFQUFFLE1BQU0sV0FBVztBQUNsRCxpQ0FBYSxFQUFFLE9BQU87QUFDdEIsaUNBQWEsRUFBRSxVQUFVO0FBQ3pCLHNCQUFFLElBQUksT0FBTztBQUFBLHNCQUNYLFNBQVMsUUFBUTtBQUFBLG9CQUNuQixDQUFDO0FBQUEsa0JBQ0g7QUFBQSxnQkFDRjtBQUNBLHFCQUFLLGVBQWUsUUFBUSxnQkFBZ0I7QUFDNUMsdUJBQU8saUJBQWlCLENBQUM7QUFBQSxjQUMzQixDQUFDO0FBQUEsWUFDSCxDQUFDLEtBQUssS0FBSyxTQUFTO0FBQUEsY0FDbEIsVUFBVSxtQkFBbUI7QUFBQSxjQUM3QixRQUFRO0FBQUEsWUFDVixHQUFHLE1BQU07QUFDUCxxQkFBTyxpQkFBaUIsQ0FBQztBQUFBLFlBQzNCLENBQUM7QUFDRCxpQkFBSyxXQUFXLFNBQVMsS0FBSztBQUM1QixxQkFBTyxJQUFJLFFBQVEsSUFBSUEsWUFBVyxVQUFVLGdCQUFnQixRQUFRLG1CQUFtQixDQUFDO0FBQUEsWUFDMUY7QUFDQSxpQkFBSyxPQUFPLE1BQU07QUFDaEIscUJBQU8sS0FBSyxRQUFRLE9BQU8sSUFBSUEsWUFBVyxVQUFVLGdCQUFnQixnQ0FBZ0MsQ0FBQztBQUFBLFlBQ3ZHO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsVUFFQSxNQUFNLFlBQVksS0FBSztBQUNyQixnQkFBSSxNQUFNLFNBQVMsT0FBTyxTQUFTLFlBQVksU0FBUztBQUN4RCxhQUFDLEVBQUMsTUFBTSxRQUFPLElBQUk7QUFDbkIsZ0JBQUk7QUFDRixlQUFDLEVBQUMsWUFBWSxTQUFTLFNBQVEsSUFBSyxNQUFNLEtBQUssT0FBTyxXQUFXLEtBQUssT0FBTyxHQUFHLFFBQVEsTUFBTTtBQUFBLFlBQ2hHLFNBQVMsUUFBUTtBQUNmLHNCQUFRO0FBQ1IsbUJBQUssT0FBTyxRQUFRLFNBQVMsbUJBQW1CLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSxTQUFTLE1BQUssQ0FBQztBQUNwRixrQkFBSSxPQUFPLEVBQUMsTUFBSyxDQUFDO0FBQ2xCLHFCQUFPO0FBQUEsWUFDVDtBQUNBLGdCQUFJLFNBQVM7QUFDWCxrQkFBSSxPQUFPO0FBQ1gscUJBQU87QUFBQSxZQUNULFdBQVcsWUFBWTtBQUNyQix3QkFBVSxhQUFhQSxZQUFXLFVBQVUsU0FBUyxPQUFPLEtBQUssUUFBUSxjQUFjLFFBQVEsUUFBUSxJQUFJLGFBQWFBLFlBQVcsVUFBVSxTQUFTLG9CQUFvQixLQUFLLFFBQVEsY0FBYyxRQUFRLFdBQVcsQ0FBQyxJQUFJLGFBQWFBLFlBQVcsVUFBVSxTQUFTLFdBQVcsTUFBTTtBQUN6UixrQkFBSSxXQUFXLE1BQU07QUFDbkIsd0JBQVEsT0FBTztBQUFBLGNBQ2pCO0FBQ0Esa0JBQUssV0FBVyxRQUFTLGFBQWFBLFlBQVcsVUFBVSxTQUFTLFVBQVU7QUFDNUUsb0JBQUksV0FBVyxNQUFNO0FBQ25CLHNCQUFJLE9BQU87QUFBQSxnQkFDYjtBQUNBLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFDQSxnQkFBSSxRQUFRLFlBQVksT0FBTztBQUMvQixpQkFBSyxRQUFRLEtBQUssR0FBRztBQUNyQixrQkFBTSxLQUFLLFVBQVU7QUFDckIsbUJBQU87QUFBQSxVQUNUO0FBQUEsVUFFQSxTQUFTLEtBQUs7QUFDWixnQkFBSSxLQUFLLFFBQVEsVUFBVSxJQUFJLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDbEQsa0JBQUksUUFBUSxJQUFJQSxZQUFXLFVBQVUsZ0JBQWdCLDZDQUE2QyxJQUFJLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDcEgscUJBQU87QUFBQSxZQUNULE9BQU87QUFDTCxrQkFBSSxVQUFVO0FBQ2QscUJBQU8sS0FBSyxZQUFZLFNBQVMsS0FBSyxhQUFhLEdBQUc7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFBQSxVQUVBLFVBQVUsTUFBTTtBQUNkLGdCQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsS0FBSyxNQUFNO0FBQ3JDLGdCQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWTtBQUNqQyxvQkFBTSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDNUQsd0JBQVUsU0FBUyxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVc7QUFBQSxZQUM5QyxPQUFPO0FBQ0wscUJBQU8sTUFBTSxDQUFDLFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDdkUsd0JBQVUsU0FBUyxLQUFLLFNBQVMsS0FBSyxXQUFXO0FBQUEsWUFDbkQ7QUFDQSxtQkFBTyxJQUFJQyxVQUFTO0FBQ2xCLHFCQUFPLElBQUksS0FBSyxRQUFRLFNBQVMsU0FBUyxRQUFRO0FBQ2hELHVCQUFPLEdBQUcsR0FBR0EsT0FBTSxZQUFZQSxPQUFNO0FBQ25DLDBCQUFRQSxNQUFLLENBQUMsS0FBSyxPQUFPLFNBQVMsU0FBU0EsS0FBSTtBQUFBLGdCQUNsRCxDQUFDO0FBQUEsY0FDSCxDQUFDO0FBQUEsWUFDSDtBQUNBLGtCQUFNLElBQUksTUFBTSxNQUFNLE1BQU0sU0FBUyxLQUFLLGFBQWEsS0FBSyxjQUFjLEtBQUssUUFBUSxLQUFLLFNBQVMsS0FBSyxPQUFPO0FBQ2pILGdCQUFJLFFBQVEsS0FBSyxTQUFTQSxPQUFNO0FBQzlCLHFCQUFPLE9BQU8sT0FBTyxhQUFhLEdBQUcsR0FBR0EsS0FBSSxJQUFJO0FBQUEsWUFDbEQsQ0FBQyxFQUFFLE1BQU0sU0FBU0EsT0FBTTtBQUN0QixrQkFBSSxNQUFNLFFBQVFBLEtBQUksR0FBRztBQUN2Qix1QkFBTyxPQUFPLE9BQU8sYUFBYSxHQUFHLEdBQUdBLEtBQUksSUFBSTtBQUFBLGNBQ2xELE9BQU87QUFDTCx1QkFBTyxPQUFPLE9BQU8sYUFBYSxHQUFHQSxLQUFJLElBQUk7QUFBQSxjQUMvQztBQUFBLFlBQ0YsQ0FBQztBQUNELG1CQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsVUFDMUI7QUFBQSxVQUVBLFlBQVksTUFBTTtBQUNoQixnQkFBSSxLQUFLLFNBQVM7QUFDbEIsZ0JBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZO0FBQ2pDLGVBQUMsTUFBTSxHQUFHLElBQUksSUFBSTtBQUNsQix3QkFBVSxDQUFDO0FBQUEsWUFDYixPQUFPO0FBQ0wsZUFBQyxTQUFTLE1BQU0sR0FBRyxJQUFJLElBQUk7QUFBQSxZQUM3QjtBQUNBLGtCQUFNLElBQUksTUFBTSxNQUFNLE1BQU0sU0FBUyxLQUFLLGFBQWEsS0FBSyxjQUFjLEtBQUssUUFBUSxLQUFLLFNBQVMsS0FBSyxPQUFPO0FBQ2pILGlCQUFLLFNBQVMsR0FBRztBQUNqQixtQkFBTyxJQUFJO0FBQUEsVUFDYjtBQUFBLFVBRUEsS0FBSyxJQUFJO0FBQ1AsZ0JBQUksVUFBVTtBQUNkLHVCQUFXLEtBQUssU0FBUyxLQUFLLElBQUk7QUFDbEMsc0JBQVUsWUFBWSxNQUFNO0FBQzFCLHFCQUFPLFNBQVMsR0FBRyxLQUFLLElBQUksR0FBRyxHQUFHLElBQUk7QUFBQSxZQUN4QztBQUNBLG9CQUFRLGNBQWMsU0FBUyxZQUFZLE1BQU07QUFDL0MscUJBQU8sU0FBUyxTQUFTLElBQUksR0FBRyxJQUFJO0FBQUEsWUFDdEM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxVQUVBLE1BQU0sZUFBZSxVQUFVLENBQUMsR0FBRztBQUNqQyxrQkFBTSxLQUFLLE9BQU8sbUJBQW1CLFNBQVMsVUFBVSxTQUFTLEtBQUssYUFBYSxDQUFDO0FBQ3BGLHFCQUFTLFVBQVUsU0FBUyxLQUFLLGtCQUFrQixJQUFJO0FBQ3ZELG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBRUEsbUJBQW1CO0FBQ2pCLG1CQUFPLEtBQUssT0FBTyxxQkFBcUI7QUFBQSxVQUMxQztBQUFBLFVBRUEsbUJBQW1CLE9BQU8sR0FBRztBQUMzQixtQkFBTyxLQUFLLE9BQU8sdUJBQXVCLElBQUk7QUFBQSxVQUNoRDtBQUFBLFFBRUY7QUFDQSxRQUFBRCxZQUFXLFVBQVVBO0FBRXJCLFFBQUFBLFlBQVcsU0FBUztBQUVwQixRQUFBQSxZQUFXLFVBQVVBLFlBQVcsVUFBVSxVQUFVLFdBQVc7QUFFL0QsUUFBQUEsWUFBVyxXQUFXQSxZQUFXLFVBQVUsV0FBVztBQUFBLFVBQ3BELE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxVQUNWLG1CQUFtQjtBQUFBLFVBQ25CLE9BQU87QUFBQSxRQUNUO0FBRUEsUUFBQUEsWUFBVyxrQkFBa0JBLFlBQVcsVUFBVSxrQkFBa0I7QUFFcEUsUUFBQUEsWUFBVyxRQUFRQSxZQUFXLFVBQVUsUUFBUTtBQUVoRCxRQUFBQSxZQUFXLGtCQUFrQkEsWUFBVyxVQUFVLGtCQUFrQjtBQUVwRSxRQUFBQSxZQUFXLG9CQUFvQkEsWUFBVyxVQUFVLG9CQUFvQjtBQUV4RSxRQUFBQSxZQUFXLFVBQVVBLFlBQVcsVUFBVSxVQUFVO0FBRXBELFFBQUFBLFlBQVcsVUFBVSxjQUFjO0FBQUEsVUFDakMsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFVBQ1IsWUFBWTtBQUFBLFVBQ1osSUFBSTtBQUFBLFFBQ047QUFFQSxRQUFBQSxZQUFXLFVBQVUsZ0JBQWdCO0FBQUEsVUFDbkMsZUFBZTtBQUFBLFVBQ2YsU0FBUztBQUFBLFVBQ1QsV0FBVztBQUFBLFVBQ1gsVUFBVUEsWUFBVyxVQUFVLFNBQVM7QUFBQSxVQUN4QyxTQUFTO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCwwQkFBMEI7QUFBQSxVQUMxQix3QkFBd0I7QUFBQSxVQUN4QiwyQkFBMkI7QUFBQSxVQUMzQix5QkFBeUI7QUFBQSxVQUN6QiwwQkFBMEI7QUFBQSxRQUM1QjtBQUVBLFFBQUFBLFlBQVcsVUFBVSxxQkFBcUI7QUFBQSxVQUN4QztBQUFBLFVBQ0EsU0FBUztBQUFBLFVBQ1QsbUJBQW1CO0FBQUEsUUFDckI7QUFFQSxRQUFBQSxZQUFXLFVBQVUscUJBQXFCO0FBQUEsVUFDeEM7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULG1CQUFtQjtBQUFBLFVBQ25CLGVBQWU7QUFBQSxVQUNmLE9BQU87QUFBQSxVQUNQLGVBQWUsQ0FBQztBQUFBLFVBQ2hCLGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFlBQVk7QUFBQSxRQUNkO0FBRUEsUUFBQUEsWUFBVyxVQUFVLG1CQUFtQjtBQUFBLFVBQ3RDLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLElBQUk7QUFBQSxVQUNKLGNBQWM7QUFBQSxVQUNkLGlCQUFpQjtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUVBLFFBQUFBLFlBQVcsVUFBVSxlQUFlO0FBQUEsVUFDbEMscUJBQXFCO0FBQUEsVUFDckIsaUJBQWlCO0FBQUEsVUFDakIsa0JBQWtCO0FBQUEsUUFDcEI7QUFFQSxlQUFPQTtBQUFBLE1BRVQsRUFBRyxLQUFLLGNBQWM7QUFFdEIsVUFBSSxlQUFlQTtBQUVuQixVQUFJLE1BQU07QUFFVixhQUFPO0FBQUEsSUFFUixDQUFFO0FBQUE7QUFBQTs7O0FDbi9DRjtBQUFBLG1HQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLGFBQWEsU0FBU0MsY0FBYztBQUFBLElBQUU7QUFDNUMsZUFBVyxZQUFZLHVCQUFPLE9BQU8sSUFBSTtBQWdCekMsUUFBTSxVQUFVO0FBUWhCLFFBQU0sZUFBZTtBQVNyQixRQUFNLGNBQWM7QUFHcEIsUUFBTSxxQkFBcUIsRUFBRSxNQUFNLElBQUksWUFBWSxJQUFJLFdBQVcsRUFBRTtBQUNwRSxXQUFPLE9BQU8sbUJBQW1CLFVBQVU7QUFDM0MsV0FBTyxPQUFPLGtCQUFrQjtBQVVoQyxhQUFTQyxPQUFPLFFBQVE7QUFDdEIsVUFBSSxPQUFPLFdBQVcsVUFBVTtBQUM5QixjQUFNLElBQUksVUFBVSxrREFBa0Q7QUFBQSxNQUN4RTtBQUVBLFVBQUksUUFBUSxPQUFPLFFBQVEsR0FBRztBQUM5QixZQUFNLE9BQU8sVUFBVSxLQUNuQixPQUFPLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUM1QixPQUFPLEtBQUs7QUFFaEIsVUFBSSxZQUFZLEtBQUssSUFBSSxNQUFNLE9BQU87QUFDcEMsY0FBTSxJQUFJLFVBQVUsb0JBQW9CO0FBQUEsTUFDMUM7QUFFQSxZQUFNLFNBQVM7QUFBQSxRQUNiLE1BQU0sS0FBSyxZQUFZO0FBQUEsUUFDdkIsWUFBWSxJQUFJLFdBQVc7QUFBQSxNQUM3QjtBQUdBLFVBQUksVUFBVSxJQUFJO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJO0FBRUosY0FBUSxZQUFZO0FBRXBCLGFBQVEsUUFBUSxRQUFRLEtBQUssTUFBTSxHQUFJO0FBQ3JDLFlBQUksTUFBTSxVQUFVLE9BQU87QUFDekIsZ0JBQU0sSUFBSSxVQUFVLDBCQUEwQjtBQUFBLFFBQ2hEO0FBRUEsaUJBQVMsTUFBTSxDQUFDLEVBQUU7QUFDbEIsY0FBTSxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQzNCLGdCQUFRLE1BQU0sQ0FBQztBQUVmLFlBQUksTUFBTSxDQUFDLE1BQU0sS0FBSztBQUVwQixrQkFBUSxNQUNMLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUU1Qix1QkFBYSxLQUFLLEtBQUssTUFBTSxRQUFRLE1BQU0sUUFBUSxjQUFjLElBQUk7QUFBQSxRQUN2RTtBQUVBLGVBQU8sV0FBVyxHQUFHLElBQUk7QUFBQSxNQUMzQjtBQUVBLFVBQUksVUFBVSxPQUFPLFFBQVE7QUFDM0IsY0FBTSxJQUFJLFVBQVUsMEJBQTBCO0FBQUEsTUFDaEQ7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVNDLFdBQVcsUUFBUTtBQUMxQixVQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQzlCLFlBQU0sT0FBTyxVQUFVLEtBQ25CLE9BQU8sTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLElBQzVCLE9BQU8sS0FBSztBQUVoQixVQUFJLFlBQVksS0FBSyxJQUFJLE1BQU0sT0FBTztBQUNwQyxlQUFPO0FBQUEsTUFDVDtBQUVBLFlBQU0sU0FBUztBQUFBLFFBQ2IsTUFBTSxLQUFLLFlBQVk7QUFBQSxRQUN2QixZQUFZLElBQUksV0FBVztBQUFBLE1BQzdCO0FBR0EsVUFBSSxVQUFVLElBQUk7QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixjQUFRLFlBQVk7QUFFcEIsYUFBUSxRQUFRLFFBQVEsS0FBSyxNQUFNLEdBQUk7QUFDckMsWUFBSSxNQUFNLFVBQVUsT0FBTztBQUN6QixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxpQkFBUyxNQUFNLENBQUMsRUFBRTtBQUNsQixjQUFNLE1BQU0sQ0FBQyxFQUFFLFlBQVk7QUFDM0IsZ0JBQVEsTUFBTSxDQUFDO0FBRWYsWUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLO0FBRXBCLGtCQUFRLE1BQ0wsTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDO0FBRTVCLHVCQUFhLEtBQUssS0FBSyxNQUFNLFFBQVEsTUFBTSxRQUFRLGNBQWMsSUFBSTtBQUFBLFFBQ3ZFO0FBRUEsZUFBTyxXQUFXLEdBQUcsSUFBSTtBQUFBLE1BQzNCO0FBRUEsVUFBSSxVQUFVLE9BQU8sUUFBUTtBQUMzQixlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQUgsUUFBTyxRQUFRLFVBQVUsRUFBRSxPQUFBRSxRQUFPLFdBQUFDLFdBQVU7QUFDNUMsSUFBQUgsUUFBTyxRQUFRLFFBQVFFO0FBQ3ZCLElBQUFGLFFBQU8sUUFBUSxZQUFZRztBQUMzQixJQUFBSCxRQUFPLFFBQVEscUJBQXFCO0FBQUE7QUFBQTs7O0FDeEtwQztBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxtQkFBc0I7QUFHZixJQUFNO0FBQUEsRUFDWDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLElBQUksYUFBQUk7OztBRGRKLElBQUFDLE1BQW9CO0FBQ3BCLElBQUFDLE1BQW9CO0FBQ3BCLElBQUFDLFFBQXNCOzs7QUVIdEI7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLGFBQWU7QUFBQSxFQUNmLFNBQVc7QUFBQSxFQUNYLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULE1BQVE7QUFBQSxFQUNWO0FBQUEsRUFDQSxjQUFnQjtBQUFBLElBQ2QsaUJBQWlCO0FBQUEsSUFDakIsb0JBQW9CO0FBQUEsSUFDcEIseUJBQXlCO0FBQUEsSUFDekIsaUJBQWlCO0FBQUEsSUFDakIsV0FBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLEVBQ2pCO0FBQUEsRUFDQSxpQkFBbUI7QUFBQSxJQUNqQixlQUFlO0FBQUEsSUFDZixTQUFXO0FBQUEsSUFDWCxZQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLGdCQUFrQjtBQUNwQjs7O0FDeEJBLFdBQXNCO0FBQ3RCLFNBQW9CO0FBTXBCLGVBQXNCLGVBQWUsZ0JBQXVDO0FBQzFFLFdBQVMsVUFBVSxHQUFHLFVBQVUsS0FBSyxXQUFXO0FBQzlDLFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBUyxZQUFTLGdCQUFnQixFQUFFLFVBQVUsT0FBTyxDQUFDO0FBQ3ZFLFlBQU0sRUFBRSxLQUFLLElBQUksS0FBSyxNQUFNLFFBQVE7QUFDcEMsVUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QjtBQUFBLE1BQ0Y7QUFFQSxNQUFLLGVBQVUsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN0QztBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsY0FBUSxNQUFNLDhCQUE4QixLQUFLLEVBQUU7QUFDbkQsWUFBTSxNQUFNLEdBQUc7QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLE1BQU0sbUNBQW1DLGNBQWMsRUFBRTtBQUNqRTtBQUVBLGVBQWUsTUFBTSxJQUEyQjtBQUM5QyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVksV0FBVyxTQUFTLEVBQUUsQ0FBQztBQUN6RDs7O0FDN0JBLElBQUFDLHdCQUFzQjtBQUN0QixzQkFBd0Q7QUFDeEQsa0JBQWlCO0FBQ2pCLGdCQUFlO0FBQ2Ysa0JBQTBCOzs7QUNKMUIsMkJBQXNCO0FBRWYsU0FBUyxZQUFZLFNBQXlDO0FBQ25FLFFBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJO0FBQ3hCLFNBQU8sSUFBSSxRQUFnQixDQUFDLFNBQVMsV0FBVztBQUM5QyxVQUFNLFdBQU8sNEJBQU0sTUFBTSxNQUFNO0FBQUEsTUFDN0IsS0FBSyxRQUFRO0FBQUEsTUFDYixPQUFPLENBQUMsVUFBVSxRQUFRLFNBQVM7QUFBQSxJQUNyQyxDQUFDO0FBRUQsU0FBSyxHQUFHLFNBQVMsTUFBTTtBQUV2QixRQUFJLFNBQVM7QUFDYixTQUFLLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVTtBQUNoQyxnQkFBVSxNQUFNLFNBQVM7QUFBQSxJQUMzQixDQUFDO0FBRUQsU0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTO0FBQ3pCLFVBQUksU0FBUyxHQUFHO0FBQ2QsZUFBTyxJQUFJLE1BQU0sR0FBRyxJQUFJLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztBQUNwRDtBQUFBLE1BQ0Y7QUFFQSxjQUFRLE1BQU07QUFBQSxJQUNoQixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7OztBQ3BCQSxTQUFTLFFBQVEsT0FBaUM7QUFDaEQsU0FDRSxPQUFPLFVBQVUsWUFDakIsT0FBTyxVQUFVLEtBQUssS0FDdEIsU0FBUyxLQUNULFFBQVE7QUFFWjtBQUVPLFNBQVMsNEJBQ2QsT0FDd0I7QUFDeEIsUUFBTSxTQUFrQixLQUFLLE1BQU0sS0FBSztBQUN4QyxNQUFJLFVBQVUsUUFBUSxPQUFPLFdBQVcsVUFBVTtBQUNoRCxVQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxFQUM5RDtBQUNBLFFBQU0sY0FBYztBQUNwQixNQUNFLENBQUMsUUFBUSxZQUFZLE1BQU0sS0FDM0IsWUFBWSxXQUFXLEtBQ3ZCLENBQUMsUUFBUSxZQUFZLGNBQWMsS0FDbkMsQ0FBQyxNQUFNLFFBQVEsWUFBWSxxQkFBcUIsS0FDaEQsWUFBWSxzQkFBc0IsU0FBUyxTQUMzQyxDQUFDLFlBQVksc0JBQXNCLE1BQU0sT0FBTyxHQUNoRDtBQUNBLFVBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLEVBQzlEO0FBQ0EsU0FBTztBQUFBLElBQ0wsUUFBUSxZQUFZO0FBQUEsSUFDcEIsZ0JBQWdCLFlBQVk7QUFBQSxJQUM1Qix1QkFBdUIsQ0FBQyxHQUFHLElBQUksSUFBSSxZQUFZLHFCQUFxQixDQUFDO0FBQUEsRUFDdkU7QUFDRjtBQUVPLFNBQVMsZ0NBQXdEO0FBQ3RFLFFBQU0sU0FBUyxRQUFRLFNBQVM7QUFDaEMsUUFBTSxpQkFBaUIsUUFBUSxTQUFTO0FBQ3hDLFFBQU0sd0JBQXdCLFFBQVEsWUFBWTtBQUNsRCxNQUNFLFVBQVUsUUFDVixXQUFXLEtBQ1gsa0JBQWtCLFFBQ2xCLHlCQUF5QixNQUN6QjtBQUNBLFVBQU0sSUFBSSxNQUFNLGtEQUFrRDtBQUFBLEVBQ3BFO0FBQ0EsU0FBTyxFQUFFLFFBQVEsZ0JBQWdCLHNCQUFzQjtBQUN6RDtBQUVPLFNBQVMscUJBQ2QsVUFDQSxlQUNBLGlCQUN3QjtBQUN4QixNQUFJLFNBQVMsV0FBVyxlQUFlO0FBQ3JDLFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLFNBQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxJQUNILHVCQUF1QjtBQUFBLE1BQ3JCLEdBQUcsb0JBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyx1QkFBdUIsR0FBRyxlQUFlLENBQUM7QUFBQSxJQUNwRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLE9BQU8sU0FBUyxjQUFjO0FBQUEsRUFDakQ7QUFDRjs7O0FGakVBLElBQU0seUJBQXlCLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0h0QyxlQUFzQixhQUFhO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEdBYWtCO0FBQ2hCLE1BQUk7QUFDSixVQUFRLE9BQU8sTUFBTTtBQUFBLElBQ25CLEtBQUs7QUFDSCxjQUFRLE9BQU87QUFDZjtBQUFBLElBQ0YsS0FBSztBQUNILGNBQVEsVUFBTSwwQkFBUyxPQUFPLE1BQU0sTUFBTTtBQUMxQztBQUFBLEVBQ0o7QUFFQSxRQUFNLFlBQ0osbUJBQW1CLHNCQUFzQixZQUFZO0FBRXZELE1BQUk7QUFDSixNQUFJLHNCQUFzQixNQUFNO0FBQzlCLGlCQUFhLEVBQUUsTUFBTSxZQUFZLE1BQU0sbUJBQW1CO0FBQUEsRUFDNUQsT0FBTztBQUNMLGlCQUFhLE1BQU0scUJBQXFCLEVBQUUsVUFBVSxDQUFDO0FBQUEsRUFDdkQ7QUFFQSxRQUFNLHVCQUF1QixNQUFNO0FBQUEsSUFDakM7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNBLFFBQU0sc0JBQXNCLDZCQUE2QjtBQUFBLElBQ3ZEO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLFVBQXlCLENBQUM7QUFFaEMsUUFBTSxrQkFDSixtQkFBbUIsZUFBZSxRQUFRLGFBQWE7QUFDekQsTUFBSSxjQUFjO0FBQ2xCLE1BQUksaUJBQWlCO0FBQ25CLFVBQU0sTUFBTSxRQUFRLFNBQVM7QUFDN0IsUUFBSSxPQUFPLFFBQVEsUUFBUSxHQUFHO0FBQzVCLFlBQU0sSUFBSSxNQUFNLGtEQUFrRDtBQUFBLElBQ3BFO0FBQ0EsVUFBTSxvQkFBb0IsOEJBQThCO0FBRXhELFFBQUk7QUFDRixZQUFNLFlBQVksQ0FBQyxpQkFBaUIsTUFBTSxNQUFNLENBQUM7QUFBQSxJQUNuRCxRQUFRO0FBQ04sWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsbUJBQWUsTUFBTSxZQUFZLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRyxLQUFLO0FBQzNELFFBQUksQ0FBQyxhQUFhO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLGdDQUFnQztBQUFBLElBQ2xEO0FBRUEsVUFBTSxPQUFPLFVBQUFDLFFBQUcsU0FBUztBQUN6QixZQUFRO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRO0FBQUEsTUFDUixRQUFRLEtBQUssQ0FBQztBQUFBLE1BQ2QsS0FBSztBQUFBLE1BQ0wsT0FBTyxHQUFHO0FBQUEsTUFDVixRQUFRLElBQUksUUFBUSxLQUFLO0FBQUEsTUFDekIsUUFBUSxJQUFJLFFBQVE7QUFBQSxNQUNwQixRQUFRLElBQUksZ0JBQWdCO0FBQUEsTUFDNUIsS0FBSyxVQUFVLGlCQUFpQjtBQUFBLElBQ2xDO0FBQUEsRUFDRixXQUFXLG1CQUFtQixxQkFBcUI7QUFDakQsUUFBSSxhQUFhLE1BQU07QUFDckIsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFLQSxtQkFBZSxNQUFNLFlBQVksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEtBQUs7QUFDM0QsUUFBSSxDQUFDLGFBQWE7QUFDaEIsWUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQUEsSUFDbEQ7QUFFQSxZQUFRLEtBQUssUUFBUSxNQUFNLFdBQVcsSUFBSTtBQUFBLEVBQzVDO0FBRUEsVUFBUTtBQUFBLElBQ047QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBVztBQUFBLEVBQ2I7QUFFQSxNQUFJLHdCQUF3QixNQUFNO0FBQ2hDLFlBQVEsS0FBSyxtQkFBbUIscUJBQXFCLElBQUk7QUFBQSxFQUMzRDtBQUVBLE1BQUksU0FBUyxNQUFNO0FBQ2pCLFlBQVEsS0FBSyxXQUFXLEtBQUs7QUFBQSxFQUMvQjtBQUVBLE1BQUksVUFBVSxNQUFNO0FBR2xCLFlBQVEsS0FBSyxZQUFZLDJCQUEyQixNQUFNLEdBQUc7QUFBQSxFQUMvRDtBQUVBLFVBQVEsS0FBSyxHQUFHLFNBQVM7QUFFekIsVUFBUSxvQkFBb0IsTUFBTTtBQUFBLElBQ2hDLEtBQUs7QUFDSCxjQUFRLEtBQUssYUFBYSxvQkFBb0IsSUFBSTtBQUNsRDtBQUFBLElBQ0YsS0FBSztBQUNILGNBQVE7QUFBQSxRQUNOO0FBQUEsUUFDQSx1QkFBdUIsS0FBSyxVQUFVLG9CQUFvQixJQUFJLENBQUM7QUFBQSxNQUNqRTtBQUNBO0FBQUEsRUFDSjtBQUVBLFFBQU0sTUFBTSxFQUFFLEdBQUcsUUFBUSxJQUFJO0FBQzdCLE1BQUksQ0FBQyxJQUFJLG9DQUFvQztBQUMzQyxRQUFJLHFDQUFxQztBQUFBLEVBQzNDO0FBQ0EsTUFBSSxXQUFXO0FBQ2YsTUFBSSxhQUFhLE1BQU07QUFDckIsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsY0FBYyxTQUFTO0FBQUEsRUFDcEM7QUFHQSxRQUFNQyxXQUFVLFFBQVEsTUFBTTtBQUM5QixVQUFRO0FBQUEsSUFDTixZQUFZLFFBQVEsR0FBR0EsUUFBTyxJQUFJLFFBQy9CLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsRUFDNUIsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNkO0FBQ0EsTUFBSTtBQUNGLFVBQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3JDLFlBQU0sWUFBUSw2QkFBTUEsVUFBUyxTQUFTO0FBQUEsUUFDcEM7QUFBQSxRQUNBLE9BQU8sQ0FBQyxRQUFRLFFBQVEsTUFBTTtBQUFBLE1BQ2hDLENBQUM7QUFDRCxZQUFNLE9BQU8sS0FBSyxRQUFRLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNoRCxZQUFNLE9BQU8sS0FBSyxRQUFRLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNoRCxZQUFNLE1BQU0sTUFBTSxLQUFLO0FBQ3ZCLFlBQU0sTUFBTSxJQUFJO0FBRWhCLFlBQU0scUJBQXFCLE1BQU07QUFDL0IsY0FBTSxPQUFPLE9BQU8sUUFBUSxNQUFNO0FBQ2xDLGNBQU0sT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUNsQyxjQUFNLE9BQU8sUUFBUTtBQUNyQixjQUFNLE9BQU8sUUFBUTtBQUFBLE1BQ3ZCO0FBRUEsWUFBTSxLQUFLLFNBQVMsQ0FBQyxRQUFRO0FBQzNCLDJCQUFtQjtBQUNuQixlQUFPLEdBQUc7QUFBQSxNQUNaLENBQUM7QUFFRCxZQUFNLEtBQUssUUFBUSxPQUFPLFNBQVM7QUFDakMsMkJBQW1CO0FBQ25CLFlBQUksU0FBUyxHQUFHO0FBQ2QsaUJBQU8sSUFBSSxNQUFNLEdBQUdBLFFBQU8scUJBQXFCLElBQUksRUFBRSxDQUFDO0FBQ3ZEO0FBQUEsUUFDRjtBQUVBLFlBQUk7QUFDRixnQkFBTSxrQkFBa0IsWUFBWSxTQUFTO0FBQzdDLGtCQUFRLE1BQVM7QUFBQSxRQUNuQixTQUFTLEtBQUs7QUFDWixpQkFBTyxHQUFHO0FBQUEsUUFDWjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsVUFBRTtBQUNBLFVBQU0sb0JBQW9CLG9CQUFvQjtBQUFBLEVBQ2hEO0FBQ0Y7QUFFQSxlQUFlLGtCQUNiLFlBQ0EsV0FDZTtBQUNmLE1BQUk7QUFDRixRQUFJO0FBQ0osUUFBSSxhQUFhLE1BQU07QUFDckIsb0JBQWMsVUFBTSwwQkFBUyxXQUFXLE1BQU0sTUFBTTtBQUFBLElBQ3RELE9BQU87QUFDTCxvQkFBYyxNQUFNLFlBQVk7QUFBQSxRQUM5QjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsV0FBVztBQUFBLE1BQ2IsQ0FBQztBQUFBLElBQ0g7QUFDQSwrQkFBVSxpQkFBaUIsV0FBVztBQUFBLEVBQ3hDLFVBQUU7QUFDQSxVQUFNLGtCQUFrQixZQUFZLFNBQVM7QUFBQSxFQUMvQztBQUNGO0FBdUJBLGVBQWUscUJBQXFCO0FBQUEsRUFDbEM7QUFDRixHQUV3QjtBQUN0QixRQUFNLE1BQU0sTUFBTSxjQUFjLGVBQWUsU0FBUztBQUN4RCxTQUFPLEVBQUUsTUFBTSxRQUFRLE1BQU0sWUFBQUMsUUFBSyxLQUFLLEtBQUssV0FBVyxFQUFFO0FBQzNEO0FBRUEsZUFBZSxrQkFDYixZQUNBLFdBQ2U7QUFDZixVQUFRLFdBQVcsTUFBTTtBQUFBLElBQ3ZCLEtBQUs7QUFFSDtBQUFBLElBQ0YsS0FBSyxRQUFRO0FBQ1gsWUFBTSxFQUFFLEtBQUssSUFBSTtBQUNqQixVQUFJLGFBQWEsTUFBTTtBQUNyQixjQUFNLE1BQU0sWUFBQUEsUUFBSyxRQUFRLElBQUk7QUFDN0Isa0JBQU0sb0JBQUcsS0FBSyxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQ2hELE9BQU87QUFDTCxjQUFNLFlBQVksQ0FBQyxRQUFRLE1BQU0sT0FBTyxZQUFBQSxRQUFLLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFBQSxNQUM3RDtBQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLGVBQWUsb0JBQ2IsUUFDQSxXQUNzQztBQUN0QyxNQUFJLFVBQVUsTUFBTTtBQUNsQixXQUFPO0FBQUEsRUFDVDtBQUVBLFVBQVEsT0FBTyxNQUFNO0FBQUEsSUFDbkIsS0FBSztBQUNILGFBQU8sRUFBRSxNQUFNLFlBQVksTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUMvQyxLQUFLLFVBQVU7QUFDYixZQUFNLE1BQU0sTUFBTSxjQUFjLHdCQUF3QixTQUFTO0FBQ2pFLFlBQU0sT0FBTyxZQUFBQSxRQUFLLEtBQUssS0FBSyxhQUFhO0FBQ3pDLGdCQUFNLDJCQUFVLE1BQU0sT0FBTyxPQUFPO0FBQ3BDLGFBQU8sRUFBRSxNQUFNLFFBQVEsTUFBTSxJQUFJO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxlQUFlLG9CQUNiLFFBQ2U7QUFDZixNQUFJLFVBQVUsTUFBTTtBQUNsQjtBQUFBLEVBQ0Y7QUFFQSxVQUFRLE9BQU8sTUFBTTtBQUFBLElBQ25CLEtBQUs7QUFDSDtBQUFBLElBQ0YsS0FBSztBQUNILGdCQUFNLG9CQUFHLE9BQU8sS0FBSyxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNyRDtBQUFBLEVBQ0o7QUFDRjtBQUVBLGVBQWUsY0FDYixRQUNBLFdBQ2lCO0FBQ2pCLE1BQUksYUFBYSxNQUFNO0FBQ3JCLFdBQU8sVUFBTSx5QkFBUSxZQUFBQSxRQUFLLEtBQUssVUFBQUYsUUFBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQUEsRUFDckQsT0FBTztBQUNMLFlBQ0UsTUFBTSxZQUFZO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsR0FBRyxNQUFNO0FBQUEsSUFDWCxDQUFDLEdBQ0QsS0FBSztBQUFBLEVBQ1Q7QUFDRjtBQUVBLFNBQVMsNkJBQTZCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixHQUt3QjtBQUN0QixNQUFJLHFCQUFxQixRQUFRLG9CQUFvQixNQUFNO0FBQ3pELFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLE1BQUkscUJBQXFCLFFBQVEsbUJBQW1CLGFBQWE7QUFDL0QsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsUUFBTSwyQkFDSixtQkFBbUIsZUFBZSxxQkFBcUI7QUFDekQsT0FDRyxxQkFBcUIsUUFBUSw2QkFDOUIsVUFBVTtBQUFBLElBQ1IsQ0FBQyxRQUNDLFFBQVEsZ0RBQ1IsUUFBUSxZQUNSLFFBQVE7QUFBQSxFQUNaLEdBQ0E7QUFDQSxVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLHFCQUFxQixRQUFRLHVCQUF1QixTQUFTLEdBQUc7QUFDbEUsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsUUFBTSwwQkFDSixxQkFBcUIsUUFBUSxDQUFDLGtCQUFrQixXQUFXLEdBQUc7QUFDaEUsTUFDRSwyQkFDQSxVQUFVO0FBQUEsSUFDUixDQUFDLFFBQ0MsUUFBUSxhQUNSLElBQUksV0FBVyxVQUFVLEtBQ3hCLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLFdBQVcsSUFBSTtBQUFBLEVBQ2pELEdBQ0E7QUFDQSxVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLG1CQUFtQixZQUFZLHFCQUFxQixNQUFNO0FBQzVELCtCQUEyQixXQUFXLHVCQUF1QjtBQUFBLEVBQy9EO0FBQ0EsTUFBSSxtQkFBbUIsYUFBYTtBQUNsQyxXQUFPLEVBQUUsTUFBTSxXQUFXLE1BQU0sWUFBWTtBQUFBLEVBQzlDO0FBQ0EsTUFBSSxxQkFBcUIsTUFBTTtBQUM3QixXQUFPLEVBQUUsTUFBTSxXQUFXLE1BQU0sa0JBQWtCO0FBQUEsRUFDcEQ7QUFDQSxTQUFPLEVBQUUsTUFBTSxXQUFXLE1BQU0sb0JBQW9CLGtCQUFrQjtBQUN4RTtBQUVBLElBQU0sMEJBQTBCLG9CQUFJLElBQUk7QUFBQSxFQUN0QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFFRCxJQUFNLHlDQUF5QyxvQkFBSSxJQUFJO0FBQUEsRUFDckQ7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFFRCxTQUFTLDJCQUNQLE1BQ0EseUJBQ007QUFDTixXQUFTLFFBQVEsR0FBRyxRQUFRLEtBQUssUUFBUSxTQUFTLEdBQUc7QUFDbkQsVUFBTSxNQUFNLEtBQUssS0FBSztBQUN0QixRQUNFLFFBQVEscUNBQ1IsSUFBSSxXQUFXLGtDQUFrQyxLQUNqRCxRQUFRLHNCQUNSLElBQUksV0FBVyxtQkFBbUIsS0FDbEMsUUFBUSxtQkFDUixJQUFJLFdBQVcsZ0JBQWdCLEtBQy9CLFFBQVEsZUFDUixJQUFJLFdBQVcsWUFBWSxLQUMzQixRQUFRLFdBQ1IsSUFBSSxXQUFXLFFBQVEsS0FDdkIsUUFBUSxzQkFDUixJQUFJLFdBQVcsbUJBQW1CLEtBQ2xDLFFBQVEsMEJBQ1IsSUFBSSxXQUFXLHVCQUF1QixLQUN0QyxRQUFRLG9CQUNSLElBQUksV0FBVyxpQkFBaUIsS0FDaEMsUUFBUSxlQUNSLElBQUksV0FBVyxZQUFZLEtBQzFCLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLFdBQVcsSUFBSSxHQUM3QztBQUNBLFlBQU0sSUFBSTtBQUFBLFFBQ1IsNkJBQTZCLEdBQUc7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsY0FBYyxJQUFJLFdBQVcsV0FBVyxHQUFHO0FBQ3JELFlBQU0sVUFDSixRQUFRLGFBQWEsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLE1BQU0sWUFBWSxNQUFNO0FBQ25FLFVBQUksWUFBWSx1QkFBdUI7QUFDckMsY0FBTSxJQUFJO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0E7QUFBQSxJQUNGO0FBQ0EsUUFBSSxRQUFRLGVBQWUsSUFBSSxXQUFXLFlBQVksR0FBRztBQUN2RCxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0osUUFBSSxRQUFRLGNBQWMsUUFBUSxNQUFNO0FBQ3RDLGlCQUFXLEtBQUssRUFBRSxLQUFLO0FBQUEsSUFDekIsV0FBVyxJQUFJLFdBQVcsV0FBVyxHQUFHO0FBQ3RDLGlCQUFXLElBQUksTUFBTSxZQUFZLE1BQU07QUFBQSxJQUN6QyxXQUFXLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLFdBQVcsSUFBSSxHQUFHO0FBQ3hELGlCQUFXLElBQUksTUFBTSxLQUFLLE1BQU07QUFDaEMsVUFBSSxTQUFTLFdBQVcsR0FBRyxHQUFHO0FBQzVCLG1CQUFXLFNBQVMsTUFBTSxDQUFDO0FBQUEsTUFDN0I7QUFBQSxJQUNGLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFFQSxVQUFNLGNBQWMsVUFBVSxRQUFRLEdBQUcsS0FBSztBQUM5QyxVQUFNLE1BQU0sVUFBVSxNQUFNLEdBQUcsV0FBVyxFQUFFLEtBQUs7QUFDakQsUUFDRSxjQUFjLEtBQ2QsUUFBUSxVQUNSLENBQUMsMERBQTBELEtBQUssR0FBRyxHQUNuRTtBQUNBLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFVBQU0sT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUNoQyxRQUNFLHdCQUF3QixJQUFJLElBQUksS0FDL0IsMkJBQ0MsdUNBQXVDLElBQUksSUFBSSxLQUNoRCxTQUFTLGNBQWMsUUFBUSxnQ0FDaEM7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSLG9DQUFvQyxHQUFHO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyx1QkFBdUIsTUFBOEI7QUFDNUQsU0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLFVBQVU7QUFDL0IsUUFDRSxRQUFRLGVBQ1IsSUFBSSxXQUFXLFlBQVksS0FDMUIsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksV0FBVyxJQUFJLEdBQzdDO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFFBQVEsY0FBYyxRQUFRLE1BQU07QUFDdEMsYUFBTyw2QkFBNkIsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ3JEO0FBQ0EsUUFBSSxJQUFJLFdBQVcsV0FBVyxHQUFHO0FBQy9CLGFBQU8sNkJBQTZCLElBQUksTUFBTSxZQUFZLE1BQU0sQ0FBQztBQUFBLElBQ25FO0FBQ0EsUUFBSSxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRztBQUNqRCxZQUFNLFdBQVcsSUFBSSxNQUFNLEtBQUssTUFBTTtBQUN0QyxhQUFPO0FBQUEsUUFDTCxTQUFTLFdBQVcsR0FBRyxJQUFJLFNBQVMsTUFBTSxDQUFDLElBQUk7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0g7QUFFQSxTQUFTLDZCQUE2QixVQUF1QztBQUMzRSxRQUFNLE1BQU0sVUFBVSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSztBQUMzRCxTQUFPLFFBQVEsa0JBQWtCLFFBQVE7QUFDM0M7OztBR2pzQkEsZ0NBQXNCO0FBQ3RCLHFCQUF5RDtBQUN6RCxJQUFBRyxRQUFzQjtBQTJCdEIsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSxlQUFlO0FBbUJyQixlQUFzQixTQUFTLFNBQXlDO0FBQ3RFLFFBQU0sV0FBVyxRQUFRO0FBQ3pCLE1BQUksQ0FBQyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDeEQsVUFBTSxJQUFJO0FBQUEsTUFDUixpREFBaUQsUUFBUTtBQUFBLElBQzNEO0FBQUEsRUFDRjtBQUVBLFFBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsTUFBSSxXQUFXO0FBQ2IsVUFBTSx1QkFBdUIsT0FBTztBQUNwQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLG9CQUNKLGFBQWEsaUJBQ1QsS0FBSyxVQUFVLDhCQUE4QixDQUFDLElBQzlDO0FBRU4sUUFBTSx1QkFBdUI7QUFHN0IsUUFBTSxZQUFZLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxlQUFlLEtBQUssQ0FBQztBQUV6RCxRQUFNLFdBQVcsQ0FBQyxHQUFHLFFBQVEsUUFBUTtBQUNyQyxRQUFNLGFBQWEsUUFBUSxLQUFLLENBQUM7QUFHakMsUUFBTSxZQUFZLFFBQVE7QUFBQSxJQUN4QjtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxJQUNIO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsR0FBSSxzQkFBc0IsU0FDdEIsQ0FBQyxJQUNELENBQUMsd0JBQXdCLGlCQUFpQjtBQUFBLEVBQ2hELENBQUM7QUFJRCxRQUFNLFlBQVksUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLGVBQWUsS0FBSyxDQUFDO0FBRXpELE1BQUksYUFBYSxnQkFBZ0I7QUFDL0IsVUFBTSxrQ0FBa0M7QUFBQSxFQUMxQztBQUNGO0FBRUEsZUFBZSx1QkFBdUIsU0FBeUM7QUFDN0UsTUFBSSxPQUFPLFFBQVEsV0FBVyxjQUFjLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDbEUsVUFBTSxJQUFJLE1BQU0sd0NBQXdDO0FBQUEsRUFDMUQ7QUFFQSxVQUFRLElBQUksT0FBTztBQUVuQixNQUFJLFVBQVU7QUFDZCxNQUFJO0FBQ0osTUFBSTtBQUVKLFVBQVEsUUFBUSxVQUFVO0FBQUEsSUFDeEIsS0FBSyxnQkFBZ0I7QUFDbkIsVUFBSSxRQUFRLHNCQUFzQixRQUFXO0FBQzNDLGNBQU0sSUFBSTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFlBQU0sc0JBQXNCO0FBQUEsUUFDMUIsUUFBUTtBQUFBLE1BQ1Y7QUFDQSxZQUFNLGFBQWEsTUFBTSxlQUFlLFFBQVEsSUFBSTtBQUNwRCxZQUFNLFNBQVMsTUFBTSxZQUFZLE1BQU0sQ0FBQyxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQUEsUUFDM0QsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUNELCtCQUF5QjtBQUFBLFFBQ3ZCO0FBQUEsUUFDQSxlQUFlLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxRQUNuQyxXQUFXLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQUEsTUFDL0I7QUFDQSw4QkFBd0Isb0JBQUksSUFBSTtBQUFBLFFBQzlCLHVCQUF1QjtBQUFBLFFBQ3ZCLEdBQUcsdUJBQXVCO0FBQUEsTUFDNUIsQ0FBQztBQUNELFlBQU0sZ0JBQWdCLE1BQU0sWUFBWSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFBQSxRQUM5RCxTQUFTO0FBQUEsUUFDVCxlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUNELFVBQUksY0FBYyxTQUFTLEdBQUc7QUFDNUIsY0FBTSxrQkFBa0IsZUFBZSxjQUFjLE9BQU8sS0FBSyxDQUFDO0FBQ2xFLFlBQUksb0JBQW9CLEdBQUc7QUFDekIsZ0NBQXNCLElBQUksZUFBZTtBQUN6QyxpQ0FBdUIsa0JBQWtCO0FBQUEsUUFDM0M7QUFBQSxNQUNGO0FBQ0EsWUFBTSxhQUFhLElBQUksSUFBSSxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFLFlBQU0saUJBQWlCLE1BQU07QUFBQSxRQUMzQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUNBLFlBQU0sU0FBUyxvQkFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUM7QUFDdEMsaUJBQVcsVUFBVSxnQkFBZ0I7QUFDbkMsY0FBTSxRQUFRLFdBQVcsSUFBSSxPQUFPLE9BQU87QUFDM0MsWUFBSSxTQUFTLENBQUMsTUFBTSxTQUFTO0FBQzNCLGlCQUFPLElBQUksTUFBTSxJQUFJO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQ0EsaUJBQVcsU0FBUyxRQUFRO0FBQzFCLFlBQUksTUFBTSx5QkFBeUIsUUFBUSxNQUFNLEtBQUssR0FBRztBQUN2RCxvQkFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQ0EsaUJBQVcsVUFBVSxnQkFBZ0I7QUFDbkMsWUFBSSxNQUFNLDBCQUEwQixNQUFNLEdBQUc7QUFDM0Msb0JBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0EsS0FBSyxnQkFBZ0I7QUFDbkIsVUFBSSxNQUFNLGNBQWMsUUFBUSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3BELGNBQU0sWUFBWSxlQUFlO0FBQUEsVUFDL0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsUUFBUTtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsVUFDQSxRQUFRO0FBQUEsUUFDVixDQUFDO0FBQ0QsZ0JBQVE7QUFBQSxVQUNOLGdDQUFnQyxRQUFRLElBQUksWUFBWSxRQUFRLEtBQUs7QUFBQSxRQUN2RTtBQUNBLGtCQUFVO0FBQUEsTUFDWixPQUFPO0FBQ0wsZ0JBQVE7QUFBQSxVQUNOLEdBQUcsUUFBUSxJQUFJLDJCQUEyQixRQUFRLEtBQUs7QUFBQSxRQUN6RDtBQUFBLE1BQ0Y7QUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVM7QUFDUCxZQUFNLElBQUk7QUFBQSxRQUNSLGlEQUFpRCxRQUFRLFFBQVE7QUFBQSxNQUNuRTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxXQUFXLE1BQU0sdUJBQXVCLFFBQVEsSUFBSTtBQUMxRCxNQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLGVBQVcsV0FBVyxVQUFVO0FBQzlCLGNBQVEsSUFBSSxPQUFPO0FBQUEsSUFDckI7QUFDQSxjQUFVO0FBQUEsRUFDWixPQUFPO0FBQ0wsWUFBUTtBQUFBLE1BQ04sTUFBTSxRQUFRLElBQUk7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGlCQUFpQixNQUFNO0FBQUEsSUFDM0I7QUFBQSxJQUNBLFFBQVE7QUFBQSxFQUNWO0FBQ0EsTUFBSSxnQkFBZ0I7QUFDbEIsWUFBUSxJQUFJLGNBQWM7QUFDMUIsY0FBVTtBQUFBLEVBQ1osT0FBTztBQUNMLFlBQVE7QUFBQSxNQUNOLE1BQU0sUUFBUSxJQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLFNBQVM7QUFDWixZQUFRLElBQUksR0FBRyxRQUFRLElBQUksaUNBQWlDO0FBQUEsRUFDOUQ7QUFFQSxRQUFNLGNBQWMsTUFBTSxZQUFZLE1BQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQUEsSUFDakUsU0FBUztBQUFBLEVBQ1gsQ0FBQztBQUNELFVBQVE7QUFBQSxJQUNOLGNBQWMsUUFBUSxJQUFJLG1CQUFtQixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDeEU7QUFFQSxNQUFJLHVCQUF1QjtBQUN6QixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsZUFBZSx5QkFDYixNQUNBLE9BQ2tCO0FBQ2xCLE1BQUksQ0FBRSxNQUFNLGNBQWMsTUFBTSxLQUFLLEdBQUk7QUFDdkMsWUFBUSxJQUFJLEdBQUcsSUFBSSwyQkFBMkIsS0FBSyxTQUFTO0FBQzVELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxNQUFNLGNBQWMsU0FBUyxHQUFHO0FBQ2xDLFVBQU0sWUFBWSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDMUMsWUFBUSxJQUFJLGlCQUFpQixJQUFJLElBQUksS0FBSyx5QkFBeUI7QUFBQSxFQUNyRSxXQUFXLE1BQU0sY0FBYyxTQUFTLEdBQUc7QUFDekMsVUFBTSxZQUFZLFdBQVcsQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQ2hELFlBQVEsSUFBSSxvQkFBb0IsSUFBSSxJQUFJLEtBQUsseUJBQXlCO0FBQUEsRUFDeEUsT0FBTztBQUNMLFVBQU0sSUFBSSxNQUFNLHdDQUF3QztBQUFBLEVBQzFEO0FBRUEsU0FBTztBQUNUO0FBRUEsZUFBZSxlQUFlLE1BQTBDO0FBQ3RFLFFBQU0sQ0FBQyxXQUFXLGFBQWEsYUFBYSxJQUFJLE1BQU0sUUFBUSxJQUFJO0FBQUEsSUFDaEUsWUFBWSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLElBQ2pELFlBQVksTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxJQUNsRCxZQUFZLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQUEsRUFDbkQsQ0FBQztBQUNELFFBQU0sTUFBTSxZQUFZLFVBQVUsTUFBTSxFQUFFLElBQUksY0FBYztBQUM1RCxRQUFNLFFBQVEsWUFBWSxZQUFZLE1BQU07QUFDNUMsUUFBTSxZQUFZLGVBQWUsY0FBYyxPQUFPLEtBQUssQ0FBQztBQUU1RCxNQUFJLElBQUksV0FBVyxNQUFNLFFBQVE7QUFDL0IsVUFBTSxJQUFJLE1BQU0scUNBQXFDLElBQUksR0FBRztBQUFBLEVBQzlEO0FBRUEsU0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVc7QUFBQSxJQUM3QjtBQUFBLElBQ0EsTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUNqQixTQUFTLE9BQU87QUFBQSxFQUNsQixFQUFFO0FBQ0o7QUFFQSxTQUFTLFlBQVksT0FBOEI7QUFDakQsU0FBTyxNQUNKLEtBQUssRUFDTCxNQUFNLEtBQUssRUFDWCxPQUFPLENBQUMsVUFBVSxNQUFNLFNBQVMsQ0FBQztBQUN2QztBQUVBLFNBQVMsZUFBZSxPQUF1QjtBQUM3QyxNQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssR0FBRztBQUN4QixVQUFNLElBQUksTUFBTSx1QkFBdUIsS0FBSyxFQUFFO0FBQUEsRUFDaEQ7QUFDQSxTQUFPLE9BQU8sU0FBUyxPQUFPLEVBQUU7QUFDbEM7QUFFQSxlQUFlLHVCQUNiLFdBQ0EsVUFDQSxhQUNBLG1CQUFtQixPQUNuQixtQkFBbUIsV0FDZ0I7QUFDbkMsTUFBSTtBQUNKLE1BQUk7QUFDRixzQkFBa0IsTUFBTSxlQUFBQyxTQUFHO0FBQUEsTUFDekI7QUFBQSxNQUNBLGVBQUFDLFVBQVksV0FBVyxlQUFBQSxVQUFZLGNBQWMsZUFBQUEsVUFBWTtBQUFBLElBQy9EO0FBQUEsRUFDRixTQUFTLE9BQU87QUFDZCxVQUFNLE9BQVEsTUFBZ0M7QUFDOUMsUUFDRSxTQUFTLFlBQ1IscUJBQXFCLFNBQVMsWUFBWSxTQUFTLFVBQ3BEO0FBQ0EsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUNBLFVBQU07QUFBQSxFQUNSO0FBRUEsTUFBSTtBQUNGLFVBQU0sMEJBQTBCLGlCQUFpQixnQkFBZ0IsRUFBRTtBQUNuRSxVQUFNLFVBQVUsTUFBTSxlQUFBRCxTQUFHLFFBQVEseUJBQXlCO0FBQUEsTUFDeEQsZUFBZTtBQUFBLElBQ2pCLENBQUM7QUFDRCxVQUFNLFVBQW9DLENBQUM7QUFFM0MsZUFBVyxTQUFTLFNBQVM7QUFDM0IsWUFBTSxZQUFpQixXQUFLLHlCQUF5QixNQUFNLElBQUk7QUFDL0QsWUFBTSxjQUFtQixXQUFLLGtCQUFrQixNQUFNLElBQUk7QUFDMUQsVUFBSSxNQUFNLFlBQVksR0FBRztBQUN2QixnQkFBUTtBQUFBLFVBQ04sR0FBSSxNQUFNO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUNBLFVBQUksQ0FBQyxNQUFNLFNBQVMsR0FBRztBQUNyQjtBQUFBLE1BQ0Y7QUFFQSxVQUFJO0FBQ0osVUFBSTtBQUNGLGdCQUFRLE1BQU0sZUFBQUEsU0FBRyxNQUFNLFNBQVM7QUFBQSxNQUNsQyxTQUFTLE9BQU87QUFDZCxZQUFLLE1BQWdDLFNBQVMsVUFBVTtBQUN0RDtBQUFBLFFBQ0Y7QUFDQSxjQUFNO0FBQUEsTUFDUjtBQUVBLFlBQU0saUJBQ0gsTUFBTSxPQUFPLFFBQVcsS0FBSyxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ3RELFlBQU0saUJBQWlCLE1BQU0sT0FBTyxPQUFXO0FBQy9DLFlBQU0sY0FDSixDQUFDLGlCQUNELENBQUMsa0JBQ0EsTUFBTSxPQUFPLFFBQVcsS0FDekIsTUFBTSxTQUFTLEtBQ2YsTUFBTSxRQUFRLEtBQ2IsTUFBTSxxQkFBcUIsV0FBVyxPQUFPLFdBQVc7QUFDM0QsVUFDRSxNQUFNLFNBQVMsS0FDZixNQUFNLFFBQVEsTUFDYixpQkFBaUIsaUJBQWlCLGNBQ25DO0FBQ0EsZ0JBQVEsS0FBSztBQUFBLFVBQ1gsTUFBTTtBQUFBLFVBQ04sU0FBUyxNQUFNO0FBQUEsVUFDZixRQUFRLE1BQU07QUFBQSxVQUNkLE9BQU8sTUFBTTtBQUFBLFFBQ2YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1QsVUFBRTtBQUNBLFVBQU0sZ0JBQWdCLE1BQU07QUFBQSxFQUM5QjtBQUNGO0FBRUEsZUFBZSxxQkFDYixZQUNBLGVBQ0EsYUFDa0I7QUFDbEIsTUFBSSxDQUFDLGFBQWE7QUFDaEIsUUFBSTtBQUNGLFlBQU0sZUFBQUEsU0FBRyxPQUFPLFlBQVksZUFBQUMsVUFBWSxJQUFJO0FBQzVDLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLFlBQU0sT0FBUSxNQUFnQztBQUM5QyxVQUFJLFNBQVMsWUFBWSxTQUFTLFdBQVcsU0FBUyxVQUFVO0FBQzlELGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBRUEsUUFBTSxlQUFlLE1BQU0sZUFBQUQsU0FBRztBQUFBLElBQzVCO0FBQUEsSUFDQSxlQUFlLGVBQUFDLFVBQVk7QUFBQSxFQUM3QjtBQUNBLE1BQUk7QUFDRixVQUFNLFFBQVEsTUFBTSxhQUFhLEtBQUs7QUFDdEMsUUFDRSxDQUFDLE1BQU0sU0FBUyxLQUNoQixNQUFNLFFBQVEsS0FDZCxNQUFNLFFBQVEsY0FBYyxPQUM1QixNQUFNLFFBQVEsY0FBYyxLQUM1QjtBQUNBLFlBQU0sSUFBSSxNQUFNLHVEQUF1RDtBQUFBLElBQ3pFO0FBRUEsVUFBTSxpQkFBaUI7QUFBQSxNQUNyQjtBQUFBLFFBQ0UsZ0JBQWdCLFlBQVk7QUFBQSxRQUM1Qix1QkFBdUIsWUFBWTtBQUFBLE1BQ3JDO0FBQUEsTUFDQSxHQUFJLFlBQVksb0JBQW9CLFNBQ2hDLENBQUMsSUFDRDtBQUFBLFFBQ0U7QUFBQSxVQUNFLGdCQUFnQixZQUFZO0FBQUEsVUFDNUIsdUJBQXVCLENBQUM7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxJQUNOO0FBRUEsZUFBVyxZQUFZLGdCQUFnQjtBQUNyQyxZQUFNLGdCQUNKLFNBQVMsc0JBQXNCLFdBQVcsSUFDdEMsbUJBQ0EsWUFBWSxTQUFTLHNCQUFzQixLQUFLLEdBQUcsQ0FBQztBQUMxRCxZQUFNLFNBQVMsTUFBTTtBQUFBLFFBQ25CO0FBQUEsUUFDQTtBQUFBLFVBQ0UsV0FBVyxZQUFZLE1BQU07QUFBQSxVQUM3QixXQUFXLFNBQVMsY0FBYztBQUFBLFVBQ2xDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBO0FBQUEsVUFDRSxTQUFTO0FBQUEsVUFDVCxlQUFlO0FBQUEsVUFDZix5QkFBeUIsYUFBYTtBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUNBLFVBQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLE9BQU8sU0FBUyxLQUFLLE9BQU8sT0FBTyxLQUFLLEVBQUUsU0FBUyxHQUFHO0FBQ3hELGNBQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLE1BQzNFO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNULFVBQUU7QUFDQSxVQUFNLGFBQWEsTUFBTTtBQUFBLEVBQzNCO0FBQ0Y7QUFFQSxlQUFlLDBCQUNiLFFBQ2tCO0FBQ2xCLE1BQUk7QUFDSixNQUFJO0FBQ0YsbUJBQWUsTUFBTSxlQUFBRCxTQUFHO0FBQUEsTUFDdEIsT0FBTztBQUFBLE1BQ1AsZUFBZSxlQUFBQyxVQUFZO0FBQUEsSUFDN0I7QUFBQSxFQUNGLFNBQVMsT0FBTztBQUNkLFFBQUssTUFBZ0MsU0FBUyxVQUFVO0FBQ3RELGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTTtBQUFBLEVBQ1I7QUFFQSxNQUFJO0FBQ0YsVUFBTSxRQUFRLE1BQU0sYUFBYSxLQUFLO0FBQ3RDLFFBQUksQ0FBQyxNQUFNLFNBQVMsR0FBRztBQUNyQixZQUFNLElBQUksTUFBTSxZQUFZLE9BQU8sSUFBSSxrQkFBa0I7QUFBQSxJQUMzRDtBQUNBLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFDbkIsWUFBTSxJQUFJLE1BQU0sWUFBWSxPQUFPLElBQUksdUJBQXVCO0FBQUEsSUFDaEU7QUFDQSxRQUFJLE1BQU0sUUFBUSxPQUFPLFVBQVUsTUFBTSxRQUFRLE9BQU8sT0FBTztBQUM3RCxZQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sSUFBSSxxQ0FBcUM7QUFBQSxJQUNyRTtBQUNBLFNBQUssTUFBTSxPQUFPLFFBQVcsR0FBRztBQUM5QixjQUFRLElBQUksYUFBYSxPQUFPLElBQUkseUJBQXlCO0FBQzdELGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxlQUFBRCxTQUFHLE1BQU0saUJBQWlCLGFBQWEsRUFBRSxJQUFJLE1BQU0sT0FBTyxHQUFLO0FBQ3JFLFVBQU0sa0JBQWtCLE1BQU0sYUFBYSxLQUFLO0FBQ2hELFNBQUssZ0JBQWdCLE9BQU8sUUFBVyxHQUFHO0FBQ3hDLFlBQU0sSUFBSSxNQUFNLGdDQUFnQyxPQUFPLElBQUksR0FBRztBQUFBLElBQ2hFO0FBQ0EsWUFBUSxJQUFJLHdCQUF3QixPQUFPLElBQUksR0FBRztBQUNsRCxXQUFPO0FBQUEsRUFDVCxVQUFFO0FBQ0EsVUFBTSxhQUFhLE1BQU07QUFBQSxFQUMzQjtBQUNGO0FBRUEsZUFBZSxrQ0FDYixrQkFDQSxhQUNlO0FBQ2YsUUFBTSxXQUNKLG9CQUNBLElBQUksSUFBSSxPQUFPLFFBQVEsY0FBYyxhQUFhLFFBQVEsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUM1RSxNQUFJLENBQUMsb0JBQW9CLE9BQU8sUUFBUSxXQUFXLFlBQVk7QUFDN0QsYUFBUyxJQUFJLFFBQVEsT0FBTyxDQUFDO0FBQUEsRUFDL0I7QUFFQSxRQUFNLFVBQVUsTUFBTTtBQUFBLElBQ3BCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLENBQUM7QUFBQSxFQUNIO0FBQ0EsYUFBVyxVQUFVLFNBQVM7QUFDNUIsUUFBSSxPQUFPLFFBQVEsV0FBVyxjQUFjLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDbEUsWUFBTSxJQUFJLE1BQU0sc0NBQXNDLE9BQU8sSUFBSSxHQUFHO0FBQUEsSUFDdEU7QUFFQSxRQUFJO0FBQ0YsWUFBTSxlQUFBQSxTQUFHLE9BQU8sT0FBTyxNQUFNLGVBQUFDLFVBQVksSUFBSTtBQUFBLElBQy9DLFNBQVMsT0FBTztBQUNkLFlBQU0sT0FBUSxNQUFnQztBQUM5QyxVQUFJLFNBQVMsWUFBWSxTQUFTLFdBQVcsU0FBUyxVQUFVO0FBQzlEO0FBQUEsTUFDRjtBQUNBLFlBQU07QUFBQSxJQUNSO0FBQ0EsVUFBTSxJQUFJLE1BQU0sc0NBQXNDLE9BQU8sSUFBSSxHQUFHO0FBQUEsRUFDdEU7QUFDRjtBQUVBLGVBQWUseUJBQXdDO0FBQ3JELE1BQUk7QUFDRixVQUFNLFlBQVksUUFBUSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxFQUM3RCxTQUFTLE9BQU87QUFDZCxVQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQSxFQUNoRTtBQUNGO0FBRUEsZUFBZSxjQUFjLE1BQWMsT0FBaUM7QUFDMUUsUUFBTSxTQUFTLE1BQU0sWUFBWSxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUc7QUFBQSxJQUNwRCxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsRUFDakIsQ0FBQztBQUNELE1BQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLFNBQVMsT0FBTyxPQUNuQixLQUFLLEVBQ0wsTUFBTSxLQUFLLEVBQ1gsT0FBTyxDQUFDLFVBQVUsTUFBTSxTQUFTLENBQUM7QUFDckMsU0FBTyxPQUFPLFNBQVMsS0FBSztBQUM5QjtBQUVBLGVBQWUsY0FBYyxRQUFrQztBQUM3RCxRQUFNLFNBQVMsTUFBTSxZQUFZLE1BQU0sQ0FBQyxNQUFNLGNBQWMsTUFBTSxFQUFFLEdBQUc7QUFBQSxJQUNyRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsRUFDakIsQ0FBQztBQUNELFNBQU8sT0FBTyxTQUFTO0FBQ3pCO0FBYUEsZUFBZSx1QkFBdUIsTUFBc0M7QUFDMUUsUUFBTSxhQUFhO0FBQ25CLE1BQUksVUFBeUIsQ0FBQztBQUM5QixNQUFJO0FBQ0YsVUFBTSxhQUFhLE1BQU0sZUFBQUQsU0FBRyxRQUFRLFlBQVksRUFBRSxlQUFlLEtBQUssQ0FBQztBQUN2RSxjQUFVLFdBQ1AsT0FBTyxDQUFDLFdBQVcsT0FBTyxPQUFPLENBQUMsRUFDbEMsSUFBSSxDQUFDLFdBQWdCLFdBQUssWUFBWSxPQUFPLElBQUksQ0FBQztBQUFBLEVBQ3ZELFNBQVMsT0FBTztBQUNkLFFBQUssTUFBZ0MsU0FBUyxVQUFVO0FBQ3RELGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFDQSxVQUFNO0FBQUEsRUFDUjtBQUVBLFFBQU0sV0FBMEIsQ0FBQztBQUVqQyxhQUFXLGFBQWEsU0FBUztBQUMvQixVQUFNLFVBQVUsTUFBTSx5QkFBeUIsV0FBVyxJQUFJO0FBQzlELFFBQUksU0FBUztBQUNYLGVBQVMsS0FBSyxPQUFPO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsZUFBZSx5QkFDYixVQUNBLE1BQ3dCO0FBQ3hCLE1BQUk7QUFDSixNQUFJO0FBQ0osTUFBSTtBQUNGLFlBQVEsTUFBTSxlQUFBQSxTQUFHLEtBQUssUUFBUTtBQUM5QixlQUFXLE1BQU0sZUFBQUEsU0FBRyxTQUFTLFVBQVUsTUFBTTtBQUFBLEVBQy9DLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sVUFBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLFNBQVM7QUFDckQsUUFBTSxrQkFDSixTQUFTLFNBQVMsSUFBSSxLQUFLLFNBQVMsU0FBUyxNQUFNO0FBQ3JELFFBQU0sV0FBVyxTQUFTLE1BQU0sT0FBTztBQUN2QyxNQUFJLFNBQVMsU0FBUyxLQUFLLFNBQVMsU0FBUyxTQUFTLENBQUMsTUFBTSxJQUFJO0FBQy9ELGFBQVMsSUFBSTtBQUFBLEVBQ2Y7QUFFQSxRQUFNLGdCQUErQixDQUFDO0FBQ3RDLE1BQUksVUFBVTtBQUVkLGFBQVcsUUFBUSxVQUFVO0FBQzNCLFVBQU0saUJBQWlCLEtBQUssVUFBVTtBQUN0QyxRQUFJLGVBQWUsV0FBVyxHQUFHLEdBQUc7QUFDbEMsb0JBQWMsS0FBSyxJQUFJO0FBQ3ZCO0FBQUEsSUFDRjtBQUNBLFFBQUksZUFBZSxXQUFXLEdBQUc7QUFDL0Isb0JBQWMsS0FBSyxJQUFJO0FBQ3ZCO0FBQUEsSUFDRjtBQUNBLFVBQU0sU0FBUyxlQUFlLE1BQU0sS0FBSztBQUN6QyxRQUFJLE9BQU8sQ0FBQyxNQUFNLE1BQU07QUFDdEIsZ0JBQVU7QUFDVjtBQUFBLElBQ0Y7QUFDQSxrQkFBYyxLQUFLLElBQUk7QUFBQSxFQUN6QjtBQUVBLE1BQUksQ0FBQyxTQUFTO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFVBQVUsY0FBYyxLQUFLLE9BQU8sS0FBSyxrQkFBa0IsVUFBVTtBQUMzRSxNQUFJO0FBQ0YsVUFBTSxlQUFBQSxTQUFHLFVBQVUsVUFBVSxTQUFTLE1BQU07QUFDNUMsVUFBTSxlQUFBQSxTQUFHLE1BQU0sVUFBVSxNQUFNLE9BQU8sR0FBSztBQUFBLEVBQzdDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sV0FBVyxJQUFJLGVBQWUsUUFBUTtBQUMvQztBQUVBLGVBQWUsWUFDYixTQUNBLE1BQ0EsVUFBdUIsQ0FBQyxHQUNIO0FBQ3JCLFFBQU0sVUFBVSxRQUFRLFdBQVc7QUFDbkMsUUFBTSxZQUFRLGlDQUFNLFNBQVMsTUFBTTtBQUFBLElBQ2pDLE9BQU8sVUFDSCxRQUFRLDRCQUE0QixTQUNsQyxDQUFDLFVBQVUsUUFBUSxNQUFNLElBQ3pCLENBQUMsVUFBVSxRQUFRLFFBQVEsUUFBUSx1QkFBdUIsSUFDNUQ7QUFBQSxFQUNOLENBQUM7QUFFRCxNQUFJLFNBQVM7QUFDYixNQUFJLFNBQVM7QUFFYixNQUFJLFdBQVcsTUFBTSxRQUFRO0FBQzNCLFVBQU0sT0FBTyxZQUFZLE1BQU07QUFDL0IsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDakMsZ0JBQVU7QUFBQSxJQUNaLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSSxXQUFXLE1BQU0sUUFBUTtBQUMzQixVQUFNLE9BQU8sWUFBWSxNQUFNO0FBQy9CLFVBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVO0FBQ2pDLGdCQUFVO0FBQUEsSUFDWixDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU8sTUFBTSxJQUFJLFFBQW9CLENBQUMsU0FBUyxXQUFXO0FBQ3hELFVBQU0sR0FBRyxTQUFTLENBQUMsVUFBVTtBQUMzQixhQUFPLEtBQUs7QUFBQSxJQUNkLENBQUM7QUFFRCxVQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVM7QUFDMUIsWUFBTSxXQUFXLFFBQVE7QUFDekIsVUFBSSxhQUFhLEtBQUssQ0FBQyxRQUFRLGVBQWU7QUFDNUMsY0FBTSxRQUFRLElBQUk7QUFBQSxVQUNoQixtQkFBbUIsT0FBTyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsZUFBZSxRQUFRO0FBQUEsUUFDckU7QUFDQSxRQUFDLE1BQW9CLE9BQU87QUFDNUIsUUFBQyxNQUFvQixTQUFTO0FBQzlCLFFBQUMsTUFBb0IsU0FBUztBQUM5QixlQUFPLEtBQUs7QUFDWjtBQUFBLE1BQ0Y7QUFDQSxjQUFRLEVBQUUsTUFBTSxVQUFVLFFBQVEsT0FBTyxDQUFDO0FBQUEsSUFDNUMsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOzs7QUM5dEJBLElBQUFFLFFBQXNCOzs7QUNpQnRCLG1CQUF1Qjs7O0FDakJ2QixJQUFNLGVBQU4sY0FBMkIsTUFBTTtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUEsRUFDQSxZQUFZLFNBQVMsWUFBWSxTQUFTO0FBQ3hDLFVBQU0sT0FBTztBQUNiLFNBQUssT0FBTztBQUNaLFNBQUssU0FBUyxPQUFPLFNBQVMsVUFBVTtBQUN4QyxRQUFJLE9BQU8sTUFBTSxLQUFLLE1BQU0sR0FBRztBQUM3QixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUNBLFFBQUksY0FBYyxTQUFTO0FBQ3pCLFdBQUssV0FBVyxRQUFRO0FBQUEsSUFDMUI7QUFDQSxVQUFNLGNBQWMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLE9BQU87QUFDckQsUUFBSSxRQUFRLFFBQVEsUUFBUSxlQUFlO0FBQ3pDLGtCQUFZLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUFBLFFBQy9ELGVBQWUsUUFBUSxRQUFRLFFBQVEsY0FBYztBQUFBLFVBQ25EO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQ0EsZ0JBQVksTUFBTSxZQUFZLElBQUksUUFBUSx3QkFBd0IsMEJBQTBCLEVBQUUsUUFBUSx1QkFBdUIseUJBQXlCO0FBQ3RKLFNBQUssVUFBVTtBQUFBLEVBQ2pCO0FBQ0Y7OztBRG5DQSxJQUFJLFVBQVU7QUFHZCxlQUFlLGFBQWEsT0FBTyxTQUFTLE9BQU8sU0FBUztBQUMxRCxNQUFJLENBQUMsTUFBTSxXQUFXLENBQUMsTUFBTSxRQUFRLFNBQVM7QUFDNUMsVUFBTTtBQUFBLEVBQ1I7QUFDQSxNQUFJLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBTSxXQUFXLFNBQVMsTUFBTSxNQUFNLEdBQUc7QUFDbkUsVUFBTSxVQUFVLFFBQVEsUUFBUSxXQUFXLE9BQU8sUUFBUSxRQUFRLFVBQVUsTUFBTTtBQUNsRixVQUFNLGFBQWEsS0FBSyxLQUFLLFFBQVEsUUFBUSxjQUFjLEtBQUssR0FBRyxDQUFDO0FBQ3BFLFVBQU0sUUFBUSxNQUFNLGFBQWEsT0FBTyxTQUFTLFVBQVU7QUFBQSxFQUM3RDtBQUNBLFFBQU07QUFDUjtBQUtBLGVBQWUsWUFBWSxPQUFPLFNBQVNDLFVBQVMsU0FBUztBQUMzRCxRQUFNLFVBQVUsSUFBSSxhQUFBQyxRQUFXO0FBQy9CLFVBQVEsR0FBRyxVQUFVLFNBQVMsT0FBT0MsT0FBTTtBQUN6QyxVQUFNLGFBQWEsQ0FBQyxDQUFDLE1BQU0sUUFBUSxRQUFRO0FBQzNDLFVBQU0sUUFBUSxDQUFDLENBQUMsTUFBTSxRQUFRLFFBQVE7QUFDdEMsWUFBUSxRQUFRLGFBQWFBLE1BQUssYUFBYTtBQUMvQyxRQUFJLGFBQWFBLE1BQUssWUFBWTtBQUNoQyxhQUFPLFFBQVEsTUFBTTtBQUFBLElBQ3ZCO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTyxRQUFRO0FBQUEsSUFDYixnQ0FBZ0MsS0FBSyxNQUFNLE9BQU8sU0FBU0YsUUFBTztBQUFBLElBQ2xFO0FBQUEsRUFDRjtBQUNGO0FBQ0EsZUFBZSxnQ0FBZ0MsT0FBTyxTQUFTQSxVQUFTLFNBQVM7QUFDL0UsUUFBTSxXQUFXLE1BQU1BLFNBQVFBLFVBQVMsT0FBTztBQUMvQyxNQUFJLFNBQVMsUUFBUSxTQUFTLEtBQUssVUFBVSxTQUFTLEtBQUssT0FBTyxTQUFTLEtBQUssa0RBQWtEO0FBQUEsSUFDaEksU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFO0FBQUEsRUFDMUIsR0FBRztBQUNELFVBQU0sUUFBUSxJQUFJLGFBQWEsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFLFNBQVMsS0FBSztBQUFBLE1BQ25FLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTyxhQUFhLE9BQU8sU0FBUyxPQUFPLE9BQU87QUFBQSxFQUNwRDtBQUNBLFNBQU87QUFDVDtBQUdBLFNBQVMsTUFBTSxTQUFTLGdCQUFnQjtBQUN0QyxRQUFNLFFBQVEsT0FBTztBQUFBLElBQ25CO0FBQUEsTUFDRSxTQUFTO0FBQUEsTUFDVCxxQkFBcUI7QUFBQSxNQUNyQixZQUFZLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzlDLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxlQUFlO0FBQUEsRUFDakI7QUFDQSxNQUFJLE1BQU0sU0FBUztBQUNqQixZQUFRLEtBQUssTUFBTSxXQUFXLGFBQWEsS0FBSyxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JFLFlBQVEsS0FBSyxLQUFLLFdBQVcsWUFBWSxLQUFLLE1BQU0sT0FBTyxPQUFPLENBQUM7QUFBQSxFQUNyRTtBQUNBLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLGNBQWMsQ0FBQyxPQUFPLFNBQVMsZUFBZTtBQUM1QyxjQUFNLFFBQVEsVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sUUFBUSxTQUFTO0FBQUEsVUFDL0Q7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBQ0EsTUFBTSxVQUFVOzs7QUUzRVQsU0FBUyxlQUFlO0FBQzdCLE1BQUksT0FBTyxjQUFjLFlBQVksZUFBZSxXQUFXO0FBQzdELFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBRUEsTUFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFlBQVksUUFBVztBQUNoRSxXQUFPLFdBQVcsUUFBUSxRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssUUFBUSxRQUFRLEtBQzlELFFBQVEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7OztBQ1ZPLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBUSxTQUFTO0FBQ3JELE1BQUksT0FBTyxXQUFXLFlBQVk7QUFDaEMsVUFBTSxJQUFJLE1BQU0sMkNBQTJDO0FBQUEsRUFDN0Q7QUFFQSxNQUFJLENBQUMsU0FBUztBQUNaLGNBQVUsQ0FBQztBQUFBLEVBQ2I7QUFFQSxNQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDdkIsV0FBTyxLQUFLLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVUcsVUFBUztBQUMvQyxhQUFPLFNBQVMsS0FBSyxNQUFNLE9BQU9BLE9BQU0sVUFBVSxPQUFPO0FBQUEsSUFDM0QsR0FBRyxNQUFNLEVBQUU7QUFBQSxFQUNiO0FBRUEsU0FBTyxRQUFRLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDbEMsUUFBSSxDQUFDLE1BQU0sU0FBUyxJQUFJLEdBQUc7QUFDekIsYUFBTyxPQUFPLE9BQU87QUFBQSxJQUN2QjtBQUVBLFdBQU8sTUFBTSxTQUFTLElBQUksRUFBRSxPQUFPLENBQUNDLFNBQVEsZUFBZTtBQUN6RCxhQUFPLFdBQVcsS0FBSyxLQUFLLE1BQU1BLFNBQVEsT0FBTztBQUFBLElBQ25ELEdBQUcsTUFBTSxFQUFFO0FBQUEsRUFDYixDQUFDO0FBQ0g7OztBQ3hCTyxTQUFTLFFBQVEsT0FBTyxNQUFNLE1BQU1DLE9BQU07QUFDL0MsUUFBTSxPQUFPQTtBQUNiLE1BQUksQ0FBQyxNQUFNLFNBQVMsSUFBSSxHQUFHO0FBQ3pCLFVBQU0sU0FBUyxJQUFJLElBQUksQ0FBQztBQUFBLEVBQzFCO0FBRUEsTUFBSSxTQUFTLFVBQVU7QUFDckIsSUFBQUEsUUFBTyxDQUFDLFFBQVEsWUFBWTtBQUMxQixhQUFPLFFBQVEsUUFBUSxFQUNwQixLQUFLLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQyxFQUM3QixLQUFLLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLE1BQUksU0FBUyxTQUFTO0FBQ3BCLElBQUFBLFFBQU8sQ0FBQyxRQUFRLFlBQVk7QUFDMUIsVUFBSTtBQUNKLGFBQU8sUUFBUSxRQUFRLEVBQ3BCLEtBQUssT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDLEVBQy9CLEtBQUssQ0FBQyxZQUFZO0FBQ2pCLGlCQUFTO0FBQ1QsZUFBTyxLQUFLLFFBQVEsT0FBTztBQUFBLE1BQzdCLENBQUMsRUFDQSxLQUFLLE1BQU07QUFDVixlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVMsU0FBUztBQUNwQixJQUFBQSxRQUFPLENBQUMsUUFBUSxZQUFZO0FBQzFCLGFBQU8sUUFBUSxRQUFRLEVBQ3BCLEtBQUssT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDLEVBQy9CLE1BQU0sQ0FBQyxVQUFVO0FBQ2hCLGVBQU8sS0FBSyxPQUFPLE9BQU87QUFBQSxNQUM1QixDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsSUFBSSxFQUFFLEtBQUs7QUFBQSxJQUN4QixNQUFNQTtBQUFBLElBQ047QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FDM0NPLFNBQVMsV0FBVyxPQUFPLE1BQU0sUUFBUTtBQUM5QyxNQUFJLENBQUMsTUFBTSxTQUFTLElBQUksR0FBRztBQUN6QjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFFBQVEsTUFBTSxTQUFTLElBQUksRUFDOUIsSUFBSSxDQUFDLGVBQWU7QUFDbkIsV0FBTyxXQUFXO0FBQUEsRUFDcEIsQ0FBQyxFQUNBLFFBQVEsTUFBTTtBQUVqQixNQUFJLFVBQVUsSUFBSTtBQUNoQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsSUFBSSxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ3RDOzs7QUNYQSxJQUFNLE9BQU8sU0FBUztBQUN0QixJQUFNLFdBQVcsS0FBSyxLQUFLLElBQUk7QUFFL0IsU0FBUyxRQUFRQyxPQUFNLE9BQU8sTUFBTTtBQUNsQyxRQUFNLGdCQUFnQixTQUFTLFlBQVksSUFBSSxFQUFFO0FBQUEsSUFDL0M7QUFBQSxJQUNBLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUs7QUFBQSxFQUMvQjtBQUNBLEVBQUFBLE1BQUssTUFBTSxFQUFFLFFBQVEsY0FBYztBQUNuQyxFQUFBQSxNQUFLLFNBQVM7QUFDZCxHQUFDLFVBQVUsU0FBUyxTQUFTLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBUztBQUNyRCxVQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUk7QUFDdEQsSUFBQUEsTUFBSyxJQUFJLElBQUlBLE1BQUssSUFBSSxJQUFJLElBQUksU0FBUyxTQUFTLElBQUksRUFBRSxNQUFNLE1BQU0sSUFBSTtBQUFBLEVBQ3hFLENBQUM7QUFDSDtBQUVBLFNBQVMsV0FBVztBQUNsQixRQUFNLG1CQUFtQixPQUFPLFVBQVU7QUFDMUMsUUFBTSxvQkFBb0I7QUFBQSxJQUN4QixVQUFVLENBQUM7QUFBQSxFQUNiO0FBQ0EsUUFBTSxlQUFlLFNBQVMsS0FBSyxNQUFNLG1CQUFtQixnQkFBZ0I7QUFDNUUsVUFBUSxjQUFjLG1CQUFtQixnQkFBZ0I7QUFDekQsU0FBTztBQUNUO0FBRUEsU0FBUyxhQUFhO0FBQ3BCLFFBQU0sUUFBUTtBQUFBLElBQ1osVUFBVSxDQUFDO0FBQUEsRUFDYjtBQUVBLFFBQU1BLFFBQU8sU0FBUyxLQUFLLE1BQU0sS0FBSztBQUN0QyxVQUFRQSxPQUFNLEtBQUs7QUFFbkIsU0FBT0E7QUFDVDtBQUVBLElBQU8sNEJBQVEsRUFBRSxVQUFVLFdBQVc7OztBQ3hDdEMsSUFBSUMsV0FBVTtBQUdkLElBQUksWUFBWSx1QkFBdUJBLFFBQU8sSUFBSSxhQUFhLENBQUM7QUFDaEUsSUFBSSxXQUFXO0FBQUEsRUFDYixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWO0FBQ0Y7QUFHQSxTQUFTLGNBQWMsUUFBUTtBQUM3QixNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFDQSxTQUFPLE9BQU8sS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsUUFBUTtBQUNqRCxXQUFPLElBQUksWUFBWSxDQUFDLElBQUksT0FBTyxHQUFHO0FBQ3RDLFdBQU87QUFBQSxFQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ1A7QUFHQSxTQUFTLGNBQWMsT0FBTztBQUM1QixNQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsS0FBTSxRQUFPO0FBQ3hELE1BQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxLQUFLLE1BQU0sa0JBQW1CLFFBQU87QUFDeEUsUUFBTSxRQUFRLE9BQU8sZUFBZSxLQUFLO0FBQ3pDLE1BQUksVUFBVSxLQUFNLFFBQU87QUFDM0IsUUFBTSxPQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUssT0FBTyxhQUFhLEtBQUssTUFBTTtBQUNqRixTQUFPLE9BQU8sU0FBUyxjQUFjLGdCQUFnQixRQUFRLFNBQVMsVUFBVSxLQUFLLElBQUksTUFBTSxTQUFTLFVBQVUsS0FBSyxLQUFLO0FBQzlIO0FBR0EsU0FBUyxVQUFVLFVBQVUsU0FBUztBQUNwQyxRQUFNLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRO0FBQ3pDLFNBQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDcEMsUUFBSSxjQUFjLFFBQVEsR0FBRyxDQUFDLEdBQUc7QUFDL0IsVUFBSSxFQUFFLE9BQU8sVUFBVyxRQUFPLE9BQU8sUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFBQSxVQUNoRSxRQUFPLEdBQUcsSUFBSSxVQUFVLFNBQVMsR0FBRyxHQUFHLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDMUQsT0FBTztBQUNMLGFBQU8sT0FBTyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUFBLElBQy9DO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTztBQUNUO0FBR0EsU0FBUywwQkFBMEIsS0FBSztBQUN0QyxhQUFXLE9BQU8sS0FBSztBQUNyQixRQUFJLElBQUksR0FBRyxNQUFNLFFBQVE7QUFDdkIsYUFBTyxJQUFJLEdBQUc7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxTQUFTLE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFDdkMsTUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixRQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUc7QUFDbkMsY0FBVSxPQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsS0FBSyxPQUFPLEdBQUcsT0FBTztBQUFBLEVBQzFFLE9BQU87QUFDTCxjQUFVLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSztBQUFBLEVBQ25DO0FBQ0EsVUFBUSxVQUFVLGNBQWMsUUFBUSxPQUFPO0FBQy9DLDRCQUEwQixPQUFPO0FBQ2pDLDRCQUEwQixRQUFRLE9BQU87QUFDekMsUUFBTSxnQkFBZ0IsVUFBVSxZQUFZLENBQUMsR0FBRyxPQUFPO0FBQ3ZELE1BQUksUUFBUSxRQUFRLFlBQVk7QUFDOUIsUUFBSSxZQUFZLFNBQVMsVUFBVSxVQUFVLFFBQVE7QUFDbkQsb0JBQWMsVUFBVSxXQUFXLFNBQVMsVUFBVSxTQUFTO0FBQUEsUUFDN0QsQ0FBQyxZQUFZLENBQUMsY0FBYyxVQUFVLFNBQVMsU0FBUyxPQUFPO0FBQUEsTUFDakUsRUFBRSxPQUFPLGNBQWMsVUFBVSxRQUFRO0FBQUEsSUFDM0M7QUFDQSxrQkFBYyxVQUFVLFlBQVksY0FBYyxVQUFVLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLFFBQVEsUUFBUSxZQUFZLEVBQUUsQ0FBQztBQUFBLEVBQzlIO0FBQ0EsU0FBTztBQUNUO0FBR0EsU0FBUyxtQkFBbUIsS0FBSyxZQUFZO0FBQzNDLFFBQU0sWUFBWSxLQUFLLEtBQUssR0FBRyxJQUFJLE1BQU07QUFDekMsUUFBTSxRQUFRLE9BQU8sS0FBSyxVQUFVO0FBQ3BDLE1BQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLE1BQU0sWUFBWSxNQUFNLElBQUksQ0FBQyxTQUFTO0FBQzNDLFFBQUksU0FBUyxLQUFLO0FBQ2hCLGFBQU8sT0FBTyxXQUFXLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxrQkFBa0IsRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUN4RTtBQUNBLFdBQU8sR0FBRyxJQUFJLElBQUksbUJBQW1CLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFBQSxFQUN4RCxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ2I7QUFHQSxJQUFJLG1CQUFtQjtBQUN2QixTQUFTLGVBQWUsY0FBYztBQUNwQyxTQUFPLGFBQWEsUUFBUSw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sR0FBRztBQUN4RTtBQUNBLFNBQVMsd0JBQXdCLEtBQUs7QUFDcEMsUUFBTSxVQUFVLElBQUksTUFBTSxnQkFBZ0I7QUFDMUMsTUFBSSxDQUFDLFNBQVM7QUFDWixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsU0FBTyxRQUFRLElBQUksY0FBYyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckU7QUFHQSxTQUFTLEtBQUssUUFBUSxZQUFZO0FBQ2hDLFFBQU0sU0FBUyxFQUFFLFdBQVcsS0FBSztBQUNqQyxhQUFXLE9BQU8sT0FBTyxLQUFLLE1BQU0sR0FBRztBQUNyQyxRQUFJLFdBQVcsUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUNsQyxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxTQUFTLGVBQWUsS0FBSztBQUMzQixTQUFPLElBQUksTUFBTSxvQkFBb0IsRUFBRSxJQUFJLFNBQVMsTUFBTTtBQUN4RCxRQUFJLENBQUMsZUFBZSxLQUFLLElBQUksR0FBRztBQUM5QixhQUFPLFVBQVUsSUFBSSxFQUFFLFFBQVEsUUFBUSxHQUFHLEVBQUUsUUFBUSxRQUFRLEdBQUc7QUFBQSxJQUNqRTtBQUNBLFdBQU87QUFBQSxFQUNULENBQUMsRUFBRSxLQUFLLEVBQUU7QUFDWjtBQUNBLFNBQVMsaUJBQWlCLEtBQUs7QUFDN0IsU0FBTyxtQkFBbUIsR0FBRyxFQUFFLFFBQVEsWUFBWSxTQUFTLEdBQUc7QUFDN0QsV0FBTyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWTtBQUFBLEVBQ3hELENBQUM7QUFDSDtBQUNBLFNBQVMsWUFBWSxVQUFVLE9BQU8sS0FBSztBQUN6QyxVQUFRLGFBQWEsT0FBTyxhQUFhLE1BQU0sZUFBZSxLQUFLLElBQUksaUJBQWlCLEtBQUs7QUFDN0YsTUFBSSxLQUFLO0FBQ1AsV0FBTyxpQkFBaUIsR0FBRyxJQUFJLE1BQU07QUFBQSxFQUN2QyxPQUFPO0FBQ0wsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUNBLFNBQVMsVUFBVSxPQUFPO0FBQ3hCLFNBQU8sVUFBVSxVQUFVLFVBQVU7QUFDdkM7QUFDQSxTQUFTLGNBQWMsVUFBVTtBQUMvQixTQUFPLGFBQWEsT0FBTyxhQUFhLE9BQU8sYUFBYTtBQUM5RDtBQUNBLFNBQVMsVUFBVSxTQUFTLFVBQVUsS0FBSyxVQUFVO0FBQ25ELE1BQUksUUFBUSxRQUFRLEdBQUcsR0FBRyxTQUFTLENBQUM7QUFDcEMsTUFBSSxVQUFVLEtBQUssS0FBSyxVQUFVLElBQUk7QUFDcEMsUUFBSSxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsV0FBVztBQUN4RixjQUFRLE1BQU0sU0FBUztBQUN2QixVQUFJLFlBQVksYUFBYSxLQUFLO0FBQ2hDLGdCQUFRLE1BQU0sVUFBVSxHQUFHLFNBQVMsVUFBVSxFQUFFLENBQUM7QUFBQSxNQUNuRDtBQUNBLGFBQU87QUFBQSxRQUNMLFlBQVksVUFBVSxPQUFPLGNBQWMsUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUFBLE1BQ2pFO0FBQUEsSUFDRixPQUFPO0FBQ0wsVUFBSSxhQUFhLEtBQUs7QUFDcEIsWUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLGdCQUFNLE9BQU8sU0FBUyxFQUFFLFFBQVEsU0FBUyxRQUFRO0FBQy9DLG1CQUFPO0FBQUEsY0FDTCxZQUFZLFVBQVUsUUFBUSxjQUFjLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFBQSxZQUNsRTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsT0FBTztBQUNMLGlCQUFPLEtBQUssS0FBSyxFQUFFLFFBQVEsU0FBUyxHQUFHO0FBQ3JDLGdCQUFJLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRztBQUN2QixxQkFBTyxLQUFLLFlBQVksVUFBVSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFBQSxZQUNoRDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLE9BQU87QUFDTCxjQUFNLE1BQU0sQ0FBQztBQUNiLFlBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN4QixnQkFBTSxPQUFPLFNBQVMsRUFBRSxRQUFRLFNBQVMsUUFBUTtBQUMvQyxnQkFBSSxLQUFLLFlBQVksVUFBVSxNQUFNLENBQUM7QUFBQSxVQUN4QyxDQUFDO0FBQUEsUUFDSCxPQUFPO0FBQ0wsaUJBQU8sS0FBSyxLQUFLLEVBQUUsUUFBUSxTQUFTLEdBQUc7QUFDckMsZ0JBQUksVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQ3ZCLGtCQUFJLEtBQUssaUJBQWlCLENBQUMsQ0FBQztBQUM1QixrQkFBSSxLQUFLLFlBQVksVUFBVSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUFBLFlBQ3JEO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUNBLFlBQUksY0FBYyxRQUFRLEdBQUc7QUFDM0IsaUJBQU8sS0FBSyxpQkFBaUIsR0FBRyxJQUFJLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQ3pELFdBQVcsSUFBSSxXQUFXLEdBQUc7QUFDM0IsaUJBQU8sS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0YsT0FBTztBQUNMLFFBQUksYUFBYSxLQUFLO0FBQ3BCLFVBQUksVUFBVSxLQUFLLEdBQUc7QUFDcEIsZUFBTyxLQUFLLGlCQUFpQixHQUFHLENBQUM7QUFBQSxNQUNuQztBQUFBLElBQ0YsV0FBVyxVQUFVLE9BQU8sYUFBYSxPQUFPLGFBQWEsTUFBTTtBQUNqRSxhQUFPLEtBQUssaUJBQWlCLEdBQUcsSUFBSSxHQUFHO0FBQUEsSUFDekMsV0FBVyxVQUFVLElBQUk7QUFDdkIsYUFBTyxLQUFLLEVBQUU7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFDQSxTQUFTLFNBQVMsVUFBVTtBQUMxQixTQUFPO0FBQUEsSUFDTCxRQUFRLE9BQU8sS0FBSyxNQUFNLFFBQVE7QUFBQSxFQUNwQztBQUNGO0FBQ0EsU0FBUyxPQUFPLFVBQVUsU0FBUztBQUNqQyxNQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQ2xELGFBQVcsU0FBUztBQUFBLElBQ2xCO0FBQUEsSUFDQSxTQUFTLEdBQUcsWUFBWSxTQUFTO0FBQy9CLFVBQUksWUFBWTtBQUNkLFlBQUksV0FBVztBQUNmLGNBQU0sU0FBUyxDQUFDO0FBQ2hCLFlBQUksVUFBVSxRQUFRLFdBQVcsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJO0FBQ2xELHFCQUFXLFdBQVcsT0FBTyxDQUFDO0FBQzlCLHVCQUFhLFdBQVcsT0FBTyxDQUFDO0FBQUEsUUFDbEM7QUFDQSxtQkFBVyxNQUFNLElBQUksRUFBRSxRQUFRLFNBQVMsVUFBVTtBQUNoRCxjQUFJLE1BQU0sNEJBQTRCLEtBQUssUUFBUTtBQUNuRCxpQkFBTyxLQUFLLFVBQVUsU0FBUyxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUNwRSxDQUFDO0FBQ0QsWUFBSSxZQUFZLGFBQWEsS0FBSztBQUNoQyxjQUFJLFlBQVk7QUFDaEIsY0FBSSxhQUFhLEtBQUs7QUFDcEIsd0JBQVk7QUFBQSxVQUNkLFdBQVcsYUFBYSxLQUFLO0FBQzNCLHdCQUFZO0FBQUEsVUFDZDtBQUNBLGtCQUFRLE9BQU8sV0FBVyxJQUFJLFdBQVcsTUFBTSxPQUFPLEtBQUssU0FBUztBQUFBLFFBQ3RFLE9BQU87QUFDTCxpQkFBTyxPQUFPLEtBQUssR0FBRztBQUFBLFFBQ3hCO0FBQUEsTUFDRixPQUFPO0FBQ0wsZUFBTyxlQUFlLE9BQU87QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsTUFBSSxhQUFhLEtBQUs7QUFDcEIsV0FBTztBQUFBLEVBQ1QsT0FBTztBQUNMLFdBQU8sU0FBUyxRQUFRLE9BQU8sRUFBRTtBQUFBLEVBQ25DO0FBQ0Y7QUFHQSxTQUFTLE1BQU0sU0FBUztBQUN0QixNQUFJLFNBQVMsUUFBUSxPQUFPLFlBQVk7QUFDeEMsTUFBSSxPQUFPLFFBQVEsT0FBTyxLQUFLLFFBQVEsZ0JBQWdCLE1BQU07QUFDN0QsTUFBSSxVQUFVLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUSxPQUFPO0FBQy9DLE1BQUk7QUFDSixNQUFJLGFBQWEsS0FBSyxTQUFTO0FBQUEsSUFDN0I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUNELFFBQU0sbUJBQW1CLHdCQUF3QixHQUFHO0FBQ3BELFFBQU0sU0FBUyxHQUFHLEVBQUUsT0FBTyxVQUFVO0FBQ3JDLE1BQUksQ0FBQyxRQUFRLEtBQUssR0FBRyxHQUFHO0FBQ3RCLFVBQU0sUUFBUSxVQUFVO0FBQUEsRUFDMUI7QUFDQSxRQUFNLG9CQUFvQixPQUFPLEtBQUssT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLGlCQUFpQixTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sU0FBUztBQUNySCxRQUFNLHNCQUFzQixLQUFLLFlBQVksaUJBQWlCO0FBQzlELFFBQU0sa0JBQWtCLDZCQUE2QixLQUFLLFFBQVEsTUFBTTtBQUN4RSxNQUFJLENBQUMsaUJBQWlCO0FBQ3BCLFFBQUksUUFBUSxVQUFVLFFBQVE7QUFDNUIsY0FBUSxTQUFTLFFBQVEsT0FBTyxNQUFNLEdBQUcsRUFBRTtBQUFBLFFBQ3pDLENBQUMsV0FBVyxPQUFPO0FBQUEsVUFDakI7QUFBQSxVQUNBLHVCQUF1QixRQUFRLFVBQVUsTUFBTTtBQUFBLFFBQ2pEO0FBQUEsTUFDRixFQUFFLEtBQUssR0FBRztBQUFBLElBQ1o7QUFDQSxRQUFJLElBQUksU0FBUyxVQUFVLEdBQUc7QUFDNUIsVUFBSSxRQUFRLFVBQVUsVUFBVSxRQUFRO0FBQ3RDLGNBQU0sMkJBQTJCLFFBQVEsT0FBTyxNQUFNLCtCQUErQixLQUFLLENBQUM7QUFDM0YsZ0JBQVEsU0FBUyx5QkFBeUIsT0FBTyxRQUFRLFVBQVUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO0FBQzVGLGdCQUFNLFNBQVMsUUFBUSxVQUFVLFNBQVMsSUFBSSxRQUFRLFVBQVUsTUFBTSxLQUFLO0FBQzNFLGlCQUFPLDBCQUEwQixPQUFPLFdBQVcsTUFBTTtBQUFBLFFBQzNELENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxNQUNiO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLENBQUMsT0FBTyxNQUFNLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDcEMsVUFBTSxtQkFBbUIsS0FBSyxtQkFBbUI7QUFBQSxFQUNuRCxPQUFPO0FBQ0wsUUFBSSxVQUFVLHFCQUFxQjtBQUNqQyxhQUFPLG9CQUFvQjtBQUFBLElBQzdCLE9BQU87QUFDTCxVQUFJLE9BQU8sS0FBSyxtQkFBbUIsRUFBRSxRQUFRO0FBQzNDLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLENBQUMsUUFBUSxjQUFjLEtBQUssT0FBTyxTQUFTLGFBQWE7QUFDM0QsWUFBUSxjQUFjLElBQUk7QUFBQSxFQUM1QjtBQUNBLE1BQUksQ0FBQyxTQUFTLEtBQUssRUFBRSxTQUFTLE1BQU0sS0FBSyxPQUFPLFNBQVMsYUFBYTtBQUNwRSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sT0FBTztBQUFBLElBQ1osRUFBRSxRQUFRLEtBQUssUUFBUTtBQUFBLElBQ3ZCLE9BQU8sU0FBUyxjQUFjLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDekMsUUFBUSxVQUFVLEVBQUUsU0FBUyxRQUFRLFFBQVEsSUFBSTtBQUFBLEVBQ25EO0FBQ0Y7QUFHQSxTQUFTLHFCQUFxQixVQUFVLE9BQU8sU0FBUztBQUN0RCxTQUFPLE1BQU0sTUFBTSxVQUFVLE9BQU8sT0FBTyxDQUFDO0FBQzlDO0FBR0EsU0FBUyxhQUFhLGFBQWEsYUFBYTtBQUM5QyxRQUFNLFlBQVksTUFBTSxhQUFhLFdBQVc7QUFDaEQsUUFBTSxZQUFZLHFCQUFxQixLQUFLLE1BQU0sU0FBUztBQUMzRCxTQUFPLE9BQU8sT0FBTyxXQUFXO0FBQUEsSUFDOUIsVUFBVTtBQUFBLElBQ1YsVUFBVSxhQUFhLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDM0MsT0FBTyxNQUFNLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDakM7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUdBLElBQUksV0FBVyxhQUFhLE1BQU0sUUFBUTs7O0FDclUxQyxxQ0FBMEI7QUFWMUIsSUFBSUMsV0FBVTtBQUdkLElBQUksbUJBQW1CO0FBQUEsRUFDckIsU0FBUztBQUFBLElBQ1AsY0FBYyxzQkFBc0JBLFFBQU8sSUFBSSxhQUFhLENBQUM7QUFBQSxFQUMvRDtBQUNGO0FBTUEsU0FBU0MsZUFBYyxPQUFPO0FBQzVCLE1BQUksT0FBTyxVQUFVLFlBQVksVUFBVSxLQUFNLFFBQU87QUFDeEQsTUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssTUFBTSxrQkFBbUIsUUFBTztBQUN4RSxRQUFNLFFBQVEsT0FBTyxlQUFlLEtBQUs7QUFDekMsTUFBSSxVQUFVLEtBQU0sUUFBTztBQUMzQixRQUFNLE9BQU8sT0FBTyxVQUFVLGVBQWUsS0FBSyxPQUFPLGFBQWEsS0FBSyxNQUFNO0FBQ2pGLFNBQU8sT0FBTyxTQUFTLGNBQWMsZ0JBQWdCLFFBQVEsU0FBUyxVQUFVLEtBQUssSUFBSSxNQUFNLFNBQVMsVUFBVSxLQUFLLEtBQUs7QUFDOUg7QUFJQSxlQUFlLGFBQWEsZ0JBQWdCO0FBQzFDLFFBQU0sUUFBUSxlQUFlLFNBQVMsU0FBUyxXQUFXO0FBQzFELE1BQUksQ0FBQyxPQUFPO0FBQ1YsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsUUFBTSxNQUFNLGVBQWUsU0FBUyxPQUFPO0FBQzNDLFFBQU0sMkJBQTJCLGVBQWUsU0FBUyw2QkFBNkI7QUFDdEYsUUFBTSxPQUFPQSxlQUFjLGVBQWUsSUFBSSxLQUFLLE1BQU0sUUFBUSxlQUFlLElBQUksSUFBSSxLQUFLLFVBQVUsZUFBZSxJQUFJLElBQUksZUFBZTtBQUM3SSxRQUFNLGlCQUFpQixPQUFPO0FBQUEsSUFDNUIsT0FBTyxRQUFRLGVBQWUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQUEsTUFDNUQ7QUFBQSxNQUNBLE9BQU8sS0FBSztBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0g7QUFDQSxNQUFJO0FBQ0osTUFBSTtBQUNGLG9CQUFnQixNQUFNLE1BQU0sZUFBZSxLQUFLO0FBQUEsTUFDOUMsUUFBUSxlQUFlO0FBQUEsTUFDdkI7QUFBQSxNQUNBLFVBQVUsZUFBZSxTQUFTO0FBQUEsTUFDbEMsU0FBUztBQUFBLE1BQ1QsUUFBUSxlQUFlLFNBQVM7QUFBQTtBQUFBO0FBQUEsTUFHaEMsR0FBRyxlQUFlLFFBQVEsRUFBRSxRQUFRLE9BQU87QUFBQSxJQUM3QyxDQUFDO0FBQUEsRUFDSCxTQUFTLE9BQU87QUFDZCxRQUFJLFVBQVU7QUFDZCxRQUFJLGlCQUFpQixPQUFPO0FBQzFCLFVBQUksTUFBTSxTQUFTLGNBQWM7QUFDL0IsY0FBTSxTQUFTO0FBQ2YsY0FBTTtBQUFBLE1BQ1I7QUFDQSxnQkFBVSxNQUFNO0FBQ2hCLFVBQUksTUFBTSxTQUFTLGVBQWUsV0FBVyxPQUFPO0FBQ2xELFlBQUksTUFBTSxpQkFBaUIsT0FBTztBQUNoQyxvQkFBVSxNQUFNLE1BQU07QUFBQSxRQUN4QixXQUFXLE9BQU8sTUFBTSxVQUFVLFVBQVU7QUFDMUMsb0JBQVUsTUFBTTtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxVQUFNLGVBQWUsSUFBSSxhQUFhLFNBQVMsS0FBSztBQUFBLE1BQ2xELFNBQVM7QUFBQSxJQUNYLENBQUM7QUFDRCxpQkFBYSxRQUFRO0FBQ3JCLFVBQU07QUFBQSxFQUNSO0FBQ0EsUUFBTSxTQUFTLGNBQWM7QUFDN0IsUUFBTSxNQUFNLGNBQWM7QUFDMUIsUUFBTSxrQkFBa0IsQ0FBQztBQUN6QixhQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssY0FBYyxTQUFTO0FBQ2hELG9CQUFnQixHQUFHLElBQUk7QUFBQSxFQUN6QjtBQUNBLFFBQU0sa0JBQWtCO0FBQUEsSUFDdEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNBLE1BQUksaUJBQWlCLGlCQUFpQjtBQUNwQyxVQUFNLFVBQVUsZ0JBQWdCLFFBQVEsZ0JBQWdCLEtBQUssTUFBTSwrQkFBK0I7QUFDbEcsVUFBTSxrQkFBa0IsV0FBVyxRQUFRLElBQUk7QUFDL0MsUUFBSTtBQUFBLE1BQ0YsdUJBQXVCLGVBQWUsTUFBTSxJQUFJLGVBQWUsR0FBRyxxREFBcUQsZ0JBQWdCLE1BQU0sR0FBRyxrQkFBa0IsU0FBUyxlQUFlLEtBQUssRUFBRTtBQUFBLElBQ25NO0FBQUEsRUFDRjtBQUNBLE1BQUksV0FBVyxPQUFPLFdBQVcsS0FBSztBQUNwQyxXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksZUFBZSxXQUFXLFFBQVE7QUFDcEMsUUFBSSxTQUFTLEtBQUs7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLElBQUksYUFBYSxjQUFjLFlBQVksUUFBUTtBQUFBLE1BQ3ZELFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBQ0EsTUFBSSxXQUFXLEtBQUs7QUFDbEIsb0JBQWdCLE9BQU8sTUFBTSxnQkFBZ0IsYUFBYTtBQUMxRCxVQUFNLElBQUksYUFBYSxnQkFBZ0IsUUFBUTtBQUFBLE1BQzdDLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBQ0EsTUFBSSxVQUFVLEtBQUs7QUFDakIsb0JBQWdCLE9BQU8sTUFBTSxnQkFBZ0IsYUFBYTtBQUMxRCxVQUFNLElBQUksYUFBYSxlQUFlLGdCQUFnQixJQUFJLEdBQUcsUUFBUTtBQUFBLE1BQ25FLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBQ0Esa0JBQWdCLE9BQU8sMkJBQTJCLE1BQU0sZ0JBQWdCLGFBQWEsSUFBSSxjQUFjO0FBQ3ZHLFNBQU87QUFDVDtBQUNBLGVBQWUsZ0JBQWdCLFVBQVU7QUFDdkMsUUFBTSxjQUFjLFNBQVMsUUFBUSxJQUFJLGNBQWM7QUFDdkQsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTyxTQUFTLEtBQUssRUFBRSxNQUFNLE1BQU0sRUFBRTtBQUFBLEVBQ3ZDO0FBQ0EsUUFBTSxlQUFXLDBDQUFVLFdBQVc7QUFDdEMsTUFBSSxlQUFlLFFBQVEsR0FBRztBQUM1QixRQUFJLE9BQU87QUFDWCxRQUFJO0FBQ0YsYUFBTyxNQUFNLFNBQVMsS0FBSztBQUMzQixhQUFPLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDeEIsU0FBUyxLQUFLO0FBQ1osYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGLFdBQVcsU0FBUyxLQUFLLFdBQVcsT0FBTyxLQUFLLFNBQVMsV0FBVyxTQUFTLFlBQVksTUFBTSxTQUFTO0FBQ3RHLFdBQU8sU0FBUyxLQUFLLEVBQUUsTUFBTSxNQUFNLEVBQUU7QUFBQSxFQUN2QyxPQUFPO0FBQ0wsV0FBTyxTQUFTLFlBQVksRUFBRSxNQUFNLE1BQU0sSUFBSSxZQUFZLENBQUMsQ0FBQztBQUFBLEVBQzlEO0FBQ0Y7QUFDQSxTQUFTLGVBQWUsVUFBVTtBQUNoQyxTQUFPLFNBQVMsU0FBUyxzQkFBc0IsU0FBUyxTQUFTO0FBQ25FO0FBQ0EsU0FBUyxlQUFlLE1BQU07QUFDNUIsTUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksZ0JBQWdCLGFBQWE7QUFDL0IsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLGFBQWEsTUFBTTtBQUNyQixVQUFNLFNBQVMsdUJBQXVCLE9BQU8sTUFBTSxLQUFLLGlCQUFpQixLQUFLO0FBQzlFLFdBQU8sTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sS0FBSyxHQUFHLEtBQUssT0FBTyxHQUFHLE1BQU07QUFBQSxFQUNwSjtBQUNBLFNBQU8sa0JBQWtCLEtBQUssVUFBVSxJQUFJLENBQUM7QUFDL0M7QUFHQSxTQUFTQyxjQUFhLGFBQWEsYUFBYTtBQUM5QyxRQUFNLFlBQVksWUFBWSxTQUFTLFdBQVc7QUFDbEQsUUFBTSxTQUFTLFNBQVMsT0FBTyxZQUFZO0FBQ3pDLFVBQU0sa0JBQWtCLFVBQVUsTUFBTSxPQUFPLFVBQVU7QUFDekQsUUFBSSxDQUFDLGdCQUFnQixXQUFXLENBQUMsZ0JBQWdCLFFBQVEsTUFBTTtBQUM3RCxhQUFPLGFBQWEsVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUFBLElBQ3REO0FBQ0EsVUFBTSxXQUFXLENBQUMsUUFBUSxnQkFBZ0I7QUFDeEMsYUFBTztBQUFBLFFBQ0wsVUFBVSxNQUFNLFVBQVUsTUFBTSxRQUFRLFdBQVcsQ0FBQztBQUFBLE1BQ3REO0FBQUEsSUFDRjtBQUNBLFdBQU8sT0FBTyxVQUFVO0FBQUEsTUFDdEIsVUFBVTtBQUFBLE1BQ1YsVUFBVUEsY0FBYSxLQUFLLE1BQU0sU0FBUztBQUFBLElBQzdDLENBQUM7QUFDRCxXQUFPLGdCQUFnQixRQUFRLEtBQUssVUFBVSxlQUFlO0FBQUEsRUFDL0Q7QUFDQSxTQUFPLE9BQU8sT0FBTyxRQUFRO0FBQUEsSUFDM0IsVUFBVTtBQUFBLElBQ1YsVUFBVUEsY0FBYSxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQzdDLENBQUM7QUFDSDtBQUdBLElBQUksVUFBVUEsY0FBYSxVQUFVLGdCQUFnQjs7O0FDM0xyRCxJQUFJQyxXQUFVO0FBU2QsU0FBUywrQkFBK0IsTUFBTTtBQUM1QyxTQUFPO0FBQUEsSUFDTCxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssSUFBSTtBQUN2RDtBQUNBLElBQUksdUJBQXVCLGNBQWMsTUFBTTtBQUFBLEVBQzdDLFlBQVksVUFBVSxTQUFTLFVBQVU7QUFDdkMsVUFBTSwrQkFBK0IsUUFBUSxDQUFDO0FBQzlDLFNBQUssVUFBVTtBQUNmLFNBQUssVUFBVTtBQUNmLFNBQUssV0FBVztBQUNoQixTQUFLLFNBQVMsU0FBUztBQUN2QixTQUFLLE9BQU8sU0FBUztBQUNyQixRQUFJLE1BQU0sbUJBQW1CO0FBQzNCLFlBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQUEsSUFDaEQ7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFDRjtBQUdBLElBQUksdUJBQXVCO0FBQUEsRUFDekI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFDQSxJQUFJLDZCQUE2QixDQUFDLFNBQVMsVUFBVSxLQUFLO0FBQzFELElBQUksdUJBQXVCO0FBQzNCLFNBQVMsUUFBUSxVQUFVLE9BQU8sU0FBUztBQUN6QyxNQUFJLFNBQVM7QUFDWCxRQUFJLE9BQU8sVUFBVSxZQUFZLFdBQVcsU0FBUztBQUNuRCxhQUFPLFFBQVE7QUFBQSxRQUNiLElBQUksTUFBTSw0REFBNEQ7QUFBQSxNQUN4RTtBQUFBLElBQ0Y7QUFDQSxlQUFXLE9BQU8sU0FBUztBQUN6QixVQUFJLENBQUMsMkJBQTJCLFNBQVMsR0FBRyxFQUFHO0FBQy9DLGFBQU8sUUFBUTtBQUFBLFFBQ2IsSUFBSTtBQUFBLFVBQ0YsdUJBQXVCLEdBQUc7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFFBQU0sZ0JBQWdCLE9BQU8sVUFBVSxXQUFXLE9BQU8sT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLElBQUk7QUFDdEYsUUFBTSxpQkFBaUIsT0FBTztBQUFBLElBQzVCO0FBQUEsRUFDRixFQUFFLE9BQU8sQ0FBQyxRQUFRLFFBQVE7QUFDeEIsUUFBSSxxQkFBcUIsU0FBUyxHQUFHLEdBQUc7QUFDdEMsYUFBTyxHQUFHLElBQUksY0FBYyxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxDQUFDLE9BQU8sV0FBVztBQUNyQixhQUFPLFlBQVksQ0FBQztBQUFBLElBQ3RCO0FBQ0EsV0FBTyxVQUFVLEdBQUcsSUFBSSxjQUFjLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1QsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFNLFVBQVUsY0FBYyxXQUFXLFNBQVMsU0FBUyxTQUFTO0FBQ3BFLE1BQUkscUJBQXFCLEtBQUssT0FBTyxHQUFHO0FBQ3RDLG1CQUFlLE1BQU0sUUFBUSxRQUFRLHNCQUFzQixjQUFjO0FBQUEsRUFDM0U7QUFDQSxTQUFPLFNBQVMsY0FBYyxFQUFFLEtBQUssQ0FBQyxhQUFhO0FBQ2pELFFBQUksU0FBUyxLQUFLLFFBQVE7QUFDeEIsWUFBTSxVQUFVLENBQUM7QUFDakIsaUJBQVcsT0FBTyxPQUFPLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFDL0MsZ0JBQVEsR0FBRyxJQUFJLFNBQVMsUUFBUSxHQUFHO0FBQUEsTUFDckM7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0EsU0FBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBQ0EsV0FBTyxTQUFTLEtBQUs7QUFBQSxFQUN2QixDQUFDO0FBQ0g7QUFHQSxTQUFTQyxjQUFhLFVBQVUsYUFBYTtBQUMzQyxRQUFNLGFBQWEsU0FBUyxTQUFTLFdBQVc7QUFDaEQsUUFBTSxTQUFTLENBQUMsT0FBTyxZQUFZO0FBQ2pDLFdBQU8sUUFBUSxZQUFZLE9BQU8sT0FBTztBQUFBLEVBQzNDO0FBQ0EsU0FBTyxPQUFPLE9BQU8sUUFBUTtBQUFBLElBQzNCLFVBQVVBLGNBQWEsS0FBSyxNQUFNLFVBQVU7QUFBQSxJQUM1QyxVQUFVLFdBQVc7QUFBQSxFQUN2QixDQUFDO0FBQ0g7QUFHQSxJQUFJLFdBQVdBLGNBQWEsU0FBUztBQUFBLEVBQ25DLFNBQVM7QUFBQSxJQUNQLGNBQWMsc0JBQXNCRCxRQUFPLElBQUksYUFBYSxDQUFDO0FBQUEsRUFDL0Q7QUFBQSxFQUNBLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFDUCxDQUFDO0FBQ0QsU0FBUyxrQkFBa0IsZUFBZTtBQUN4QyxTQUFPQyxjQUFhLGVBQWU7QUFBQSxJQUNqQyxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsRUFDUCxDQUFDO0FBQ0g7OztBQzFIQSxJQUFJLFNBQVM7QUFDYixJQUFJLE1BQU07QUFDVixJQUFJLFFBQVEsSUFBSSxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRztBQUNsRSxJQUFJLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSztBQUdqQyxlQUFlLEtBQUssT0FBTztBQUN6QixRQUFNLFFBQVEsTUFBTSxLQUFLO0FBQ3pCLFFBQU0saUJBQWlCLE1BQU0sV0FBVyxLQUFLLEtBQUssTUFBTSxXQUFXLE1BQU07QUFDekUsUUFBTSxpQkFBaUIsTUFBTSxXQUFXLE1BQU07QUFDOUMsUUFBTSxZQUFZLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLGlCQUFpQixtQkFBbUI7QUFDeEcsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ047QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBR0EsU0FBUyx3QkFBd0IsT0FBTztBQUN0QyxNQUFJLE1BQU0sTUFBTSxJQUFJLEVBQUUsV0FBVyxHQUFHO0FBQ2xDLFdBQU8sVUFBVSxLQUFLO0FBQUEsRUFDeEI7QUFDQSxTQUFPLFNBQVMsS0FBSztBQUN2QjtBQUdBLGVBQWUsS0FBSyxPQUFPQyxVQUFTLE9BQU8sWUFBWTtBQUNyRCxRQUFNQyxZQUFXRCxTQUFRLFNBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsRUFBQUMsVUFBUyxRQUFRLGdCQUFnQix3QkFBd0IsS0FBSztBQUM5RCxTQUFPRCxTQUFRQyxTQUFRO0FBQ3pCO0FBR0EsSUFBSSxrQkFBa0IsU0FBUyxpQkFBaUIsT0FBTztBQUNyRCxNQUFJLENBQUMsT0FBTztBQUNWLFVBQU0sSUFBSSxNQUFNLDBEQUEwRDtBQUFBLEVBQzVFO0FBQ0EsTUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxVQUFRLE1BQU0sUUFBUSxzQkFBc0IsRUFBRTtBQUM5QyxTQUFPLE9BQU8sT0FBTyxLQUFLLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxJQUMzQyxNQUFNLEtBQUssS0FBSyxNQUFNLEtBQUs7QUFBQSxFQUM3QixDQUFDO0FBQ0g7OztBQ25EQSxJQUFNQyxXQUFVOzs7QUNNaEIsSUFBTSxPQUFPLE1BQU07QUFDbkI7QUFDQSxJQUFNLGNBQWMsUUFBUSxLQUFLLEtBQUssT0FBTztBQUM3QyxJQUFNLGVBQWUsUUFBUSxNQUFNLEtBQUssT0FBTztBQUMvQyxTQUFTLGFBQWEsU0FBUyxDQUFDLEdBQUc7QUFDakMsTUFBSSxPQUFPLE9BQU8sVUFBVSxZQUFZO0FBQ3RDLFdBQU8sUUFBUTtBQUFBLEVBQ2pCO0FBQ0EsTUFBSSxPQUFPLE9BQU8sU0FBUyxZQUFZO0FBQ3JDLFdBQU8sT0FBTztBQUFBLEVBQ2hCO0FBQ0EsTUFBSSxPQUFPLE9BQU8sU0FBUyxZQUFZO0FBQ3JDLFdBQU8sT0FBTztBQUFBLEVBQ2hCO0FBQ0EsTUFBSSxPQUFPLE9BQU8sVUFBVSxZQUFZO0FBQ3RDLFdBQU8sUUFBUTtBQUFBLEVBQ2pCO0FBQ0EsU0FBTztBQUNUO0FBQ0EsSUFBTSxpQkFBaUIsbUJBQW1CQyxRQUFPLElBQUksYUFBYSxDQUFDO0FBQ25FLElBQU0sVUFBTixNQUFjO0FBQUEsRUFDWixPQUFPLFVBQVVBO0FBQUEsRUFDakIsT0FBTyxTQUFTLFVBQVU7QUFDeEIsVUFBTSxzQkFBc0IsY0FBYyxLQUFLO0FBQUEsTUFDN0MsZUFBZSxNQUFNO0FBQ25CLGNBQU0sVUFBVSxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzVCLFlBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsZ0JBQU0sU0FBUyxPQUFPLENBQUM7QUFDdkI7QUFBQSxRQUNGO0FBQ0E7QUFBQSxVQUNFLE9BQU87QUFBQSxZQUNMLENBQUM7QUFBQSxZQUNEO0FBQUEsWUFDQTtBQUFBLFlBQ0EsUUFBUSxhQUFhLFNBQVMsWUFBWTtBQUFBLGNBQ3hDLFdBQVcsR0FBRyxRQUFRLFNBQVMsSUFBSSxTQUFTLFNBQVM7QUFBQSxZQUN2RCxJQUFJO0FBQUEsVUFDTjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2xCLE9BQU8sVUFBVSxZQUFZO0FBQzNCLFVBQU0saUJBQWlCLEtBQUs7QUFDNUIsVUFBTSxhQUFhLGNBQWMsS0FBSztBQUFBLE1BQ3BDLE9BQU8sVUFBVSxlQUFlO0FBQUEsUUFDOUIsV0FBVyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsU0FBUyxNQUFNLENBQUM7QUFBQSxNQUNoRTtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsWUFBWSxVQUFVLENBQUMsR0FBRztBQUN4QixVQUFNQyxRQUFPLElBQUksMEJBQUssV0FBVztBQUNqQyxVQUFNLGtCQUFrQjtBQUFBLE1BQ3RCLFNBQVMsUUFBUSxTQUFTLFNBQVM7QUFBQSxNQUNuQyxTQUFTLENBQUM7QUFBQSxNQUNWLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLFNBQVM7QUFBQTtBQUFBLFFBRTFDLE1BQU1BLE1BQUssS0FBSyxNQUFNLFNBQVM7QUFBQSxNQUNqQyxDQUFDO0FBQUEsTUFDRCxXQUFXO0FBQUEsUUFDVCxVQUFVLENBQUM7QUFBQSxRQUNYLFFBQVE7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUNBLG9CQUFnQixRQUFRLFlBQVksSUFBSSxRQUFRLFlBQVksR0FBRyxRQUFRLFNBQVMsSUFBSSxjQUFjLEtBQUs7QUFDdkcsUUFBSSxRQUFRLFNBQVM7QUFDbkIsc0JBQWdCLFVBQVUsUUFBUTtBQUFBLElBQ3BDO0FBQ0EsUUFBSSxRQUFRLFVBQVU7QUFDcEIsc0JBQWdCLFVBQVUsV0FBVyxRQUFRO0FBQUEsSUFDL0M7QUFDQSxRQUFJLFFBQVEsVUFBVTtBQUNwQixzQkFBZ0IsUUFBUSxXQUFXLElBQUksUUFBUTtBQUFBLElBQ2pEO0FBQ0EsU0FBSyxVQUFVLFFBQVEsU0FBUyxlQUFlO0FBQy9DLFNBQUssVUFBVSxrQkFBa0IsS0FBSyxPQUFPLEVBQUUsU0FBUyxlQUFlO0FBQ3ZFLFNBQUssTUFBTSxhQUFhLFFBQVEsR0FBRztBQUNuQyxTQUFLLE9BQU9BO0FBQ1osUUFBSSxDQUFDLFFBQVEsY0FBYztBQUN6QixVQUFJLENBQUMsUUFBUSxNQUFNO0FBQ2pCLGFBQUssT0FBTyxhQUFhO0FBQUEsVUFDdkIsTUFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGLE9BQU87QUFDTCxjQUFNQyxRQUFPLGdCQUFnQixRQUFRLElBQUk7QUFDekMsUUFBQUQsTUFBSyxLQUFLLFdBQVdDLE1BQUssSUFBSTtBQUM5QixhQUFLLE9BQU9BO0FBQUEsTUFDZDtBQUFBLElBQ0YsT0FBTztBQUNMLFlBQU0sRUFBRSxjQUFjLEdBQUcsYUFBYSxJQUFJO0FBQzFDLFlBQU1BLFFBQU87QUFBQSxRQUNYLE9BQU87QUFBQSxVQUNMO0FBQUEsWUFDRSxTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1WLFNBQVM7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFVBQ2xCO0FBQUEsVUFDQSxRQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFDQSxNQUFBRCxNQUFLLEtBQUssV0FBV0MsTUFBSyxJQUFJO0FBQzlCLFdBQUssT0FBT0E7QUFBQSxJQUNkO0FBQ0EsVUFBTSxtQkFBbUIsS0FBSztBQUM5QixhQUFTLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLFFBQVEsRUFBRSxHQUFHO0FBQ3hELGFBQU8sT0FBTyxNQUFNLGlCQUFpQixRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUFBLElBQ2hFO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFFQTtBQUNGOzs7QUN6SUEsSUFBTUMsV0FBVTs7O0FDQ2hCLFNBQVMsV0FBVyxTQUFTO0FBQzNCLFVBQVEsS0FBSyxLQUFLLFdBQVcsQ0FBQ0MsVUFBUyxZQUFZO0FBQ2pELFlBQVEsSUFBSSxNQUFNLFdBQVcsT0FBTztBQUNwQyxVQUFNLFFBQVEsS0FBSyxJQUFJO0FBQ3ZCLFVBQU0saUJBQWlCLFFBQVEsUUFBUSxTQUFTLE1BQU0sT0FBTztBQUM3RCxVQUFNQyxRQUFPLGVBQWUsSUFBSSxRQUFRLFFBQVEsU0FBUyxFQUFFO0FBQzNELFdBQU9ELFNBQVEsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhO0FBQ3pDLFlBQU0sWUFBWSxTQUFTLFFBQVEscUJBQXFCO0FBQ3hELGNBQVEsSUFBSTtBQUFBLFFBQ1YsR0FBRyxlQUFlLE1BQU0sSUFBSUMsS0FBSSxNQUFNLFNBQVMsTUFBTSxZQUFZLFNBQVMsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLO0FBQUEsTUFDckc7QUFDQSxhQUFPO0FBQUEsSUFDVCxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVU7QUFDbEIsWUFBTSxZQUFZLE1BQU0sVUFBVSxRQUFRLHFCQUFxQixLQUFLO0FBQ3BFLGNBQVEsSUFBSTtBQUFBLFFBQ1YsR0FBRyxlQUFlLE1BQU0sSUFBSUEsS0FBSSxNQUFNLE1BQU0sTUFBTSxZQUFZLFNBQVMsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLO0FBQUEsTUFDbEc7QUFDQSxZQUFNO0FBQUEsSUFDUixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxXQUFXLFVBQVVDOzs7QUNyQnJCLElBQUlDLFdBQVU7QUFHZCxTQUFTLCtCQUErQixVQUFVO0FBQ2hELE1BQUksQ0FBQyxTQUFTLE1BQU07QUFDbEIsV0FBTztBQUFBLE1BQ0wsR0FBRztBQUFBLE1BQ0gsTUFBTSxDQUFDO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDQSxRQUFNLDZCQUE2QixpQkFBaUIsU0FBUyxRQUFRLEVBQUUsU0FBUyxTQUFTO0FBQ3pGLE1BQUksQ0FBQywyQkFBNEIsUUFBTztBQUN4QyxRQUFNLG9CQUFvQixTQUFTLEtBQUs7QUFDeEMsUUFBTSxzQkFBc0IsU0FBUyxLQUFLO0FBQzFDLFFBQU0sYUFBYSxTQUFTLEtBQUs7QUFDakMsU0FBTyxTQUFTLEtBQUs7QUFDckIsU0FBTyxTQUFTLEtBQUs7QUFDckIsU0FBTyxTQUFTLEtBQUs7QUFDckIsUUFBTSxlQUFlLE9BQU8sS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDO0FBQ2pELFFBQU0sT0FBTyxTQUFTLEtBQUssWUFBWTtBQUN2QyxXQUFTLE9BQU87QUFDaEIsTUFBSSxPQUFPLHNCQUFzQixhQUFhO0FBQzVDLGFBQVMsS0FBSyxxQkFBcUI7QUFBQSxFQUNyQztBQUNBLE1BQUksT0FBTyx3QkFBd0IsYUFBYTtBQUM5QyxhQUFTLEtBQUssdUJBQXVCO0FBQUEsRUFDdkM7QUFDQSxXQUFTLEtBQUssY0FBYztBQUM1QixTQUFPO0FBQ1Q7QUFHQSxTQUFTLFNBQVMsU0FBUyxPQUFPLFlBQVk7QUFDNUMsUUFBTSxVQUFVLE9BQU8sVUFBVSxhQUFhLE1BQU0sU0FBUyxVQUFVLElBQUksUUFBUSxRQUFRLFNBQVMsT0FBTyxVQUFVO0FBQ3JILFFBQU0sZ0JBQWdCLE9BQU8sVUFBVSxhQUFhLFFBQVEsUUFBUTtBQUNwRSxRQUFNLFNBQVMsUUFBUTtBQUN2QixRQUFNLFVBQVUsUUFBUTtBQUN4QixNQUFJLE1BQU0sUUFBUTtBQUNsQixTQUFPO0FBQUEsSUFDTCxDQUFDLE9BQU8sYUFBYSxHQUFHLE9BQU87QUFBQSxNQUM3QixNQUFNLE9BQU87QUFDWCxZQUFJLENBQUMsSUFBSyxRQUFPLEVBQUUsTUFBTSxLQUFLO0FBQzlCLFlBQUk7QUFDRixnQkFBTSxXQUFXLE1BQU0sY0FBYyxFQUFFLFFBQVEsS0FBSyxRQUFRLENBQUM7QUFDN0QsZ0JBQU0scUJBQXFCLCtCQUErQixRQUFRO0FBQ2xFLGtCQUFRLG1CQUFtQixRQUFRLFFBQVEsSUFBSTtBQUFBLFlBQzdDO0FBQUEsVUFDRixLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ1YsaUJBQU8sRUFBRSxPQUFPLG1CQUFtQjtBQUFBLFFBQ3JDLFNBQVMsT0FBTztBQUNkLGNBQUksTUFBTSxXQUFXLElBQUssT0FBTTtBQUNoQyxnQkFBTTtBQUNOLGlCQUFPO0FBQUEsWUFDTCxPQUFPO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixTQUFTLENBQUM7QUFBQSxjQUNWLE1BQU0sQ0FBQztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBR0EsU0FBUyxTQUFTLFNBQVMsT0FBTyxZQUFZLE9BQU87QUFDbkQsTUFBSSxPQUFPLGVBQWUsWUFBWTtBQUNwQyxZQUFRO0FBQ1IsaUJBQWE7QUFBQSxFQUNmO0FBQ0EsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLENBQUM7QUFBQSxJQUNELFNBQVMsU0FBUyxPQUFPLFVBQVUsRUFBRSxPQUFPLGFBQWEsRUFBRTtBQUFBLElBQzNEO0FBQUEsRUFDRjtBQUNGO0FBQ0EsU0FBUyxPQUFPLFNBQVMsU0FBUyxXQUFXLE9BQU87QUFDbEQsU0FBTyxVQUFVLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVztBQUN2QyxRQUFJLE9BQU8sTUFBTTtBQUNmLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxZQUFZO0FBQ2hCLGFBQVMsT0FBTztBQUNkLGtCQUFZO0FBQUEsSUFDZDtBQUNBLGNBQVUsUUFBUTtBQUFBLE1BQ2hCLFFBQVEsTUFBTSxPQUFPLE9BQU8sSUFBSSxJQUFJLE9BQU8sTUFBTTtBQUFBLElBQ25EO0FBQ0EsUUFBSSxXQUFXO0FBQ2IsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLE9BQU8sU0FBUyxTQUFTLFdBQVcsS0FBSztBQUFBLEVBQ2xELENBQUM7QUFDSDtBQUdBLElBQUksc0JBQXNCLE9BQU8sT0FBTyxVQUFVO0FBQUEsRUFDaEQ7QUFDRixDQUFDO0FBa1JELFNBQVMsYUFBYSxTQUFTO0FBQzdCLFNBQU87QUFBQSxJQUNMLFVBQVUsT0FBTyxPQUFPLFNBQVMsS0FBSyxNQUFNLE9BQU8sR0FBRztBQUFBLE1BQ3BELFVBQVUsU0FBUyxLQUFLLE1BQU0sT0FBTztBQUFBLElBQ3ZDLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFDQSxhQUFhLFVBQVVDOzs7QUM5WGhCLElBQU1DLFdBQVU7OztBQ0N2QixJQUFNLFlBQTZDO0VBQ2pELFNBQVM7SUFDUCx5Q0FBeUM7TUFDdkM7SUFDRjtJQUNBLDBDQUEwQztNQUN4QztJQUNGO0lBQ0EsMkNBQTJDO01BQ3pDO0lBQ0Y7SUFDQSw0QkFBNEI7TUFDMUI7SUFDRjtJQUNBLDhCQUE4QjtNQUM1QjtJQUNGO0lBQ0Esb0JBQW9CO01BQ2xCO0lBQ0Y7SUFDQSxtQkFBbUI7TUFDakI7SUFDRjtJQUNBLDJCQUEyQjtNQUN6QjtJQUNGO0lBQ0EsMEJBQTBCLENBQUMseUNBQXlDO0lBQ3BFLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EseUJBQXlCLENBQUMsK0NBQStDO0lBQ3pFLDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0EsbUJBQW1CLENBQUMsb0NBQW9DO0lBQ3hELCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSx5QkFBeUIsQ0FBQywrQ0FBK0M7SUFDekUsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxvQkFBb0IsQ0FBQyw4Q0FBOEM7SUFDbkUsd0JBQXdCO01BQ3RCO0lBQ0Y7SUFDQSx3QkFBd0I7TUFDdEI7SUFDRjtJQUNBLHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EsZ0JBQWdCO01BQ2Q7SUFDRjtJQUNBLHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLGlCQUFpQixDQUFDLGtEQUFrRDtJQUNwRSxtQkFBbUIsQ0FBQyw2Q0FBNkM7SUFDakUsa0JBQWtCO01BQ2hCO0lBQ0Y7SUFDQSxvQkFBb0I7TUFDbEI7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSxtQkFBbUIsQ0FBQyxvREFBb0Q7SUFDeEUsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxvREFBb0Q7TUFDbEQ7SUFDRjtJQUNBLGlCQUFpQjtNQUNmO0lBQ0Y7SUFDQSxrQkFBa0I7TUFDaEI7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSx5QkFBeUI7TUFDdkI7SUFDRjtJQUNBLG1EQUFtRDtNQUNqRDtJQUNGO0lBQ0EsZ0JBQWdCO01BQ2Q7SUFDRjtJQUNBLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSxnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLHFCQUFxQixDQUFDLDBDQUEwQztJQUNoRSxzQkFBc0IsQ0FBQywrQ0FBK0M7SUFDdEUsa0NBQWtDO01BQ2hDO0lBQ0Y7SUFDQSw0QkFBNEIsQ0FBQyxxQ0FBcUM7SUFDbEUsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLGFBQWEsQ0FBQywyREFBMkQ7SUFDekUsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSx5QkFBeUI7TUFDdkI7SUFDRjtJQUNBLHNCQUFzQjtNQUNwQjtJQUNGO0lBQ0Esd0JBQXdCO01BQ3RCO0lBQ0Y7SUFDQSx3REFBd0Q7TUFDdEQ7SUFDRjtJQUNBLHNEQUFzRDtNQUNwRDtJQUNGO0lBQ0EseUNBQXlDO01BQ3ZDO0lBQ0Y7SUFDQSx1Q0FBdUM7TUFDckM7SUFDRjtJQUNBLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EseUNBQXlDO01BQ3ZDO0lBQ0Y7SUFDQSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLG9DQUFvQztNQUNsQztJQUNGO0lBQ0EscUNBQXFDO01BQ25DO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLHNCQUFzQixDQUFDLGlEQUFpRDtJQUN4RSxpQkFBaUIsQ0FBQyw0Q0FBNEM7SUFDOUQsY0FBYyxDQUFDLCtDQUErQztJQUM5RCxnQkFBZ0IsQ0FBQywwQ0FBMEM7SUFDM0QsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSxvQkFBb0I7TUFDbEI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsV0FBVyx1Q0FBdUMsRUFBRTtJQUNsRTtJQUNBLGtCQUFrQixDQUFDLHNEQUFzRDtJQUN6RSxlQUFlLENBQUMseURBQXlEO0lBQ3pFLGlCQUFpQixDQUFDLG9EQUFvRDtJQUN0RSxrQkFBa0I7TUFDaEI7SUFDRjtJQUNBLDJCQUEyQixDQUFDLDZDQUE2QztJQUN6RSw0QkFBNEI7TUFDMUI7SUFDRjtJQUNBLGFBQWEsQ0FBQywyREFBMkQ7SUFDekUsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSxnQkFBZ0IsQ0FBQyxpREFBaUQ7SUFDbEUsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0Esc0JBQXNCLENBQUMsNkNBQTZDO0lBQ3BFLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLHlCQUF5QixDQUFDLHdDQUF3QztJQUNsRSx3QkFBd0I7TUFDdEI7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EscUNBQXFDO01BQ25DO0lBQ0Y7SUFDQSxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLGdCQUFnQixDQUFDLGlDQUFpQztJQUNsRCxrQkFBa0IsQ0FBQyxtQ0FBbUM7SUFDdEQsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLGlCQUFpQixDQUFDLDJDQUEyQztJQUM3RCxtQkFBbUIsQ0FBQyw2Q0FBNkM7SUFDakUsbUJBQW1CLENBQUMsNkNBQTZDO0lBQ2pFLDhCQUE4QixDQUFDLDJDQUEyQztJQUMxRSwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsaUNBQWlDO01BQy9CO0lBQ0Y7SUFDQSwwREFBMEQ7TUFDeEQ7SUFDRjtJQUNBLDZCQUE2QixDQUFDLGlDQUFpQztJQUMvRCw4QkFBOEIsQ0FBQywyQ0FBMkM7SUFDMUUsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxrQkFBa0I7TUFDaEI7SUFDRjtJQUNBLHlCQUF5QixDQUFDLHdDQUF3QztJQUNsRSx3QkFBd0I7TUFDdEI7SUFDRjtJQUNBLGVBQWUsQ0FBQyx3REFBd0Q7SUFDeEUseUJBQXlCO01BQ3ZCO0lBQ0Y7SUFDQSxpREFBaUQ7TUFDL0M7SUFDRjtJQUNBLGtEQUFrRDtNQUNoRDtJQUNGO0lBQ0EsNkNBQTZDO01BQzNDO0lBQ0Y7SUFDQSw4Q0FBOEM7TUFDNUM7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EsbUNBQW1DO01BQ2pDO0lBQ0Y7SUFDQSx5QkFBeUI7TUFDdkI7SUFDRjtJQUNBLGdDQUFnQztNQUM5QjtJQUNGO0lBQ0EsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLDBDQUEwQztNQUN4QztJQUNGO0lBQ0EsMkNBQTJDO01BQ3pDO0lBQ0Y7SUFDQSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLHdEQUF3RDtNQUN0RDtJQUNGO0lBQ0Esc0RBQXNEO01BQ3BEO0lBQ0Y7SUFDQSx5Q0FBeUM7TUFDdkM7SUFDRjtJQUNBLHVDQUF1QztNQUNyQztJQUNGO0lBQ0EsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSxnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLHlEQUF5RDtNQUN2RDtJQUNGO0lBQ0EsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSwyQkFBMkI7TUFDekI7SUFDRjtJQUNBLDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0EsbUJBQW1CLENBQUMsNENBQTRDO0lBQ2hFLG9CQUFvQjtNQUNsQjtJQUNGO0VBQ0Y7RUFDQSxVQUFVO0lBQ1IsdUNBQXVDLENBQUMsa0NBQWtDO0lBQzFFLHdCQUF3QixDQUFDLDJDQUEyQztJQUNwRSwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLFVBQVUsQ0FBQyxZQUFZO0lBQ3ZCLHFCQUFxQixDQUFDLHdDQUF3QztJQUM5RCxXQUFXLENBQUMsd0NBQXdDO0lBQ3BELDJDQUEyQztNQUN6QztJQUNGO0lBQ0EsZ0NBQWdDLENBQUMsOEJBQThCO0lBQy9ELHVDQUF1QyxDQUFDLG9CQUFvQjtJQUM1RCxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLGtCQUFrQixDQUFDLGFBQWE7SUFDaEMsZ0NBQWdDLENBQUMscUNBQXFDO0lBQ3RFLHlCQUF5QixDQUFDLHFDQUFxQztJQUMvRCxxQkFBcUIsQ0FBQyx3QkFBd0I7SUFDOUMsMkJBQTJCLENBQUMsdUNBQXVDO0lBQ25FLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EsZ0JBQWdCLENBQUMsa0NBQWtDO0lBQ25ELDJDQUEyQztNQUN6QztJQUNGO0lBQ0EscUNBQXFDLENBQUMsbUJBQW1CO0lBQ3pELHdCQUF3QixDQUFDLCtCQUErQjtJQUN4RCx3QkFBd0IsQ0FBQyxxQ0FBcUM7SUFDOUQsdUJBQXVCLENBQUMsc0NBQXNDO0lBQzlELHNDQUFzQyxDQUFDLHlCQUF5QjtJQUNoRSxxQkFBcUIsQ0FBQyx1Q0FBdUM7SUFDN0QseUJBQXlCLENBQUMsb0JBQW9CO0lBQzlDLDZCQUE2QixDQUFDLHlDQUF5QztJQUN2RSxrQkFBa0IsQ0FBQywyQ0FBMkM7SUFDOUQsa0JBQWtCLENBQUMsMENBQTBDO0lBQzdELHFCQUFxQixDQUFDLHdDQUF3QztJQUM5RCx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLDhCQUE4QixDQUFDLGtDQUFrQztJQUNqRSxnQ0FBZ0MsQ0FBQyxxQ0FBcUM7RUFDeEU7RUFDQSxNQUFNO0lBQ0osdUJBQXVCO01BQ3JCO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFFBQVEsMkNBQTJDLEVBQUU7SUFDbkU7SUFDQSwyQ0FBMkM7TUFDekM7SUFDRjtJQUNBLFlBQVksQ0FBQyxzQ0FBc0M7SUFDbkQsb0JBQW9CLENBQUMsd0NBQXdDO0lBQzdELCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EscUJBQXFCLENBQUMsd0NBQXdDO0lBQzlELG9CQUFvQixDQUFDLDZDQUE2QztJQUNsRSxhQUFhLENBQUMsd0NBQXdDO0lBQ3RELGtCQUFrQixDQUFDLFVBQVU7SUFDN0IsV0FBVyxDQUFDLHNCQUFzQjtJQUNsQyxpQkFBaUIsQ0FBQywwQ0FBMEM7SUFDNUQsb0JBQW9CLENBQUMsOEJBQThCO0lBQ25ELHFCQUFxQixDQUFDLHdDQUF3QztJQUM5RCwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLHNDQUFzQztNQUNwQztJQUNGO0lBQ0EscUJBQXFCLENBQUMsb0NBQW9DO0lBQzFELHdCQUF3QixDQUFDLHNCQUFzQjtJQUMvQyxvQkFBb0IsQ0FBQyx3Q0FBd0M7SUFDN0QscUJBQXFCLENBQUMsbURBQW1EO0lBQ3pFLDRCQUE0QjtNQUMxQjtJQUNGO0lBQ0EsMkNBQTJDO01BQ3pDO0lBQ0Y7SUFDQSw2Q0FBNkM7TUFDM0M7SUFDRjtJQUNBLG1CQUFtQixDQUFDLHdCQUF3QjtJQUM1Qyx1Q0FBdUMsQ0FBQyx5QkFBeUI7SUFDakUsV0FBVyxDQUFDLGdDQUFnQztJQUM1QyxrQkFBa0IsQ0FBQyx3Q0FBd0M7SUFDM0QsbUNBQW1DLENBQUMsZ0NBQWdDO0lBQ3BFLHVDQUF1QyxDQUFDLGlDQUFpQztJQUN6RSw4Q0FBOEM7TUFDNUM7SUFDRjtJQUNBLHVCQUF1QixDQUFDLDBCQUEwQjtJQUNsRCwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtNQUNBLENBQUM7TUFDRCxFQUFFLFNBQVMsQ0FBQyxRQUFRLGdEQUFnRCxFQUFFO0lBQ3hFO0lBQ0EsZ0RBQWdEO01BQzlDO0lBQ0Y7SUFDQSxZQUFZLENBQUMsdUNBQXVDO0lBQ3BELCtCQUErQixDQUFDLDRCQUE0QjtJQUM1RCxZQUFZLENBQUMsNkNBQTZDO0lBQzFELHFCQUFxQixDQUFDLG9EQUFvRDtJQUMxRSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLDJCQUEyQixDQUFDLHdCQUF3QjtFQUN0RDtFQUNBLFNBQVM7SUFDUCw0QkFBNEIsQ0FBQywwQ0FBMEM7SUFDdkUsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSxnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLDZCQUE2QixDQUFDLDJDQUEyQztJQUN6RSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtJQUNGO0lBQ0EsNkJBQTZCO01BQzNCO0lBQ0Y7RUFDRjtFQUNBLFFBQVE7SUFDTixRQUFRLENBQUMsdUNBQXVDO0lBQ2hELGFBQWEsQ0FBQyx5Q0FBeUM7SUFDdkQsS0FBSyxDQUFDLHFEQUFxRDtJQUMzRCxVQUFVLENBQUMseURBQXlEO0lBQ3BFLGlCQUFpQjtNQUNmO0lBQ0Y7SUFDQSxZQUFZLENBQUMsb0RBQW9EO0lBQ2pFLGNBQWM7TUFDWjtJQUNGO0lBQ0Esa0JBQWtCLENBQUMsc0RBQXNEO0lBQ3pFLGNBQWM7TUFDWjtJQUNGO0lBQ0EsZ0JBQWdCO01BQ2Q7SUFDRjtJQUNBLHNCQUFzQjtNQUNwQjtJQUNGO0lBQ0EsUUFBUSxDQUFDLHVEQUF1RDtFQUNsRTtFQUNBLGNBQWM7SUFDWixlQUFlO01BQ2I7SUFDRjtJQUNBLGVBQWU7TUFDYjtJQUNGO0lBQ0EsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxnQkFBZ0I7TUFDZDtJQUNGO0lBQ0Esc0JBQXNCO01BQ3BCO0lBQ0Y7SUFDQSxVQUFVO01BQ1I7TUFDQSxDQUFDO01BQ0QsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLGVBQWUsRUFBRTtJQUNwRDtJQUNBLGFBQWE7TUFDWDtJQUNGO0lBQ0EsWUFBWTtNQUNWO0lBQ0Y7SUFDQSxtQkFBbUI7TUFDakI7SUFDRjtJQUNBLGlCQUFpQixDQUFDLHVEQUF1RDtJQUN6RSxVQUFVLENBQUMsMkRBQTJEO0lBQ3RFLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EsNEJBQTRCO01BQzFCO0lBQ0Y7SUFDQSxvQkFBb0I7TUFDbEI7SUFDRjtJQUNBLGtCQUFrQixDQUFDLHNDQUFzQztJQUN6RCxtQkFBbUIsQ0FBQyxnREFBZ0Q7SUFDcEUscUJBQXFCO01BQ25CO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLGdCQUFnQixvQkFBb0IsRUFBRTtJQUNwRDtJQUNBLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0Esb0JBQW9CLENBQUMsa0RBQWtEO0lBQ3ZFLGFBQWE7TUFDWDtJQUNGO0lBQ0Esb0JBQW9CO01BQ2xCO0lBQ0Y7SUFDQSxhQUFhLENBQUMsaURBQWlEO0VBQ2pFO0VBQ0EsY0FBYztJQUNaLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0EsK0JBQStCO01BQzdCO0lBQ0Y7SUFDQSxxQkFBcUIsQ0FBQywrQ0FBK0M7SUFDckUsa0NBQWtDO01BQ2hDO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLGtDQUFrQztNQUNoQztJQUNGO0lBQ0EscUJBQXFCO01BQ25CO0lBQ0Y7SUFDQSxrQkFBa0I7TUFDaEI7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSx5QkFBeUIsQ0FBQyw4Q0FBOEM7SUFDeEUsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSx1Q0FBdUM7TUFDckM7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EsMkNBQTJDO01BQ3pDO0lBQ0Y7SUFDQSxxQ0FBcUM7TUFDbkM7SUFDRjtJQUNBLDJCQUEyQjtNQUN6QjtJQUNGO0lBQ0Esd0NBQXdDO01BQ3RDO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0VBQ0Y7RUFDQSxnQkFBZ0I7SUFDZCxzQkFBc0IsQ0FBQyx1QkFBdUI7SUFDOUMsZ0JBQWdCLENBQUMsNkJBQTZCO0VBQ2hEO0VBQ0EsWUFBWTtJQUNWLDRDQUE0QztNQUMxQztJQUNGO0lBQ0EsNEJBQTRCO01BQzFCO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLHVDQUF1QztNQUNyQztJQUNGO0lBQ0EsNEJBQTRCLENBQUMsdUJBQXVCO0lBQ3BELHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSwwQ0FBMEM7TUFDeEM7SUFDRjtJQUNBLGtDQUFrQztNQUNoQztJQUNGO0lBQ0Esb0NBQW9DO01BQ2xDO0lBQ0Y7SUFDQSw0QkFBNEIsQ0FBQywwQ0FBMEM7SUFDdkUsd0JBQXdCO01BQ3RCO0lBQ0Y7SUFDQSxpQkFBaUIsQ0FBQyxxREFBcUQ7SUFDdkUsa0JBQWtCO01BQ2hCO0lBQ0Y7SUFDQSxrQ0FBa0M7TUFDaEM7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtJQUNGO0lBQ0EsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLHlCQUF5QixDQUFDLHVDQUF1QztJQUNqRSxpQkFBaUIsQ0FBQywrQ0FBK0M7SUFDakUsY0FBYyxDQUFDLGtEQUFrRDtJQUNqRSxrQ0FBa0M7TUFDaEM7SUFDRjtJQUNBLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0EsZUFBZTtNQUNiO0lBQ0Y7SUFDQSwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLG1EQUFtRDtNQUNqRDtJQUNGO0lBQ0EsMEJBQTBCLENBQUMsc0JBQXNCO0lBQ2pELG9CQUFvQjtNQUNsQjtNQUNBLENBQUM7TUFDRCxFQUFFLG1CQUFtQixFQUFFLFFBQVEsTUFBTSxFQUFFO0lBQ3pDO0lBQ0Esc0NBQXNDO01BQ3BDO0lBQ0Y7SUFDQSxnQkFBZ0IsQ0FBQyxvQ0FBb0M7SUFDckQsaUJBQWlCLENBQUMsOENBQThDO0lBQ2hFLCtDQUErQztNQUM3QztJQUNGO0lBQ0EsaUNBQWlDLENBQUMsOEJBQThCO0lBQ2hFLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsdUNBQXVDO01BQ3JDO0lBQ0Y7SUFDQSw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLCtDQUErQztNQUM3QztJQUNGO0lBQ0EsaUNBQWlDO01BQy9CO0lBQ0Y7SUFDQSxrQ0FBa0M7TUFDaEM7SUFDRjtJQUNBLDhDQUE4QztNQUM1QztJQUNGO0lBQ0EsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSwyQkFBMkIsQ0FBQyw4Q0FBOEM7SUFDMUUsMEJBQTBCLENBQUMsNkNBQTZDO0lBQ3hFLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EsNEJBQTRCLENBQUMseUNBQXlDO0VBQ3hFO0VBQ0EsU0FBUztJQUNQLHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EseUJBQXlCO01BQ3ZCO0lBQ0Y7SUFDQSxxQ0FBcUM7TUFDbkM7SUFDRjtJQUNBLHFDQUFxQztNQUNuQztJQUNGO0lBQ0EsK0JBQStCLENBQUMsaUNBQWlDO0lBQ2pFLHVCQUF1QixDQUFDLGtEQUFrRDtJQUMxRSwrQkFBK0IsQ0FBQyxpQ0FBaUM7SUFDakUsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSxrQkFBa0IsQ0FBQyx1Q0FBdUM7SUFDMUQsb0JBQW9CLENBQUMsK0JBQStCO0lBQ3BELHFCQUFxQixDQUFDLGdEQUFnRDtFQUN4RTtFQUNBLFlBQVk7SUFDViw0QkFBNEI7TUFDMUI7SUFDRjtJQUNBLHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxpQkFBaUIsQ0FBQyxxREFBcUQ7SUFDdkUsa0JBQWtCO01BQ2hCO0lBQ0Y7SUFDQSxVQUFVLENBQUMsNERBQTREO0lBQ3ZFLGlCQUFpQixDQUFDLCtDQUErQztJQUNqRSxjQUFjLENBQUMsa0RBQWtEO0lBQ2pFLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0EsZUFBZTtNQUNiO0lBQ0Y7SUFDQSx5QkFBeUI7TUFDdkI7SUFDRjtJQUNBLGtCQUFrQixDQUFDLG1DQUFtQztJQUN0RCxtQkFBbUIsQ0FBQyw2Q0FBNkM7SUFDakUsZ0JBQWdCLENBQUMsb0NBQW9DO0lBQ3JELGlCQUFpQixDQUFDLDhDQUE4QztJQUNoRSwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSxhQUFhO01BQ1g7SUFDRjtFQUNGO0VBQ0EsaUJBQWlCO0lBQ2YsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxXQUFXO01BQ1Q7SUFDRjtJQUNBLFlBQVksQ0FBQyxpREFBaUQ7RUFDaEU7RUFDQSxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRTtFQUMvQixPQUFPO0lBQ0wsZ0JBQWdCLENBQUMsMkJBQTJCO0lBQzVDLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLGVBQWUsQ0FBQyxnQ0FBZ0M7SUFDaEQsUUFBUSxDQUFDLHlCQUF5QjtJQUNsQyxlQUFlLENBQUMsK0NBQStDO0lBQy9ELE1BQU0sQ0FBQyw2QkFBNkI7SUFDcEMsS0FBSyxDQUFDLHNCQUFzQjtJQUM1QixZQUFZLENBQUMsNENBQTRDO0lBQ3pELGFBQWEsQ0FBQyw0QkFBNEI7SUFDMUMsTUFBTSxDQUFDLFlBQVk7SUFDbkIsY0FBYyxDQUFDLCtCQUErQjtJQUM5QyxhQUFhLENBQUMsOEJBQThCO0lBQzVDLGFBQWEsQ0FBQyw2QkFBNkI7SUFDM0MsV0FBVyxDQUFDLDRCQUE0QjtJQUN4QyxZQUFZLENBQUMsbUJBQW1CO0lBQ2hDLGFBQWEsQ0FBQyxvQkFBb0I7SUFDbEMsTUFBTSxDQUFDLDJCQUEyQjtJQUNsQyxRQUFRLENBQUMsOEJBQThCO0lBQ3ZDLFFBQVEsQ0FBQyx3QkFBd0I7SUFDakMsZUFBZSxDQUFDLDhDQUE4QztFQUNoRTtFQUNBLEtBQUs7SUFDSCxZQUFZLENBQUMsc0NBQXNDO0lBQ25ELGNBQWMsQ0FBQyx3Q0FBd0M7SUFDdkQsV0FBVyxDQUFDLHFDQUFxQztJQUNqRCxXQUFXLENBQUMscUNBQXFDO0lBQ2pELFlBQVksQ0FBQyxzQ0FBc0M7SUFDbkQsV0FBVyxDQUFDLDZDQUE2QztJQUN6RCxTQUFTLENBQUMsZ0RBQWdEO0lBQzFELFdBQVcsQ0FBQyxvREFBb0Q7SUFDaEUsUUFBUSxDQUFDLHlDQUF5QztJQUNsRCxRQUFRLENBQUMsOENBQThDO0lBQ3ZELFNBQVMsQ0FBQyxnREFBZ0Q7SUFDMUQsa0JBQWtCLENBQUMsbURBQW1EO0lBQ3RFLFdBQVcsQ0FBQyw0Q0FBNEM7RUFDMUQ7RUFDQSxXQUFXO0lBQ1QsaUJBQWlCLENBQUMsMEJBQTBCO0lBQzVDLGFBQWEsQ0FBQyxpQ0FBaUM7RUFDakQ7RUFDQSxlQUFlO0lBQ2Isa0NBQWtDO01BQ2hDO0lBQ0Y7SUFDQSxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLCtCQUErQjtNQUM3QjtJQUNGO0lBQ0EsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLGtDQUFrQztNQUNoQztJQUNGO0VBQ0Y7RUFDQSxjQUFjO0lBQ1oscUNBQXFDLENBQUMsOEJBQThCO0lBQ3BFLHVCQUF1QixDQUFDLG9DQUFvQztJQUM1RCx3QkFBd0IsQ0FBQyw4Q0FBOEM7SUFDdkUsbUNBQW1DO01BQ2pDO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLGdCQUFnQixxQ0FBcUMsRUFBRTtJQUNyRTtJQUNBLHdDQUF3QyxDQUFDLGlDQUFpQztJQUMxRSwwQkFBMEIsQ0FBQyx1Q0FBdUM7SUFDbEUsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxzQ0FBc0M7TUFDcEM7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLHdDQUF3QyxFQUFFO0lBQ3hFO0lBQ0EscUNBQXFDLENBQUMsOEJBQThCO0lBQ3BFLHVCQUF1QixDQUFDLG9DQUFvQztJQUM1RCx3QkFBd0IsQ0FBQyw4Q0FBOEM7SUFDdkUsbUNBQW1DO01BQ2pDO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLGdCQUFnQixxQ0FBcUMsRUFBRTtJQUNyRTtFQUNGO0VBQ0EsUUFBUTtJQUNOLGNBQWM7TUFDWjtJQUNGO0lBQ0EsV0FBVyxDQUFDLHlEQUF5RDtJQUNyRSxhQUFhO01BQ1g7SUFDRjtJQUNBLHdCQUF3QixDQUFDLGdEQUFnRDtJQUN6RSwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLFFBQVEsQ0FBQyxtQ0FBbUM7SUFDNUMsZUFBZTtNQUNiO0lBQ0Y7SUFDQSxhQUFhLENBQUMsbUNBQW1DO0lBQ2pELGlCQUFpQixDQUFDLHVDQUF1QztJQUN6RCxlQUFlO01BQ2I7SUFDRjtJQUNBLGFBQWEsQ0FBQyw0Q0FBNEM7SUFDMUQsaUJBQWlCO01BQ2Y7SUFDRjtJQUNBLEtBQUssQ0FBQyxpREFBaUQ7SUFDdkQsWUFBWSxDQUFDLHdEQUF3RDtJQUNyRSxVQUFVLENBQUMsb0RBQW9EO0lBQy9ELFVBQVUsQ0FBQyx5Q0FBeUM7SUFDcEQsY0FBYyxDQUFDLHlEQUF5RDtJQUN4RSxNQUFNLENBQUMsYUFBYTtJQUNwQixlQUFlLENBQUMscUNBQXFDO0lBQ3JELGNBQWMsQ0FBQywwREFBMEQ7SUFDekUscUJBQXFCLENBQUMsMkNBQTJDO0lBQ2pFLFlBQVksQ0FBQyx3REFBd0Q7SUFDckUsbUJBQW1CLENBQUMseUNBQXlDO0lBQzdELHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EsMEJBQTBCLENBQUMsa0JBQWtCO0lBQzdDLFlBQVksQ0FBQyx3QkFBd0I7SUFDckMsYUFBYSxDQUFDLGtDQUFrQztJQUNoRCx3QkFBd0I7TUFDdEI7SUFDRjtJQUNBLG1CQUFtQixDQUFDLGtDQUFrQztJQUN0RCxtQkFBbUI7TUFDakI7SUFDRjtJQUNBLGdCQUFnQixDQUFDLHNDQUFzQztJQUN2RCxlQUFlO01BQ2I7SUFDRjtJQUNBLE1BQU0sQ0FBQyxzREFBc0Q7SUFDN0QsaUJBQWlCO01BQ2Y7SUFDRjtJQUNBLGlCQUFpQjtNQUNmO0lBQ0Y7SUFDQSxhQUFhO01BQ1g7SUFDRjtJQUNBLGdCQUFnQjtNQUNkO0lBQ0Y7SUFDQSxzQkFBc0I7TUFDcEI7SUFDRjtJQUNBLFdBQVcsQ0FBQyx3REFBd0Q7SUFDcEUsUUFBUSxDQUFDLHlEQUF5RDtJQUNsRSxRQUFRLENBQUMsbURBQW1EO0lBQzVELGVBQWUsQ0FBQywwREFBMEQ7SUFDMUUsYUFBYSxDQUFDLDJDQUEyQztJQUN6RCxpQkFBaUI7TUFDZjtJQUNGO0VBQ0Y7RUFDQSxVQUFVO0lBQ1IsS0FBSyxDQUFDLHlCQUF5QjtJQUMvQixvQkFBb0IsQ0FBQyxlQUFlO0lBQ3BDLFlBQVksQ0FBQyxtQ0FBbUM7RUFDbEQ7RUFDQSxVQUFVO0lBQ1IsUUFBUSxDQUFDLGdCQUFnQjtJQUN6QixXQUFXO01BQ1Q7TUFDQSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsNEJBQTRCLEVBQUU7SUFDN0Q7RUFDRjtFQUNBLE1BQU07SUFDSixLQUFLLENBQUMsV0FBVztJQUNqQixnQkFBZ0IsQ0FBQyxlQUFlO0lBQ2hDLFlBQVksQ0FBQyxjQUFjO0lBQzNCLFFBQVEsQ0FBQyxVQUFVO0lBQ25CLE1BQU0sQ0FBQyxPQUFPO0VBQ2hCO0VBQ0EsWUFBWTtJQUNWLG1DQUFtQztNQUNqQztJQUNGO0lBQ0EscUJBQXFCO01BQ25CO0lBQ0Y7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLGdDQUFnQztNQUM5QjtJQUNGO0lBQ0EsK0JBQStCLENBQUMscUNBQXFDO0lBQ3JFLGlCQUFpQixDQUFDLDJDQUEyQztJQUM3RCwwQkFBMEIsQ0FBQyxzQkFBc0I7SUFDakQsWUFBWSxDQUFDLDRCQUE0QjtJQUN6QywrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLGlCQUFpQixDQUFDLHdEQUF3RDtJQUMxRSxrQkFBa0I7TUFDaEI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsY0FBYywrQkFBK0IsRUFBRTtJQUM3RDtJQUNBLDJCQUEyQixDQUFDLHVCQUF1QjtJQUNuRCxhQUFhLENBQUMsNkJBQTZCO0lBQzNDLGdDQUFnQztNQUM5QjtJQUNGO0lBQ0Esa0JBQWtCO01BQ2hCO0lBQ0Y7RUFDRjtFQUNBLE1BQU07SUFDSixnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLG1DQUFtQztNQUNqQztJQUNGO0VBQ0Y7RUFDQSxNQUFNO0lBQ0osd0JBQXdCO01BQ3RCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0EsV0FBVyxDQUFDLG1DQUFtQztJQUMvQyxrQkFBa0IsQ0FBQyxnREFBZ0Q7SUFDbkUsa0JBQWtCLENBQUMsbUNBQW1DO0lBQ3RELHdCQUF3QixDQUFDLG9DQUFvQztJQUM3RCw4QkFBOEIsQ0FBQywyQ0FBMkM7SUFDMUUsb0NBQW9DO01BQ2xDO0lBQ0Y7SUFDQSxrQkFBa0IsQ0FBQyw4QkFBOEI7SUFDakQsaUJBQWlCLENBQUMsOEJBQThCO0lBQ2hELGdDQUFnQyxDQUFDLHFDQUFxQztJQUN0RSw4Q0FBOEM7TUFDNUM7SUFDRjtJQUNBLDhCQUE4QjtNQUM1QjtJQUNGO0lBQ0EsZUFBZSxDQUFDLHdCQUF3QjtJQUN4QyxRQUFRLENBQUMsb0JBQW9CO0lBQzdCLGlCQUFpQixDQUFDLGdEQUFnRDtJQUNsRSxlQUFlLENBQUMsb0NBQW9DO0lBQ3BELDZDQUE2QztNQUMzQztNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsS0FBSyxDQUFDLGlCQUFpQjtJQUN2Qix3QkFBd0IsQ0FBQyxtQ0FBbUM7SUFDNUQsbUJBQW1CO01BQ2pCO0lBQ0Y7SUFDQSxtQ0FBbUMsQ0FBQyxrQ0FBa0M7SUFDdEUsc0JBQXNCLENBQUMsd0NBQXdDO0lBQy9ELFlBQVksQ0FBQyw4Q0FBOEM7SUFDM0Qsc0JBQXNCLENBQUMsK0NBQStDO0lBQ3RFLHNCQUFzQjtNQUNwQjtJQUNGO0lBQ0EsWUFBWSxDQUFDLGlDQUFpQztJQUM5Qyx3QkFBd0IsQ0FBQyx3Q0FBd0M7SUFDakUsb0JBQW9CO01BQ2xCO0lBQ0Y7SUFDQSxNQUFNLENBQUMsb0JBQW9CO0lBQzNCLHNCQUFzQixDQUFDLCtCQUErQjtJQUN0RCxrQkFBa0IsQ0FBQywrQ0FBK0M7SUFDbEUsa0JBQWtCLENBQUMsd0JBQXdCO0lBQzNDLG9DQUFvQyxDQUFDLG1DQUFtQztJQUN4RSx1QkFBdUIsQ0FBQyxvQ0FBb0M7SUFDNUQsMEJBQTBCLENBQUMsZ0JBQWdCO0lBQzNDLGFBQWEsQ0FBQyw0QkFBNEI7SUFDMUMscUJBQXFCLENBQUMsbURBQW1EO0lBQ3pFLGdCQUFnQixDQUFDLDZCQUE2QjtJQUM5QyxhQUFhLENBQUMseUJBQXlCO0lBQ3ZDLHFDQUFxQyxDQUFDLDRCQUE0QjtJQUNsRSxrQkFBa0IsQ0FBQyxvREFBb0Q7SUFDdkUsa0JBQWtCLENBQUMsb0RBQW9EO0lBQ3ZFLGNBQWMsQ0FBQyxvQ0FBb0M7SUFDbkQsd0NBQXdDO01BQ3RDO0lBQ0Y7SUFDQSwwQkFBMEIsQ0FBQyx1Q0FBdUM7SUFDbEUsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLHNCQUFzQixDQUFDLGdEQUFnRDtJQUN2RSxlQUFlLENBQUMsd0NBQXdDO0lBQ3hELHdCQUF3QixDQUFDLDZCQUE2QjtJQUN0RCxtQkFBbUIsQ0FBQyxnQ0FBZ0M7SUFDcEQsMEJBQTBCO01BQ3hCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSx1QkFBdUIsQ0FBQyw0Q0FBNEM7SUFDcEUsY0FBYyxDQUFDLHVCQUF1QjtJQUN0QyxhQUFhLENBQUMsd0NBQXdDO0lBQ3RELDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0Esc0JBQXNCO01BQ3BCO0lBQ0Y7SUFDQSxjQUFjLENBQUMsdUNBQXVDO0lBQ3RELHlCQUF5QixDQUFDLDJDQUEyQztJQUNyRSwyQkFBMkI7TUFDekI7SUFDRjtJQUNBLDRDQUE0QztNQUMxQztJQUNGO0lBQ0EsMkJBQTJCO01BQ3pCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLDhCQUE4QjtNQUM1QjtJQUNGO0lBQ0EsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLG1CQUFtQjtNQUNqQjtJQUNGO0lBQ0EsbUJBQW1CO01BQ2pCO0lBQ0Y7SUFDQSxzQkFBc0IsQ0FBQyx3Q0FBd0M7SUFDL0QseUNBQXlDO01BQ3ZDO0lBQ0Y7SUFDQSxhQUFhLENBQUMsc0NBQXNDO0lBQ3BELFFBQVEsQ0FBQyxtQkFBbUI7SUFDNUIsaUJBQWlCLENBQUMsNkNBQTZDO0lBQy9ELHNDQUFzQztNQUNwQztJQUNGO0lBQ0EsaUJBQWlCLENBQUMsa0RBQWtEO0lBQ3BFLG1CQUFtQixDQUFDLHlDQUF5QztJQUM3RCxlQUFlLENBQUMsbUNBQW1DO0lBQ25ELDJCQUEyQixDQUFDLDBDQUEwQztFQUN4RTtFQUNBLFVBQVU7SUFDUixtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0Esc0JBQXNCO01BQ3BCO0lBQ0Y7SUFDQSwwQ0FBMEM7TUFDeEM7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtJQUNGO0lBQ0EsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSw4Q0FBOEM7TUFDNUM7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsWUFBWSwyQ0FBMkMsRUFBRTtJQUN2RTtJQUNBLDZEQUE2RDtNQUMzRDtNQUNBLENBQUM7TUFDRDtRQUNFLFNBQVM7VUFDUDtVQUNBO1FBQ0Y7TUFDRjtJQUNGO0lBQ0EseURBQXlEO01BQ3ZEO0lBQ0Y7SUFDQSwyQ0FBMkM7TUFDekM7SUFDRjtJQUNBLDRDQUE0QztNQUMxQztJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSwyQkFBMkI7TUFDekI7SUFDRjtJQUNBLG1CQUFtQjtNQUNqQjtJQUNGO0lBQ0EsdUNBQXVDO01BQ3JDO0lBQ0Y7SUFDQSxrQ0FBa0M7TUFDaEM7SUFDRjtJQUNBLDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0EsNERBQTREO01BQzFEO0lBQ0Y7SUFDQSx1REFBdUQ7TUFDckQ7SUFDRjtJQUNBLCtDQUErQztNQUM3QztJQUNGO0lBQ0Esa0NBQWtDLENBQUMsb0JBQW9CO0lBQ3ZELDZCQUE2QixDQUFDLDBCQUEwQjtJQUN4RCxxQkFBcUIsQ0FBQyxnQ0FBZ0M7SUFDdEQsb0NBQW9DO01BQ2xDO0lBQ0Y7SUFDQSxzQkFBc0I7TUFDcEI7SUFDRjtJQUNBLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EsMkNBQTJDO01BQ3pDO0lBQ0Y7SUFDQSw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLDhCQUE4QjtNQUM1QjtJQUNGO0VBQ0Y7RUFDQSxtQkFBbUI7SUFDakIsMEJBQTBCLENBQUMscUNBQXFDO0lBQ2hFLDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0EsdUJBQXVCLENBQUMsa0RBQWtEO0lBQzFFLGlCQUFpQixDQUFDLCtDQUErQztJQUNqRSwwQkFBMEIsQ0FBQyxvQ0FBb0M7SUFDL0QsMEJBQTBCO01BQ3hCO0lBQ0Y7RUFDRjtFQUNBLFVBQVU7SUFDUixpQkFBaUI7TUFDZjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsWUFBWTtNQUNWO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxjQUFjO01BQ1o7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsY0FBYztNQUNaO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxlQUFlO01BQ2I7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLFFBQVE7TUFDTjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsWUFBWTtNQUNWO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxjQUFjO01BQ1o7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLEtBQUs7TUFDSDtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsU0FBUztNQUNQO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxXQUFXO01BQ1Q7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLHNCQUFzQjtNQUNwQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsV0FBVztNQUNUO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxtQkFBbUI7TUFDakI7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGFBQWE7TUFDWDtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsWUFBWTtNQUNWO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxhQUFhO01BQ1g7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGFBQWE7TUFDWDtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsVUFBVTtNQUNSO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxZQUFZO01BQ1Y7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLG9CQUFvQjtNQUNsQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsUUFBUTtNQUNOO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxZQUFZO01BQ1Y7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGNBQWM7TUFDWjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0VBQ0Y7RUFDQSxPQUFPO0lBQ0wsZUFBZSxDQUFDLHFEQUFxRDtJQUNyRSxRQUFRLENBQUMsa0NBQWtDO0lBQzNDLDZCQUE2QjtNQUMzQjtJQUNGO0lBQ0EsY0FBYyxDQUFDLHdEQUF3RDtJQUN2RSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0EscUJBQXFCO01BQ25CO0lBQ0Y7SUFDQSxlQUFlO01BQ2I7SUFDRjtJQUNBLEtBQUssQ0FBQywrQ0FBK0M7SUFDckQsV0FBVztNQUNUO0lBQ0Y7SUFDQSxrQkFBa0IsQ0FBQyx1REFBdUQ7SUFDMUUsTUFBTSxDQUFDLGlDQUFpQztJQUN4Qyx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLGFBQWEsQ0FBQyx1REFBdUQ7SUFDckUsV0FBVyxDQUFDLHFEQUFxRDtJQUNqRSx3QkFBd0I7TUFDdEI7SUFDRjtJQUNBLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EsMkJBQTJCLENBQUMsMENBQTBDO0lBQ3RFLGFBQWEsQ0FBQyx1REFBdUQ7SUFDckUsT0FBTyxDQUFDLHFEQUFxRDtJQUM3RCwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0EsY0FBYztNQUNaO0lBQ0Y7SUFDQSxRQUFRLENBQUMsaURBQWlEO0lBQzFELGNBQWM7TUFDWjtJQUNGO0lBQ0EsY0FBYztNQUNaO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtFQUNGO0VBQ0EsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtFQUN0QyxXQUFXO0lBQ1Qsd0JBQXdCO01BQ3RCO0lBQ0Y7SUFDQSxnQkFBZ0I7TUFDZDtJQUNGO0lBQ0EsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0EscUNBQXFDO01BQ25DO0lBQ0Y7SUFDQSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EsZ0JBQWdCO01BQ2Q7SUFDRjtJQUNBLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSxrQkFBa0I7TUFDaEI7SUFDRjtJQUNBLHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0EsZ0NBQWdDO01BQzlCO0lBQ0Y7SUFDQSxzQkFBc0I7TUFDcEI7SUFDRjtJQUNBLGNBQWMsQ0FBQywyREFBMkQ7SUFDMUUscUJBQXFCO01BQ25CO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLGdCQUFnQjtNQUNkO0lBQ0Y7SUFDQSxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLDRCQUE0QjtNQUMxQjtJQUNGO0VBQ0Y7RUFDQSxPQUFPO0lBQ0wsa0JBQWtCO01BQ2hCO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsc0NBQXNDLEVBQUU7SUFDL0Q7SUFDQSxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLDBCQUEwQjtNQUN4QjtNQUNBLENBQUM7TUFDRCxFQUFFLFdBQVcsT0FBTztJQUN0QjtJQUNBLGlCQUFpQixDQUFDLG9EQUFvRDtJQUN0RSx3QkFBd0I7TUFDdEI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFdBQVc7SUFDMUI7SUFDQSwyQkFBMkI7TUFDekI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSwyQkFBMkI7TUFDekI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLDZCQUE2QjtNQUMzQjtJQUNGO0lBQ0EsbUJBQW1CLENBQUMsb0RBQW9EO0lBQ3hFLG9DQUFvQztNQUNsQztJQUNGO0lBQ0EsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxrQkFBa0IsQ0FBQyw2Q0FBNkM7SUFDaEUsZ0JBQWdCLENBQUMsbURBQW1EO0lBQ3BFLDRCQUE0QjtNQUMxQjtJQUNGO0lBQ0EsbUJBQW1CLENBQUMseUNBQXlDO0lBQzdELGdCQUFnQixDQUFDLHNDQUFzQztJQUN2RCxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0Esb0JBQW9CLENBQUMsMkNBQTJDO0lBQ2hFLGlCQUFpQixDQUFDLGlDQUFpQztJQUNuRCxrQkFBa0IsQ0FBQyx3Q0FBd0M7SUFDM0QsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSxnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EscUJBQXFCLENBQUMsdUNBQXVDO0lBQzdELDRCQUE0QixDQUFDLGtCQUFrQjtJQUMvQyxZQUFZLENBQUMsa0NBQWtDO0lBQy9DLGFBQWEsQ0FBQyx3QkFBd0I7SUFDdEMsc0NBQXNDO01BQ3BDO0lBQ0Y7SUFDQSwyQkFBMkI7TUFDekI7SUFDRjtJQUNBLDRCQUE0QixDQUFDLDJDQUEyQztJQUN4RSxrQkFBa0IsQ0FBQywyQkFBMkI7SUFDOUMsdUJBQXVCLENBQUMsOENBQThDO0lBQ3RFLGlCQUFpQixDQUFDLGtDQUFrQztJQUNwRCxlQUFlLENBQUMscUNBQXFDO0lBQ3JELG1CQUFtQixDQUFDLHFDQUFxQztJQUN6RCxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLGVBQWUsQ0FBQyxrQ0FBa0M7SUFDbEQsbUJBQW1CO01BQ2pCO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsdUNBQXVDLEVBQUU7SUFDaEU7SUFDQSx1Q0FBdUM7TUFDckM7SUFDRjtJQUNBLFFBQVEsQ0FBQyw4QkFBOEI7SUFDdkMsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0EsZ0JBQWdCLENBQUMsc0RBQXNEO0lBQ3ZFLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EscUJBQXFCLENBQUMsb0RBQW9EO0lBQzFFLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0EsaUJBQWlCLENBQUMsNENBQTRDO0lBQzlELGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0EsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSxZQUFZLENBQUMsOENBQThDO0lBQzNELGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0Esa0JBQWtCLENBQUMsMENBQTBDO0lBQzdELGlCQUFpQixDQUFDLG9DQUFvQztJQUN0RCxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLGVBQWUsQ0FBQyxvREFBb0Q7SUFDcEUsb0JBQW9CO01BQ2xCO0lBQ0Y7SUFDQSxtQkFBbUIsQ0FBQyxvREFBb0Q7SUFDeEUsZUFBZSxDQUFDLDhDQUE4QztJQUM5RCwrQkFBK0I7TUFDN0I7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtJQUNGO0lBQ0Esc0NBQXNDO01BQ3BDO0lBQ0Y7SUFDQSw0QkFBNEI7TUFDMUI7SUFDRjtJQUNBLGlCQUFpQjtNQUNmO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsd0JBQXdCLEVBQUU7SUFDakQ7SUFDQSx3QkFBd0IsQ0FBQyx5Q0FBeUM7SUFDbEUsd0JBQXdCLENBQUMseUNBQXlDO0lBQ2xFLDhCQUE4QjtNQUM1QjtJQUNGO0lBQ0EscUNBQXFDO01BQ25DO0lBQ0Y7SUFDQSwyQkFBMkI7TUFDekI7SUFDRjtJQUNBLHNCQUFzQjtNQUNwQjtJQUNGO0lBQ0EsS0FBSyxDQUFDLDJCQUEyQjtJQUNqQyx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLDBCQUEwQjtNQUN4QjtJQUNGO0lBQ0EsaUNBQWlDO01BQy9CO0lBQ0Y7SUFDQSxvQkFBb0IsQ0FBQyx3Q0FBd0M7SUFDN0QsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxjQUFjLENBQUMsa0NBQWtDO0lBQ2pELG9DQUFvQztNQUNsQztJQUNGO0lBQ0EsYUFBYSxDQUFDLG1EQUFtRDtJQUNqRSxXQUFXLENBQUMsNkNBQTZDO0lBQ3pELHFCQUFxQjtNQUNuQjtJQUNGO0lBQ0EsZ0JBQWdCLENBQUMsbURBQW1EO0lBQ3BFLFdBQVcsQ0FBQywwQ0FBMEM7SUFDdEQsdUJBQXVCLENBQUMsZ0RBQWdEO0lBQ3hFLGdDQUFnQztNQUM5QjtJQUNGO0lBQ0EseUJBQXlCLENBQUMsZ0RBQWdEO0lBQzFFLFdBQVcsQ0FBQyx5Q0FBeUM7SUFDckQsd0JBQXdCLENBQUMsaURBQWlEO0lBQzFFLGtCQUFrQixDQUFDLGlEQUFpRDtJQUNwRSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLDRCQUE0QixDQUFDLDZDQUE2QztJQUMxRSxZQUFZLENBQUMsMkNBQTJDO0lBQ3hELHNCQUFzQixDQUFDLDhDQUE4QztJQUNyRSxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLDJCQUEyQixDQUFDLDZDQUE2QztJQUN6RSxjQUFjLENBQUMseUNBQXlDO0lBQ3hELGVBQWUsQ0FBQyx1REFBdUQ7SUFDdkUsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxxQkFBcUI7TUFDbkI7SUFDRjtJQUNBLGdCQUFnQjtNQUNkO0lBQ0Y7SUFDQSxxQkFBcUIsQ0FBQywrQ0FBK0M7SUFDckUsa0JBQWtCLENBQUMsMkNBQTJDO0lBQzlELGlCQUFpQixDQUFDLHNEQUFzRDtJQUN4RSxrQkFBa0IsQ0FBQyxzQ0FBc0M7SUFDekQsZUFBZSxDQUFDLHVDQUF1QztJQUN2RCxnQkFBZ0IsQ0FBQywwQkFBMEI7SUFDM0MsVUFBVSxDQUFDLGlDQUFpQztJQUM1QyxlQUFlLENBQUMsbURBQW1EO0lBQ25FLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EscUJBQXFCLENBQUMsd0NBQXdDO0lBQzlELHVCQUF1QixDQUFDLCtDQUErQztJQUN2RSxnQ0FBZ0M7TUFDOUI7SUFDRjtJQUNBLG1CQUFtQixDQUFDLDRDQUE0QztJQUNoRSxXQUFXLENBQUMsa0NBQWtDO0lBQzlDLHNCQUFzQixDQUFDLHdDQUF3QztJQUMvRCxZQUFZLENBQUMsaURBQWlEO0lBQzlELGlCQUFpQixDQUFDLHNEQUFzRDtJQUN4RSxpQkFBaUIsQ0FBQywrQ0FBK0M7SUFDakUsa0JBQWtCO01BQ2hCO0lBQ0Y7SUFDQSxtQkFBbUIsQ0FBQyxnREFBZ0Q7SUFDcEUsZ0JBQWdCLENBQUMsaURBQWlEO0lBQ2xFLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxpQkFBaUIsQ0FBQyxvQ0FBb0M7SUFDdEQsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxxQ0FBcUM7TUFDbkM7SUFDRjtJQUNBLGFBQWEsQ0FBQyxpREFBaUQ7SUFDL0QsaUJBQWlCLENBQUMscURBQXFEO0lBQ3ZFLHFDQUFxQztNQUNuQztJQUNGO0lBQ0EsVUFBVSxDQUFDLHlDQUF5QztJQUNwRCxZQUFZLENBQUMsMkNBQTJDO0lBQ3hELHlCQUF5QjtNQUN2QjtJQUNGO0lBQ0Esb0JBQW9CO01BQ2xCO0lBQ0Y7SUFDQSxnQkFBZ0IsQ0FBQyxvQ0FBb0M7SUFDckQsa0JBQWtCO01BQ2hCO0lBQ0Y7SUFDQSxlQUFlLENBQUMscUNBQXFDO0lBQ3JELGNBQWMsQ0FBQyxvQ0FBb0M7SUFDbkQsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxtQkFBbUIsQ0FBQyx5Q0FBeUM7SUFDN0QsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSwyQkFBMkIsQ0FBQyxvQ0FBb0M7SUFDaEUsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSxhQUFhLENBQUMsbUNBQW1DO0lBQ2pELGtCQUFrQixDQUFDLHdDQUF3QztJQUMzRCxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLGdCQUFnQixDQUFDLGdDQUFnQztJQUNqRCw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EsaUJBQWlCLENBQUMsdUNBQXVDO0lBQ3pELDBCQUEwQixDQUFDLGlCQUFpQjtJQUM1QyxZQUFZLENBQUMsdUJBQXVCO0lBQ3BDLGFBQWEsQ0FBQyw2QkFBNkI7SUFDM0MsV0FBVyxDQUFDLGlDQUFpQztJQUM3QyxpQkFBaUIsQ0FBQyx1Q0FBdUM7SUFDekQscUNBQXFDLENBQUMsa0NBQWtDO0lBQ3hFLGVBQWUsQ0FBQyxxQ0FBcUM7SUFDckQsaUJBQWlCLENBQUMsd0NBQXdDO0lBQzFELFlBQVksQ0FBQyxtQkFBbUI7SUFDaEMsc0NBQXNDO01BQ3BDO0lBQ0Y7SUFDQSxtQkFBbUI7TUFDakI7SUFDRjtJQUNBLGNBQWMsQ0FBQyxvQ0FBb0M7SUFDbkQsVUFBVSxDQUFDLGdDQUFnQztJQUMzQyxXQUFXLENBQUMsaUNBQWlDO0lBQzdDLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0EsY0FBYyxDQUFDLGlDQUFpQztJQUNoRCxPQUFPLENBQUMsbUNBQW1DO0lBQzNDLGVBQWUsQ0FBQywyQ0FBMkM7SUFDM0QsYUFBYSxDQUFDLGtEQUFrRDtJQUNoRSwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLDZCQUE2QjtNQUMzQjtNQUNBLENBQUM7TUFDRCxFQUFFLFdBQVcsT0FBTztJQUN0QjtJQUNBLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EsMkJBQTJCO01BQ3pCO01BQ0EsQ0FBQztNQUNELEVBQUUsV0FBVyxXQUFXO0lBQzFCO0lBQ0EsNkJBQTZCO01BQzNCO0lBQ0Y7SUFDQSw4QkFBOEI7TUFDNUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSw4QkFBOEI7TUFDNUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSxjQUFjLENBQUMscURBQXFEO0lBQ3BFLGtCQUFrQixDQUFDLGtDQUFrQztJQUNyRCxtQkFBbUIsQ0FBQyx5Q0FBeUM7SUFDN0QsMEJBQTBCO01BQ3hCO0lBQ0Y7SUFDQSwwQkFBMEI7TUFDeEI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLE9BQU87SUFDdEI7SUFDQSx3QkFBd0I7TUFDdEI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFdBQVc7SUFDMUI7SUFDQSwyQkFBMkI7TUFDekI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSwyQkFBMkI7TUFDekI7TUFDQSxDQUFDO01BQ0QsRUFBRSxXQUFXLFFBQVE7SUFDdkI7SUFDQSxpQkFBaUIsQ0FBQyxrREFBa0Q7SUFDcEUsVUFBVSxDQUFDLHFDQUFxQztJQUNoRCxRQUFRLENBQUMsNkJBQTZCO0lBQ3RDLHdCQUF3QjtNQUN0QjtJQUNGO0lBQ0EscUJBQXFCLENBQUMsbURBQW1EO0lBQ3pFLDhCQUE4QjtNQUM1QjtJQUNGO0lBQ0EsaUNBQWlDLENBQUMsaUNBQWlDO0lBQ25FLGtCQUFrQjtNQUNoQjtJQUNGO0lBQ0Esa0JBQWtCLENBQUMsdUNBQXVDO0lBQzFELG1DQUFtQztNQUNqQztJQUNGO0lBQ0EsZUFBZSxDQUFDLG1EQUFtRDtJQUNuRSxvQkFBb0I7TUFDbEI7SUFDRjtJQUNBLG1CQUFtQixDQUFDLGlEQUFpRDtJQUNyRSw0QkFBNEI7TUFDMUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyw2QkFBNkIsRUFBRTtJQUN0RDtJQUNBLDZCQUE2QjtNQUMzQjtJQUNGO0lBQ0EsZUFBZSxDQUFDLDZDQUE2QztJQUM3RCw0QkFBNEI7TUFDMUI7SUFDRjtJQUNBLG9CQUFvQjtNQUNsQjtNQUNBLEVBQUUsU0FBUyw2QkFBNkI7SUFDMUM7RUFDRjtFQUNBLFFBQVE7SUFDTixNQUFNLENBQUMsa0JBQWtCO0lBQ3pCLFNBQVMsQ0FBQyxxQkFBcUI7SUFDL0IsdUJBQXVCO01BQ3JCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxRQUFRLENBQUMsb0JBQW9CO0lBQzdCLE9BQU8sQ0FBQywwQkFBMEI7SUFDbEMsUUFBUSxDQUFDLG9CQUFvQjtJQUM3QixPQUFPLENBQUMsbUJBQW1CO0VBQzdCO0VBQ0EsZ0JBQWdCO0lBQ2QsNEJBQTRCO01BQzFCO0lBQ0Y7SUFDQSxVQUFVO01BQ1I7SUFDRjtJQUNBLGdCQUFnQixDQUFDLHdEQUF3RDtJQUN6RSx5QkFBeUI7TUFDdkI7SUFDRjtJQUNBLGtCQUFrQixDQUFDLHdDQUF3QztJQUMzRCxtQkFBbUIsQ0FBQyxrREFBa0Q7SUFDdEUsdUJBQXVCO01BQ3JCO0lBQ0Y7SUFDQSxhQUFhO01BQ1g7SUFDRjtFQUNGO0VBQ0Esb0JBQW9CO0lBQ2xCLFlBQVk7TUFDVjtJQUNGO0lBQ0Esa0NBQWtDO01BQ2hDO0lBQ0Y7SUFDQSwwQkFBMEI7TUFDeEI7SUFDRjtJQUNBLG9DQUFvQztNQUNsQztJQUNGO0lBQ0EsbUJBQW1CLENBQUMsMkJBQTJCO0lBQy9DLHVCQUF1QjtNQUNyQjtJQUNGO0lBQ0Esc0JBQXNCLENBQUMsaUJBQWlCO0lBQ3hDLDZCQUE2QixDQUFDLHFDQUFxQztJQUNuRSwwQkFBMEIsQ0FBQywrQ0FBK0M7SUFDMUUsMEJBQTBCO01BQ3hCO0lBQ0Y7RUFDRjtFQUNBLE9BQU87SUFDTCxtQ0FBbUM7TUFDakM7SUFDRjtJQUNBLG9DQUFvQztNQUNsQztNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EscUNBQXFDO01BQ25DO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxpQ0FBaUM7TUFDL0I7SUFDRjtJQUNBLGlDQUFpQztNQUMvQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0Esa0NBQWtDO01BQ2hDO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLFFBQVEsQ0FBQyx3QkFBd0I7SUFDakMsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSx1QkFBdUIsQ0FBQyxnREFBZ0Q7SUFDeEUsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLGFBQWEsQ0FBQyxzQ0FBc0M7SUFDcEQsV0FBVyxDQUFDLG1DQUFtQztJQUMvQywyQkFBMkI7TUFDekI7SUFDRjtJQUNBLG9CQUFvQjtNQUNsQjtJQUNGO0lBQ0EsMkJBQTJCO01BQ3pCO0lBQ0Y7SUFDQSxNQUFNLENBQUMsdUJBQXVCO0lBQzlCLGdCQUFnQixDQUFDLHlDQUF5QztJQUMxRCw2QkFBNkI7TUFDM0I7SUFDRjtJQUNBLHNCQUFzQixDQUFDLCtDQUErQztJQUN0RSwwQkFBMEIsQ0FBQyxpQkFBaUI7SUFDNUMsa0JBQWtCLENBQUMsMkNBQTJDO0lBQzlELDZCQUE2QjtNQUMzQjtJQUNGO0lBQ0EsbUJBQW1CO01BQ2pCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxvQkFBb0I7TUFDbEI7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGdCQUFnQixDQUFDLHlDQUF5QztJQUMxRCw4QkFBOEI7TUFDNUI7SUFDRjtJQUNBLG9CQUFvQjtNQUNsQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EscUJBQXFCO01BQ25CO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxpQkFBaUI7TUFDZjtJQUNGO0lBQ0EsOEJBQThCO01BQzVCO0lBQ0Y7SUFDQSx1QkFBdUI7TUFDckI7SUFDRjtJQUNBLGFBQWEsQ0FBQyxxQ0FBcUM7RUFDckQ7RUFDQSxPQUFPO0lBQ0wsMEJBQTBCO01BQ3hCO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsOEJBQThCLEVBQUU7SUFDdkQ7SUFDQSw4QkFBOEIsQ0FBQyxtQkFBbUI7SUFDbEQsc0NBQXNDLENBQUMsNEJBQTRCO0lBQ25FLE9BQU8sQ0FBQyw2QkFBNkI7SUFDckMsY0FBYyxDQUFDLDZCQUE2QjtJQUM1Qyx1QkFBdUIsQ0FBQywrQ0FBK0M7SUFDdkUsc0NBQXNDLENBQUMsZ0NBQWdDO0lBQ3ZFLDhCQUE4QjtNQUM1QjtNQUNBLENBQUM7TUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLGtDQUFrQyxFQUFFO0lBQzNEO0lBQ0Esa0NBQWtDLENBQUMscUJBQXFCO0lBQ3hELG9DQUFvQztNQUNsQztNQUNBLENBQUM7TUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLHdDQUF3QyxFQUFFO0lBQ2pFO0lBQ0Esd0NBQXdDLENBQUMsaUJBQWlCO0lBQzFELHlDQUF5QyxDQUFDLDZCQUE2QjtJQUN2RSw2QkFBNkI7TUFDM0I7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxpQ0FBaUMsRUFBRTtJQUMxRDtJQUNBLGlDQUFpQyxDQUFDLHFCQUFxQjtJQUN2RCw4QkFBOEI7TUFDNUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxrQ0FBa0MsRUFBRTtJQUMzRDtJQUNBLGtDQUFrQyxDQUFDLG9DQUFvQztJQUN2RSxvQ0FBb0M7TUFDbEM7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyx3Q0FBd0MsRUFBRTtJQUNqRTtJQUNBLHdDQUF3QyxDQUFDLDRCQUE0QjtJQUNyRSx5Q0FBeUMsQ0FBQyw4QkFBOEI7SUFDeEUseUNBQXlDO01BQ3ZDO0lBQ0Y7SUFDQSxRQUFRLENBQUMsZ0NBQWdDO0lBQ3pDLGtCQUFrQixDQUFDLFdBQVc7SUFDOUIsU0FBUyxDQUFDLHdCQUF3QjtJQUNsQyxlQUFlLENBQUMsdUJBQXVCO0lBQ3ZDLG1CQUFtQixDQUFDLGlDQUFpQztJQUNyRCwyQkFBMkI7TUFDekI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUywrQkFBK0IsRUFBRTtJQUN4RDtJQUNBLCtCQUErQixDQUFDLGlDQUFpQztJQUNqRSxpQ0FBaUM7TUFDL0I7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxxQ0FBcUMsRUFBRTtJQUM5RDtJQUNBLHFDQUFxQyxDQUFDLHlCQUF5QjtJQUMvRCxzQ0FBc0M7TUFDcEM7SUFDRjtJQUNBLE1BQU0sQ0FBQyxZQUFZO0lBQ25CLGtCQUFrQixDQUFDLHFEQUFxRDtJQUN4RSw0QkFBNEI7TUFDMUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxnQ0FBZ0MsRUFBRTtJQUN6RDtJQUNBLGdDQUFnQyxDQUFDLGtCQUFrQjtJQUNuRCw0QkFBNEI7TUFDMUI7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxnQ0FBZ0MsRUFBRTtJQUN6RDtJQUNBLGdDQUFnQyxDQUFDLGtCQUFrQjtJQUNuRCw2QkFBNkI7TUFDM0I7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxpQ0FBaUMsRUFBRTtJQUMxRDtJQUNBLGlDQUFpQyxDQUFDLHFCQUFxQjtJQUN2RCxtQ0FBbUMsQ0FBQyxxQkFBcUI7SUFDekQsc0JBQXNCLENBQUMsaUNBQWlDO0lBQ3hELHNCQUFzQixDQUFDLGlDQUFpQztJQUN4RCw2QkFBNkI7TUFDM0I7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxpQ0FBaUMsRUFBRTtJQUMxRDtJQUNBLGlDQUFpQyxDQUFDLG9CQUFvQjtJQUN0RCxvQkFBb0IsQ0FBQyxnQ0FBZ0M7SUFDckQsa0NBQWtDO01BQ2hDO01BQ0EsQ0FBQztNQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsc0NBQXNDLEVBQUU7SUFDL0Q7SUFDQSxzQ0FBc0MsQ0FBQyx5QkFBeUI7SUFDaEUsdUJBQXVCLENBQUMsNEJBQTRCO0lBQ3BELG1DQUFtQztNQUNqQztNQUNBLENBQUM7TUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLHVDQUF1QyxFQUFFO0lBQ2hFO0lBQ0EsdUNBQXVDLENBQUMsZ0JBQWdCO0lBQ3hELHdDQUF3QyxDQUFDLDJCQUEyQjtJQUNwRSwyQkFBMkIsQ0FBQyx1Q0FBdUM7SUFDbkUsd0NBQXdDLENBQUMsNEJBQTRCO0lBQ3JFLDJCQUEyQixDQUFDLHdDQUF3QztJQUNwRSwyQ0FBMkM7TUFDekM7TUFDQSxDQUFDO01BQ0QsRUFBRSxTQUFTLENBQUMsU0FBUywrQ0FBK0MsRUFBRTtJQUN4RTtJQUNBLCtDQUErQztNQUM3QztJQUNGO0lBQ0EsU0FBUyxDQUFDLGdDQUFnQztJQUMxQyxVQUFVLENBQUMsbUNBQW1DO0lBQzlDLHFCQUFxQixDQUFDLGFBQWE7RUFDckM7QUFDRjtBQUVBLElBQU8sb0JBQVE7OztBQzd5RWYsSUFBTSxxQkFBcUIsb0JBQUksSUFBSTtBQUNuQyxXQUFXLENBQUMsT0FBTyxTQUFTLEtBQUssT0FBTyxRQUFRLGlCQUFTLEdBQUc7QUFDMUQsYUFBVyxDQUFDLFlBQVlDLFNBQVEsS0FBSyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQzlELFVBQU0sQ0FBQyxPQUFPLFVBQVUsV0FBVyxJQUFJQTtBQUN2QyxVQUFNLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxNQUFNLEdBQUc7QUFDckMsVUFBTSxtQkFBbUIsT0FBTztNQUM5QjtRQUNFO1FBQ0E7TUFDRjtNQUNBO0lBQ0Y7QUFFQSxRQUFJLENBQUMsbUJBQW1CLElBQUksS0FBSyxHQUFHO0FBQ2xDLHlCQUFtQixJQUFJLE9BQU8sb0JBQUksSUFBSSxDQUFDO0lBQ3pDO0FBRUEsdUJBQW1CLElBQUksS0FBSyxFQUFFLElBQUksWUFBWTtNQUM1QztNQUNBO01BQ0E7TUFDQTtJQUNGLENBQUM7RUFDSDtBQUNGO0FBUUEsSUFBTSxVQUFVO0VBQ2QsSUFBSSxFQUFFLE1BQU0sR0FBZ0IsWUFBb0I7QUFDOUMsV0FBTyxtQkFBbUIsSUFBSSxLQUFLLEVBQUUsSUFBSSxVQUFVO0VBQ3JEO0VBQ0EseUJBQXlCLFFBQXFCLFlBQW9CO0FBQ2hFLFdBQU87TUFDTCxPQUFPLEtBQUssSUFBSSxRQUFRLFVBQVU7O01BQ2xDLGNBQWM7TUFDZCxVQUFVO01BQ1YsWUFBWTtJQUNkO0VBQ0Y7RUFDQSxlQUNFLFFBQ0EsWUFDQSxZQUNBO0FBQ0EsV0FBTyxlQUFlLE9BQU8sT0FBTyxZQUFZLFVBQVU7QUFDMUQsV0FBTztFQUNUO0VBQ0EsZUFBZSxRQUFxQixZQUFvQjtBQUN0RCxXQUFPLE9BQU8sTUFBTSxVQUFVO0FBQzlCLFdBQU87RUFDVDtFQUNBLFFBQVEsRUFBRSxNQUFNLEdBQWdCO0FBQzlCLFdBQU8sQ0FBQyxHQUFHLG1CQUFtQixJQUFJLEtBQUssRUFBRSxLQUFLLENBQUM7RUFDakQ7RUFDQSxJQUFJLFFBQXFCLFlBQW9CLE9BQVk7QUFDdkQsV0FBUSxPQUFPLE1BQU0sVUFBVSxJQUFJO0VBQ3JDO0VBQ0EsSUFBSSxFQUFFLFNBQVMsT0FBTyxNQUFNLEdBQWdCLFlBQW9CO0FBQzlELFFBQUksTUFBTSxVQUFVLEdBQUc7QUFDckIsYUFBTyxNQUFNLFVBQVU7SUFDekI7QUFFQSxVQUFNLFNBQVMsbUJBQW1CLElBQUksS0FBSyxFQUFFLElBQUksVUFBVTtBQUMzRCxRQUFJLENBQUMsUUFBUTtBQUNYLGFBQU87SUFDVDtBQUVBLFVBQU0sRUFBRSxrQkFBa0IsWUFBWSxJQUFJO0FBRTFDLFFBQUksYUFBYTtBQUNmLFlBQU0sVUFBVSxJQUFJO1FBQ2xCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7TUFDRjtJQUNGLE9BQU87QUFDTCxZQUFNLFVBQVUsSUFBSSxRQUFRLFFBQVEsU0FBUyxnQkFBZ0I7SUFDL0Q7QUFFQSxXQUFPLE1BQU0sVUFBVTtFQUN6QjtBQUNGO0FBRU8sU0FBUyxtQkFBbUIsU0FBdUM7QUFDeEUsUUFBTSxhQUFhLENBQUM7QUFFcEIsYUFBVyxTQUFTLG1CQUFtQixLQUFLLEdBQUc7QUFDN0MsZUFBVyxLQUFLLElBQUksSUFBSSxNQUFNLEVBQUUsU0FBUyxPQUFPLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUN0RTtBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVMsU0FDUCxTQUNBLE9BQ0EsWUFDQSxVQUNBLGFBQ0E7QUFDQSxRQUFNLHNCQUFzQixRQUFRLFFBQVEsU0FBUyxRQUFRO0FBRzdELFdBQVMsbUJBQ0osTUFDSDtBQUVBLFFBQUksVUFBVSxvQkFBb0IsU0FBUyxNQUFNLEdBQUcsSUFBSTtBQUd4RCxRQUFJLFlBQVksV0FBVztBQUN6QixnQkFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7UUFDbkMsTUFBTSxRQUFRLFlBQVksU0FBUztRQUNuQyxDQUFDLFlBQVksU0FBUyxHQUFHO01BQzNCLENBQUM7QUFDRCxhQUFPLG9CQUFvQixPQUFPO0lBQ3BDO0FBRUEsUUFBSSxZQUFZLFNBQVM7QUFDdkIsWUFBTSxDQUFDLFVBQVUsYUFBYSxJQUFJLFlBQVk7QUFDOUMsY0FBUSxJQUFJO1FBQ1YsV0FBVyxLQUFLLElBQUksVUFBVSxrQ0FBa0MsUUFBUSxJQUFJLGFBQWE7TUFDM0Y7SUFDRjtBQUNBLFFBQUksWUFBWSxZQUFZO0FBQzFCLGNBQVEsSUFBSSxLQUFLLFlBQVksVUFBVTtJQUN6QztBQUVBLFFBQUksWUFBWSxtQkFBbUI7QUFFakMsWUFBTUMsV0FBVSxvQkFBb0IsU0FBUyxNQUFNLEdBQUcsSUFBSTtBQUUxRCxpQkFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLE9BQU87UUFDakMsWUFBWTtNQUNkLEdBQUc7QUFDRCxZQUFJLFFBQVFBLFVBQVM7QUFDbkIsa0JBQVEsSUFBSTtZQUNWLElBQUksSUFBSSwwQ0FBMEMsS0FBSyxJQUFJLFVBQVUsYUFBYSxLQUFLO1VBQ3pGO0FBQ0EsY0FBSSxFQUFFLFNBQVNBLFdBQVU7QUFDdkJBLHFCQUFRLEtBQUssSUFBSUEsU0FBUSxJQUFJO1VBQy9CO0FBQ0EsaUJBQU9BLFNBQVEsSUFBSTtRQUNyQjtNQUNGO0FBQ0EsYUFBTyxvQkFBb0JBLFFBQU87SUFDcEM7QUFHQSxXQUFPLG9CQUFvQixHQUFHLElBQUk7RUFDcEM7QUFDQSxTQUFPLE9BQU8sT0FBTyxpQkFBaUIsbUJBQW1CO0FBQzNEOzs7QUNyS08sU0FBUyxvQkFBb0IsU0FBdUI7QUFDekQsUUFBTSxNQUFNLG1CQUFtQixPQUFPO0FBQ3RDLFNBQU87SUFDTCxNQUFNO0VBQ1I7QUFDRjtBQUNBLG9CQUFvQixVQUFVQztBQUV2QixTQUFTLDBCQUEwQixTQUFxQztBQUM3RSxRQUFNLE1BQU0sbUJBQW1CLE9BQU87QUFDdEMsU0FBTztJQUNMLEdBQUc7SUFDSCxNQUFNO0VBQ1I7QUFDRjtBQUNBLDBCQUEwQixVQUFVQTs7O0FDMUJwQyxJQUFNQyxXQUFVOzs7QUNPaEIsSUFBTUMsV0FBVSxRQUFLLE9BQU8sWUFBWSwyQkFBMkIsWUFBWSxFQUFFO0FBQUEsRUFDL0U7QUFBQSxJQUNFLFdBQVcsbUJBQW1CQyxRQUFPO0FBQUEsRUFDdkM7QUFDRjs7O0F0QlBBLElBQU0sa0JBQWtCQyxTQUFRLE9BQU8sS0FBSztBQXdDNUMsZUFBc0IsMEJBQ3BCLFVBQW9DLENBQUMsR0FDVjtBQUMzQixRQUFNLFFBQVEsUUFBUSxTQUFTLFFBQVEsSUFBSTtBQUMzQyxRQUFNLGFBQWEsUUFBUSxjQUFjLFFBQVEsSUFBSTtBQUNyRCxRQUFNLGlCQUFpQixRQUFRLGtCQUFrQjtBQUVqRCxNQUFJLENBQUMsU0FBUyxNQUFNLEtBQUssRUFBRSxXQUFXLEdBQUc7QUFDdkMsV0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1IsT0FBTyxTQUFTO0FBQUEsTUFDaEIsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLGNBQWMsV0FBVyxLQUFLLEVBQUUsV0FBVyxHQUFHO0FBQ2pELFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLENBQUMsT0FBTyxJQUFJLElBQUksV0FBVyxNQUFNLEdBQUc7QUFDMUMsTUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ25CLFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSO0FBQUEsTUFDQSxRQUFRLG9FQUFvRSxVQUFVO0FBQUEsSUFDeEY7QUFBQSxFQUNGO0FBSUEsTUFBSSxrQkFBa0Isd0JBQXdCLEtBQUssR0FBRztBQUNwRCxJQUFLLFdBQUssVUFBVSxLQUFLLHdFQUF3RTtBQUNqRyxXQUFPLEVBQUUsUUFBUSxZQUFZLE1BQU07QUFBQSxFQUNyQztBQUVBLFFBQU0sbUJBQW1CLHNCQUFzQixRQUFRLGlCQUFpQixFQUFFO0FBQzFFLE1BQUksNEJBQTRCLE9BQU87QUFDckMsV0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1I7QUFBQSxNQUNBLFFBQVEsaUJBQWlCO0FBQUEsSUFDM0I7QUFBQSxFQUNGO0FBQ0EsTUFBSSxXQUFXLEtBQUssS0FBSyxpQkFBaUIsSUFBSSxrQkFBa0IsS0FBSyxDQUFDLEdBQUc7QUFDdkUsSUFBSyxXQUFLLFVBQVUsS0FBSyw4Q0FBOEM7QUFDdkUsV0FBTyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBQUEsRUFDckM7QUFLQSxRQUFNLGtCQUFrQixRQUFRLGNBQWMsSUFBSSxLQUFLO0FBQ3ZELE1BQUksZUFBZSxTQUFTLEdBQUc7QUFDN0IsUUFBSSxtQkFBbUIsS0FBSztBQUMxQixNQUFLLFdBQUssMkRBQTJEO0FBQ3JFLGFBQU8sRUFBRSxRQUFRLFlBQVksTUFBTTtBQUFBLElBQ3JDO0FBQ0EsVUFBTSxVQUFVLElBQUk7QUFBQSxNQUNsQixlQUNHLE1BQU0sR0FBRyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUNqQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztBQUFBLElBQy9CO0FBQ0EsUUFBSSxRQUFRLElBQUksTUFBTSxZQUFZLENBQUMsR0FBRztBQUNwQyxNQUFLLFdBQUssVUFBVSxLQUFLLDBDQUEwQztBQUNuRSxhQUFPLEVBQUUsUUFBUSxZQUFZLE1BQU07QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLFFBQVEsUUFBUSxTQUFTLGdCQUFnQjtBQUMvQyxNQUFJLENBQUMsT0FBTztBQUNWLFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFVBQVUsUUFBUSxJQUFJLGdCQUFnQixLQUFLO0FBQ2pELFFBQU0sVUFDSixRQUFRLFdBQ1IsSUFBSSxnQkFBZ0I7QUFBQSxJQUNsQixNQUFNO0FBQUEsSUFDTixHQUFJLFVBQVUsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLEVBQy9CLENBQUM7QUFFSCxFQUFLLFdBQUssb0NBQW9DLEtBQUssUUFBUSxLQUFLLElBQUksSUFBSSxFQUFFO0FBRTFFLE1BQUk7QUFDSixNQUFJO0FBQ0YsVUFBTSxXQUFXLE1BQU0sUUFBUSxNQUFNLCtCQUErQjtBQUFBLE1BQ2xFO0FBQUEsTUFDQTtBQUFBLE1BQ0EsVUFBVTtBQUFBLElBQ1osQ0FBQztBQUNELGlCQUFhLFNBQVMsS0FBSyxjQUFjO0FBQUEsRUFDM0MsU0FBUyxPQUFPO0FBQ2QsUUFBSSxnQkFBZ0IsS0FBSyxHQUFHO0FBQzFCLGFBQU87QUFBQSxRQUNMLFFBQVE7QUFBQSxRQUNSO0FBQUEsUUFDQSxRQUFRLFVBQVUsS0FBSyw4QkFBOEIsS0FBSyxJQUFJLElBQUk7QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQ0osaUJBQWlCLFFBQ2IsTUFBTSxVQUNOO0FBRU4sV0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1I7QUFBQSxNQUNBLFFBQVEscUNBQXFDLEtBQUssTUFBTSxPQUFPO0FBQUEsSUFDakU7QUFBQSxFQUNGO0FBRUEsRUFBSyxXQUFLLFVBQVUsS0FBSywyQkFBMkIsVUFBVSxJQUFJO0FBRWxFLE1BQUksZUFBZSxXQUFXLGVBQWUsV0FBVyxlQUFlLFlBQVk7QUFDakYsV0FBTyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsUUFBUSxVQUFVLEtBQUssK0JBQStCLEtBQUssSUFBSSxJQUFJLDJCQUEyQixVQUFVO0FBQUEsRUFDMUc7QUFDRjtBQUVBLFNBQVMsa0JBQTBCO0FBQ2pDLFFBQU0sUUFBUSxRQUFRLElBQUksZ0JBQWdCLFFBQVEsSUFBSTtBQUN0RCxTQUFPLFNBQVMsTUFBTSxLQUFLLEVBQUUsU0FBUyxJQUFJLFFBQVE7QUFDcEQ7QUFFQSxJQUFNLDRCQUE0QixvQkFBSSxJQUFJLENBQUMscUJBQXFCLENBQUM7QUFFakUsU0FBUyx3QkFBd0IsT0FBd0I7QUFDdkQsU0FBTyxXQUFXLEtBQUssS0FBSywwQkFBMEIsSUFBSSxrQkFBa0IsS0FBSyxDQUFDO0FBQ3BGO0FBRUEsU0FBUyxzQkFBc0IsZUFBNEM7QUFDekUsUUFBTSxVQUFVLG9CQUFJLElBQVk7QUFDaEMsYUFBVyxTQUFTLGNBQWMsTUFBTSxHQUFHLEdBQUc7QUFDNUMsVUFBTSxNQUFNLE1BQU0sS0FBSztBQUN2QixRQUFJLElBQUksV0FBVyxHQUFHO0FBQ3BCO0FBQUEsSUFDRjtBQUNBLFFBQUksSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNyQixhQUFPLElBQUksTUFBTSw4RUFBOEU7QUFBQSxJQUNqRztBQUNBLFlBQVEsSUFBSSxrQkFBa0IsR0FBRyxDQUFDO0FBQUEsRUFDcEM7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLFdBQVcsT0FBd0I7QUFDMUMsU0FBTyxNQUFNLFlBQVksRUFBRSxTQUFTLE9BQU87QUFDN0M7QUFFQSxTQUFTLGtCQUFrQixPQUF1QjtBQUNoRCxRQUFNLGFBQWEsTUFBTSxZQUFZO0FBQ3JDLFNBQU8sV0FBVyxVQUFVLElBQUksYUFBYSxHQUFHLFVBQVU7QUFDNUQ7QUFFQSxTQUFTLGdCQUFnQixPQUF5QjtBQUNoRCxTQUFPO0FBQUEsSUFDTCxTQUFTLE9BQU8sVUFBVSxZQUFZLFlBQVksU0FBVSxNQUE4QixXQUFXO0FBQUEsRUFDdkc7QUFDRjs7O0F1QnhOZSxTQUFSLHNCQUF1QyxPQUFPLEtBQUssTUFBTTtBQUs1RCxNQUFJLFdBQVc7QUFDZixNQUFJLFdBQVc7QUFDZixNQUFJLFVBQVUsQ0FBQztBQUNmLE1BQUksS0FBSztBQUNMLFlBQVEsS0FBSyxHQUFHO0FBQUEsRUFDcEI7QUFDQSxNQUFJLE1BQU07QUFDTixZQUFRLEtBQUssSUFBSTtBQUFBLEVBQ3JCO0FBQ0EsTUFBSTtBQUNKLEtBQUc7QUFFQyxZQUFRLFNBQVMsS0FBSyxRQUFRO0FBQzlCLFFBQUksVUFBVSxNQUFNO0FBR2hCLGNBQVEsS0FBSyxZQUFZLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUMxRDtBQUFBLEVBQ0osU0FBUyxVQUFVO0FBQ25CLFNBQU87QUFDWDtBQUdBLFNBQVMsY0FBYztBQUNuQixNQUFJLE9BQU8sQ0FBQztBQUNaLFdBQVMsS0FBSyxHQUFHLEtBQUssVUFBVSxRQUFRLE1BQU07QUFDMUMsU0FBSyxFQUFFLElBQUksVUFBVSxFQUFFO0FBQUEsRUFDM0I7QUFDQSxXQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2xDLFFBQUksTUFBTSxLQUFLLENBQUM7QUFDaEIsUUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFDSjs7O0FDeENBLElBQUFDLE1BQW9CO0FBQ3BCLElBQUFDLFFBQXNCO0FBQ3RCLElBQUFDLE1BQW9CO0FBSXBCLElBQU0saUJBQWlCO0FBRXZCLGVBQXNCLGlCQUNwQixXQUNBLE1BQ0EsZ0JBQ2U7QUFDZixRQUFNLGFBQWtCLFdBQUssV0FBVyxhQUFhO0FBRXJELE1BQUksV0FBVztBQUNmLE1BQUk7QUFDRixlQUFXLE1BQVMsYUFBUyxZQUFZLE1BQU07QUFBQSxFQUNqRCxRQUFRO0FBQ04sZUFBVztBQUFBLEVBQ2I7QUFFQSxRQUFNLFNBQVM7QUFBQSxvQkFDRyxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBSWhDLFFBQU0sUUFBUTtBQUFBO0FBQUE7QUFBQSxtQkFHRyxjQUFjO0FBQUE7QUFBQSwrQkFFRixJQUFJO0FBQUE7QUFBQTtBQUtqQyxNQUFJLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFHLEtBQUs7QUFFekMsTUFBSSxtQkFBbUIscUJBQXFCO0FBRzFDLFVBQU0sVUFBVSxNQUFTLFlBQWEsV0FBUSxXQUFPLEdBQUcsY0FBYyxDQUFDO0FBQ3ZFLFFBQUk7QUFDRixZQUFNLGlCQUFzQixXQUFLLFNBQVMsYUFBYTtBQUN2RCxZQUFTLGNBQVUsZ0JBQWdCLFFBQVEsTUFBTTtBQUNqRCxZQUFNLFlBQVksQ0FBQyxRQUFRLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQztBQUFBLElBQzlELFVBQUU7QUFDQSxZQUFTLE9BQUcsU0FBUyxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLElBQ3ZEO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBUyxVQUFNLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUM3QyxVQUFTLGNBQVUsWUFBWSxRQUFRLE1BQU07QUFBQSxFQUMvQztBQUNGOzs7QWhDbENBLGVBQXNCLE9BQU87QUFDM0IsUUFBTUMsV0FBVSxJQUFJLFFBQVE7QUFFNUIsRUFBQUEsU0FDRyxLQUFLLGNBQWMsRUFDbkIsUUFBUSxnQkFBSSxPQUFPLEVBQ25CLFlBQVksMkNBQTJDO0FBRTFELEVBQUFBLFNBQ0csUUFBUSxrQkFBa0IsRUFDMUIsWUFBWSwrQ0FBK0MsRUFDM0QsU0FBUyxvQkFBb0IsOEJBQThCLEVBQzNELE9BQU8sT0FBTyxtQkFBMkI7QUFDeEMsVUFBTSxlQUFlLGNBQWM7QUFBQSxFQUNyQyxDQUFDO0FBRUgsRUFBQUEsU0FDRyxRQUFRLG9CQUFvQixFQUM1QjtBQUFBLElBQ0M7QUFBQSxFQUNGLEVBQ0M7QUFBQSxJQUNDO0FBQUEsSUFDQTtBQUFBLEVBQ0YsRUFDQztBQUFBLElBQ0M7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0MsZUFBZSx3QkFBd0IsZUFBZSxFQUN0RDtBQUFBLElBQ0MsT0FBTyxZQUtEO0FBQ0osWUFBTSxpQkFBaUIsaUJBQWlCLFFBQVEsY0FBYztBQUM5RCxZQUFNLFlBQVksWUFBWSxRQUFRLFNBQVM7QUFDL0MsWUFBTSxXQUFXLE1BQU07QUFBQSxRQUNyQixZQUFZLFFBQVEsaUJBQWlCO0FBQUEsUUFDckM7QUFBQSxRQUNBO0FBQUEsUUFDQSxRQUFRO0FBQUEsTUFDVjtBQUVBLFlBQU0sRUFBRSxXQUFBQyxXQUFVLElBQUksTUFBTTtBQUM1QixNQUFBQSxXQUFVLGNBQWMsUUFBUTtBQUNoQyxjQUFRLElBQUksd0JBQXdCLFFBQVEsRUFBRTtBQUFBLElBQ2hEO0FBQUEsRUFDRjtBQUVGLEVBQUFELFNBQ0csUUFBUSxvQkFBb0IsRUFDNUI7QUFBQSxJQUNDO0FBQUEsRUFDRixFQUNDLGVBQWUsNEJBQTRCLDhCQUE4QixFQUN6RSxlQUFlLGlCQUFpQixxQkFBcUIsY0FBYyxFQUNuRTtBQUFBLElBQ0M7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQyxPQUFPLFlBSUQ7QUFDSixZQUFNLGlCQUFpQixpQkFBaUIsUUFBUSxjQUFjO0FBQzlELFlBQU0saUJBQWlCLFFBQVEsV0FBVyxRQUFRLE1BQU0sY0FBYztBQUFBLElBQ3hFO0FBQUEsRUFDRjtBQUVGLEVBQUFBLFNBQ0csUUFBUSxXQUFXLEVBQ25CLFlBQVksZ0RBQWdELEVBQzVELFVBQVUsSUFBSSxPQUFPLGlCQUFpQixnQkFBZ0IsRUFBRSxRQUFRLFFBQVEsQ0FBQyxFQUN6RTtBQUFBLElBQ0MsSUFBSSxPQUFPLG1CQUFtQixnQ0FBZ0MsRUFBRTtBQUFBLE1BQzlEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsRUFDQyxVQUFVLElBQUksT0FBTyxnQkFBZ0IsVUFBVSxFQUFFLFFBQVEsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUMxRSxVQUFVLElBQUksT0FBTywrQkFBK0IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUMxRTtBQUFBLElBQ0MsT0FBTyxZQUtEO0FBQ0osWUFBTSxTQUFTO0FBQUEsUUFDYixNQUFNLFFBQVE7QUFBQSxRQUNkLE9BQU8sUUFBUTtBQUFBLFFBQ2YsV0FBVyxRQUFRO0FBQUEsUUFDbkIsbUJBQW1CLFFBQVE7QUFBQSxNQUM3QixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFRixFQUFBQSxTQUNHLFFBQVEsZ0JBQWdCLEVBQ3hCLFlBQVkscURBQXFELEVBQ2pFLGVBQWUscUJBQXFCLGlDQUFpQyxFQUNyRTtBQUFBLElBQ0M7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0MsZUFBZSxvQkFBb0IsNkJBQTZCLEVBQ2hFO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0M7QUFBQSxJQUNDO0FBQUEsSUFDQTtBQUFBLEVBQ0YsRUFDQztBQUFBLElBQ0M7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0M7QUFBQSxJQUNDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0MsZUFBZSxtQkFBbUIsNEJBQTRCLEVBQzlELGVBQWUscUJBQXFCLHVDQUF1QyxFQUMzRTtBQUFBLElBQ0M7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQ0M7QUFBQSxJQUNDLE9BQU8sWUFlRDtBQUNKLFlBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUVKLFlBQU0sbUJBQW1CLFlBQVksTUFBTTtBQUMzQyxZQUFNLHVCQUF1QixZQUFZLFVBQVU7QUFDbkQsVUFBSSxvQkFBb0IsUUFBUSx3QkFBd0IsTUFBTTtBQUM1RCxjQUFNLElBQUk7QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJO0FBQ0osVUFBSSxvQkFBb0IsTUFBTTtBQUM1Qix1QkFBZSxFQUFFLE1BQU0sVUFBVSxTQUFTLGlCQUFpQjtBQUFBLE1BQzdELFdBQVcsd0JBQXdCLE1BQU07QUFDdkMsdUJBQWUsRUFBRSxNQUFNLFFBQVEsTUFBTSxxQkFBcUI7QUFBQSxNQUM1RCxPQUFPO0FBQ0wsY0FBTSxJQUFJO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBSUEsWUFBTSw2QkFBNkIsWUFBWSxnQkFBZ0I7QUFDL0QsWUFBTSx5QkFBeUIsWUFBWSxZQUFZO0FBRXZELFVBQ0UsOEJBQThCLFFBQzlCLDBCQUEwQixNQUMxQjtBQUNBLGNBQU0sSUFBSTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUkscUJBQWdEO0FBQ3BELFVBQUksMEJBQTBCLE1BQU07QUFDbEMsNkJBQXFCO0FBQUEsVUFDbkIsTUFBTTtBQUFBLFVBQ04sU0FBUztBQUFBLFFBQ1g7QUFBQSxNQUNGLFdBQVcsOEJBQThCLE1BQU07QUFDN0MsNkJBQXFCO0FBQUEsVUFDbkIsTUFBTTtBQUFBLFVBQ04sTUFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsWUFBTSxhQUFhO0FBQUEsUUFDakIsUUFBUTtBQUFBLFFBQ1IsV0FBVyxZQUFZLFNBQVM7QUFBQSxRQUNoQztBQUFBLFFBQ0E7QUFBQSxRQUNBLG9CQUFvQixZQUFZLFVBQVU7QUFBQSxRQUMxQyxjQUFjO0FBQUEsUUFDZCxTQUFTLHNCQUFzQixPQUFPO0FBQUEsUUFDdEMsbUJBQW1CLFlBQVksaUJBQWlCO0FBQUEsUUFDaEQsT0FBTyxZQUFZLEtBQUs7QUFBQSxRQUN4QixRQUFRLFlBQVksTUFBTTtBQUFBLFFBQzFCLGdCQUFnQixpQkFBaUIsY0FBYztBQUFBLFFBQy9DLFdBQVcsWUFBWSxTQUFTO0FBQUEsTUFDbEMsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUYsRUFBQUEsU0FDRyxRQUFRLG9CQUFvQixFQUM1QjtBQUFBLElBQ0M7QUFBQSxFQUNGLEVBQ0M7QUFBQSxJQUNDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUNDO0FBQUEsSUFDQyxPQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixNQUlNO0FBQ0osWUFBTSxTQUFTLE1BQU0sMEJBQTBCO0FBQUEsUUFDN0MsZ0JBQWdCO0FBQUEsUUFDaEI7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDO0FBQ0QsY0FBUSxPQUFPLFFBQVE7QUFBQSxRQUNyQixLQUFLLFlBQVk7QUFDZixrQkFBUSxJQUFJLFVBQVUsT0FBTyxLQUFLLDZCQUE2QjtBQUMvRDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssWUFBWTtBQUNmLGdCQUFNLFVBQVUsVUFBVSxPQUFPLEtBQUssMENBQTBDLE9BQU8sTUFBTTtBQUM3RixrQkFBUSxNQUFNLE9BQU87QUFDckIsZ0JBQU0sSUFBSSxNQUFNLE9BQU87QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVGLEVBQUFBLFNBQVEsTUFBTTtBQUNoQjtBQUVBLFNBQVMsZUFBZSxPQUF1QjtBQUM3QyxRQUFNLFNBQVMsU0FBUyxPQUFPLEVBQUU7QUFDakMsTUFBSSxNQUFNLE1BQU0sR0FBRztBQUNqQixVQUFNLElBQUksTUFBTSxvQkFBb0IsS0FBSyxFQUFFO0FBQUEsRUFDN0M7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGVBQWUsT0FBOEI7QUFDcEQsTUFBSSxNQUFNLFdBQVcsR0FBRztBQUN0QixXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsTUFBSSxNQUFNLFdBQVcsR0FBRyxHQUFHO0FBQ3pCLFVBQU0sU0FBa0IsS0FBSyxNQUFNLEtBQUs7QUFDeEMsUUFDRSxDQUFDLE1BQU0sUUFBUSxNQUFNLEtBQ3JCLENBQUMsT0FBTyxNQUFNLENBQUMsYUFBYSxPQUFPLGFBQWEsUUFBUSxHQUN4RDtBQUNBLFlBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLElBQ2pFO0FBQ0EsV0FBTztBQUFBLEVBQ1QsT0FBTztBQUNMLFdBQU8sc0JBQXNCLEtBQUs7QUFBQSxFQUNwQztBQUNGO0FBRUEsU0FBUyxpQkFBaUIsT0FBK0I7QUFDdkQsVUFBUSxPQUFPO0FBQUEsSUFDYixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQ0gsYUFBTztBQUFBLElBQ1Q7QUFDRSxZQUFNLElBQUk7QUFBQSxRQUNSLDRCQUE0QixLQUFLO0FBQUEsTUFDbkM7QUFBQSxFQUNKO0FBQ0Y7QUFFQSxTQUFTLHNCQUFzQixPQUFtQztBQUNoRSxRQUFNLGFBQWEsWUFBWSxLQUFLO0FBQ3BDLFVBQVEsWUFBWTtBQUFBLElBQ2xCLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQ0gsYUFBTztBQUFBLElBQ1Q7QUFDRSxZQUFNLElBQUk7QUFBQSxRQUNSLG9CQUFvQixVQUFVO0FBQUEsTUFDaEM7QUFBQSxFQUNKO0FBQ0Y7QUFFQSxTQUFTLFlBQVksT0FBOEI7QUFDakQsU0FBTyxNQUFNLEtBQUssRUFBRSxVQUFVLElBQUksT0FBTztBQUMzQztBQUVBLFNBQVMsYUFBYSxPQUF3QjtBQUM1QyxRQUFNLGFBQWEsTUFBTSxLQUFLLEVBQUUsWUFBWTtBQUM1QyxNQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sR0FBRyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ2xELFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLEdBQUcsRUFBRSxTQUFTLFVBQVUsR0FBRztBQUNsRCxXQUFPO0FBQUEsRUFDVDtBQUNBLFFBQU0sSUFBSSxNQUFNLDBCQUEwQixLQUFLLEVBQUU7QUFDbkQ7QUFFQSxLQUFLO0FBRUwsZUFBZSxpQkFDYixnQkFDQSxnQkFDQSxXQUNBLGFBQ2lCO0FBQ2pCLE1BQUksa0JBQWtCLE1BQU07QUFDMUIsV0FBTyxZQUFZLGNBQWM7QUFBQSxFQUNuQztBQUNBLFFBQU0sVUFBVSxZQUFZLFFBQVEsSUFBSSxjQUFjLEVBQUU7QUFDeEQsTUFBSSxXQUFXLE1BQU07QUFDbkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLG1CQUFtQixxQkFBcUI7QUFDMUMsUUFBSSxhQUFhLE1BQU07QUFDckIsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTyxNQUFNO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxZQUFpQixXQUFRLFlBQVEsR0FBRyxRQUFRO0FBRWxELFVBQVMsVUFBTSxXQUFXLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLGVBQWUseUNBQ2IsTUFDQSxhQUNpQjtBQUNqQixRQUFNLFFBQ0osTUFBTSxZQUFZLENBQUMsUUFBUSxNQUFNLE1BQU0sTUFBTSxZQUFZLE1BQU0sQ0FBQyxHQUNoRSxLQUFLO0FBQ1AsTUFBSSxDQUFDLE1BQU07QUFDVCxVQUFNLElBQUksTUFBTSxnREFBZ0QsSUFBSSxJQUFJO0FBQUEsRUFDMUU7QUFDQSxRQUFNLFlBQWlCLFdBQUssTUFBTSxRQUFRO0FBQzFDLE1BQUk7QUFDRixVQUFNRSxRQUFPLE1BQVMsU0FBSyxTQUFTO0FBQ3BDLFFBQUlBLE1BQUssWUFBWSxHQUFHO0FBSXRCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRixRQUFRO0FBQUEsRUFFUjtBQUlBLFFBQU0sWUFBWSxDQUFDLFFBQVEsU0FBUyxTQUFTLENBQUM7QUFDOUMsUUFBTSxZQUFZLENBQUMsUUFBUSxTQUFTLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUN6RCxRQUFNLFlBQVksQ0FBQyxRQUFRLFNBQVMsT0FBTyxTQUFTLENBQUM7QUFHckQsUUFBTSxpQkFBc0IsV0FBSyxXQUFXLEdBQUcsV0FBVyxPQUFPO0FBQ2pFLFFBQU0sWUFBWSxDQUFDLFFBQVEsU0FBUyxjQUFjLENBQUM7QUFHbkQsUUFBTSxZQUFZLENBQUMsUUFBUSxTQUFTLE9BQU8sY0FBYyxDQUFDO0FBRTFELFNBQU87QUFDVDtBQUVBLFNBQVMsWUFBWSxHQUFtQjtBQUN0QyxNQUFJLE1BQU0sS0FBSztBQUNiLFdBQVUsWUFBUTtBQUFBLEVBQ3BCO0FBQ0EsTUFBSSxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDN0MsV0FBWSxXQUFRLFlBQVEsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsRUFDM0M7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJBcmd1bWVudCIsICJleHBvcnRzIiwgIkhlbHAiLCAiY21kIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiT3B0aW9uIiwgInN0ciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJmcyIsICJwcm9jZXNzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmRlckVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgIkNvbW1hbmQiLCAiaG9vayIsICJvcHRpb24iLCAiZXhwb3J0cyIsICJBcmd1bWVudCIsICJDb21tYW5kIiwgIkNvbW1hbmRlckVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgImV4cG9ydHMiLCAib3MiLCAiQ29tbWFuZCIsICJleHBvcnRzIiwgImZzIiwgIm9zIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgInNlbGYiLCAib3B0aW9ucyIsICJzb2NrZXQiLCAicmVxdWlyZV90dW5uZWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJwYXRoIiwgImlkeCIsICJzdHJlYW0iLCAiZXJyIiwgImhhbmRsZXIiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAic3RydWN0dXJlZENsb25lIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwZXJmb3JtYW5jZSIsICJyZXF1ZXN0IiwgIml0ZXJhdG9yIiwgImtpbmQiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXRvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJsb2IiLCAiZW50cnkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgIkJsb2IiLCAiY2h1bmsiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicGF0aCIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXJyIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic2Vzc2lvbiIsICJvbkNvbm5lY3RUaW1lb3V0IiwgImV4cG9ydHMiLCAiRVJST1IiLCAiZXhwb3J0cyIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJGSU5JU0giLCAiSEVBREVSX1NUQVRFIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImNvbm5lY3QiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImVycm9yUmVxdWVzdCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJXZWFrUmVmIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJub29wIiwgInNlbGYiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImNhbGxiYWNrIiwgInJlcyIsICJvcGFxdWUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJib2R5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1vY2tEaXNwYXRjaCIsICJwYXRoIiwgImdldFJlc3BvbnNlRGF0YSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldFJlc3BvbnNlRGF0YSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJzdGF0dXNDb2RlIiwgImRhdGEiLCAicmVzcG9uc2VPcHRpb25zIiwgIm5ld01vY2tEaXNwYXRjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVVJMIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9wdHMiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlcnIiLCAicmVxdWlyZV9nbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWlyZV9yZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAid2luZG93IiwgImFjIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1ZXN0IiwgImdsb2JhbFRoaXMiLCAiaXRlcmF0b3IiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJwYXRoIiwgIkh0dHBDb2RlcyIsICJleHBvcnRzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJ1c2VyQWdlbnQiLCAiaW5mbyIsICJoYW5kbGVyIiwgImxvd2VyY2FzZUtleXMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIndyaXRlRmlsZSIsICJleHBvcnRzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJmcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiX2EiLCAicGF0aCIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3MiLCAicGF0aCIsICJFeGl0Q29kZSIsICJleHBvcnRzIiwgInNldE91dHB1dCIsICJpbmZvIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJlIiwgIkV2ZW50cyIsICJQcm9taXNlIiwgInJldHJ5IiwgIkdyb3VwIiwgIkJhdGNoZXIiLCAiQm90dGxlbmVjayIsICJhcmdzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIk51bGxPYmplY3QiLCAicGFyc2UiLCAic2FmZVBhcnNlIiwgImNvbW1hbmRlciIsICJmcyIsICJvcyIsICJwYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgIm9zIiwgInByb2dyYW0iLCAicGF0aCIsICJwYXRoIiwgImZzIiwgImZzQ29uc3RhbnRzIiwgImNvcmUiLCAicmVxdWVzdCIsICJCb3R0bGVuZWNrIiwgImluZm8iLCAibmFtZSIsICJtZXRob2QiLCAiaG9vayIsICJob29rIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJpc1BsYWluT2JqZWN0IiwgIndpdGhEZWZhdWx0cyIsICJWRVJTSU9OIiwgIndpdGhEZWZhdWx0cyIsICJyZXF1ZXN0IiwgImVuZHBvaW50IiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJob29rIiwgImF1dGgiLCAiVkVSU0lPTiIsICJyZXF1ZXN0IiwgInBhdGgiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJlbmRwb2ludCIsICJvcHRpb25zIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgIlZFUlNJT04iLCAiT2N0b2tpdCIsICJmcyIsICJwYXRoIiwgIm9zIiwgInByb2dyYW0iLCAic2V0T3V0cHV0IiwgInN0YXQiXQp9Cg== diff --git a/src/runCodexExec.ts b/src/runCodexExec.ts index 689d983..252aec8 100644 --- a/src/runCodexExec.ts +++ b/src/runCodexExec.ts @@ -312,14 +312,27 @@ export async function runCodexExec({ await new Promise((resolve, reject) => { const child = spawn(program, command, { env, - stdio: ["pipe", "inherit", "inherit"], + stdio: ["pipe", "pipe", "pipe"], }); + child.stdout.pipe(process.stdout, { end: false }); + child.stderr.pipe(process.stderr, { end: false }); child.stdin.write(input); child.stdin.end(); - child.on("error", reject); + const closeOutputStreams = () => { + child.stdout.unpipe(process.stdout); + child.stderr.unpipe(process.stderr); + child.stdout.destroy(); + child.stderr.destroy(); + }; - child.on("close", async (code) => { + child.once("error", (err) => { + closeOutputStreams(); + reject(err); + }); + + child.once("exit", async (code) => { + closeOutputStreams(); if (code !== 0) { reject(new Error(`${program} exited with code ${code}`)); return; diff --git a/test/runCodexExec.test.mjs b/test/runCodexExec.test.mjs index d1b1155..08ebfd5 100644 --- a/test/runCodexExec.test.mjs +++ b/test/runCodexExec.test.mjs @@ -25,6 +25,7 @@ function runCodexExecWithFakeCodex({ permissionProfile = "", extraArgs = "", safetyStrategy = "unsafe", + holdStdioOpen = false, } = {}) { const tempDir = mkdtempSync(path.join(tmpdir(), "codex-action-permissions-")); const capturePath = path.join(tempDir, "args.json"); @@ -32,7 +33,8 @@ function runCodexExecWithFakeCodex({ const fakeCodexPath = path.join(tempDir, "codex.mjs"); writeFileSync( fakeCodexPath, - `import { writeFileSync } from "node:fs"; + `import { spawn } from "node:child_process"; +import { writeFileSync } from "node:fs"; const args = process.argv.slice(2); writeFileSync(process.env.CODEX_CAPTURE_ARGS, JSON.stringify(args)); const outputIndex = args.indexOf("--output-last-message"); @@ -40,6 +42,16 @@ if (outputIndex < 0 || outputIndex + 1 >= args.length) { throw new Error("missing --output-last-message"); } writeFileSync(args[outputIndex + 1], "fake final message\\n"); +if (process.env.CODEX_HOLD_STDIO_OPEN === "1") { + console.log("fake codex stdout"); + console.error("fake codex stderr"); + const descendant = spawn( + process.execPath, + ["-e", "setTimeout(() => {}, 5000)"], + { stdio: "inherit" } + ); + descendant.unref(); +} `, "utf8" ); @@ -97,7 +109,9 @@ writeFileSync(args[outputIndex + 1], "fake final message\\n"); ...process.env, PATH: `${tempDir}${path.delimiter}${process.env.PATH ?? ""}`, CODEX_CAPTURE_ARGS: capturePath, + CODEX_HOLD_STDIO_OPEN: holdStdioOpen ? "1" : "0", }, + timeout: holdStdioOpen ? 2_000 : undefined, } ); @@ -111,6 +125,16 @@ writeFileSync(args[outputIndex + 1], "fake final message\\n"); return { result, capturedArgs }; } +test("does not wait for descendants holding stdio open", () => { + const { result } = runCodexExecWithFakeCodex({ holdStdioOpen: true }); + + assert.equal(result.error, undefined); + assert.equal(result.status, 0, result.error?.message ?? result.stderr); + assert.match(result.stdout, /fake codex stdout/); + assert.match(result.stderr, /fake codex stderr/); + assert.match(result.stdout, /fake final message/); +}); + test("preserves workspace-write as the default legacy sandbox", () => { const { result, capturedArgs } = runCodexExecWithFakeCodex();