stacktape 3.0.12 → 3.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/package.json +1 -1
- package/sdk.js +1 -1
- package/index.js.map +0 -7
- package/sdk.js.map +0 -7
package/sdk.js
CHANGED
|
@@ -14495,4 +14495,4 @@ var Stacktape = class {
|
|
|
14495
14495
|
0 && (module.exports = {
|
|
14496
14496
|
Stacktape
|
|
14497
14497
|
});
|
|
14498
|
-
//# sourceMappingURL=sdk.js.map
|
|
14498
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3VuaXZlcnNhbGlmeS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9ta2RpcnMvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9ta2RpcnMvbWFrZS1kaXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9ta2RpcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9wYXRoLWV4aXN0cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3V0aWwvdXRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9zdGF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHkvY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHkvY29weS1zeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2VtcHR5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXBhdGhzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uZmlsZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvanNvbmZpbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2pzb25maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvb3V0cHV0LWZpbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi1zeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvbW92ZS1zeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uNS9saWIvdW5pY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvanNvbjUvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2pzb241L2xpYi9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvanNvbjUvbGliL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvanNvbjUvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9QYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1udW1iZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RvLXJlZ2V4LXJhbmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9maWxsLXJhbmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZXMvbGliL2NvbXBpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZXMvbGliL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYnJhY2VzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9zY2FuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BpY29tYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taWNyb21hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jdXAtcmVhZGRpci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9lcnJuby5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9mcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9wYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1leHRnbG9iL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1nbG9iL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivbm9kZV9tb2R1bGVzL2dsb2ItcGFyZW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL21lcmdlMi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L21hbmFnZXJzL3Rhc2tzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9wcm92aWRlcnMvYXN5bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9hZGFwdGVycy9mcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS1taWNyb3Rhc2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3J1bi1wYXJhbGxlbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC91dGlscy9mcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvdXRpbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvcHJvdmlkZXJzL3N5bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L2FkYXB0ZXJzL2ZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JldXNpZnkvcmV1c2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdHEvcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3JlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcHJvdmlkZXJzL2FzeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3N5bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvbWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvZmlsdGVycy9kZWVwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy90cmFuc2Zvcm1lcnMvZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3JlYWRlcnMvc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGlueS1lYWNoLWFzeW5jL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtZm9sZGVyLXNpemUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaS9saWIvaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jYW1lbGNhc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlY2FtZWxpemUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2V4ZS93aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2V4ZS9tb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2V4ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hpY2gvd2hpY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgta2V5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jcm9zcy1zcGF3bi9saWIvdXRpbC9yZXNvbHZlQ29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL3V0aWwvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zaGViYW5nLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zaGViYW5nLWNvbW1hbmQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi91dGlsL3JlYWRTaGViYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jcm9zcy1zcGF3bi9saWIvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi9lbm9lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHJpcC1maW5hbC1uZXdsaW5lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ucG0tcnVuLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbWljLWZuL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9vbmV0aW1lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL3NyYy9jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL3NyYy9yZWFsdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9zcmMvc2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9zcmMvbWFpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9leGVjYS9saWIvc3RkaW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L3NpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9leGVjYS9saWIva2lsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvaXMtc3RyZWFtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtc3RyZWFtL2J1ZmZlci1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21lcmdlLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9leGVjYS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcC1xdWV1ZS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcC1maW5hbGx5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wLXRpbWVvdXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9sb3dlci1ib3VuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L3ByaW9yaXR5LXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvaW5kZXguanMiLCAiLi4vc3JjL2FwaS9ucG0vc2RrL2luZGV4LnRzIiwgIi4uL3NoYXJlZC91dGlscy9taXNjLnRzIiwgIi4uL3NyYy9jb25maWcvY2xpLnRzIiwgIi4uL3NyYy9jb25maWcvcmFuZG9tLnRzIiwgIi4uL3NoYXJlZC91dGlscy9iaW4tZXhlY3V0YWJsZS50cyIsICIuLi9zaGFyZWQvdXRpbHMvZnMtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYW5nZS1jYXNlL3NyYy9pbmRleC50cyIsICIuLi9zcmMvdXRpbHMvY2xpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5mcm9tQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXJncy5wdXNoKChlcnIsIHJlcykgPT4gKGVyciAhPSBudWxsKSA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShyZXMpKVxuICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgfSlcbiAgICB9XG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuXG5leHBvcnRzLmZyb21Qcm9taXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2Uge1xuICAgICAgYXJncy5wb3AoKVxuICAgICAgZm4uYXBwbHkodGhpcywgYXJncykudGhlbihyID0+IGNiKG51bGwsIHIpLCBjYilcbiAgICB9XG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuIiwgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIiB8fCBlci5jb2RlID09PSBcIkVCVVNZXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuLy8gVGhpcyBpcyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vcm1hbGl6ZS9telxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgSm9uYXRoYW4gT25nIG1lQGpvbmdsZWJlcnJ5LmNvbSBhbmQgQ29udHJpYnV0b3JzXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuY29uc3QgYXBpID0gW1xuICAnYWNjZXNzJyxcbiAgJ2FwcGVuZEZpbGUnLFxuICAnY2htb2QnLFxuICAnY2hvd24nLFxuICAnY2xvc2UnLFxuICAnY29weUZpbGUnLFxuICAnY3AnLFxuICAnZmNobW9kJyxcbiAgJ2ZjaG93bicsXG4gICdmZGF0YXN5bmMnLFxuICAnZnN0YXQnLFxuICAnZnN5bmMnLFxuICAnZnRydW5jYXRlJyxcbiAgJ2Z1dGltZXMnLFxuICAnZ2xvYicsXG4gICdsY2htb2QnLFxuICAnbGNob3duJyxcbiAgJ2x1dGltZXMnLFxuICAnbGluaycsXG4gICdsc3RhdCcsXG4gICdta2RpcicsXG4gICdta2R0ZW1wJyxcbiAgJ29wZW4nLFxuICAnb3BlbmRpcicsXG4gICdyZWFkZGlyJyxcbiAgJ3JlYWRGaWxlJyxcbiAgJ3JlYWRsaW5rJyxcbiAgJ3JlYWxwYXRoJyxcbiAgJ3JlbmFtZScsXG4gICdybScsXG4gICdybWRpcicsXG4gICdzdGF0JyxcbiAgJ3N0YXRmcycsXG4gICdzeW1saW5rJyxcbiAgJ3RydW5jYXRlJyxcbiAgJ3VubGluaycsXG4gICd1dGltZXMnLFxuICAnd3JpdGVGaWxlJ1xuXS5maWx0ZXIoa2V5ID0+IHtcbiAgLy8gU29tZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBzb21lIHN5c3RlbXMuIEV4OlxuICAvLyBmcy5jcCB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MTYuNy4wXG4gIC8vIGZzLnN0YXRmcyB3YXMgYWRkZWQgaW4gTm9kZSB2MTkuNi4wLCB2MTguMTUuMFxuICAvLyBmcy5nbG9iIHdhcyBhZGRlZCBpbiBOb2RlLmpzIHYyMi4wLjBcbiAgLy8gZnMubGNob3duIGlzIG5vdCBhdmFpbGFibGUgb24gYXQgbGVhc3Qgc29tZSBMaW51eFxuICByZXR1cm4gdHlwZW9mIGZzW2tleV0gPT09ICdmdW5jdGlvbidcbn0pXG5cbi8vIEV4cG9ydCBjbG9uZWQgZnM6XG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIGZzKVxuXG4vLyBVbml2ZXJzYWxpZnkgYXN5bmMgbWV0aG9kczpcbmFwaS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGV4cG9ydHNbbWV0aG9kXSA9IHUoZnNbbWV0aG9kXSlcbn0pXG5cbi8vIFdlIGRpZmZlciBmcm9tIG16L2ZzIGluIHRoYXQgd2Ugc3RpbGwgc2hpcCB0aGUgb2xkLCBicm9rZW4sIGZzLmV4aXN0cygpXG4vLyBzaW5jZSB3ZSBhcmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIG1vZHVsZVxuZXhwb3J0cy5leGlzdHMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgcmVzb2x2ZSlcbiAgfSlcbn1cblxuLy8gZnMucmVhZCgpLCBmcy53cml0ZSgpLCBmcy5yZWFkdigpLCAmIGZzLndyaXRldigpIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIG11bHRpcGxlIGNhbGxiYWNrIGFyZ3NcblxuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzUmVhZCwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGNhbiBiZVxuLy8gZnMud3JpdGUoZmQsIGJ1ZmZlclssIG9mZnNldFssIGxlbmd0aFssIHBvc2l0aW9uXV1dLCBjYWxsYmFjaylcbi8vIE9SXG4vLyBmcy53cml0ZShmZCwgc3RyaW5nWywgcG9zaXRpb25bLCBlbmNvZGluZ11dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4vLyBzLnJlYWR2KGZkLCBidWZmZXJzWywgcG9zaXRpb25dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLnJlYWR2ID0gZnVuY3Rpb24gKGZkLCBidWZmZXJzLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLnJlYWR2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkdihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXJzKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlcnMgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBGdW5jdGlvbiBzaWduYXR1cmUgaXNcbi8vIHMud3JpdGV2KGZkLCBidWZmZXJzWywgcG9zaXRpb25dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRldiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXJzKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlcnMgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBmcy5yZWFscGF0aC5uYXRpdmUgc29tZXRpbWVzIG5vdCBhdmFpbGFibGUgaWYgZnMgaXMgbW9ua2V5LXBhdGNoZWRcbmlmICh0eXBlb2YgZnMucmVhbHBhdGgubmF0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gIGV4cG9ydHMucmVhbHBhdGgubmF0aXZlID0gdShmcy5yZWFscGF0aC5uYXRpdmUpXG59IGVsc2Uge1xuICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICdmcy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVkPycsXG4gICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDMnXG4gIClcbn1cbiIsICIvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tYWtlLWRpclxuLy8gQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuJ3VzZSBzdHJpY3QnXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODk4N1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L3B1bGwvMTA4OFxubW9kdWxlLmV4cG9ydHMuY2hlY2tQYXRoID0gZnVuY3Rpb24gY2hlY2tQYXRoIChwdGgpIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMgPSAvWzw+OlwifD8qXS8udGVzdChwdGgucmVwbGFjZShwYXRoLnBhcnNlKHB0aCkucm9vdCwgJycpKVxuXG4gICAgaWYgKHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke3B0aH1gKVxuICAgICAgZXJyb3IuY29kZSA9ICdFSU5WQUwnXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB7IGNoZWNrUGF0aCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGdldE1vZGUgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgcmV0dXJuIG9wdGlvbnNcbiAgcmV0dXJuICh7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH0pLm1vZGVcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChkaXIsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGRpcilcblxuICByZXR1cm4gZnMubWtkaXIoZGlyLCB7XG4gICAgbW9kZTogZ2V0TW9kZShvcHRpb25zKSxcbiAgICByZWN1cnNpdmU6IHRydWVcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoZGlyLCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChkaXIpXG5cbiAgcmV0dXJuIGZzLm1rZGlyU3luYyhkaXIsIHtcbiAgICBtb2RlOiBnZXRNb2RlKG9wdGlvbnMpLFxuICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICB9KVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCB7IG1ha2VEaXI6IF9tYWtlRGlyLCBtYWtlRGlyU3luYyB9ID0gcmVxdWlyZSgnLi9tYWtlLWRpcicpXG5jb25zdCBtYWtlRGlyID0gdShfbWFrZURpcilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogbWFrZURpcixcbiAgbWtkaXJzU3luYzogbWFrZURpclN5bmMsXG4gIC8vIGFsaWFzXG4gIG1rZGlycDogbWFrZURpcixcbiAgbWtkaXJwU3luYzogbWFrZURpclN5bmMsXG4gIGVuc3VyZURpcjogbWFrZURpcixcbiAgZW5zdXJlRGlyU3luYzogbWFrZURpclN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5cbmZ1bmN0aW9uIHBhdGhFeGlzdHMgKHBhdGgpIHtcbiAgcmV0dXJuIGZzLmFjY2VzcyhwYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGF0aEV4aXN0czogdShwYXRoRXhpc3RzKSxcbiAgcGF0aEV4aXN0c1N5bmM6IGZzLmV4aXN0c1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgLy8gaWYgKCFIQVNfTUlMTElTX1JFUykgcmV0dXJuIGZzLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4ocGF0aCwgJ3IrJylcblxuICBsZXQgY2xvc2VFcnIgPSBudWxsXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5mdXRpbWVzKGZkLCBhdGltZSwgbXRpbWUpXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmNsb3NlKGZkKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNsb3NlRXJyID0gZVxuICAgIH1cbiAgfVxuXG4gIGlmIChjbG9zZUVycikge1xuICAgIHRocm93IGNsb3NlRXJyXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRpbWVzTWlsbGlzU3luYyAocGF0aCwgYXRpbWUsIG10aW1lKSB7XG4gIGNvbnN0IGZkID0gZnMub3BlblN5bmMocGF0aCwgJ3IrJylcbiAgZnMuZnV0aW1lc1N5bmMoZmQsIGF0aW1lLCBtdGltZSlcbiAgcmV0dXJuIGZzLmNsb3NlU3luYyhmZClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHV0aW1lc01pbGxpczogdSh1dGltZXNNaWxsaXMpLFxuICB1dGltZXNNaWxsaXNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIDogKGZpbGUpID0+IGZzLmxzdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdEZ1bmMoc3JjKSxcbiAgICBzdGF0RnVuYyhkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICA6IChmaWxlKSA9PiBmcy5sc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRGdW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRGdW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgZ2V0U3RhdHMoc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuXG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cblxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gZnMuc3RhdFN5bmMoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIC8vIHN0YXQuZGV2IGNhbiBiZSAwbiBvbiB3aW5kb3dzIHdoZW4gbm9kZSB2ZXJzaW9uID49IDIyLngueFxuICByZXR1cm4gZGVzdFN0YXQuaW5vICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuZGV2ICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5ldmVyeSgoY3VyLCBpKSA9PiBkZXN0QXJyW2ldID09PSBjdXIpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBjaGVja1BhdGhzXG4gIGNoZWNrUGF0aHM6IHUoY2hlY2tQYXRocyksXG4gIGNoZWNrUGF0aHNTeW5jLFxuICAvLyBjaGVja1BhcmVudFxuICBjaGVja1BhcmVudFBhdGhzOiB1KGNoZWNrUGFyZW50UGF0aHMpLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgLy8gTWlzY1xuICBpc1NyY1N1YmRpcixcbiAgYXJlSWRlbnRpY2FsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMTA1NlxuLy8gUGVyZm9ybWluZyBwYXJhbGxlbCBvcGVyYXRpb25zIG9uIGVhY2ggaXRlbSBvZiBhbiBhc3luYyBpdGVyYXRvciBpc1xuLy8gc3VycHJpc2luZ2x5IGhhcmQ7IHlvdSBuZWVkIHRvIGhhdmUgaGFuZGxlcnMgaW4gcGxhY2UgdG8gYXZvaWQgZ2V0dGluZyBhblxuLy8gVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbldhcm5pbmcuXG4vLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHByZXNlbnRseSBoYW5kbGUgcmV0dXJuIHZhbHVlcywgb25seSBlcnJvcnNcbmFzeW5jIGZ1bmN0aW9uIGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2VzcyAoaXRlcmF0b3IsIGZuKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXJhdG9yKSB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIGZuKGl0ZW0pLnRoZW4oXG4gICAgICAgICgpID0+IG51bGwsXG4gICAgICAgIChlcnIpID0+IGVyciA/PyBuZXcgRXJyb3IoJ3Vua25vd24gZXJyb3InKVxuICAgICAgKVxuICAgIClcbiAgfVxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBwcm9taXNlcy5tYXAoKHByb21pc2UpID0+XG4gICAgICBwcm9taXNlLnRoZW4oKHBvc3NpYmxlRXJyKSA9PiB7XG4gICAgICAgIGlmIChwb3NzaWJsZUVyciAhPT0gbnVsbCkgdGhyb3cgcG9zc2libGVFcnJcbiAgICAgIH0pXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3Ncbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IG1rZGlycyB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3QgeyB1dGltZXNNaWxsaXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJylcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuY29uc3QgeyBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3MgfSA9IHJlcXVpcmUoJy4uL3V0aWwvYXN5bmMnKVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5IChzcmMsIGRlc3QsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhcbiAgICAgICdVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XFxuXFxuJyArXG4gICAgICAnXFx0c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5JyxcbiAgICAgICdXYXJuaW5nJywgJ2ZzLWV4dHJhLVdBUk4wMDAxJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IGF3YWl0IHN0YXQuY2hlY2tQYXRocyhzcmMsIGRlc3QsICdjb3B5Jywgb3B0cylcblxuICBhd2FpdCBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScpXG5cbiAgY29uc3QgaW5jbHVkZSA9IGF3YWl0IHJ1bkZpbHRlcihzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKCFpbmNsdWRlKSByZXR1cm5cblxuICAvLyBjaGVjayBpZiB0aGUgcGFyZW50IG9mIGRlc3QgZXhpc3RzLCBhbmQgY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKGRlc3RQYXJlbnQpXG4gIGlmICghZGlyRXhpc3RzKSB7XG4gICAgYXdhaXQgbWtkaXJzKGRlc3RQYXJlbnQpXG4gIH1cblxuICBhd2FpdCBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkZpbHRlciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghb3B0cy5maWx0ZXIpIHJldHVybiB0cnVlXG4gIHJldHVybiBvcHRzLmZpbHRlcihzcmMsIGRlc3QpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFN0YXRzQW5kUGVyZm9ybUNvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZuID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXQgOiBmcy5sc3RhdFxuICBjb25zdCBzcmNTdGF0ID0gYXdhaXQgc3RhdEZuKHNyYylcblxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoXG4gICAgc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpXG4gICkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgaWYgKHNyY1N0YXQuaXNTb2NrZXQoKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke3NyY31gKVxuICBpZiAoc3JjU3RhdC5pc0ZJRk8oKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtzcmN9YClcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7c3JjfWApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGF3YWl0IGZzLnVubGluayhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH1cbiAgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgYXdhaXQgZnMuY29weUZpbGUoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAgIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAgIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICAgIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNTdGF0Lm1vZGUpKSB7XG4gICAgICBhd2FpdCBtYWtlRmlsZVdyaXRhYmxlKGRlc3QsIHNyY1N0YXQubW9kZSlcbiAgICB9XG5cbiAgICAvLyBTZXQgdGltZXN0YW1wcyBhbmQgbW9kZSBjb3JyZXNwb25kaW5nbHlcblxuICAgIC8vIE5vdGUgdGhhdCBUaGUgaW5pdGlhbCBzcmNTdGF0LmF0aW1lIGNhbm5vdCBiZSB0cnVzdGVkXG4gICAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAgIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gICAgY29uc3QgdXBkYXRlZFNyY1N0YXQgPSBhd2FpdCBmcy5zdGF0KHNyYylcbiAgICBhd2FpdCB1dGltZXNNaWxsaXMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxuICB9XG5cbiAgcmV0dXJuIGZzLmNobW9kKGRlc3QsIHNyY1N0YXQubW9kZSlcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25EaXIgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgLy8gdGhlIGRlc3QgZGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCwgY3JlYXRlIGl0XG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBmcy5ta2RpcihkZXN0KVxuICB9XG5cbiAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gY29weSBldmVyeXRoaW5nXG4gIGF3YWl0IGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2Vzcyhhd2FpdCBmcy5vcGVuZGlyKHNyYyksIGFzeW5jIChpdGVtKSA9PiB7XG4gICAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0ubmFtZSlcbiAgICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtLm5hbWUpXG5cbiAgICBjb25zdCBpbmNsdWRlID0gYXdhaXQgcnVuRmlsdGVyKHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzKVxuICAgIC8vIG9ubHkgY29weSB0aGUgaXRlbSBpZiBpdCBtYXRjaGVzIHRoZSBmaWx0ZXIgZnVuY3Rpb25cbiAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgY29uc3QgeyBkZXN0U3RhdCB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIG9wdHMpXG4gICAgICAvLyBJZiB0aGUgaXRlbSBpcyBhIGNvcHlhYmxlIGZpbGUsIGBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5YCB3aWxsIGNvcHkgaXRcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgZGlyZWN0b3J5LCBgZ2V0U3RhdHNBbmRQZXJmb3JtQ29weWAgd2lsbCBjYWxsIGBvbkRpcmAgcmVjdXJzaXZlbHlcbiAgICAgIGF3YWl0IGdldFN0YXRzQW5kUGVyZm9ybUNvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzKVxuICAgIH1cbiAgfSlcblxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgYXdhaXQgZnMuY2htb2QoZGVzdCwgc3JjU3RhdC5tb2RlKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBhd2FpdCBmcy5yZWFkbGluayhzcmMpXG4gIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gIH1cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG5cbiAgbGV0IHJlc29sdmVkRGVzdCA9IG51bGxcbiAgdHJ5IHtcbiAgICByZXNvbHZlZERlc3QgPSBhd2FpdCBmcy5yZWFkbGluayhkZXN0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAvLyBXaW5kb3dzIG1heSB0aHJvdyBVTktOT1dOIGVycm9yLiBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLFxuICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgIGlmIChlLmNvZGUgPT09ICdFSU5WQUwnIHx8IGUuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdClcbiAgICB0aHJvdyBlXG4gIH1cbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICB9XG4gIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYClcbiAgfVxuXG4gIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgfVxuXG4gIC8vIGNvcHkgdGhlIGxpbmtcbiAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnNTeW5jID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJzU3luY1xuY29uc3QgdXRpbWVzTWlsbGlzU3luYyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzU3luY1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIGNvcHlTeW5jIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0cyA9IHsgZmlsdGVyOiBvcHRzIH1cbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgICAnVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxcbicgK1xuICAgICAgJ1xcdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OScsXG4gICAgICAnV2FybmluZycsICdmcy1leHRyYS1XQVJOMDAwMidcbiAgICApXG4gIH1cblxuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ2NvcHknLCBvcHRzKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknKVxuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyYywgZGVzdCkpIHJldHVyblxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkZXN0UGFyZW50KSkgbWtkaXJzU3luYyhkZXN0UGFyZW50KVxuICByZXR1cm4gZ2V0U3RhdHMoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHMgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdFN5bmMgPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdFN5bmMgOiBmcy5sc3RhdFN5bmNcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRTeW5jKHNyYylcblxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKCkpIHJldHVybiBvbkZpbGUoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc1N5bWJvbGljTGluaygpKSByZXR1cm4gb25MaW5rKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTb2NrZXQoKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke3NyY31gKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzRklGTygpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke3NyY31gKVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtzcmN9YClcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rU3luYyhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5jb3B5RmlsZVN5bmMoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIGhhbmRsZVRpbWVzdGFtcHMoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHMgKHNyY01vZGUsIHNyYywgZGVzdCkge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkgbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlKVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0KVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2RTeW5jKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGNvbnN0IHVwZGF0ZWRTcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjKVxuICByZXR1cm4gdXRpbWVzTWlsbGlzU3luYyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMubWtkaXJTeW5jKGRlc3QpXG4gIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IGRpciA9IGZzLm9wZW5kaXJTeW5jKHNyYylcblxuICB0cnkge1xuICAgIGxldCBkaXJlbnRcblxuICAgIHdoaWxlICgoZGlyZW50ID0gZGlyLnJlYWRTeW5jKCkpICE9PSBudWxsKSB7XG4gICAgICBjb3B5RGlySXRlbShkaXJlbnQubmFtZSwgc3JjLCBkZXN0LCBvcHRzKVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBkaXIuY2xvc2VTeW5jKClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHNyY0l0ZW0gPSBwYXRoLmpvaW4oc3JjLCBpdGVtKVxuICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtKVxuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyY0l0ZW0sIGRlc3RJdGVtKSkgcmV0dXJuXG4gIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5Jywgb3B0cylcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmNJdGVtLCBkZXN0SXRlbSwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGZzLnJlYWRsaW5rU3luYyhzcmMpXG4gIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gIH1cblxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9IGVsc2Uge1xuICAgIGxldCByZXNvbHZlZERlc3RcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWREZXN0ID0gZnMucmVhZGxpbmtTeW5jKGRlc3QpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRUlOVkFMJyB8fCBlcnIuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gICAgfVxuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIHByZXZlbnQgY29weSBpZiBzcmMgaXMgYSBzdWJkaXIgb2YgZGVzdCBzaW5jZSB1bmxpbmtpbmdcbiAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgLy8gYW5kIHRoZXJlZm9yZSBhIGJyb2tlbiBzeW1saW5rIHdvdWxkIGJlIGNyZWF0ZWQuXG4gICAgaWYgKHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2Vcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiB1KHJlcXVpcmUoJy4vY29weScpKSxcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5cbmZ1bmN0aW9uIHJlbW92ZSAocGF0aCwgY2FsbGJhY2spIHtcbiAgZnMucm0ocGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0sIGNhbGxiYWNrKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTeW5jIChwYXRoKSB7XG4gIGZzLnJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbW92ZTogdShyZW1vdmUpLFxuICByZW1vdmVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVtcy5tYXAoaXRlbSA9PiByZW1vdmUucmVtb3ZlKHBhdGguam9pbihkaXIsIGl0ZW0pKSkpXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVGaWxlIChmaWxlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gIGxldCBkaXJTdGF0cyA9IG51bGxcbiAgdHJ5IHtcbiAgICBkaXJTdGF0cyA9IGF3YWl0IGZzLnN0YXQoZGlyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIG1ha2UgaXRcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsICcnKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJTdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsICcnKVxuICB9IGVsc2Uge1xuICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICBhd2FpdCBmcy5yZWFkZGlyKGRpcilcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlU3luYyAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGUpXG4gIH0gY2F0Y2ggeyB9XG4gIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkgcmV0dXJuXG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgZnMucmVhZGRpclN5bmMoZGlyKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSWYgdGhlIHN0YXQgY2FsbCBhYm92ZSBmYWlsZWQgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdFTk9FTlQnKSBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgICBlbHNlIHRocm93IGVyclxuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUZpbGU6IHUoY3JlYXRlRmlsZSksXG4gIGNyZWF0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCB7IHBhdGhFeGlzdHMgfSA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJylcbmNvbnN0IHsgYXJlSWRlbnRpY2FsIH0gPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVMaW5rIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBkc3RTdGF0XG4gIHRyeSB7XG4gICAgZHN0U3RhdCA9IGF3YWl0IGZzLmxzdGF0KGRzdHBhdGgpXG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZSBlcnJvclxuICB9XG5cbiAgbGV0IHNyY1N0YXRcbiAgdHJ5IHtcbiAgICBzcmNTdGF0ID0gYXdhaXQgZnMubHN0YXQoc3JjcGF0aClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGlmIChkc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG5cbiAgY29uc3QgZGlyRXhpc3RzID0gYXdhaXQgcGF0aEV4aXN0cyhkaXIpXG5cbiAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICB9XG5cbiAgYXdhaXQgZnMubGluayhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBsZXQgZHN0U3RhdFxuICB0cnkge1xuICAgIGRzdFN0YXQgPSBmcy5sc3RhdFN5bmMoZHN0cGF0aClcbiAgfSBjYXRjaCB7fVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3JjU3RhdCA9IGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICAgIGlmIChkc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZGlyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcblxuICByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUxpbms6IHUoY3JlYXRlTGluayksXG4gIGNyZWF0ZUxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuXG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdClcbiAgaWYgKGV4aXN0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gIGlmIChleGlzdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNyY0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgaWYgKCFzcmNFeGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gIHJldHVybiB7XG4gICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHM6IHUoc3ltbGlua1BhdGhzKSxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rVHlwZSAoc3JjcGF0aCwgdHlwZSkge1xuICBpZiAodHlwZSkgcmV0dXJuIHR5cGVcblxuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuXG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG5cbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdmaWxlJ1xuICB9XG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1R5cGU6IHUoc3ltbGlua1R5cGUpLFxuICBzeW1saW5rVHlwZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuY29uc3QgeyBta2RpcnMsIG1rZGlyc1N5bmMgfSA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5cbmNvbnN0IHsgc3ltbGlua1BhdGhzLCBzeW1saW5rUGF0aHNTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmstcGF0aHMnKVxuY29uc3QgeyBzeW1saW5rVHlwZSwgc3ltbGlua1R5cGVTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG5cbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuXG5jb25zdCB7IGFyZUlkZW50aWNhbCB9ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ltbGluayAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KGRzdHBhdGgpXG4gIH0gY2F0Y2ggeyB9XG5cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBjb25zdCBbc3JjU3RhdCwgZHN0U3RhdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmcy5zdGF0KHNyY3BhdGgpLFxuICAgICAgZnMuc3RhdChkc3RwYXRoKVxuICAgIF0pXG5cbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHJlbGF0aXZlID0gYXdhaXQgc3ltbGlua1BhdGhzKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICBjb25zdCB0b1R5cGUgPSBhd2FpdCBzeW1saW5rVHlwZShyZWxhdGl2ZS50b0N3ZCwgdHlwZSlcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG5cbiAgaWYgKCEoYXdhaXQgcGF0aEV4aXN0cyhkaXIpKSkge1xuICAgIGF3YWl0IG1rZGlycyhkaXIpXG4gIH1cblxuICByZXR1cm4gZnMuc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCB0b1R5cGUpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKGRzdHBhdGgpXG4gIH0gY2F0Y2ggeyB9XG4gIGlmIChzdGF0cyAmJiBzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgY29uc3Qgc3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyY3BhdGgpXG4gICAgY29uc3QgZHN0U3RhdCA9IGZzLnN0YXRTeW5jKGRzdHBhdGgpXG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZWxhdGl2ZSA9IHN5bWxpbmtQYXRoc1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gIHR5cGUgPSBzeW1saW5rVHlwZVN5bmMocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG4gIG1rZGlyc1N5bmMoZGlyKVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVN5bWxpbms6IHUoY3JlYXRlU3ltbGluayksXG4gIGNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgY3JlYXRlRmlsZSwgY3JlYXRlRmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IGNyZWF0ZUxpbmssIGNyZWF0ZUxpbmtTeW5jIH0gPSByZXF1aXJlKCcuL2xpbmsnKVxuY29uc3QgeyBjcmVhdGVTeW1saW5rLCBjcmVhdGVTeW1saW5rU3luYyB9ID0gcmVxdWlyZSgnLi9zeW1saW5rJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGZpbGVcbiAgY3JlYXRlRmlsZSxcbiAgY3JlYXRlRmlsZVN5bmMsXG4gIGVuc3VyZUZpbGU6IGNyZWF0ZUZpbGUsXG4gIGVuc3VyZUZpbGVTeW5jOiBjcmVhdGVGaWxlU3luYyxcbiAgLy8gbGlua1xuICBjcmVhdGVMaW5rLFxuICBjcmVhdGVMaW5rU3luYyxcbiAgZW5zdXJlTGluazogY3JlYXRlTGluayxcbiAgZW5zdXJlTGlua1N5bmM6IGNyZWF0ZUxpbmtTeW5jLFxuICAvLyBzeW1saW5rXG4gIGNyZWF0ZVN5bWxpbmssXG4gIGNyZWF0ZVN5bWxpbmtTeW5jLFxuICBlbnN1cmVTeW1saW5rOiBjcmVhdGVTeW1saW5rLFxuICBlbnN1cmVTeW1saW5rU3luYzogY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4vZywgRU9MKSArIEVPRlxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBzdHJpbmdpZnksIHN0cmlwQm9tIH1cbiIsICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG4vLyBOT1RFOiBkbyBub3QgY2hhbmdlIHRoaXMgZXhwb3J0IGZvcm1hdDsgcmVxdWlyZWQgZm9yIEVTTSBjb21wYXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtanNvbmZpbGUvcHVsbC8xNjIgZm9yIGRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCdqc29uZmlsZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBqc29uZmlsZSBleHBvcnRzXG4gIHJlYWRKc29uOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHdyaXRlSnNvbjoganNvbkZpbGUud3JpdGVGaWxlLFxuICB3cml0ZUpzb25TeW5jOiBqc29uRmlsZS53cml0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmFzeW5jIGZ1bmN0aW9uIG91dHB1dEZpbGUgKGZpbGUsIGRhdGEsIGVuY29kaW5nID0gJ3V0Zi04Jykge1xuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKGRpcikpKSB7XG4gICAgYXdhaXQgbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIG91dHB1dEZpbGVTeW5jIChmaWxlLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgb3V0cHV0RmlsZTogdShvdXRwdXRGaWxlKSxcbiAgb3V0cHV0RmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5mdW5jdGlvbiBvdXRwdXRKc29uU3luYyAoZmlsZSwgZGF0YSwgb3B0aW9ucykge1xuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucylcblxuICBvdXRwdXRGaWxlU3luYyhmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblN5bmNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBqc29uRmlsZSA9IHJlcXVpcmUoJy4vanNvbmZpbGUnKVxuXG5qc29uRmlsZS5vdXRwdXRKc29uID0gdShyZXF1aXJlKCcuL291dHB1dC1qc29uJykpXG5qc29uRmlsZS5vdXRwdXRKc29uU3luYyA9IHJlcXVpcmUoJy4vb3V0cHV0LWpzb24tc3luYycpXG4vLyBhbGlhc2VzXG5qc29uRmlsZS5vdXRwdXRKU09OID0ganNvbkZpbGUub3V0cHV0SnNvblxuanNvbkZpbGUub3V0cHV0SlNPTlN5bmMgPSBqc29uRmlsZS5vdXRwdXRKc29uU3luY1xuanNvbkZpbGUud3JpdGVKU09OID0ganNvbkZpbGUud3JpdGVKc29uXG5qc29uRmlsZS53cml0ZUpTT05TeW5jID0ganNvbkZpbGUud3JpdGVKc29uU3luY1xuanNvbkZpbGUucmVhZEpTT04gPSBqc29uRmlsZS5yZWFkSnNvblxuanNvbkZpbGUucmVhZEpTT05TeW5jID0ganNvbkZpbGUucmVhZEpzb25TeW5jXG5cbm1vZHVsZS5leHBvcnRzID0ganNvbkZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IGNvcHkgfSA9IHJlcXVpcmUoJy4uL2NvcHknKVxuY29uc3QgeyByZW1vdmUgfSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5jb25zdCB7IG1rZGlycCB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcblxuICAvLyBJZiB0aGUgcGFyZW50IG9mIGRlc3QgaXMgbm90IHJvb3QsIG1ha2Ugc3VyZSBpdCBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXJlbnRQYXRoID0gcGF0aC5wYXJzZShkZXN0UGFyZW50KVxuICBpZiAocGFyc2VkUGFyZW50UGF0aC5yb290ICE9PSBkZXN0UGFyZW50KSB7XG4gICAgYXdhaXQgbWtkaXJwKGRlc3RQYXJlbnQpXG4gIH1cblxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmICghaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBhd2FpdCByZW1vdmUoZGVzdClcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHcvIHJlbmFtZSBmaXJzdCwgYW5kIHRyeSBjb3B5ICsgcmVtb3ZlIGlmIEVYREVWXG4gICAgYXdhaXQgZnMucmVuYW1lKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgYXdhaXQgbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWUsXG4gICAgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlXG4gIH1cblxuICBhd2FpdCBjb3B5KHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZShzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGNvcHlTeW5jID0gcmVxdWlyZSgnLi4vY29weScpLmNvcHlTeW5jXG5jb25zdCByZW1vdmVTeW5jID0gcmVxdWlyZSgnLi4vcmVtb3ZlJykucmVtb3ZlU3luY1xuY29uc3QgbWtkaXJwU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFN5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBtb3ZlU3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdtb3ZlJywgb3B0cylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcbiAgaWYgKCFpc1BhcmVudFJvb3QoZGVzdCkpIG1rZGlycFN5bmMocGF0aC5kaXJuYW1lKGRlc3QpKVxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5mdW5jdGlvbiBpc1BhcmVudFJvb3QgKGRlc3QpIHtcbiAgY29uc3QgcGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGNvbnN0IHBhcnNlZFBhdGggPSBwYXRoLnBhcnNlKHBhcmVudClcbiAgcmV0dXJuIHBhcnNlZFBhdGgucm9vdCA9PT0gcGFyZW50XG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgaWYgKGlzQ2hhbmdpbmdDYXNlKSByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmVtb3ZlU3luYyhkZXN0KVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdCkpIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIHRyeSB7XG4gICAgZnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgdGhyb3cgZXJyXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlLFxuICAgIHByZXNlcnZlVGltZXN0YW1wczogdHJ1ZVxuICB9XG4gIGNvcHlTeW5jKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZVN5bmMoc3JjKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmU6IHUocmVxdWlyZSgnLi9tb3ZlJykpLFxuICBtb3ZlU3luYzogcmVxdWlyZSgnLi9tb3ZlLXN5bmMnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dC1maWxlJyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuIiwgIi8vIFRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZS4gRG8gbm90IGVkaXQuXG5tb2R1bGUuZXhwb3J0cy5TcGFjZV9TZXBhcmF0b3IgPSAvW1xcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBdL1xubW9kdWxlLmV4cG9ydHMuSURfU3RhcnQgPSAvW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEJEXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRVxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZFQVxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FFXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY1XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjRBXFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXFx1REZEMS1cXHVERkQ1XXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzNcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURGMDAtXFx1REYxOV18XFx1RDgwNltcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTgzXFx1REU4Ni1cXHVERTg5XFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RVxcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNDRcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFdfFxcdUQ4MjFbXFx1REMwMC1cXHVERkVDXXxcXHVEODIyW1xcdURDMDAtXFx1REVGMl18XFx1RDgyQ1tcXHVEQzAwLVxcdUREMUVcXHVERDcwLVxcdURFRkJdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURcXHVEQzIwLVxcdURGRkZdfFxcdUQ4NzNbXFx1REMwMC1cXHVERUExXFx1REVCMC1cXHVERkZGXXxcXHVEODdBW1xcdURDMDAtXFx1REZFMF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdL1xubW9kdWxlLmV4cG9ydHMuSURfQ29udGludWUgPSAvW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzAwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA4RDQtXFx1MDhFMVxcdTA4RTMtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MDlGQ1xcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQUY5LVxcdTBBRkZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMC1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4LVxcdTBDNUFcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgwLVxcdTBDODNcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JDLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDREVcXHUwQ0UwLVxcdTBDRTNcXHUwQ0U2LVxcdTBDRUZcXHUwQ0YxXFx1MENGMlxcdTBEMDAtXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTQtXFx1MEQ1N1xcdTBENUYtXFx1MEQ2M1xcdTBENjYtXFx1MEQ2RlxcdTBEN0EtXFx1MEQ3RlxcdTBEODJcXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERFNi1cXHUwREVGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCOVxcdTBFQkItXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRUM4LVxcdTBFQ0RcXHUwRUQwLVxcdTBFRDlcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEYxOFxcdTBGMTlcXHUwRjIwLVxcdTBGMjlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjcxLVxcdTBGODRcXHUwRjg2LVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAwMC1cXHUxMDQ5XFx1MTA1MC1cXHUxMDlEXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzNUQtXFx1MTM1RlxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxNFxcdTE3MjAtXFx1MTczNFxcdTE3NDAtXFx1MTc1M1xcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3NzJcXHUxNzczXFx1MTc4MC1cXHUxN0QzXFx1MTdEN1xcdTE3RENcXHUxN0REXFx1MTdFMC1cXHUxN0U5XFx1MTgwQi1cXHUxODBEXFx1MTgxMC1cXHUxODE5XFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTk0Ni1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MTlEMC1cXHUxOUQ5XFx1MUEwMC1cXHUxQTFCXFx1MUEyMC1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3Ri1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUFBN1xcdTFBQjAtXFx1MUFCRFxcdTFCMDAtXFx1MUI0QlxcdTFCNTAtXFx1MUI1OVxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUJGM1xcdTFDMDAtXFx1MUMzN1xcdTFDNDAtXFx1MUM0OVxcdTFDNEQtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNGOVxcdTFEMDAtXFx1MURGOVxcdTFERkItXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyRlxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOTlcXHUzMDlBXFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJFXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVBXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FFXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM1XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBOUUwLVxcdUE5RkVcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBLVxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUZcXHVBQUYyLVxcdUFBRjZcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjVcXHVBQjcwLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUFCRjAtXFx1QUJGOVxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGXFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjNGXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMC1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzNcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU2XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMl18XFx1RDgwNFtcXHVEQzAwLVxcdURDNDZcXHVEQzY2LVxcdURDNkZcXHVEQzdGLVxcdURDQkFcXHVEQ0QwLVxcdURDRThcXHVEQ0YwLVxcdURDRjlcXHVERDAwLVxcdUREMzRcXHVERDM2LVxcdUREM0ZcXHVERDUwLVxcdURENzNcXHVERDc2XFx1REQ4MC1cXHVEREM0XFx1RERDQS1cXHVERENDXFx1REREMC1cXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFM0VcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERUVBXFx1REVGMC1cXHVERUY5XFx1REYwMC1cXHVERjAzXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0MtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1MFxcdURGNTdcXHVERjVELVxcdURGNjNcXHVERjY2LVxcdURGNkNcXHVERjcwLVxcdURGNzRdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzRBXFx1REM1MC1cXHVEQzU5XFx1REM4MC1cXHVEQ0M1XFx1RENDN1xcdURDRDAtXFx1RENEOVxcdUREODAtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURERDgtXFx1RERERFxcdURFMDAtXFx1REU0MFxcdURFNDRcXHVERTUwLVxcdURFNTlcXHVERTgwLVxcdURFQjdcXHVERUMwLVxcdURFQzlcXHVERjAwLVxcdURGMTlcXHVERjFELVxcdURGMkJcXHVERjMwLVxcdURGMzldfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0U5XFx1RENGRlxcdURFMDAtXFx1REUzRVxcdURFNDdcXHVERTUwLVxcdURFODNcXHVERTg2LVxcdURFOTlcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzM2XFx1REMzOC1cXHVEQzQwXFx1REM1MC1cXHVEQzU5XFx1REM3Mi1cXHVEQzhGXFx1REM5Mi1cXHVEQ0E3XFx1RENBOS1cXHVEQ0I2XFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDdcXHVERDUwLVxcdURENTldfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RVxcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFNjAtXFx1REU2OVxcdURFRDAtXFx1REVFRFxcdURFRjAtXFx1REVGNFxcdURGMDAtXFx1REYzNlxcdURGNDAtXFx1REY0M1xcdURGNTAtXFx1REY1OVxcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNDRcXHVERjUwLVxcdURGN0VcXHVERjhGLVxcdURGOUZcXHVERkUwXFx1REZFMV18XFx1RDgyMVtcXHVEQzAwLVxcdURGRUNdfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTlcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQlxcdURGQ0UtXFx1REZGRl18XFx1RDgzNltcXHVERTAwLVxcdURFMzZcXHVERTNCLVxcdURFNkNcXHVERTc1XFx1REU4NFxcdURFOUItXFx1REU5RlxcdURFQTEtXFx1REVBRl18XFx1RDgzOFtcXHVEQzAwLVxcdURDMDZcXHVEQzA4LVxcdURDMThcXHVEQzFCLVxcdURDMjFcXHVEQzIzXFx1REMyNFxcdURDMjYtXFx1REMyQV18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVEQ0QwLVxcdURDRDZcXHVERDAwLVxcdURENEFcXHVERDUwLVxcdURENTldfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1REI0MFtcXHVERDAwLVxcdURERUZdL1xuIiwgImNvbnN0IHVuaWNvZGUgPSByZXF1aXJlKCcuLi9saWIvdW5pY29kZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGlzU3BhY2VTZXBhcmF0b3IgKGMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyAmJiB1bmljb2RlLlNwYWNlX1NlcGFyYXRvci50ZXN0KGMpXG4gICAgfSxcblxuICAgIGlzSWRTdGFydENoYXIgKGMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyAmJiAoXG4gICAgICAgICAgICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8XG4gICAgICAgIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHxcbiAgICAgICAgKGMgPT09ICckJykgfHwgKGMgPT09ICdfJykgfHxcbiAgICAgICAgdW5pY29kZS5JRF9TdGFydC50ZXN0KGMpXG4gICAgICAgIClcbiAgICB9LFxuXG4gICAgaXNJZENvbnRpbnVlQ2hhciAoYykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIChcbiAgICAgICAgICAgIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHxcbiAgICAgICAgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fFxuICAgICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8XG4gICAgICAgIChjID09PSAnJCcpIHx8IChjID09PSAnXycpIHx8XG4gICAgICAgIChjID09PSAnXFx1MjAwQycpIHx8IChjID09PSAnXFx1MjAwRCcpIHx8XG4gICAgICAgIHVuaWNvZGUuSURfQ29udGludWUudGVzdChjKVxuICAgICAgICApXG4gICAgfSxcblxuICAgIGlzRGlnaXQgKGMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyAmJiAvWzAtOV0vLnRlc3QoYylcbiAgICB9LFxuXG4gICAgaXNIZXhEaWdpdCAoYykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIC9bMC05QS1GYS1mXS8udGVzdChjKVxuICAgIH0sXG59XG4iLCAiY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmxldCBzb3VyY2VcbmxldCBwYXJzZVN0YXRlXG5sZXQgc3RhY2tcbmxldCBwb3NcbmxldCBsaW5lXG5sZXQgY29sdW1uXG5sZXQgdG9rZW5cbmxldCBrZXlcbmxldCByb290XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2UgKHRleHQsIHJldml2ZXIpIHtcbiAgICBzb3VyY2UgPSBTdHJpbmcodGV4dClcbiAgICBwYXJzZVN0YXRlID0gJ3N0YXJ0J1xuICAgIHN0YWNrID0gW11cbiAgICBwb3MgPSAwXG4gICAgbGluZSA9IDFcbiAgICBjb2x1bW4gPSAwXG4gICAgdG9rZW4gPSB1bmRlZmluZWRcbiAgICBrZXkgPSB1bmRlZmluZWRcbiAgICByb290ID0gdW5kZWZpbmVkXG5cbiAgICBkbyB7XG4gICAgICAgIHRva2VuID0gbGV4KClcblxuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUuXG4gICAgICAgIC8vIGlmICghcGFyc2VTdGF0ZXNbcGFyc2VTdGF0ZV0pIHtcbiAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRQYXJzZVN0YXRlKClcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHBhcnNlU3RhdGVzW3BhcnNlU3RhdGVdKClcbiAgICB9IHdoaWxlICh0b2tlbi50eXBlICE9PSAnZW9mJylcblxuICAgIGlmICh0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxpemUoeycnOiByb290fSwgJycsIHJldml2ZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvb3Rcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxpemUgKGhvbGRlciwgbmFtZSwgcmV2aXZlcikge1xuICAgIGNvbnN0IHZhbHVlID0gaG9sZGVyW25hbWVdXG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcoaSlcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGludGVybmFsaXplKHZhbHVlLCBrZXksIHJldml2ZXIpXG4gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tleV1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlcGxhY2VtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBpbnRlcm5hbGl6ZSh2YWx1ZSwga2V5LCByZXZpdmVyKVxuICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrZXldXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwgbmFtZSwgdmFsdWUpXG59XG5cbmxldCBsZXhTdGF0ZVxubGV0IGJ1ZmZlclxubGV0IGRvdWJsZVF1b3RlXG5sZXQgc2lnblxubGV0IGNcblxuZnVuY3Rpb24gbGV4ICgpIHtcbiAgICBsZXhTdGF0ZSA9ICdkZWZhdWx0J1xuICAgIGJ1ZmZlciA9ICcnXG4gICAgZG91YmxlUXVvdGUgPSBmYWxzZVxuICAgIHNpZ24gPSAxXG5cbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIGMgPSBwZWVrKClcblxuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUuXG4gICAgICAgIC8vIGlmICghbGV4U3RhdGVzW2xleFN0YXRlXSkge1xuICAgICAgICAvLyAgICAgdGhyb3cgaW52YWxpZExleFN0YXRlKGxleFN0YXRlKVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBsZXhTdGF0ZXNbbGV4U3RhdGVdKClcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGVlayAoKSB7XG4gICAgaWYgKHNvdXJjZVtwb3NdKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChzb3VyY2UuY29kZVBvaW50QXQocG9zKSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWQgKCkge1xuICAgIGNvbnN0IGMgPSBwZWVrKClcblxuICAgIGlmIChjID09PSAnXFxuJykge1xuICAgICAgICBsaW5lKytcbiAgICAgICAgY29sdW1uID0gMFxuICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICBjb2x1bW4gKz0gYy5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW4rK1xuICAgIH1cblxuICAgIGlmIChjKSB7XG4gICAgICAgIHBvcyArPSBjLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBjXG59XG5cbmNvbnN0IGxleFN0YXRlcyA9IHtcbiAgICBkZWZhdWx0ICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgIGNhc2UgJ1xcdic6XG4gICAgICAgIGNhc2UgJ1xcZic6XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICBjYXNlICdcXHUwMEEwJzpcbiAgICAgICAgY2FzZSAnXFx1RkVGRic6XG4gICAgICAgIGNhc2UgJ1xcbic6XG4gICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgIGNhc2UgJ1xcdTIwMjgnOlxuICAgICAgICBjYXNlICdcXHUyMDI5JzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2NvbW1lbnQnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdlb2YnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWwuaXNTcGFjZVNlcGFyYXRvcihjKSkge1xuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgICAgLy8gaWYgKCFsZXhTdGF0ZXNbcGFyc2VTdGF0ZV0pIHtcbiAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRMZXhTdGF0ZShwYXJzZVN0YXRlKVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgcmV0dXJuIGxleFN0YXRlc1twYXJzZVN0YXRlXSgpXG4gICAgfSxcblxuICAgIGNvbW1lbnQgKCkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ211bHRpTGluZUNvbW1lbnQnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnc2luZ2xlTGluZUNvbW1lbnQnXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgbXVsdGlMaW5lQ29tbWVudCAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnbXVsdGlMaW5lQ29tbWVudEFzdGVyaXNrJ1xuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgICAgIH1cblxuICAgICAgICByZWFkKClcbiAgICB9LFxuXG4gICAgbXVsdGlMaW5lQ29tbWVudEFzdGVyaXNrICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVmYXVsdCdcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVhZCgpXG4gICAgICAgIGxleFN0YXRlID0gJ211bHRpTGluZUNvbW1lbnQnXG4gICAgfSxcblxuICAgIHNpbmdsZUxpbmVDb21tZW50ICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJ1xcbic6XG4gICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgIGNhc2UgJ1xcdTIwMjgnOlxuICAgICAgICBjYXNlICdcXHUyMDI5JzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVmYXVsdCdcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ2VvZicpXG4gICAgICAgIH1cblxuICAgICAgICByZWFkKClcbiAgICB9LFxuXG4gICAgdmFsdWUgKCkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdwdW5jdHVhdG9yJywgcmVhZCgpKVxuXG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICBsaXRlcmFsKCd1bGwnKVxuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudWxsJywgbnVsbClcblxuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGl0ZXJhbCgncnVlJylcbiAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignYm9vbGVhbicsIHRydWUpXG5cbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgICAgIGxpdGVyYWwoJ2Fsc2UnKVxuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdib29sZWFuJywgZmFsc2UpXG5cbiAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgaWYgKHJlYWQoKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgc2lnbiA9IC0xXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxleFN0YXRlID0gJ3NpZ24nXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIGJ1ZmZlciA9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbFBvaW50TGVhZGluZydcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICd6ZXJvJ1xuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICBjYXNlICczJzpcbiAgICAgICAgY2FzZSAnNCc6XG4gICAgICAgIGNhc2UgJzUnOlxuICAgICAgICBjYXNlICc2JzpcbiAgICAgICAgY2FzZSAnNyc6XG4gICAgICAgIGNhc2UgJzgnOlxuICAgICAgICBjYXNlICc5JzpcbiAgICAgICAgICAgIGJ1ZmZlciA9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEludGVnZXInXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGl0ZXJhbCgnbmZpbml0eScpXG4gICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ251bWVyaWMnLCBJbmZpbml0eSlcblxuICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGl0ZXJhbCgnYU4nKVxuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgTmFOKVxuXG4gICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgIGRvdWJsZVF1b3RlID0gKHJlYWQoKSA9PT0gJ1wiJylcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdzdHJpbmcnXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgaWRlbnRpZmllck5hbWVTdGFydEVzY2FwZSAoKSB7XG4gICAgICAgIGlmIChjICE9PSAndScpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWQoKVxuICAgICAgICBjb25zdCB1ID0gdW5pY29kZUVzY2FwZSgpXG4gICAgICAgIHN3aXRjaCAodSkge1xuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgY2FzZSAnXyc6XG4gICAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNJZFN0YXJ0Q2hhcih1KSkge1xuICAgICAgICAgICAgICAgIHRocm93IGludmFsaWRJZGVudGlmaWVyKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlciArPSB1XG4gICAgICAgIGxleFN0YXRlID0gJ2lkZW50aWZpZXJOYW1lJ1xuICAgIH0sXG5cbiAgICBpZGVudGlmaWVyTmFtZSAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgY2FzZSAnXyc6XG4gICAgICAgIGNhc2UgJ1xcdTIwMEMnOlxuICAgICAgICBjYXNlICdcXHUyMDBEJzpcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdpZGVudGlmaWVyTmFtZUVzY2FwZSdcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWwuaXNJZENvbnRpbnVlQ2hhcihjKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ2lkZW50aWZpZXInLCBidWZmZXIpXG4gICAgfSxcblxuICAgIGlkZW50aWZpZXJOYW1lRXNjYXBlICgpIHtcbiAgICAgICAgaWYgKGMgIT09ICd1Jykge1xuICAgICAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVhZCgpXG4gICAgICAgIGNvbnN0IHUgPSB1bmljb2RlRXNjYXBlKClcbiAgICAgICAgc3dpdGNoICh1KSB7XG4gICAgICAgIGNhc2UgJyQnOlxuICAgICAgICBjYXNlICdfJzpcbiAgICAgICAgY2FzZSAnXFx1MjAwQyc6XG4gICAgICAgIGNhc2UgJ1xcdTIwMEQnOlxuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzSWRDb250aW51ZUNoYXIodSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBpbnZhbGlkSWRlbnRpZmllcigpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIgKz0gdVxuICAgICAgICBsZXhTdGF0ZSA9ICdpZGVudGlmaWVyTmFtZSdcbiAgICB9LFxuXG4gICAgc2lnbiAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIGJ1ZmZlciA9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbFBvaW50TGVhZGluZydcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICd6ZXJvJ1xuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICBjYXNlICczJzpcbiAgICAgICAgY2FzZSAnNCc6XG4gICAgICAgIGNhc2UgJzUnOlxuICAgICAgICBjYXNlICc2JzpcbiAgICAgICAgY2FzZSAnNyc6XG4gICAgICAgIGNhc2UgJzgnOlxuICAgICAgICBjYXNlICc5JzpcbiAgICAgICAgICAgIGJ1ZmZlciA9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEludGVnZXInXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgbGl0ZXJhbCgnbmZpbml0eScpXG4gICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ251bWVyaWMnLCBzaWduICogSW5maW5pdHkpXG5cbiAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgICAgIGxpdGVyYWwoJ2FOJylcbiAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIE5hTilcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgemVybyAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxQb2ludCdcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudCdcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2hleGFkZWNpbWFsJ1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ251bWVyaWMnLCBzaWduICogMClcbiAgICB9LFxuXG4gICAgZGVjaW1hbEludGVnZXIgKCkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsUG9pbnQnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgY2FzZSAnRSc6XG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsRXhwb25lbnQnXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuICAgIH0sXG5cbiAgICBkZWNpbWFsUG9pbnRMZWFkaW5nICgpIHtcbiAgICAgICAgaWYgKHV0aWwuaXNEaWdpdChjKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEZyYWN0aW9uJ1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfSxcblxuICAgIGRlY2ltYWxQb2ludCAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgY2FzZSAnRSc6XG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsRXhwb25lbnQnXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxGcmFjdGlvbidcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuICAgIH0sXG5cbiAgICBkZWNpbWFsRnJhY3Rpb24gKCkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgIGNhc2UgJ0UnOlxuICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKVxuICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEV4cG9uZW50J1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbC5pc0RpZ2l0KGMpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIHNpZ24gKiBOdW1iZXIoYnVmZmVyKSlcbiAgICB9LFxuXG4gICAgZGVjaW1hbEV4cG9uZW50ICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudFNpZ24nXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudEludGVnZXInXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgZGVjaW1hbEV4cG9uZW50U2lnbiAoKSB7XG4gICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudEludGVnZXInXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgZGVjaW1hbEV4cG9uZW50SW50ZWdlciAoKSB7XG4gICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuICAgIH0sXG5cbiAgICBoZXhhZGVjaW1hbCAoKSB7XG4gICAgICAgIGlmICh1dGlsLmlzSGV4RGlnaXQoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2hleGFkZWNpbWFsSW50ZWdlcidcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuICAgIH0sXG5cbiAgICBoZXhhZGVjaW1hbEludGVnZXIgKCkge1xuICAgICAgICBpZiAodXRpbC5pc0hleERpZ2l0KGMpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIHNpZ24gKiBOdW1iZXIoYnVmZmVyKSlcbiAgICB9LFxuXG4gICAgc3RyaW5nICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgICAgcmVhZCgpXG4gICAgICAgICAgICBidWZmZXIgKz0gZXNjYXBlKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgIGlmIChkb3VibGVRdW90ZSkge1xuICAgICAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignc3RyaW5nJywgYnVmZmVyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICAgICAgaWYgKCFkb3VibGVRdW90ZSkge1xuICAgICAgICAgICAgICAgIHJlYWQoKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignc3RyaW5nJywgYnVmZmVyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICBjYXNlICdcXHInOlxuICAgICAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXG4gICAgICAgIGNhc2UgJ1xcdTIwMjgnOlxuICAgICAgICBjYXNlICdcXHUyMDI5JzpcbiAgICAgICAgICAgIHNlcGFyYXRvckNoYXIoYylcbiAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgfSxcblxuICAgIHN0YXJ0ICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJ3snOlxuICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblxuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgc2luY2UgdGhlIGRlZmF1bHQgbGV4U3RhdGUgaGFuZGxlcyBlb2YuXG4gICAgICAgIC8vIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAvLyAgICAgcmV0dXJuIG5ld1Rva2VuKCdlb2YnKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV4U3RhdGUgPSAndmFsdWUnXG4gICAgfSxcblxuICAgIGJlZm9yZVByb3BlcnR5TmFtZSAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgY2FzZSAnXyc6XG4gICAgICAgICAgICBidWZmZXIgPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2lkZW50aWZpZXJOYW1lJ1xuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2lkZW50aWZpZXJOYW1lU3RhcnRFc2NhcGUnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblxuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgICBkb3VibGVRdW90ZSA9IChyZWFkKCkgPT09ICdcIicpXG4gICAgICAgICAgICBsZXhTdGF0ZSA9ICdzdHJpbmcnXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlsLmlzSWRTdGFydENoYXIoYykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKClcbiAgICAgICAgICAgIGxleFN0YXRlID0gJ2lkZW50aWZpZXJOYW1lJ1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfSxcblxuICAgIGFmdGVyUHJvcGVydHlOYW1lICgpIHtcbiAgICAgICAgaWYgKGMgPT09ICc6Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdwdW5jdHVhdG9yJywgcmVhZCgpKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuICAgIH0sXG5cbiAgICBiZWZvcmVQcm9wZXJ0eVZhbHVlICgpIHtcbiAgICAgICAgbGV4U3RhdGUgPSAndmFsdWUnXG4gICAgfSxcblxuICAgIGFmdGVyUHJvcGVydHlWYWx1ZSAoKSB7XG4gICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ3B1bmN0dWF0b3InLCByZWFkKCkpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfSxcblxuICAgIGJlZm9yZUFycmF5VmFsdWUgKCkge1xuICAgICAgICBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ3B1bmN0dWF0b3InLCByZWFkKCkpXG4gICAgICAgIH1cblxuICAgICAgICBsZXhTdGF0ZSA9ICd2YWx1ZSdcbiAgICB9LFxuXG4gICAgYWZ0ZXJBcnJheVZhbHVlICgpIHtcbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJywnOlxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9LFxuXG4gICAgZW5kICgpIHtcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgZGVmYXVsdCBsZXhTdGF0ZS5cbiAgICAgICAgLy8gaWYgKGMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgcmVhZCgpXG4gICAgICAgIC8vICAgICByZXR1cm4gbmV3VG9rZW4oJ2VvZicpXG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfSxcbn1cblxuZnVuY3Rpb24gbmV3VG9rZW4gKHR5cGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtbixcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxpdGVyYWwgKHMpIHtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygcykge1xuICAgICAgICBjb25zdCBwID0gcGVlaygpXG5cbiAgICAgICAgaWYgKHAgIT09IGMpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWQoKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZXNjYXBlICgpIHtcbiAgICBjb25zdCBjID0gcGVlaygpXG4gICAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAnYic6XG4gICAgICAgIHJlYWQoKVxuICAgICAgICByZXR1cm4gJ1xcYidcblxuICAgIGNhc2UgJ2YnOlxuICAgICAgICByZWFkKClcbiAgICAgICAgcmV0dXJuICdcXGYnXG5cbiAgICBjYXNlICduJzpcbiAgICAgICAgcmVhZCgpXG4gICAgICAgIHJldHVybiAnXFxuJ1xuXG4gICAgY2FzZSAncic6XG4gICAgICAgIHJlYWQoKVxuICAgICAgICByZXR1cm4gJ1xccidcblxuICAgIGNhc2UgJ3QnOlxuICAgICAgICByZWFkKClcbiAgICAgICAgcmV0dXJuICdcXHQnXG5cbiAgICBjYXNlICd2JzpcbiAgICAgICAgcmVhZCgpXG4gICAgICAgIHJldHVybiAnXFx2J1xuXG4gICAgY2FzZSAnMCc6XG4gICAgICAgIHJlYWQoKVxuICAgICAgICBpZiAodXRpbC5pc0RpZ2l0KHBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnXFwwJ1xuXG4gICAgY2FzZSAneCc6XG4gICAgICAgIHJlYWQoKVxuICAgICAgICByZXR1cm4gaGV4RXNjYXBlKClcblxuICAgIGNhc2UgJ3UnOlxuICAgICAgICByZWFkKClcbiAgICAgICAgcmV0dXJuIHVuaWNvZGVFc2NhcGUoKVxuXG4gICAgY2FzZSAnXFxuJzpcbiAgICBjYXNlICdcXHUyMDI4JzpcbiAgICBjYXNlICdcXHUyMDI5JzpcbiAgICAgICAgcmVhZCgpXG4gICAgICAgIHJldHVybiAnJ1xuXG4gICAgY2FzZSAnXFxyJzpcbiAgICAgICAgcmVhZCgpXG4gICAgICAgIGlmIChwZWVrKCkgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICByZWFkKClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJ1xuXG4gICAgY2FzZSAnMSc6XG4gICAgY2FzZSAnMic6XG4gICAgY2FzZSAnMyc6XG4gICAgY2FzZSAnNCc6XG4gICAgY2FzZSAnNSc6XG4gICAgY2FzZSAnNic6XG4gICAgY2FzZSAnNyc6XG4gICAgY2FzZSAnOCc6XG4gICAgY2FzZSAnOSc6XG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblxuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlYWQoKVxufVxuXG5mdW5jdGlvbiBoZXhFc2NhcGUgKCkge1xuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGxldCBjID0gcGVlaygpXG5cbiAgICBpZiAoIXV0aWwuaXNIZXhEaWdpdChjKSkge1xuICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IHJlYWQoKVxuXG4gICAgYyA9IHBlZWsoKVxuICAgIGlmICghdXRpbC5pc0hleERpZ2l0KGMpKSB7XG4gICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gcmVhZCgpXG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoYnVmZmVyLCAxNikpXG59XG5cbmZ1bmN0aW9uIHVuaWNvZGVFc2NhcGUgKCkge1xuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGxldCBjb3VudCA9IDRcblxuICAgIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgICAgICBjb25zdCBjID0gcGVlaygpXG4gICAgICAgIGlmICghdXRpbC5pc0hleERpZ2l0KGMpKSB7XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIgKz0gcmVhZCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGJ1ZmZlciwgMTYpKVxufVxuXG5jb25zdCBwYXJzZVN0YXRlcyA9IHtcbiAgICBzdGFydCAoKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSAnZW9mJykge1xuICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKClcbiAgICB9LFxuXG4gICAgYmVmb3JlUHJvcGVydHlOYW1lICgpIHtcbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAga2V5ID0gdG9rZW4udmFsdWVcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJQcm9wZXJ0eU5hbWUnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICdwdW5jdHVhdG9yJzpcbiAgICAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSBpdCdzIGhhbmRsZWQgYnkgdGhlIGxleFN0YXRlLlxuICAgICAgICAgICAgLy8gaWYgKHRva2VuLnZhbHVlICE9PSAnfScpIHtcbiAgICAgICAgICAgIC8vICAgICB0aHJvdyBpbnZhbGlkVG9rZW4oKVxuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICBwb3AoKVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnZW9mJzpcbiAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG4gICAgICAgIC8vIHRocm93IGludmFsaWRUb2tlbigpXG4gICAgfSxcblxuICAgIGFmdGVyUHJvcGVydHlOYW1lICgpIHtcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG4gICAgICAgIC8vIGlmICh0b2tlbi50eXBlICE9PSAncHVuY3R1YXRvcicgfHwgdG9rZW4udmFsdWUgIT09ICc6Jykge1xuICAgICAgICAvLyAgICAgdGhyb3cgaW52YWxpZFRva2VuKClcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSAnZW9mJykge1xuICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZVN0YXRlID0gJ2JlZm9yZVByb3BlcnR5VmFsdWUnXG4gICAgfSxcblxuICAgIGJlZm9yZVByb3BlcnR5VmFsdWUgKCkge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuICAgICAgICB9XG5cbiAgICAgICAgcHVzaCgpXG4gICAgfSxcblxuICAgIGJlZm9yZUFycmF5VmFsdWUgKCkge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdwdW5jdHVhdG9yJyAmJiB0b2tlbi52YWx1ZSA9PT0gJ10nKSB7XG4gICAgICAgICAgICBwb3AoKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKClcbiAgICB9LFxuXG4gICAgYWZ0ZXJQcm9wZXJ0eVZhbHVlICgpIHtcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG4gICAgICAgIC8vIGlmICh0b2tlbi50eXBlICE9PSAncHVuY3R1YXRvcicpIHtcbiAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRUb2tlbigpXG4gICAgICAgIC8vIH1cblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlUHJvcGVydHlOYW1lJ1xuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICBwb3AoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG4gICAgICAgIC8vIHRocm93IGludmFsaWRUb2tlbigpXG4gICAgfSxcblxuICAgIGFmdGVyQXJyYXlWYWx1ZSAoKSB7XG4gICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSBpdCdzIGhhbmRsZWQgYnkgdGhlIGxleFN0YXRlLlxuICAgICAgICAvLyBpZiAodG9rZW4udHlwZSAhPT0gJ3B1bmN0dWF0b3InKSB7XG4gICAgICAgIC8vICAgICB0aHJvdyBpbnZhbGlkVG9rZW4oKVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdlb2YnKSB7XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkRU9GKClcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2JlZm9yZUFycmF5VmFsdWUnXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgIHBvcCgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgc2luY2UgaXQncyBoYW5kbGVkIGJ5IHRoZSBsZXhTdGF0ZS5cbiAgICAgICAgLy8gdGhyb3cgaW52YWxpZFRva2VuKClcbiAgICB9LFxuXG4gICAgZW5kICgpIHtcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG4gICAgICAgIC8vIGlmICh0b2tlbi50eXBlICE9PSAnZW9mJykge1xuICAgICAgICAvLyAgICAgdGhyb3cgaW52YWxpZFRva2VuKClcbiAgICAgICAgLy8gfVxuICAgIH0sXG59XG5cbmZ1bmN0aW9uIHB1c2ggKCkge1xuICAgIGxldCB2YWx1ZVxuXG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgY2FzZSAncHVuY3R1YXRvcic6XG4gICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICB2YWx1ZSA9IHt9XG4gICAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgdmFsdWUgPSBbXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdudWxsJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1lcmljJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlXG4gICAgICAgIGJyZWFrXG5cbiAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUuXG4gICAgLy8gZGVmYXVsdDpcbiAgICAvLyAgICAgdGhyb3cgaW52YWxpZFRva2VuKClcbiAgICB9XG5cbiAgICBpZiAocm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvb3QgPSB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgICAgICAgIHBhcmVudC5wdXNoKHZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSlcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlQXJyYXlWYWx1ZSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlUHJvcGVydHlOYW1lJ1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnZW5kJ1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJBcnJheVZhbHVlJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VTdGF0ZSA9ICdhZnRlclByb3BlcnR5VmFsdWUnXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvcCAoKSB7XG4gICAgc3RhY2sucG9wKClcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXVxuICAgIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICAgICAgcGFyc2VTdGF0ZSA9ICdlbmQnXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJBcnJheVZhbHVlJ1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJQcm9wZXJ0eVZhbHVlJ1xuICAgIH1cbn1cblxuLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuLy8gZnVuY3Rpb24gaW52YWxpZFBhcnNlU3RhdGUgKCkge1xuLy8gICAgIHJldHVybiBuZXcgRXJyb3IoYEpTT041OiBpbnZhbGlkIHBhcnNlIHN0YXRlICcke3BhcnNlU3RhdGV9J2ApXG4vLyB9XG5cbi8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZS5cbi8vIGZ1bmN0aW9uIGludmFsaWRMZXhTdGF0ZSAoc3RhdGUpIHtcbi8vICAgICByZXR1cm4gbmV3IEVycm9yKGBKU09ONTogaW52YWxpZCBsZXggc3RhdGUgJyR7c3RhdGV9J2ApXG4vLyB9XG5cbmZ1bmN0aW9uIGludmFsaWRDaGFyIChjKSB7XG4gICAgaWYgKGMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc3ludGF4RXJyb3IoYEpTT041OiBpbnZhbGlkIGVuZCBvZiBpbnB1dCBhdCAke2xpbmV9OiR7Y29sdW1ufWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHN5bnRheEVycm9yKGBKU09ONTogaW52YWxpZCBjaGFyYWN0ZXIgJyR7Zm9ybWF0Q2hhcihjKX0nIGF0ICR7bGluZX06JHtjb2x1bW59YClcbn1cblxuZnVuY3Rpb24gaW52YWxpZEVPRiAoKSB7XG4gICAgcmV0dXJuIHN5bnRheEVycm9yKGBKU09ONTogaW52YWxpZCBlbmQgb2YgaW5wdXQgYXQgJHtsaW5lfToke2NvbHVtbn1gKVxufVxuXG4vLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUuXG4vLyBmdW5jdGlvbiBpbnZhbGlkVG9rZW4gKCkge1xuLy8gICAgIGlmICh0b2tlbi50eXBlID09PSAnZW9mJykge1xuLy8gICAgICAgICByZXR1cm4gc3ludGF4RXJyb3IoYEpTT041OiBpbnZhbGlkIGVuZCBvZiBpbnB1dCBhdCAke2xpbmV9OiR7Y29sdW1ufWApXG4vLyAgICAgfVxuXG4vLyAgICAgY29uc3QgYyA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRva2VuLnZhbHVlLmNvZGVQb2ludEF0KDApKVxuLy8gICAgIHJldHVybiBzeW50YXhFcnJvcihgSlNPTjU6IGludmFsaWQgY2hhcmFjdGVyICcke2Zvcm1hdENoYXIoYyl9JyBhdCAke2xpbmV9OiR7Y29sdW1ufWApXG4vLyB9XG5cbmZ1bmN0aW9uIGludmFsaWRJZGVudGlmaWVyICgpIHtcbiAgICBjb2x1bW4gLT0gNVxuICAgIHJldHVybiBzeW50YXhFcnJvcihgSlNPTjU6IGludmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXIgYXQgJHtsaW5lfToke2NvbHVtbn1gKVxufVxuXG5mdW5jdGlvbiBzZXBhcmF0b3JDaGFyIChjKSB7XG4gICAgY29uc29sZS53YXJuKGBKU09ONTogJyR7Zm9ybWF0Q2hhcihjKX0nIGluIHN0cmluZ3MgaXMgbm90IHZhbGlkIEVDTUFTY3JpcHQ7IGNvbnNpZGVyIGVzY2FwaW5nYClcbn1cblxuZnVuY3Rpb24gZm9ybWF0Q2hhciAoYykge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50cyA9IHtcbiAgICAgICAgXCInXCI6IFwiXFxcXCdcIixcbiAgICAgICAgJ1wiJzogJ1xcXFxcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJyxcbiAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAnXFx2JzogJ1xcXFx2JyxcbiAgICAgICAgJ1xcMCc6ICdcXFxcMCcsXG4gICAgICAgICdcXHUyMDI4JzogJ1xcXFx1MjAyOCcsXG4gICAgICAgICdcXHUyMDI5JzogJ1xcXFx1MjAyOScsXG4gICAgfVxuXG4gICAgaWYgKHJlcGxhY2VtZW50c1tjXSkge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2NdXG4gICAgfVxuXG4gICAgaWYgKGMgPCAnICcpIHtcbiAgICAgICAgY29uc3QgaGV4U3RyaW5nID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KVxuICAgICAgICByZXR1cm4gJ1xcXFx4JyArICgnMDAnICsgaGV4U3RyaW5nKS5zdWJzdHJpbmcoaGV4U3RyaW5nLmxlbmd0aClcbiAgICB9XG5cbiAgICByZXR1cm4gY1xufVxuXG5mdW5jdGlvbiBzeW50YXhFcnJvciAobWVzc2FnZSkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKVxuICAgIGVyci5saW5lTnVtYmVyID0gbGluZVxuICAgIGVyci5jb2x1bW5OdW1iZXIgPSBjb2x1bW5cbiAgICByZXR1cm4gZXJyXG59XG4iLCAiY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbXVxuICAgIGxldCBpbmRlbnQgPSAnJ1xuICAgIGxldCBwcm9wZXJ0eUxpc3RcbiAgICBsZXQgcmVwbGFjZXJGdW5jXG4gICAgbGV0IGdhcCA9ICcnXG4gICAgbGV0IHF1b3RlXG5cbiAgICBpZiAoXG4gICAgICAgIHJlcGxhY2VyICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShyZXBsYWNlcilcbiAgICApIHtcbiAgICAgICAgc3BhY2UgPSByZXBsYWNlci5zcGFjZVxuICAgICAgICBxdW90ZSA9IHJlcGxhY2VyLnF1b3RlXG4gICAgICAgIHJlcGxhY2VyID0gcmVwbGFjZXIucmVwbGFjZXJcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlcGxhY2VyRnVuYyA9IHJlcGxhY2VyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VyKSkge1xuICAgICAgICBwcm9wZXJ0eUxpc3QgPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgcmVwbGFjZXIpIHtcbiAgICAgICAgICAgIGxldCBpdGVtXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gdlxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB2IGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgdiBpbnN0YW5jZW9mIE51bWJlclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IFN0cmluZyh2KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5TGlzdC5pbmRleE9mKGl0ZW0pIDwgMCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdC5wdXNoKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3BhY2UgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgc3BhY2UgPSBOdW1iZXIoc3BhY2UpXG4gICAgfSBlbHNlIGlmIChzcGFjZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBzcGFjZSA9IFN0cmluZyhzcGFjZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoc3BhY2UgPiAwKSB7XG4gICAgICAgICAgICBzcGFjZSA9IE1hdGgubWluKDEwLCBNYXRoLmZsb29yKHNwYWNlKSlcbiAgICAgICAgICAgIGdhcCA9ICcgICAgICAgICAgJy5zdWJzdHIoMCwgc3BhY2UpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZ2FwID0gc3BhY2Uuc3Vic3RyKDAsIDEwKVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVQcm9wZXJ0eSgnJywgeycnOiB2YWx1ZX0pXG5cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVQcm9wZXJ0eSAoa2V5LCBob2xkZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gaG9sZGVyW2tleV1cbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudG9KU09ONSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09ONShrZXkpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVwbGFjZXJGdW5jKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcGxhY2VyRnVuYy5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSBudWxsOiByZXR1cm4gJ251bGwnXG4gICAgICAgIGNhc2UgdHJ1ZTogcmV0dXJuICd0cnVlJ1xuICAgICAgICBjYXNlIGZhbHNlOiByZXR1cm4gJ2ZhbHNlJ1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBxdW90ZVN0cmluZyh2YWx1ZSwgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBzZXJpYWxpemVBcnJheSh2YWx1ZSkgOiBzZXJpYWxpemVPYmplY3QodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVvdGVTdHJpbmcgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHF1b3RlcyA9IHtcbiAgICAgICAgICAgIFwiJ1wiOiAwLjEsXG4gICAgICAgICAgICAnXCInOiAwLjIsXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBsYWNlbWVudHMgPSB7XG4gICAgICAgICAgICBcIidcIjogXCJcXFxcJ1wiLFxuICAgICAgICAgICAgJ1wiJzogJ1xcXFxcIicsXG4gICAgICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCcsXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcdic6ICdcXFxcdicsXG4gICAgICAgICAgICAnXFwwJzogJ1xcXFwwJyxcbiAgICAgICAgICAgICdcXHUyMDI4JzogJ1xcXFx1MjAyOCcsXG4gICAgICAgICAgICAnXFx1MjAyOSc6ICdcXFxcdTIwMjknLFxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y3QgPSAnJ1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB2YWx1ZVtpXVxuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICAgICAgY2FzZSAnXCInOlxuICAgICAgICAgICAgICAgIHF1b3Rlc1tjXSsrXG4gICAgICAgICAgICAgICAgcHJvZHVjdCArPSBjXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgY2FzZSAnXFwwJzpcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0RpZ2l0KHZhbHVlW2kgKyAxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCArPSAnXFxcXHgwMCdcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudHNbY10pIHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0ICs9IHJlcGxhY2VtZW50c1tjXVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgJyAnKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhleFN0cmluZyA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICBwcm9kdWN0ICs9ICdcXFxceCcgKyAoJzAwJyArIGhleFN0cmluZykuc3Vic3RyaW5nKGhleFN0cmluZy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjdCArPSBjXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdW90ZUNoYXIgPSBxdW90ZSB8fCBPYmplY3Qua2V5cyhxdW90ZXMpLnJlZHVjZSgoYSwgYikgPT4gKHF1b3Rlc1thXSA8IHF1b3Rlc1tiXSkgPyBhIDogYilcblxuICAgICAgICBwcm9kdWN0ID0gcHJvZHVjdC5yZXBsYWNlKG5ldyBSZWdFeHAocXVvdGVDaGFyLCAnZycpLCByZXBsYWNlbWVudHNbcXVvdGVDaGFyXSlcblxuICAgICAgICByZXR1cm4gcXVvdGVDaGFyICsgcHJvZHVjdCArIHF1b3RlQ2hhclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZU9iamVjdCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpID49IDApIHtcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTjUnKVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSlcblxuICAgICAgICBsZXQgc3RlcGJhY2sgPSBpbmRlbnRcbiAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgZ2FwXG5cbiAgICAgICAgbGV0IGtleXMgPSBwcm9wZXJ0eUxpc3QgfHwgT2JqZWN0LmtleXModmFsdWUpXG4gICAgICAgIGxldCBwYXJ0aWFsID0gW11cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSBzZXJpYWxpemVQcm9wZXJ0eShrZXksIHZhbHVlKVxuICAgICAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVtYmVyID0gc2VyaWFsaXplS2V5KGtleSkgKyAnOidcbiAgICAgICAgICAgICAgICBpZiAoZ2FwICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBtZW1iZXIgKz0gJyAnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1lbWJlciArPSBwcm9wZXJ0eVN0cmluZ1xuICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChtZW1iZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYWxcbiAgICAgICAgaWYgKHBhcnRpYWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmaW5hbCA9ICd7fSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAoZ2FwID09PSAnJykge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwYXJ0aWFsLmpvaW4oJywnKVxuICAgICAgICAgICAgICAgIGZpbmFsID0gJ3snICsgcHJvcGVydGllcyArICd9J1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VwYXJhdG9yID0gJyxcXG4nICsgaW5kZW50XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHBhcnRpYWwuam9pbihzZXBhcmF0b3IpXG4gICAgICAgICAgICAgICAgZmluYWwgPSAne1xcbicgKyBpbmRlbnQgKyBwcm9wZXJ0aWVzICsgJyxcXG4nICsgc3RlcGJhY2sgKyAnfSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YWNrLnBvcCgpXG4gICAgICAgIGluZGVudCA9IHN0ZXBiYWNrXG4gICAgICAgIHJldHVybiBmaW5hbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZUtleSAoa2V5KSB7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVvdGVTdHJpbmcoa2V5LCB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RDaGFyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoa2V5LmNvZGVQb2ludEF0KDApKVxuICAgICAgICBpZiAoIXV0aWwuaXNJZFN0YXJ0Q2hhcihmaXJzdENoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVvdGVTdHJpbmcoa2V5LCB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGZpcnN0Q2hhci5sZW5ndGg7IGkgPCBrZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0lkQ29udGludWVDaGFyKFN0cmluZy5mcm9tQ29kZVBvaW50KGtleS5jb2RlUG9pbnRBdChpKSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlU3RyaW5nKGtleSwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVBcnJheSAodmFsdWUpIHtcbiAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpID49IDApIHtcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTjUnKVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSlcblxuICAgICAgICBsZXQgc3RlcGJhY2sgPSBpbmRlbnRcbiAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgZ2FwXG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSBbXVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHNlcmlhbGl6ZVByb3BlcnR5KFN0cmluZyhpKSwgdmFsdWUpXG4gICAgICAgICAgICBwYXJ0aWFsLnB1c2goKHByb3BlcnR5U3RyaW5nICE9PSB1bmRlZmluZWQpID8gcHJvcGVydHlTdHJpbmcgOiAnbnVsbCcpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYWxcbiAgICAgICAgaWYgKHBhcnRpYWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmaW5hbCA9ICdbXSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChnYXAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBwYXJ0aWFsLmpvaW4oJywnKVxuICAgICAgICAgICAgICAgIGZpbmFsID0gJ1snICsgcHJvcGVydGllcyArICddJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VwYXJhdG9yID0gJyxcXG4nICsgaW5kZW50XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBwYXJ0aWFsLmpvaW4oc2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgIGZpbmFsID0gJ1tcXG4nICsgaW5kZW50ICsgcHJvcGVydGllcyArICcsXFxuJyArIHN0ZXBiYWNrICsgJ10nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wb3AoKVxuICAgICAgICBpbmRlbnQgPSBzdGVwYmFja1xuICAgICAgICByZXR1cm4gZmluYWxcbiAgICB9XG59XG4iLCAiY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5JylcblxuY29uc3QgSlNPTjUgPSB7XG4gICAgcGFyc2UsXG4gICAgc3RyaW5naWZ5LFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEpTT041XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwgInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCAidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsICJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsICJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsICJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCAidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmlzSW50ZWdlciA9IG51bSA9PiB7XG4gIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG51bSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBudW0gPT09ICdzdHJpbmcnICYmIG51bS50cmltKCkgIT09ICcnKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKG51bSkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRmluZCBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGVcbiAqL1xuXG5leHBvcnRzLmZpbmQgPSAobm9kZSwgdHlwZSkgPT4gbm9kZS5ub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS50eXBlID09PSB0eXBlKTtcblxuLyoqXG4gKiBGaW5kIGEgbm9kZSBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5cbmV4cG9ydHMuZXhjZWVkc0xpbWl0ID0gKG1pbiwgbWF4LCBzdGVwID0gMSwgbGltaXQpID0+IHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWV4cG9ydHMuaXNJbnRlZ2VyKG1pbikgfHwgIWV4cG9ydHMuaXNJbnRlZ2VyKG1heCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICgoTnVtYmVyKG1heCkgLSBOdW1iZXIobWluKSkgLyBOdW1iZXIoc3RlcCkpID49IGxpbWl0O1xufTtcblxuLyoqXG4gKiBFc2NhcGUgdGhlIGdpdmVuIG5vZGUgd2l0aCAnXFxcXCcgYmVmb3JlIG5vZGUudmFsdWVcbiAqL1xuXG5leHBvcnRzLmVzY2FwZU5vZGUgPSAoYmxvY2ssIG4gPSAwLCB0eXBlKSA9PiB7XG4gIGNvbnN0IG5vZGUgPSBibG9jay5ub2Rlc1tuXTtcbiAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgaWYgKCh0eXBlICYmIG5vZGUudHlwZSA9PT0gdHlwZSkgfHwgbm9kZS50eXBlID09PSAnb3BlbicgfHwgbm9kZS50eXBlID09PSAnY2xvc2UnKSB7XG4gICAgaWYgKG5vZGUuZXNjYXBlZCAhPT0gdHJ1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9ICdcXFxcJyArIG5vZGUudmFsdWU7XG4gICAgICBub2RlLmVzY2FwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJyYWNlIG5vZGUgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGxpdGVyYWwgYnJhY2VzXG4gKi9cblxuZXhwb3J0cy5lbmNsb3NlQnJhY2UgPSBub2RlID0+IHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ2JyYWNlJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoKG5vZGUuY29tbWFzID4+IDAgKyBub2RlLnJhbmdlcyA+PiAwKSA9PT0gMCkge1xuICAgIG5vZGUuaW52YWxpZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBicmFjZSBub2RlIGlzIGludmFsaWQuXG4gKi9cblxuZXhwb3J0cy5pc0ludmFsaWRCcmFjZSA9IGJsb2NrID0+IHtcbiAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJsb2NrLmludmFsaWQgPT09IHRydWUgfHwgYmxvY2suZG9sbGFyKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKChibG9jay5jb21tYXMgPj4gMCArIGJsb2NrLnJhbmdlcyA+PiAwKSA9PT0gMCkge1xuICAgIGJsb2NrLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChibG9jay5vcGVuICE9PSB0cnVlIHx8IGJsb2NrLmNsb3NlICE9PSB0cnVlKSB7XG4gICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBub2RlIGlzIGFuIG9wZW4gb3IgY2xvc2Ugbm9kZVxuICovXG5cbmV4cG9ydHMuaXNPcGVuT3JDbG9zZSA9IG5vZGUgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAnb3BlbicgfHwgbm9kZS50eXBlID09PSAnY2xvc2UnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG5vZGUub3BlbiA9PT0gdHJ1ZSB8fCBub2RlLmNsb3NlID09PSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWR1Y2UgYW4gYXJyYXkgb2YgdGV4dCBub2Rlcy5cbiAqL1xuXG5leHBvcnRzLnJlZHVjZSA9IG5vZGVzID0+IG5vZGVzLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0JykgYWNjLnB1c2gobm9kZS52YWx1ZSk7XG4gIGlmIChub2RlLnR5cGUgPT09ICdyYW5nZScpIG5vZGUudHlwZSA9ICd0ZXh0JztcbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuLyoqXG4gKiBGbGF0dGVuIGFuIGFycmF5XG4gKi9cblxuZXhwb3J0cy5mbGF0dGVuID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgY29uc3QgZmxhdCA9IGFyciA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZSA9IGFycltpXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlKSkge1xuICAgICAgICBmbGF0KGVsZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBmbGF0KGFyZ3MpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChhc3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBzdHJpbmdpZnkgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBjb25zdCBpbnZhbGlkQmxvY2sgPSBvcHRpb25zLmVzY2FwZUludmFsaWQgJiYgdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBjb25zdCBpbnZhbGlkTm9kZSA9IG5vZGUuaW52YWxpZCA9PT0gdHJ1ZSAmJiBvcHRpb25zLmVzY2FwZUludmFsaWQgPT09IHRydWU7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgIGlmICgoaW52YWxpZEJsb2NrIHx8IGludmFsaWROb2RlKSAmJiB1dGlscy5pc09wZW5PckNsb3NlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiAnXFxcXCcgKyBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUubm9kZXMpIHtcbiAgICAgICAgb3V0cHV0ICs9IHN0cmluZ2lmeShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHN0cmluZ2lmeShhc3QpO1xufTtcblxuIiwgIi8qIVxuICogaXMtbnVtYmVyIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1udW1iZXI+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihudW0pIHtcbiAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG51bSAtIG51bSA9PT0gMDtcbiAgfVxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3N0cmluZycgJiYgbnVtLnRyaW0oKSAhPT0gJycpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlID8gTnVtYmVyLmlzRmluaXRlKCtudW0pIDogaXNGaW5pdGUoK251bSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIvKiFcbiAqIHRvLXJlZ2V4LXJhbmdlIDxodHRwczovL2dpdGh1Yi5jb20vbWljcm9tYXRjaC90by1yZWdleC1yYW5nZT5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc051bWJlciA9IHJlcXVpcmUoJ2lzLW51bWJlcicpO1xuXG5jb25zdCB0b1JlZ2V4UmFuZ2UgPSAobWluLCBtYXgsIG9wdGlvbnMpID0+IHtcbiAgaWYgKGlzTnVtYmVyKG1pbikgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9SZWdleFJhbmdlOiBleHBlY3RlZCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIGlmIChtYXggPT09IHZvaWQgMCB8fCBtaW4gPT09IG1heCkge1xuICAgIHJldHVybiBTdHJpbmcobWluKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihtYXgpID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RvUmVnZXhSYW5nZTogZXhwZWN0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIG51bWJlci4nKTtcbiAgfVxuXG4gIGxldCBvcHRzID0geyByZWxheFplcm9zOiB0cnVlLCAuLi5vcHRpb25zIH07XG4gIGlmICh0eXBlb2Ygb3B0cy5zdHJpY3RaZXJvcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0cy5yZWxheFplcm9zID0gb3B0cy5zdHJpY3RaZXJvcyA9PT0gZmFsc2U7XG4gIH1cblxuICBsZXQgcmVsYXggPSBTdHJpbmcob3B0cy5yZWxheFplcm9zKTtcbiAgbGV0IHNob3J0aGFuZCA9IFN0cmluZyhvcHRzLnNob3J0aGFuZCk7XG4gIGxldCBjYXB0dXJlID0gU3RyaW5nKG9wdHMuY2FwdHVyZSk7XG4gIGxldCB3cmFwID0gU3RyaW5nKG9wdHMud3JhcCk7XG4gIGxldCBjYWNoZUtleSA9IG1pbiArICc6JyArIG1heCArICc9JyArIHJlbGF4ICsgc2hvcnRoYW5kICsgY2FwdHVyZSArIHdyYXA7XG5cbiAgaWYgKHRvUmVnZXhSYW5nZS5jYWNoZS5oYXNPd25Qcm9wZXJ0eShjYWNoZUtleSkpIHtcbiAgICByZXR1cm4gdG9SZWdleFJhbmdlLmNhY2hlW2NhY2hlS2V5XS5yZXN1bHQ7XG4gIH1cblxuICBsZXQgYSA9IE1hdGgubWluKG1pbiwgbWF4KTtcbiAgbGV0IGIgPSBNYXRoLm1heChtaW4sIG1heCk7XG5cbiAgaWYgKE1hdGguYWJzKGEgLSBiKSA9PT0gMSkge1xuICAgIGxldCByZXN1bHQgPSBtaW4gKyAnfCcgKyBtYXg7XG4gICAgaWYgKG9wdHMuY2FwdHVyZSkge1xuICAgICAgcmV0dXJuIGAoJHtyZXN1bHR9KWA7XG4gICAgfVxuICAgIGlmIChvcHRzLndyYXAgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gYCg/OiR7cmVzdWx0fSlgO1xuICB9XG5cbiAgbGV0IGlzUGFkZGVkID0gaGFzUGFkZGluZyhtaW4pIHx8IGhhc1BhZGRpbmcobWF4KTtcbiAgbGV0IHN0YXRlID0geyBtaW4sIG1heCwgYSwgYiB9O1xuICBsZXQgcG9zaXRpdmVzID0gW107XG4gIGxldCBuZWdhdGl2ZXMgPSBbXTtcblxuICBpZiAoaXNQYWRkZWQpIHtcbiAgICBzdGF0ZS5pc1BhZGRlZCA9IGlzUGFkZGVkO1xuICAgIHN0YXRlLm1heExlbiA9IFN0cmluZyhzdGF0ZS5tYXgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChhIDwgMCkge1xuICAgIGxldCBuZXdNaW4gPSBiIDwgMCA/IE1hdGguYWJzKGIpIDogMTtcbiAgICBuZWdhdGl2ZXMgPSBzcGxpdFRvUGF0dGVybnMobmV3TWluLCBNYXRoLmFicyhhKSwgc3RhdGUsIG9wdHMpO1xuICAgIGEgPSBzdGF0ZS5hID0gMDtcbiAgfVxuXG4gIGlmIChiID49IDApIHtcbiAgICBwb3NpdGl2ZXMgPSBzcGxpdFRvUGF0dGVybnMoYSwgYiwgc3RhdGUsIG9wdHMpO1xuICB9XG5cbiAgc3RhdGUubmVnYXRpdmVzID0gbmVnYXRpdmVzO1xuICBzdGF0ZS5wb3NpdGl2ZXMgPSBwb3NpdGl2ZXM7XG4gIHN0YXRlLnJlc3VsdCA9IGNvbGxhdGVQYXR0ZXJucyhuZWdhdGl2ZXMsIHBvc2l0aXZlcywgb3B0cyk7XG5cbiAgaWYgKG9wdHMuY2FwdHVyZSA9PT0gdHJ1ZSkge1xuICAgIHN0YXRlLnJlc3VsdCA9IGAoJHtzdGF0ZS5yZXN1bHR9KWA7XG4gIH0gZWxzZSBpZiAob3B0cy53cmFwICE9PSBmYWxzZSAmJiAocG9zaXRpdmVzLmxlbmd0aCArIG5lZ2F0aXZlcy5sZW5ndGgpID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCA9IGAoPzoke3N0YXRlLnJlc3VsdH0pYDtcbiAgfVxuXG4gIHRvUmVnZXhSYW5nZS5jYWNoZVtjYWNoZUtleV0gPSBzdGF0ZTtcbiAgcmV0dXJuIHN0YXRlLnJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGNvbGxhdGVQYXR0ZXJucyhuZWcsIHBvcywgb3B0aW9ucykge1xuICBsZXQgb25seU5lZ2F0aXZlID0gZmlsdGVyUGF0dGVybnMobmVnLCBwb3MsICctJywgZmFsc2UsIG9wdGlvbnMpIHx8IFtdO1xuICBsZXQgb25seVBvc2l0aXZlID0gZmlsdGVyUGF0dGVybnMocG9zLCBuZWcsICcnLCBmYWxzZSwgb3B0aW9ucykgfHwgW107XG4gIGxldCBpbnRlcnNlY3RlZCA9IGZpbHRlclBhdHRlcm5zKG5lZywgcG9zLCAnLT8nLCB0cnVlLCBvcHRpb25zKSB8fCBbXTtcbiAgbGV0IHN1YnBhdHRlcm5zID0gb25seU5lZ2F0aXZlLmNvbmNhdChpbnRlcnNlY3RlZCkuY29uY2F0KG9ubHlQb3NpdGl2ZSk7XG4gIHJldHVybiBzdWJwYXR0ZXJucy5qb2luKCd8Jyk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0VG9SYW5nZXMobWluLCBtYXgpIHtcbiAgbGV0IG5pbmVzID0gMTtcbiAgbGV0IHplcm9zID0gMTtcblxuICBsZXQgc3RvcCA9IGNvdW50TmluZXMobWluLCBuaW5lcyk7XG4gIGxldCBzdG9wcyA9IG5ldyBTZXQoW21heF0pO1xuXG4gIHdoaWxlIChtaW4gPD0gc3RvcCAmJiBzdG9wIDw9IG1heCkge1xuICAgIHN0b3BzLmFkZChzdG9wKTtcbiAgICBuaW5lcyArPSAxO1xuICAgIHN0b3AgPSBjb3VudE5pbmVzKG1pbiwgbmluZXMpO1xuICB9XG5cbiAgc3RvcCA9IGNvdW50WmVyb3MobWF4ICsgMSwgemVyb3MpIC0gMTtcblxuICB3aGlsZSAobWluIDwgc3RvcCAmJiBzdG9wIDw9IG1heCkge1xuICAgIHN0b3BzLmFkZChzdG9wKTtcbiAgICB6ZXJvcyArPSAxO1xuICAgIHN0b3AgPSBjb3VudFplcm9zKG1heCArIDEsIHplcm9zKSAtIDE7XG4gIH1cblxuICBzdG9wcyA9IFsuLi5zdG9wc107XG4gIHN0b3BzLnNvcnQoY29tcGFyZSk7XG4gIHJldHVybiBzdG9wcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmFuZ2UgdG8gYSByZWdleCBwYXR0ZXJuXG4gKiBAcGFyYW0ge051bWJlcn0gYHN0YXJ0YFxuICogQHBhcmFtIHtOdW1iZXJ9IGBzdG9wYFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIHJhbmdlVG9QYXR0ZXJuKHN0YXJ0LCBzdG9wLCBvcHRpb25zKSB7XG4gIGlmIChzdGFydCA9PT0gc3RvcCkge1xuICAgIHJldHVybiB7IHBhdHRlcm46IHN0YXJ0LCBjb3VudDogW10sIGRpZ2l0czogMCB9O1xuICB9XG5cbiAgbGV0IHppcHBlZCA9IHppcChzdGFydCwgc3RvcCk7XG4gIGxldCBkaWdpdHMgPSB6aXBwZWQubGVuZ3RoO1xuICBsZXQgcGF0dGVybiA9ICcnO1xuICBsZXQgY291bnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzOyBpKyspIHtcbiAgICBsZXQgW3N0YXJ0RGlnaXQsIHN0b3BEaWdpdF0gPSB6aXBwZWRbaV07XG5cbiAgICBpZiAoc3RhcnREaWdpdCA9PT0gc3RvcERpZ2l0KSB7XG4gICAgICBwYXR0ZXJuICs9IHN0YXJ0RGlnaXQ7XG5cbiAgICB9IGVsc2UgaWYgKHN0YXJ0RGlnaXQgIT09ICcwJyB8fCBzdG9wRGlnaXQgIT09ICc5Jykge1xuICAgICAgcGF0dGVybiArPSB0b0NoYXJhY3RlckNsYXNzKHN0YXJ0RGlnaXQsIHN0b3BEaWdpdCwgb3B0aW9ucyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQrKztcbiAgICB9XG4gIH1cblxuICBpZiAoY291bnQpIHtcbiAgICBwYXR0ZXJuICs9IG9wdGlvbnMuc2hvcnRoYW5kID09PSB0cnVlID8gJ1xcXFxkJyA6ICdbMC05XSc7XG4gIH1cblxuICByZXR1cm4geyBwYXR0ZXJuLCBjb3VudDogW2NvdW50XSwgZGlnaXRzIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0VG9QYXR0ZXJucyhtaW4sIG1heCwgdG9rLCBvcHRpb25zKSB7XG4gIGxldCByYW5nZXMgPSBzcGxpdFRvUmFuZ2VzKG1pbiwgbWF4KTtcbiAgbGV0IHRva2VucyA9IFtdO1xuICBsZXQgc3RhcnQgPSBtaW47XG4gIGxldCBwcmV2O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG1heCA9IHJhbmdlc1tpXTtcbiAgICBsZXQgb2JqID0gcmFuZ2VUb1BhdHRlcm4oU3RyaW5nKHN0YXJ0KSwgU3RyaW5nKG1heCksIG9wdGlvbnMpO1xuICAgIGxldCB6ZXJvcyA9ICcnO1xuXG4gICAgaWYgKCF0b2suaXNQYWRkZWQgJiYgcHJldiAmJiBwcmV2LnBhdHRlcm4gPT09IG9iai5wYXR0ZXJuKSB7XG4gICAgICBpZiAocHJldi5jb3VudC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHByZXYuY291bnQucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHByZXYuY291bnQucHVzaChvYmouY291bnRbMF0pO1xuICAgICAgcHJldi5zdHJpbmcgPSBwcmV2LnBhdHRlcm4gKyB0b1F1YW50aWZpZXIocHJldi5jb3VudCk7XG4gICAgICBzdGFydCA9IG1heCArIDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rLmlzUGFkZGVkKSB7XG4gICAgICB6ZXJvcyA9IHBhZFplcm9zKG1heCwgdG9rLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBvYmouc3RyaW5nID0gemVyb3MgKyBvYmoucGF0dGVybiArIHRvUXVhbnRpZmllcihvYmouY291bnQpO1xuICAgIHRva2Vucy5wdXNoKG9iaik7XG4gICAgc3RhcnQgPSBtYXggKyAxO1xuICAgIHByZXYgPSBvYmo7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJQYXR0ZXJucyhhcnIsIGNvbXBhcmlzb24sIHByZWZpeCwgaW50ZXJzZWN0aW9uLCBvcHRpb25zKSB7XG4gIGxldCByZXN1bHQgPSBbXTtcblxuICBmb3IgKGxldCBlbGUgb2YgYXJyKSB7XG4gICAgbGV0IHsgc3RyaW5nIH0gPSBlbGU7XG5cbiAgICAvLyBvbmx5IHB1c2ggaWYgX2JvdGhfIGFyZSBuZWdhdGl2ZS4uLlxuICAgIGlmICghaW50ZXJzZWN0aW9uICYmICFjb250YWlucyhjb21wYXJpc29uLCAnc3RyaW5nJywgc3RyaW5nKSkge1xuICAgICAgcmVzdWx0LnB1c2gocHJlZml4ICsgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvLyBvciBfYm90aF8gYXJlIHBvc2l0aXZlXG4gICAgaWYgKGludGVyc2VjdGlvbiAmJiBjb250YWlucyhjb21wYXJpc29uLCAnc3RyaW5nJywgc3RyaW5nKSkge1xuICAgICAgcmVzdWx0LnB1c2gocHJlZml4ICsgc3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBaaXAgc3RyaW5nc1xuICovXG5cbmZ1bmN0aW9uIHppcChhLCBiKSB7XG4gIGxldCBhcnIgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBhcnIucHVzaChbYVtpXSwgYltpXV0pO1xuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGEgPiBiID8gMSA6IGIgPiBhID8gLTEgOiAwO1xufVxuXG5mdW5jdGlvbiBjb250YWlucyhhcnIsIGtleSwgdmFsKSB7XG4gIHJldHVybiBhcnIuc29tZShlbGUgPT4gZWxlW2tleV0gPT09IHZhbCk7XG59XG5cbmZ1bmN0aW9uIGNvdW50TmluZXMobWluLCBsZW4pIHtcbiAgcmV0dXJuIE51bWJlcihTdHJpbmcobWluKS5zbGljZSgwLCAtbGVuKSArICc5Jy5yZXBlYXQobGVuKSk7XG59XG5cbmZ1bmN0aW9uIGNvdW50WmVyb3MoaW50ZWdlciwgemVyb3MpIHtcbiAgcmV0dXJuIGludGVnZXIgLSAoaW50ZWdlciAlIE1hdGgucG93KDEwLCB6ZXJvcykpO1xufVxuXG5mdW5jdGlvbiB0b1F1YW50aWZpZXIoZGlnaXRzKSB7XG4gIGxldCBbc3RhcnQgPSAwLCBzdG9wID0gJyddID0gZGlnaXRzO1xuICBpZiAoc3RvcCB8fCBzdGFydCA+IDEpIHtcbiAgICByZXR1cm4gYHske3N0YXJ0ICsgKHN0b3AgPyAnLCcgKyBzdG9wIDogJycpfX1gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gdG9DaGFyYWN0ZXJDbGFzcyhhLCBiLCBvcHRpb25zKSB7XG4gIHJldHVybiBgWyR7YX0keyhiIC0gYSA9PT0gMSkgPyAnJyA6ICctJ30ke2J9XWA7XG59XG5cbmZ1bmN0aW9uIGhhc1BhZGRpbmcoc3RyKSB7XG4gIHJldHVybiAvXi0/KDArKVxcZC8udGVzdChzdHIpO1xufVxuXG5mdW5jdGlvbiBwYWRaZXJvcyh2YWx1ZSwgdG9rLCBvcHRpb25zKSB7XG4gIGlmICghdG9rLmlzUGFkZGVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgbGV0IGRpZmYgPSBNYXRoLmFicyh0b2subWF4TGVuIC0gU3RyaW5nKHZhbHVlKS5sZW5ndGgpO1xuICBsZXQgcmVsYXggPSBvcHRpb25zLnJlbGF4WmVyb3MgIT09IGZhbHNlO1xuXG4gIHN3aXRjaCAoZGlmZikge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAnJztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gcmVsYXggPyAnMD8nIDogJzAnO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiByZWxheCA/ICcwezAsMn0nIDogJzAwJztcbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gcmVsYXggPyBgMHswLCR7ZGlmZn19YCA6IGAweyR7ZGlmZn19YDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDYWNoZVxuICovXG5cbnRvUmVnZXhSYW5nZS5jYWNoZSA9IHt9O1xudG9SZWdleFJhbmdlLmNsZWFyQ2FjaGUgPSAoKSA9PiAodG9SZWdleFJhbmdlLmNhY2hlID0ge30pO1xuXG4vKipcbiAqIEV4cG9zZSBgdG9SZWdleFJhbmdlYFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdG9SZWdleFJhbmdlO1xuIiwgIi8qIVxuICogZmlsbC1yYW5nZSA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvZmlsbC1yYW5nZT5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgdG9SZWdleFJhbmdlID0gcmVxdWlyZSgndG8tcmVnZXgtcmFuZ2UnKTtcblxuY29uc3QgaXNPYmplY3QgPSB2YWwgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5cbmNvbnN0IHRyYW5zZm9ybSA9IHRvTnVtYmVyID0+IHtcbiAgcmV0dXJuIHZhbHVlID0+IHRvTnVtYmVyID09PSB0cnVlID8gTnVtYmVyKHZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59O1xuXG5jb25zdCBpc1ZhbGlkVmFsdWUgPSB2YWx1ZSA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyk7XG59O1xuXG5jb25zdCBpc051bWJlciA9IG51bSA9PiBOdW1iZXIuaXNJbnRlZ2VyKCtudW0pO1xuXG5jb25zdCB6ZXJvcyA9IGlucHV0ID0+IHtcbiAgbGV0IHZhbHVlID0gYCR7aW5wdXR9YDtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGlmICh2YWx1ZVswXSA9PT0gJy0nKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICBpZiAodmFsdWUgPT09ICcwJykgcmV0dXJuIGZhbHNlO1xuICB3aGlsZSAodmFsdWVbKytpbmRleF0gPT09ICcwJyk7XG4gIHJldHVybiBpbmRleCA+IDA7XG59O1xuXG5jb25zdCBzdHJpbmdpZnkgPSAoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0cmluZ2lmeSA9PT0gdHJ1ZTtcbn07XG5cbmNvbnN0IHBhZCA9IChpbnB1dCwgbWF4TGVuZ3RoLCB0b051bWJlcikgPT4ge1xuICBpZiAobWF4TGVuZ3RoID4gMCkge1xuICAgIGxldCBkYXNoID0gaW5wdXRbMF0gPT09ICctJyA/ICctJyA6ICcnO1xuICAgIGlmIChkYXNoKSBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIGlucHV0ID0gKGRhc2ggKyBpbnB1dC5wYWRTdGFydChkYXNoID8gbWF4TGVuZ3RoIC0gMSA6IG1heExlbmd0aCwgJzAnKSk7XG4gIH1cbiAgaWYgKHRvTnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBTdHJpbmcoaW5wdXQpO1xuICB9XG4gIHJldHVybiBpbnB1dDtcbn07XG5cbmNvbnN0IHRvTWF4TGVuID0gKGlucHV0LCBtYXhMZW5ndGgpID0+IHtcbiAgbGV0IG5lZ2F0aXZlID0gaW5wdXRbMF0gPT09ICctJyA/ICctJyA6ICcnO1xuICBpZiAobmVnYXRpdmUpIHtcbiAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIG1heExlbmd0aC0tO1xuICB9XG4gIHdoaWxlIChpbnB1dC5sZW5ndGggPCBtYXhMZW5ndGgpIGlucHV0ID0gJzAnICsgaW5wdXQ7XG4gIHJldHVybiBuZWdhdGl2ZSA/ICgnLScgKyBpbnB1dCkgOiBpbnB1dDtcbn07XG5cbmNvbnN0IHRvU2VxdWVuY2UgPSAocGFydHMsIG9wdGlvbnMsIG1heExlbikgPT4ge1xuICBwYXJ0cy5uZWdhdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuICBwYXJ0cy5wb3NpdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuXG4gIGxldCBwcmVmaXggPSBvcHRpb25zLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGxldCBwb3NpdGl2ZXMgPSAnJztcbiAgbGV0IG5lZ2F0aXZlcyA9ICcnO1xuICBsZXQgcmVzdWx0O1xuXG4gIGlmIChwYXJ0cy5wb3NpdGl2ZXMubGVuZ3RoKSB7XG4gICAgcG9zaXRpdmVzID0gcGFydHMucG9zaXRpdmVzLm1hcCh2ID0+IHRvTWF4TGVuKFN0cmluZyh2KSwgbWF4TGVuKSkuam9pbignfCcpO1xuICB9XG5cbiAgaWYgKHBhcnRzLm5lZ2F0aXZlcy5sZW5ndGgpIHtcbiAgICBuZWdhdGl2ZXMgPSBgLSgke3ByZWZpeH0ke3BhcnRzLm5lZ2F0aXZlcy5tYXAodiA9PiB0b01heExlbihTdHJpbmcodiksIG1heExlbikpLmpvaW4oJ3wnKX0pYDtcbiAgfVxuXG4gIGlmIChwb3NpdGl2ZXMgJiYgbmVnYXRpdmVzKSB7XG4gICAgcmVzdWx0ID0gYCR7cG9zaXRpdmVzfXwke25lZ2F0aXZlc31gO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHBvc2l0aXZlcyB8fCBuZWdhdGl2ZXM7XG4gIH1cblxuICBpZiAob3B0aW9ucy53cmFwKSB7XG4gICAgcmV0dXJuIGAoJHtwcmVmaXh9JHtyZXN1bHR9KWA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdG9SYW5nZSA9IChhLCBiLCBpc051bWJlcnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKGlzTnVtYmVycykge1xuICAgIHJldHVybiB0b1JlZ2V4UmFuZ2UoYSwgYiwgeyB3cmFwOiBmYWxzZSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGxldCBzdGFydCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7XG4gIGlmIChhID09PSBiKSByZXR1cm4gc3RhcnQ7XG5cbiAgbGV0IHN0b3AgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpO1xuICByZXR1cm4gYFske3N0YXJ0fS0ke3N0b3B9XWA7XG59O1xuXG5jb25zdCB0b1JlZ2V4ID0gKHN0YXJ0LCBlbmQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhcnQpKSB7XG4gICAgbGV0IHdyYXAgPSBvcHRpb25zLndyYXAgPT09IHRydWU7XG4gICAgbGV0IHByZWZpeCA9IG9wdGlvbnMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgICByZXR1cm4gd3JhcCA/IGAoJHtwcmVmaXh9JHtzdGFydC5qb2luKCd8Jyl9KWAgOiBzdGFydC5qb2luKCd8Jyk7XG4gIH1cbiAgcmV0dXJuIHRvUmVnZXhSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IHJhbmdlRXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgcmFuZ2UgYXJndW1lbnRzOiAnICsgdXRpbC5pbnNwZWN0KC4uLmFyZ3MpKTtcbn07XG5cbmNvbnN0IGludmFsaWRSYW5nZSA9IChzdGFydCwgZW5kLCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkgdGhyb3cgcmFuZ2VFcnJvcihbc3RhcnQsIGVuZF0pO1xuICByZXR1cm4gW107XG59O1xuXG5jb25zdCBpbnZhbGlkU3RlcCA9IChzdGVwLCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHN0ZXAgXCIke3N0ZXB9XCIgdG8gYmUgYSBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG5jb25zdCBmaWxsTnVtYmVycyA9IChzdGFydCwgZW5kLCBzdGVwID0gMSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGxldCBhID0gTnVtYmVyKHN0YXJ0KTtcbiAgbGV0IGIgPSBOdW1iZXIoZW5kKTtcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoYSkgfHwgIU51bWJlci5pc0ludGVnZXIoYikpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3RSYW5nZXMgPT09IHRydWUpIHRocm93IHJhbmdlRXJyb3IoW3N0YXJ0LCBlbmRdKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBmaXggbmVnYXRpdmUgemVyb1xuICBpZiAoYSA9PT0gMCkgYSA9IDA7XG4gIGlmIChiID09PSAwKSBiID0gMDtcblxuICBsZXQgZGVzY2VuZGluZyA9IGEgPiBiO1xuICBsZXQgc3RhcnRTdHJpbmcgPSBTdHJpbmcoc3RhcnQpO1xuICBsZXQgZW5kU3RyaW5nID0gU3RyaW5nKGVuZCk7XG4gIGxldCBzdGVwU3RyaW5nID0gU3RyaW5nKHN0ZXApO1xuICBzdGVwID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RlcCksIDEpO1xuXG4gIGxldCBwYWRkZWQgPSB6ZXJvcyhzdGFydFN0cmluZykgfHwgemVyb3MoZW5kU3RyaW5nKSB8fCB6ZXJvcyhzdGVwU3RyaW5nKTtcbiAgbGV0IG1heExlbiA9IHBhZGRlZCA/IE1hdGgubWF4KHN0YXJ0U3RyaW5nLmxlbmd0aCwgZW5kU3RyaW5nLmxlbmd0aCwgc3RlcFN0cmluZy5sZW5ndGgpIDogMDtcbiAgbGV0IHRvTnVtYmVyID0gcGFkZGVkID09PSBmYWxzZSAmJiBzdHJpbmdpZnkoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT09IGZhbHNlO1xuICBsZXQgZm9ybWF0ID0gb3B0aW9ucy50cmFuc2Zvcm0gfHwgdHJhbnNmb3JtKHRvTnVtYmVyKTtcblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ICYmIHN0ZXAgPT09IDEpIHtcbiAgICByZXR1cm4gdG9SYW5nZSh0b01heExlbihzdGFydCwgbWF4TGVuKSwgdG9NYXhMZW4oZW5kLCBtYXhMZW4pLCB0cnVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCBwYXJ0cyA9IHsgbmVnYXRpdmVzOiBbXSwgcG9zaXRpdmVzOiBbXSB9O1xuICBsZXQgcHVzaCA9IG51bSA9PiBwYXJ0c1tudW0gPCAwID8gJ25lZ2F0aXZlcycgOiAncG9zaXRpdmVzJ10ucHVzaChNYXRoLmFicyhudW0pKTtcbiAgbGV0IHJhbmdlID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGRlc2NlbmRpbmcgPyBhID49IGIgOiBhIDw9IGIpIHtcbiAgICBpZiAob3B0aW9ucy50b1JlZ2V4ID09PSB0cnVlICYmIHN0ZXAgPiAxKSB7XG4gICAgICBwdXNoKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5wdXNoKHBhZChmb3JtYXQoYSwgaW5kZXgpLCBtYXhMZW4sIHRvTnVtYmVyKSk7XG4gICAgfVxuICAgIGEgPSBkZXNjZW5kaW5nID8gYSAtIHN0ZXAgOiBhICsgc3RlcDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBzdGVwID4gMVxuICAgICAgPyB0b1NlcXVlbmNlKHBhcnRzLCBvcHRpb25zLCBtYXhMZW4pXG4gICAgICA6IHRvUmVnZXgocmFuZ2UsIG51bGwsIHsgd3JhcDogZmFsc2UsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59O1xuXG5jb25zdCBmaWxsTGV0dGVycyA9IChzdGFydCwgZW5kLCBzdGVwID0gMSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICgoIWlzTnVtYmVyKHN0YXJ0KSAmJiBzdGFydC5sZW5ndGggPiAxKSB8fCAoIWlzTnVtYmVyKGVuZCkgJiYgZW5kLmxlbmd0aCA+IDEpKSB7XG4gICAgcmV0dXJuIGludmFsaWRSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCBmb3JtYXQgPSBvcHRpb25zLnRyYW5zZm9ybSB8fCAodmFsID0+IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsKSk7XG4gIGxldCBhID0gYCR7c3RhcnR9YC5jaGFyQ29kZUF0KDApO1xuICBsZXQgYiA9IGAke2VuZH1gLmNoYXJDb2RlQXQoMCk7XG5cbiAgbGV0IGRlc2NlbmRpbmcgPSBhID4gYjtcbiAgbGV0IG1pbiA9IE1hdGgubWluKGEsIGIpO1xuICBsZXQgbWF4ID0gTWF0aC5tYXgoYSwgYik7XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCAmJiBzdGVwID09PSAxKSB7XG4gICAgcmV0dXJuIHRvUmFuZ2UobWluLCBtYXgsIGZhbHNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCByYW5nZSA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChkZXNjZW5kaW5nID8gYSA+PSBiIDogYSA8PSBiKSB7XG4gICAgcmFuZ2UucHVzaChmb3JtYXQoYSwgaW5kZXgpKTtcbiAgICBhID0gZGVzY2VuZGluZyA/IGEgLSBzdGVwIDogYSArIHN0ZXA7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRvUmVnZXggPT09IHRydWUpIHtcbiAgICByZXR1cm4gdG9SZWdleChyYW5nZSwgbnVsbCwgeyB3cmFwOiBmYWxzZSwgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn07XG5cbmNvbnN0IGZpbGwgPSAoc3RhcnQsIGVuZCwgc3RlcCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChlbmQgPT0gbnVsbCAmJiBpc1ZhbGlkVmFsdWUoc3RhcnQpKSB7XG4gICAgcmV0dXJuIFtzdGFydF07XG4gIH1cblxuICBpZiAoIWlzVmFsaWRWYWx1ZShzdGFydCkgfHwgIWlzVmFsaWRWYWx1ZShlbmQpKSB7XG4gICAgcmV0dXJuIGludmFsaWRSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmaWxsKHN0YXJ0LCBlbmQsIDEsIHsgdHJhbnNmb3JtOiBzdGVwIH0pO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KHN0ZXApKSB7XG4gICAgcmV0dXJuIGZpbGwoc3RhcnQsIGVuZCwgMCwgc3RlcCk7XG4gIH1cblxuICBsZXQgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBpZiAob3B0cy5jYXB0dXJlID09PSB0cnVlKSBvcHRzLndyYXAgPSB0cnVlO1xuICBzdGVwID0gc3RlcCB8fCBvcHRzLnN0ZXAgfHwgMTtcblxuICBpZiAoIWlzTnVtYmVyKHN0ZXApKSB7XG4gICAgaWYgKHN0ZXAgIT0gbnVsbCAmJiAhaXNPYmplY3Qoc3RlcCkpIHJldHVybiBpbnZhbGlkU3RlcChzdGVwLCBvcHRzKTtcbiAgICByZXR1cm4gZmlsbChzdGFydCwgZW5kLCAxLCBzdGVwKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzdGFydCkgJiYgaXNOdW1iZXIoZW5kKSkge1xuICAgIHJldHVybiBmaWxsTnVtYmVycyhzdGFydCwgZW5kLCBzdGVwLCBvcHRzKTtcbiAgfVxuXG4gIHJldHVybiBmaWxsTGV0dGVycyhzdGFydCwgZW5kLCBNYXRoLm1heChNYXRoLmFicyhzdGVwKSwgMSksIG9wdHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaWxsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZmlsbCA9IHJlcXVpcmUoJ2ZpbGwtcmFuZ2UnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5jb25zdCBjb21waWxlID0gKGFzdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHdhbGsgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBjb25zdCBpbnZhbGlkQmxvY2sgPSB1dGlscy5pc0ludmFsaWRCcmFjZShwYXJlbnQpO1xuICAgIGNvbnN0IGludmFsaWROb2RlID0gbm9kZS5pbnZhbGlkID09PSB0cnVlICYmIG9wdGlvbnMuZXNjYXBlSW52YWxpZCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpbnZhbGlkID0gaW52YWxpZEJsb2NrID09PSB0cnVlIHx8IGludmFsaWROb2RlID09PSB0cnVlO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMuZXNjYXBlSW52YWxpZCA9PT0gdHJ1ZSA/ICdcXFxcJyA6ICcnO1xuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIGlmIChub2RlLmlzT3BlbiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHByZWZpeCArIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaXNDbG9zZSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ25vZGUuaXNDbG9zZScsIHByZWZpeCwgbm9kZS52YWx1ZSk7XG4gICAgICByZXR1cm4gcHJlZml4ICsgbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnb3BlbicpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gcHJlZml4ICsgbm9kZS52YWx1ZSA6ICcoJztcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXR1cm4gaW52YWxpZCA/IHByZWZpeCArIG5vZGUudmFsdWUgOiAnKSc7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ2NvbW1hJykge1xuICAgICAgcmV0dXJuIG5vZGUucHJldi50eXBlID09PSAnY29tbWEnID8gJycgOiBpbnZhbGlkID8gbm9kZS52YWx1ZSA6ICd8JztcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5yYW5nZXMgPiAwKSB7XG4gICAgICBjb25zdCBhcmdzID0gdXRpbHMucmVkdWNlKG5vZGUubm9kZXMpO1xuICAgICAgY29uc3QgcmFuZ2UgPSBmaWxsKC4uLmFyZ3MsIHsgLi4ub3B0aW9ucywgd3JhcDogZmFsc2UsIHRvUmVnZXg6IHRydWUsIHN0cmljdFplcm9zOiB0cnVlIH0pO1xuXG4gICAgICBpZiAocmFuZ2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA+IDEgJiYgcmFuZ2UubGVuZ3RoID4gMSA/IGAoJHtyYW5nZX0pYCA6IHJhbmdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUubm9kZXMpIHtcbiAgICAgICAgb3V0cHV0ICs9IHdhbGsoY2hpbGQsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHdhbGsoYXN0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZpbGwgPSByZXF1aXJlKCdmaWxsLXJhbmdlJyk7XG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGFwcGVuZCA9IChxdWV1ZSA9ICcnLCBzdGFzaCA9ICcnLCBlbmNsb3NlID0gZmFsc2UpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgcXVldWUgPSBbXS5jb25jYXQocXVldWUpO1xuICBzdGFzaCA9IFtdLmNvbmNhdChzdGFzaCk7XG5cbiAgaWYgKCFzdGFzaC5sZW5ndGgpIHJldHVybiBxdWV1ZTtcbiAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZW5jbG9zZSA/IHV0aWxzLmZsYXR0ZW4oc3Rhc2gpLm1hcChlbGUgPT4gYHske2VsZX19YCkgOiBzdGFzaDtcbiAgfVxuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBxdWV1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZW0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXBwZW5kKHZhbHVlLCBzdGFzaCwgZW5jbG9zZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBlbGUgb2Ygc3Rhc2gpIHtcbiAgICAgICAgaWYgKGVuY2xvc2UgPT09IHRydWUgJiYgdHlwZW9mIGVsZSA9PT0gJ3N0cmluZycpIGVsZSA9IGB7JHtlbGV9fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKEFycmF5LmlzQXJyYXkoZWxlKSA/IGFwcGVuZChpdGVtLCBlbGUsIGVuY2xvc2UpIDogaXRlbSArIGVsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1dGlscy5mbGF0dGVuKHJlc3VsdCk7XG59O1xuXG5jb25zdCBleHBhbmQgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgcmFuZ2VMaW1pdCA9IG9wdGlvbnMucmFuZ2VMaW1pdCA9PT0gdW5kZWZpbmVkID8gMTAwMCA6IG9wdGlvbnMucmFuZ2VMaW1pdDtcblxuICBjb25zdCB3YWxrID0gKG5vZGUsIHBhcmVudCA9IHt9KSA9PiB7XG4gICAgbm9kZS5xdWV1ZSA9IFtdO1xuXG4gICAgbGV0IHAgPSBwYXJlbnQ7XG4gICAgbGV0IHEgPSBwYXJlbnQucXVldWU7XG5cbiAgICB3aGlsZSAocC50eXBlICE9PSAnYnJhY2UnICYmIHAudHlwZSAhPT0gJ3Jvb3QnICYmIHAucGFyZW50KSB7XG4gICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICBxID0gcC5xdWV1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5pbnZhbGlkIHx8IG5vZGUuZG9sbGFyKSB7XG4gICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIHN0cmluZ2lmeShub2RlLCBvcHRpb25zKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdicmFjZScgJiYgbm9kZS5pbnZhbGlkICE9PSB0cnVlICYmIG5vZGUubm9kZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIFsne30nXSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVzICYmIG5vZGUucmFuZ2VzID4gMCkge1xuICAgICAgY29uc3QgYXJncyA9IHV0aWxzLnJlZHVjZShub2RlLm5vZGVzKTtcblxuICAgICAgaWYgKHV0aWxzLmV4Y2VlZHNMaW1pdCguLi5hcmdzLCBvcHRpb25zLnN0ZXAsIHJhbmdlTGltaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdleHBhbmRlZCBhcnJheSBsZW5ndGggZXhjZWVkcyByYW5nZSBsaW1pdC4gVXNlIG9wdGlvbnMucmFuZ2VMaW1pdCB0byBpbmNyZWFzZSBvciBkaXNhYmxlIHRoZSBsaW1pdC4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJhbmdlID0gZmlsbCguLi5hcmdzLCBvcHRpb25zKTtcbiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmFuZ2UgPSBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHEucHVzaChhcHBlbmQocS5wb3AoKSwgcmFuZ2UpKTtcbiAgICAgIG5vZGUubm9kZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNsb3NlID0gdXRpbHMuZW5jbG9zZUJyYWNlKG5vZGUpO1xuICAgIGxldCBxdWV1ZSA9IG5vZGUucXVldWU7XG4gICAgbGV0IGJsb2NrID0gbm9kZTtcblxuICAgIHdoaWxlIChibG9jay50eXBlICE9PSAnYnJhY2UnICYmIGJsb2NrLnR5cGUgIT09ICdyb290JyAmJiBibG9jay5wYXJlbnQpIHtcbiAgICAgIGJsb2NrID0gYmxvY2sucGFyZW50O1xuICAgICAgcXVldWUgPSBibG9jay5xdWV1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5ub2Rlc1tpXTtcblxuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdjb21tYScgJiYgbm9kZS50eXBlID09PSAnYnJhY2UnKSB7XG4gICAgICAgIGlmIChpID09PSAxKSBxdWV1ZS5wdXNoKCcnKTtcbiAgICAgICAgcXVldWUucHVzaCgnJyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIHF1ZXVlLCBlbmNsb3NlKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQudmFsdWUgJiYgY2hpbGQudHlwZSAhPT0gJ29wZW4nKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goYXBwZW5kKHF1ZXVlLnBvcCgpLCBjaGlsZC52YWx1ZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLm5vZGVzKSB7XG4gICAgICAgIHdhbGsoY2hpbGQsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZTtcbiAgfTtcblxuICByZXR1cm4gdXRpbHMuZmxhdHRlbih3YWxrKGFzdCkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTUFYX0xFTkdUSDogMTAwMDAsXG5cbiAgLy8gRGlnaXRzXG4gIENIQVJfMDogJzAnLCAvKiAwICovXG4gIENIQVJfOTogJzknLCAvKiA5ICovXG5cbiAgLy8gQWxwaGFiZXQgY2hhcnMuXG4gIENIQVJfVVBQRVJDQVNFX0E6ICdBJywgLyogQSAqL1xuICBDSEFSX0xPV0VSQ0FTRV9BOiAnYScsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogJ1onLCAvKiBaICovXG4gIENIQVJfTE9XRVJDQVNFX1o6ICd6JywgLyogeiAqL1xuXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUzogJygnLCAvKiAoICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVM6ICcpJywgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6ICcqJywgLyogKiAqL1xuXG4gIC8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuICBDSEFSX0FNUEVSU0FORDogJyYnLCAvKiAmICovXG4gIENIQVJfQVQ6ICdAJywgLyogQCAqL1xuICBDSEFSX0JBQ0tTTEFTSDogJ1xcXFwnLCAvKiBcXCAqL1xuICBDSEFSX0JBQ0tUSUNLOiAnYCcsIC8qIGAgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46ICdcXHInLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogJ14nLCAvKiBeICovXG4gIENIQVJfQ09MT046ICc6JywgLyogOiAqL1xuICBDSEFSX0NPTU1BOiAnLCcsIC8qICwgKi9cbiAgQ0hBUl9ET0xMQVI6ICckJywgLyogLiAqL1xuICBDSEFSX0RPVDogJy4nLCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAnXCInLCAvKiBcIiAqL1xuICBDSEFSX0VRVUFMOiAnPScsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAnIScsIC8qICEgKi9cbiAgQ0hBUl9GT1JNX0ZFRUQ6ICdcXGYnLCAvKiBcXGYgKi9cbiAgQ0hBUl9GT1JXQVJEX1NMQVNIOiAnLycsIC8qIC8gKi9cbiAgQ0hBUl9IQVNIOiAnIycsIC8qICMgKi9cbiAgQ0hBUl9IWVBIRU5fTUlOVVM6ICctJywgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogJzwnLCAvKiA8ICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRTogJ3snLCAvKiB7ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDogJ1snLCAvKiBbICovXG4gIENIQVJfTElORV9GRUVEOiAnXFxuJywgLyogXFxuICovXG4gIENIQVJfTk9fQlJFQUtfU1BBQ0U6ICdcXHUwMEEwJywgLyogXFx1MDBBMCAqL1xuICBDSEFSX1BFUkNFTlQ6ICclJywgLyogJSAqL1xuICBDSEFSX1BMVVM6ICcrJywgLyogKyAqL1xuICBDSEFSX1FVRVNUSU9OX01BUks6ICc/JywgLyogPyAqL1xuICBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQ6ICc+JywgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAnfScsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogJ10nLCAvKiBdICovXG4gIENIQVJfU0VNSUNPTE9OOiAnOycsIC8qIDsgKi9cbiAgQ0hBUl9TSU5HTEVfUVVPVEU6ICdcXCcnLCAvKiAnICovXG4gIENIQVJfU1BBQ0U6ICcgJywgLyogICAqL1xuICBDSEFSX1RBQjogJ1xcdCcsIC8qIFxcdCAqL1xuICBDSEFSX1VOREVSU0NPUkU6ICdfJywgLyogXyAqL1xuICBDSEFSX1ZFUlRJQ0FMX0xJTkU6ICd8JywgLyogfCAqL1xuICBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRTogJ1xcdUZFRkYnIC8qIFxcdUZFRkYgKi9cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IHtcbiAgTUFYX0xFTkdUSCxcbiAgQ0hBUl9CQUNLU0xBU0gsIC8qIFxcICovXG4gIENIQVJfQkFDS1RJQ0ssIC8qIGAgKi9cbiAgQ0hBUl9DT01NQSwgLyogLCAqL1xuICBDSEFSX0RPVCwgLyogLiAqL1xuICBDSEFSX0xFRlRfUEFSRU5USEVTRVMsIC8qICggKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUywgLyogKSAqL1xuICBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UsIC8qIHsgKi9cbiAgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRSwgLyogfSAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsIC8qIFsgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCwgLyogXSAqL1xuICBDSEFSX0RPVUJMRV9RVU9URSwgLyogXCIgKi9cbiAgQ0hBUl9TSU5HTEVfUVVPVEUsIC8qICcgKi9cbiAgQ0hBUl9OT19CUkVBS19TUEFDRSxcbiAgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0Vcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG4vKipcbiAqIHBhcnNlXG4gKi9cblxuY29uc3QgcGFyc2UgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgbWF4ID0gdHlwZW9mIG9wdHMubWF4TGVuZ3RoID09PSAnbnVtYmVyJyA/IE1hdGgubWluKE1BWF9MRU5HVEgsIG9wdHMubWF4TGVuZ3RoKSA6IE1BWF9MRU5HVEg7XG4gIGlmIChpbnB1dC5sZW5ndGggPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aCAoJHtpbnB1dC5sZW5ndGh9KSwgZXhjZWVkcyBtYXggY2hhcmFjdGVycyAoJHttYXh9KWApO1xuICB9XG5cbiAgY29uc3QgYXN0ID0geyB0eXBlOiAncm9vdCcsIGlucHV0LCBub2RlczogW10gfTtcbiAgY29uc3Qgc3RhY2sgPSBbYXN0XTtcbiAgbGV0IGJsb2NrID0gYXN0O1xuICBsZXQgcHJldiA9IGFzdDtcbiAgbGV0IGJyYWNrZXRzID0gMDtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgZGVwdGggPSAwO1xuICBsZXQgdmFsdWU7XG5cbiAgLyoqXG4gICAqIEhlbHBlcnNcbiAgICovXG5cbiAgY29uc3QgYWR2YW5jZSA9ICgpID0+IGlucHV0W2luZGV4KytdO1xuICBjb25zdCBwdXNoID0gbm9kZSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3RleHQnICYmIHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgIHByZXYudHlwZSA9ICd0ZXh0JztcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICd0ZXh0JyAmJiBub2RlLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcHJldi52YWx1ZSArPSBub2RlLnZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJsb2NrLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgbm9kZS5wYXJlbnQgPSBibG9jaztcbiAgICBub2RlLnByZXYgPSBwcmV2O1xuICAgIHByZXYgPSBub2RlO1xuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIHB1c2goeyB0eXBlOiAnYm9zJyB9KTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuXG4gICAgLyoqXG4gICAgICogSW52YWxpZCBjaGFyc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRSB8fCB2YWx1ZSA9PT0gQ0hBUl9OT19CUkVBS19TUEFDRSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlZCBjaGFyc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IChvcHRpb25zLmtlZXBFc2NhcGluZyA/IHZhbHVlIDogJycpICsgYWR2YW5jZSgpIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmlnaHQgc3F1YXJlIGJyYWNrZXQgKGxpdGVyYWwpOiAnXSdcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6ICdcXFxcJyArIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGVmdCBzcXVhcmUgYnJhY2tldDogJ1snXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgYnJhY2tldHMrKztcblxuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMtLTtcblxuICAgICAgICAgIGlmIChicmFja2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBibG9jayA9IHB1c2goeyB0eXBlOiAncGFyZW4nLCBub2RlczogW10gfSk7XG4gICAgICBzdGFjay5wdXNoKGJsb2NrKTtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpZiAoYmxvY2sudHlwZSAhPT0gJ3BhcmVuJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVvdGVzOiAnfFwifGBcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1VCTEVfUVVPVEUgfHwgdmFsdWUgPT09IENIQVJfU0lOR0xFX1FVT1RFIHx8IHZhbHVlID09PSBDSEFSX0JBQ0tUSUNLKSB7XG4gICAgICBjb25zdCBvcGVuID0gdmFsdWU7XG4gICAgICBsZXQgbmV4dDtcblxuICAgICAgaWYgKG9wdGlvbnMua2VlcFF1b3RlcyAhPT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgKG5leHQgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgICAgIHZhbHVlICs9IG5leHQgKyBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCA9PT0gb3Blbikge1xuICAgICAgICAgIGlmIChvcHRpb25zLmtlZXBRdW90ZXMgPT09IHRydWUpIHZhbHVlICs9IG5leHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSArPSBuZXh0O1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExlZnQgY3VybHkgYnJhY2U6ICd7J1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgIGRlcHRoKys7XG5cbiAgICAgIGNvbnN0IGRvbGxhciA9IHByZXYudmFsdWUgJiYgcHJldi52YWx1ZS5zbGljZSgtMSkgPT09ICckJyB8fCBibG9jay5kb2xsYXIgPT09IHRydWU7XG4gICAgICBjb25zdCBicmFjZSA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgY2xvc2U6IGZhbHNlLFxuICAgICAgICBkb2xsYXIsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjb21tYXM6IDAsXG4gICAgICAgIHJhbmdlczogMCxcbiAgICAgICAgbm9kZXM6IFtdXG4gICAgICB9O1xuXG4gICAgICBibG9jayA9IHB1c2goYnJhY2UpO1xuICAgICAgc3RhY2sucHVzaChibG9jayk7XG4gICAgICBwdXNoKHsgdHlwZTogJ29wZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IGN1cmx5IGJyYWNlOiAnfSdcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRSkge1xuICAgICAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlID0gJ2Nsb3NlJztcbiAgICAgIGJsb2NrID0gc3RhY2sucG9wKCk7XG4gICAgICBibG9jay5jbG9zZSA9IHRydWU7XG5cbiAgICAgIHB1c2goeyB0eXBlLCB2YWx1ZSB9KTtcbiAgICAgIGRlcHRoLS07XG5cbiAgICAgIGJsb2NrID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21tYTogJywnXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfQ09NTUEgJiYgZGVwdGggPiAwKSB7XG4gICAgICBpZiAoYmxvY2sucmFuZ2VzID4gMCkge1xuICAgICAgICBibG9jay5yYW5nZXMgPSAwO1xuICAgICAgICBjb25zdCBvcGVuID0gYmxvY2subm9kZXMuc2hpZnQoKTtcbiAgICAgICAgYmxvY2subm9kZXMgPSBbb3BlbiwgeyB0eXBlOiAndGV4dCcsIHZhbHVlOiBzdHJpbmdpZnkoYmxvY2spIH1dO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2NvbW1hJywgdmFsdWUgfSk7XG4gICAgICBibG9jay5jb21tYXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvdDogJy4nXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfRE9UICYmIGRlcHRoID4gMCAmJiBibG9jay5jb21tYXMgPT09IDApIHtcbiAgICAgIGNvbnN0IHNpYmxpbmdzID0gYmxvY2subm9kZXM7XG5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCBzaWJsaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBibG9jay5yYW5nZSA9IFtdO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnR5cGUgPSAncmFuZ2UnO1xuXG4gICAgICAgIGlmIChibG9jay5ub2Rlcy5sZW5ndGggIT09IDMgJiYgYmxvY2subm9kZXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBibG9jay5yYW5nZXMrKztcbiAgICAgICAgYmxvY2suYXJncyA9IFtdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBzaWJsaW5ncy5wb3AoKTtcblxuICAgICAgICBjb25zdCBiZWZvcmUgPSBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXTtcbiAgICAgICAgYmVmb3JlLnZhbHVlICs9IHByZXYudmFsdWUgKyB2YWx1ZTtcbiAgICAgICAgcHJldiA9IGJlZm9yZTtcbiAgICAgICAgYmxvY2sucmFuZ2VzLS07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2RvdCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGV4dFxuICAgICAqL1xuXG4gICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gIH1cblxuICAvLyBNYXJrIGltYmFsYW5jZWQgYnJhY2VzIGFuZCBicmFja2V0cyBhcyBpbnZhbGlkXG4gIGRvIHtcbiAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuXG4gICAgaWYgKGJsb2NrLnR5cGUgIT09ICdyb290Jykge1xuICAgICAgYmxvY2subm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgaWYgKCFub2RlLm5vZGVzKSB7XG4gICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ29wZW4nKSBub2RlLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ2Nsb3NlJykgbm9kZS5pc0Nsb3NlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIW5vZGUubm9kZXMpIG5vZGUudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICBub2RlLmludmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gZ2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYmxvY2sgb24gcGFyZW50Lm5vZGVzIChibG9jaydzIHNpYmxpbmdzKVxuICAgICAgY29uc3QgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5ub2Rlcy5pbmRleE9mKGJsb2NrKTtcbiAgICAgIC8vIHJlcGxhY2UgdGhlIChpbnZhbGlkKSBibG9jayB3aXRoIGl0J3Mgbm9kZXNcbiAgICAgIHBhcmVudC5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEsIC4uLmJsb2NrLm5vZGVzKTtcbiAgICB9XG4gIH0gd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApO1xuXG4gIHB1c2goeyB0eXBlOiAnZW9zJyB9KTtcbiAgcmV0dXJuIGFzdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcbmNvbnN0IGNvbXBpbGUgPSByZXF1aXJlKCcuL2xpYi9jb21waWxlJyk7XG5jb25zdCBleHBhbmQgPSByZXF1aXJlKCcuL2xpYi9leHBhbmQnKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcblxuLyoqXG4gKiBFeHBhbmQgdGhlIGdpdmVuIHBhdHRlcm4gb3IgY3JlYXRlIGEgcmVnZXgtY29tcGF0aWJsZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JywgeyBjb21waWxlOiB0cnVlIH0pKTsgLy89PiBbJyhhfGJ8YyknXVxuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JykpOyAvLz0+IFsnYScsICdiJywgJ2MnXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgYnJhY2VzID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IG91dHB1dCA9IFtdO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpbnB1dCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnJhY2VzLmNyZWF0ZShwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goLi4ucmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IFtdLmNvbmNhdChicmFjZXMuY3JlYXRlKGlucHV0LCBvcHRpb25zKSk7XG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmV4cGFuZCA9PT0gdHJ1ZSAmJiBvcHRpb25zLm5vZHVwZXMgPT09IHRydWUpIHtcbiAgICBvdXRwdXQgPSBbLi4ubmV3IFNldChvdXRwdXQpXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgd2l0aCB0aGUgZ2l2ZW4gYG9wdGlvbnNgLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBicmFjZXMucGFyc2UocGF0dGVybiwgWywgb3B0aW9uc10pO1xuICogY29uc3QgYXN0ID0gYnJhY2VzLnBhcnNlKCdhL3tiLGN9L2QnKTtcbiAqIGNvbnNvbGUubG9nKGFzdCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIEJyYWNlIHBhdHRlcm4gdG8gcGFyc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gQVNUXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5wYXJzZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiBwYXJzZShpbnB1dCwgb3B0aW9ucyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJyYWNlcyBzdHJpbmcgZnJvbSBhbiBBU1QsIG9yIGFuIEFTVCBub2RlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGxldCBhc3QgPSBicmFjZXMucGFyc2UoJ2Zvby97YSxifS9iYXInKTtcbiAqIGNvbnNvbGUubG9nKHN0cmluZ2lmeShhc3Qubm9kZXNbMl0pKTsgLy89PiAne2EsYn0nXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIEJyYWNlIHBhdHRlcm4gb3IgQVNULlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgZXhwYW5kZWQgdmFsdWVzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5icmFjZXMuc3RyaW5naWZ5ID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5KGJyYWNlcy5wYXJzZShpbnB1dCwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBzdHJpbmdpZnkoaW5wdXQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGJyYWNlIHBhdHRlcm4gaW50byBhIHJlZ2V4LWNvbXBhdGlibGUsIG9wdGltaXplZCBzdHJpbmcuXG4gKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1haW4gW2JyYWNlc10oI2JyYWNlcykgZnVuY3Rpb24gYnkgZGVmYXVsdC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMuY29tcGlsZSgnYS97YixjfS9kJykpO1xuICogLy89PiBbJ2EvKGJ8YykvZCddXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIEJyYWNlIHBhdHRlcm4gb3IgQVNULlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgZXhwYW5kZWQgdmFsdWVzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5icmFjZXMuY29tcGlsZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgaW5wdXQgPSBicmFjZXMucGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBjb21waWxlKGlucHV0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRXhwYW5kcyBhIGJyYWNlIHBhdHRlcm4gaW50byBhbiBhcnJheS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZVxuICogbWFpbiBbYnJhY2VzXSgjYnJhY2VzKSBmdW5jdGlvbiB3aGVuIGBvcHRpb25zLmV4cGFuZGAgaXMgdHJ1ZS4gQmVmb3JlXG4gKiB1c2luZyB0aGlzIG1ldGhvZCBpdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IHJlYWQgdGhlIFtwZXJmb3JtYW5jZSBub3Rlc10oI3BlcmZvcm1hbmNlKSlcbiAqIGFuZCBhZHZhbnRhZ2VzIG9mIHVzaW5nIFsuY29tcGlsZV0oI2NvbXBpbGUpIGluc3RlYWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzLmV4cGFuZCgnYS97YixjfS9kJykpO1xuICogLy89PiBbJ2EvYi9kJywgJ2EvYy9kJ107XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmAgQnJhY2UgcGF0dGVyblxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgZXhwYW5kZWQgdmFsdWVzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5icmFjZXMuZXhwYW5kID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICBpbnB1dCA9IGJyYWNlcy5wYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gZXhwYW5kKGlucHV0LCBvcHRpb25zKTtcblxuICAvLyBmaWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgaWYgc3BlY2lmaWVkXG4gIGlmIChvcHRpb25zLm5vZW1wdHkgPT09IHRydWUpIHtcbiAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBkdXBsaWNhdGVzIGlmIHNwZWNpZmllZFxuICBpZiAob3B0aW9ucy5ub2R1cGVzID09PSB0cnVlKSB7XG4gICAgcmVzdWx0ID0gWy4uLm5ldyBTZXQocmVzdWx0KV07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBicmFjZSBwYXR0ZXJuIGFuZCByZXR1cm5zIGVpdGhlciBhbiBleHBhbmRlZCBhcnJheVxuICogKGlmIGBvcHRpb25zLmV4cGFuZGAgaXMgdHJ1ZSksIGEgaGlnaGx5IG9wdGltaXplZCByZWdleC1jb21wYXRpYmxlIHN0cmluZy5cbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBbYnJhY2VzXSgjYnJhY2VzKSBmdW5jdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMuY3JlYXRlKCd1c2VyLXsyMDAuLjMwMH0vcHJvamVjdC17YSxiLGN9LXsxLi4xMH0nKSlcbiAqIC8vPT4gJ3VzZXItKDIwWzAtOV18MlsxLTldWzAtOV18MzAwKS9wcm9qZWN0LShhfGJ8YyktKFsxLTldfDEwKSdcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBCcmFjZSBwYXR0ZXJuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5jcmVhdGUgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAoaW5wdXQgPT09ICcnIHx8IGlucHV0Lmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4gW2lucHV0XTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zLmV4cGFuZCAhPT0gdHJ1ZVxuICAgID8gYnJhY2VzLmNvbXBpbGUoaW5wdXQsIG9wdGlvbnMpXG4gICAgOiBicmFjZXMuZXhwYW5kKGlucHV0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRXhwb3NlIFwiYnJhY2VzXCJcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJyYWNlcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBXSU5fU0xBU0ggPSAnXFxcXFxcXFwvJztcbmNvbnN0IFdJTl9OT19TTEFTSCA9IGBbXiR7V0lOX1NMQVNIfV1gO1xuXG4vKipcbiAqIFBvc2l4IGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBET1RfTElURVJBTCA9ICdcXFxcLic7XG5jb25zdCBQTFVTX0xJVEVSQUwgPSAnXFxcXCsnO1xuY29uc3QgUU1BUktfTElURVJBTCA9ICdcXFxcPyc7XG5jb25zdCBTTEFTSF9MSVRFUkFMID0gJ1xcXFwvJztcbmNvbnN0IE9ORV9DSEFSID0gJyg/PS4pJztcbmNvbnN0IFFNQVJLID0gJ1teL10nO1xuY29uc3QgRU5EX0FOQ0hPUiA9IGAoPzoke1NMQVNIX0xJVEVSQUx9fCQpYDtcbmNvbnN0IFNUQVJUX0FOQ0hPUiA9IGAoPzpefCR7U0xBU0hfTElURVJBTH0pYDtcbmNvbnN0IERPVFNfU0xBU0ggPSBgJHtET1RfTElURVJBTH17MSwyfSR7RU5EX0FOQ0hPUn1gO1xuY29uc3QgTk9fRE9UID0gYCg/ISR7RE9UX0xJVEVSQUx9KWA7XG5jb25zdCBOT19ET1RTID0gYCg/ISR7U1RBUlRfQU5DSE9SfSR7RE9UU19TTEFTSH0pYDtcbmNvbnN0IE5PX0RPVF9TTEFTSCA9IGAoPyEke0RPVF9MSVRFUkFMfXswLDF9JHtFTkRfQU5DSE9SfSlgO1xuY29uc3QgTk9fRE9UU19TTEFTSCA9IGAoPyEke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBRTUFSS19OT19ET1QgPSBgW14uJHtTTEFTSF9MSVRFUkFMfV1gO1xuY29uc3QgU1RBUiA9IGAke1FNQVJLfSo/YDtcblxuY29uc3QgUE9TSVhfQ0hBUlMgPSB7XG4gIERPVF9MSVRFUkFMLFxuICBQTFVTX0xJVEVSQUwsXG4gIFFNQVJLX0xJVEVSQUwsXG4gIFNMQVNIX0xJVEVSQUwsXG4gIE9ORV9DSEFSLFxuICBRTUFSSyxcbiAgRU5EX0FOQ0hPUixcbiAgRE9UU19TTEFTSCxcbiAgTk9fRE9ULFxuICBOT19ET1RTLFxuICBOT19ET1RfU0xBU0gsXG4gIE5PX0RPVFNfU0xBU0gsXG4gIFFNQVJLX05PX0RPVCxcbiAgU1RBUixcbiAgU1RBUlRfQU5DSE9SXG59O1xuXG4vKipcbiAqIFdpbmRvd3MgZ2xvYiByZWdleFxuICovXG5cbmNvbnN0IFdJTkRPV1NfQ0hBUlMgPSB7XG4gIC4uLlBPU0lYX0NIQVJTLFxuXG4gIFNMQVNIX0xJVEVSQUw6IGBbJHtXSU5fU0xBU0h9XWAsXG4gIFFNQVJLOiBXSU5fTk9fU0xBU0gsXG4gIFNUQVI6IGAke1dJTl9OT19TTEFTSH0qP2AsXG4gIERPVFNfU0xBU0g6IGAke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JClgLFxuICBOT19ET1Q6IGAoPyEke0RPVF9MSVRFUkFMfSlgLFxuICBOT19ET1RTOiBgKD8hKD86XnxbJHtXSU5fU0xBU0h9XSkke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgTk9fRE9UX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MCwxfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVFNfU0xBU0g6IGAoPyEke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgUU1BUktfTk9fRE9UOiBgW14uJHtXSU5fU0xBU0h9XWAsXG4gIFNUQVJUX0FOQ0hPUjogYCg/Ol58WyR7V0lOX1NMQVNIfV0pYCxcbiAgRU5EX0FOQ0hPUjogYCg/Olske1dJTl9TTEFTSH1dfCQpYFxufTtcblxuLyoqXG4gKiBQT1NJWCBCcmFja2V0IFJlZ2V4XG4gKi9cblxuY29uc3QgUE9TSVhfUkVHRVhfU09VUkNFID0ge1xuICBhbG51bTogJ2EtekEtWjAtOScsXG4gIGFscGhhOiAnYS16QS1aJyxcbiAgYXNjaWk6ICdcXFxceDAwLVxcXFx4N0YnLFxuICBibGFuazogJyBcXFxcdCcsXG4gIGNudHJsOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3RicsXG4gIGRpZ2l0OiAnMC05JyxcbiAgZ3JhcGg6ICdcXFxceDIxLVxcXFx4N0UnLFxuICBsb3dlcjogJ2EteicsXG4gIHByaW50OiAnXFxcXHgyMC1cXFxceDdFICcsXG4gIHB1bmN0OiAnXFxcXC0hXCIjJCUmXFwnKClcXFxcKissLi86Ozw9Pj9AW1xcXFxdXl9ge3x9ficsXG4gIHNwYWNlOiAnIFxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLFxuICB1cHBlcjogJ0EtWicsXG4gIHdvcmQ6ICdBLVphLXowLTlfJyxcbiAgeGRpZ2l0OiAnQS1GYS1mMC05J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgUkVHRVhfQkFDS1NMQVNIOiAvXFxcXCg/IVsqKz9eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTOiAvXlteQCFbXFxdLiwkKis/Xnt9KCl8XFxcXC9dKy8sXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlM6IC9bLSorPy5eJHt9KHwpW1xcXV0vLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUY6IC8oXFxcXD8pKChcXFcpKFxcMyopKS9nLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTDogLyhbLSorPy5eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0g6IC8oPzpcXFsuKj9bXlxcXFxdXFxdfFxcXFwoPz0uKSkvZyxcblxuICAvLyBSZXBsYWNlIGdsb2JzIHdpdGggZXF1aXZhbGVudCBwYXR0ZXJucyB0byByZWR1Y2UgcGFyc2luZyB0aW1lLlxuICBSRVBMQUNFTUVOVFM6IHtcbiAgICAnKioqJzogJyonLFxuICAgICcqKi8qKic6ICcqKicsXG4gICAgJyoqLyoqLyoqJzogJyoqJ1xuICB9LFxuXG4gIC8vIERpZ2l0c1xuICBDSEFSXzA6IDQ4LCAvKiAwICovXG4gIENIQVJfOTogNTcsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogNjUsIC8qIEEgKi9cbiAgQ0hBUl9MT1dFUkNBU0VfQTogOTcsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogOTAsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogMTIyLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiA0MCwgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOiA0MSwgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6IDQyLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAzOCwgLyogJiAqL1xuICBDSEFSX0FUOiA2NCwgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNIOiA5MiwgLyogXFwgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46IDEzLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogOTQsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogNTgsIC8qIDogKi9cbiAgQ0hBUl9DT01NQTogNDQsIC8qICwgKi9cbiAgQ0hBUl9ET1Q6IDQ2LCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAzNCwgLyogXCIgKi9cbiAgQ0hBUl9FUVVBTDogNjEsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAzMywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogMTIsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6IDQ3LCAvKiAvICovXG4gIENIQVJfR1JBVkVfQUNDRU5UOiA5NiwgLyogYCAqL1xuICBDSEFSX0hBU0g6IDM1LCAvKiAjICovXG4gIENIQVJfSFlQSEVOX01JTlVTOiA0NSwgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogNjAsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAxMjMsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiA5MSwgLyogWyAqL1xuICBDSEFSX0xJTkVfRkVFRDogMTAsIC8qIFxcbiAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFOiAxNjAsIC8qIFxcdTAwQTAgKi9cbiAgQ0hBUl9QRVJDRU5UOiAzNywgLyogJSAqL1xuICBDSEFSX1BMVVM6IDQzLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogNjMsIC8qID8gKi9cbiAgQ0hBUl9SSUdIVF9BTkdMRV9CUkFDS0VUOiA2MiwgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAxMjUsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogOTMsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046IDU5LCAvKiA7ICovXG4gIENIQVJfU0lOR0xFX1FVT1RFOiAzOSwgLyogJyAqL1xuICBDSEFSX1NQQUNFOiAzMiwgLyogICAqL1xuICBDSEFSX1RBQjogOSwgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogOTUsIC8qIF8gKi9cbiAgQ0hBUl9WRVJUSUNBTF9MSU5FOiAxMjQsIC8qIHwgKi9cbiAgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0U6IDY1Mjc5LCAvKiBcXHVGRUZGICovXG5cbiAgU0VQOiBwYXRoLnNlcCxcblxuICAvKipcbiAgICogQ3JlYXRlIEVYVEdMT0JfQ0hBUlNcbiAgICovXG5cbiAgZXh0Z2xvYkNoYXJzKGNoYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICchJzogeyB0eXBlOiAnbmVnYXRlJywgb3BlbjogJyg/Oig/ISg/OicsIGNsb3NlOiBgKSkke2NoYXJzLlNUQVJ9KWAgfSxcbiAgICAgICc/JzogeyB0eXBlOiAncW1hcmsnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpPycgfSxcbiAgICAgICcrJzogeyB0eXBlOiAncGx1cycsIG9wZW46ICcoPzonLCBjbG9zZTogJykrJyB9LFxuICAgICAgJyonOiB7IHR5cGU6ICdzdGFyJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKSonIH0sXG4gICAgICAnQCc6IHsgdHlwZTogJ2F0Jywgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGdsb2JDaGFycyh3aW4zMikge1xuICAgIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSA/IFdJTkRPV1NfQ0hBUlMgOiBQT1NJWF9DSEFSUztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB3aW4zMiA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG5jb25zdCB7XG4gIFJFR0VYX0JBQ0tTTEFTSCxcbiAgUkVHRVhfUkVNT1ZFX0JBQ0tTTEFTSCxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSUyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUxcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5leHBvcnRzLmlzT2JqZWN0ID0gdmFsID0+IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpO1xuZXhwb3J0cy5oYXNSZWdleENoYXJzID0gc3RyID0+IFJFR0VYX1NQRUNJQUxfQ0hBUlMudGVzdChzdHIpO1xuZXhwb3J0cy5pc1JlZ2V4Q2hhciA9IHN0ciA9PiBzdHIubGVuZ3RoID09PSAxICYmIGV4cG9ydHMuaGFzUmVnZXhDaGFycyhzdHIpO1xuZXhwb3J0cy5lc2NhcGVSZWdleCA9IHN0ciA9PiBzdHIucmVwbGFjZShSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTCwgJ1xcXFwkMScpO1xuZXhwb3J0cy50b1Bvc2l4U2xhc2hlcyA9IHN0ciA9PiBzdHIucmVwbGFjZShSRUdFWF9CQUNLU0xBU0gsICcvJyk7XG5cbmV4cG9ydHMucmVtb3ZlQmFja3NsYXNoZXMgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoUkVHRVhfUkVNT1ZFX0JBQ0tTTEFTSCwgbWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaCA9PT0gJ1xcXFwnID8gJycgOiBtYXRjaDtcbiAgfSk7XG59O1xuXG5leHBvcnRzLnN1cHBvcnRzTG9va2JlaGluZHMgPSAoKSA9PiB7XG4gIGNvbnN0IHNlZ3MgPSBwcm9jZXNzLnZlcnNpb24uc2xpY2UoMSkuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgaWYgKHNlZ3MubGVuZ3RoID09PSAzICYmIHNlZ3NbMF0gPj0gOSB8fCAoc2Vnc1swXSA9PT0gOCAmJiBzZWdzWzFdID49IDEwKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuaXNXaW5kb3dzID0gb3B0aW9ucyA9PiB7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLndpbmRvd3MgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBvcHRpb25zLndpbmRvd3M7XG4gIH1cbiAgcmV0dXJuIHdpbjMyID09PSB0cnVlIHx8IHBhdGguc2VwID09PSAnXFxcXCc7XG59O1xuXG5leHBvcnRzLmVzY2FwZUxhc3QgPSAoaW5wdXQsIGNoYXIsIGxhc3RJZHgpID0+IHtcbiAgY29uc3QgaWR4ID0gaW5wdXQubGFzdEluZGV4T2YoY2hhciwgbGFzdElkeCk7XG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpbnB1dFtpZHggLSAxXSA9PT0gJ1xcXFwnKSByZXR1cm4gZXhwb3J0cy5lc2NhcGVMYXN0KGlucHV0LCBjaGFyLCBpZHggLSAxKTtcbiAgcmV0dXJuIGAke2lucHV0LnNsaWNlKDAsIGlkeCl9XFxcXCR7aW5wdXQuc2xpY2UoaWR4KX1gO1xufTtcblxuZXhwb3J0cy5yZW1vdmVQcmVmaXggPSAoaW5wdXQsIHN0YXRlID0ge30pID0+IHtcbiAgbGV0IG91dHB1dCA9IGlucHV0O1xuICBpZiAob3V0cHV0LnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQuc2xpY2UoMik7XG4gICAgc3RhdGUucHJlZml4ID0gJy4vJztcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuZXhwb3J0cy53cmFwT3V0cHV0ID0gKGlucHV0LCBzdGF0ZSA9IHt9LCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgcHJlcGVuZCA9IG9wdGlvbnMuY29udGFpbnMgPyAnJyA6ICdeJztcbiAgY29uc3QgYXBwZW5kID0gb3B0aW9ucy5jb250YWlucyA/ICcnIDogJyQnO1xuXG4gIGxldCBvdXRwdXQgPSBgJHtwcmVwZW5kfSg/OiR7aW5wdXR9KSR7YXBwZW5kfWA7XG4gIGlmIChzdGF0ZS5uZWdhdGVkID09PSB0cnVlKSB7XG4gICAgb3V0cHV0ID0gYCg/Ol4oPyEke291dHB1dH0pLiokKWA7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IHtcbiAgQ0hBUl9BU1RFUklTSywgICAgICAgICAgICAgLyogKiAqL1xuICBDSEFSX0FULCAgICAgICAgICAgICAgICAgICAvKiBAICovXG4gIENIQVJfQkFDS1dBUkRfU0xBU0gsICAgICAgIC8qIFxcICovXG4gIENIQVJfQ09NTUEsICAgICAgICAgICAgICAgIC8qICwgKi9cbiAgQ0hBUl9ET1QsICAgICAgICAgICAgICAgICAgLyogLiAqL1xuICBDSEFSX0VYQ0xBTUFUSU9OX01BUkssICAgICAvKiAhICovXG4gIENIQVJfRk9SV0FSRF9TTEFTSCwgICAgICAgIC8qIC8gKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFLCAgICAgLyogeyAqL1xuICBDSEFSX0xFRlRfUEFSRU5USEVTRVMsICAgICAvKiAoICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCwgIC8qIFsgKi9cbiAgQ0hBUl9QTFVTLCAgICAgICAgICAgICAgICAgLyogKyAqL1xuICBDSEFSX1FVRVNUSU9OX01BUkssICAgICAgICAvKiA/ICovXG4gIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0UsICAgIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUywgICAgLyogKSAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICAvKiBdICovXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcblxuY29uc3QgaXNQYXRoU2VwYXJhdG9yID0gY29kZSA9PiB7XG4gIHJldHVybiBjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0ggfHwgY29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDtcbn07XG5cbmNvbnN0IGRlcHRoID0gdG9rZW4gPT4ge1xuICBpZiAodG9rZW4uaXNQcmVmaXggIT09IHRydWUpIHtcbiAgICB0b2tlbi5kZXB0aCA9IHRva2VuLmlzR2xvYnN0YXIgPyBJbmZpbml0eSA6IDE7XG4gIH1cbn07XG5cbi8qKlxuICogUXVpY2tseSBzY2FucyBhIGdsb2IgcGF0dGVybiBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGhhbmRmdWwgb2ZcbiAqIHVzZWZ1bCBwcm9wZXJ0aWVzLCBsaWtlIGBpc0dsb2JgLCBgcGF0aGAgKHRoZSBsZWFkaW5nIG5vbi1nbG9iLCBpZiBpdCBleGlzdHMpLFxuICogYGdsb2JgICh0aGUgYWN0dWFsIHBhdHRlcm4pLCBgbmVnYXRlZGAgKHRydWUgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYCFgIGJ1dCBub3RcbiAqIHdpdGggYCEoYCkgYW5kIGBuZWdhdGVkRXh0Z2xvYmAgKHRydWUgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYCEoYCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBtID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiBjb25zb2xlLmxvZyhwbS5zY2FuKCdmb28vYmFyLyouanMnKSk7XG4gKiB7IGlzR2xvYjogdHJ1ZSwgaW5wdXQ6ICdmb28vYmFyLyouanMnLCBiYXNlOiAnZm9vL2JhcicsIGdsb2I6ICcqLmpzJyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRva2VucyBhbmQgcmVnZXggc291cmNlIHN0cmluZy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3Qgc2NhbiA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSAxO1xuICBjb25zdCBzY2FuVG9FbmQgPSBvcHRzLnBhcnRzID09PSB0cnVlIHx8IG9wdHMuc2NhblRvRW5kID09PSB0cnVlO1xuICBjb25zdCBzbGFzaGVzID0gW107XG4gIGNvbnN0IHRva2VucyA9IFtdO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gIGxldCBzdHIgPSBpbnB1dDtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBsZXQgaXNCcmFjZSA9IGZhbHNlO1xuICBsZXQgaXNCcmFja2V0ID0gZmFsc2U7XG4gIGxldCBpc0dsb2IgPSBmYWxzZTtcbiAgbGV0IGlzRXh0Z2xvYiA9IGZhbHNlO1xuICBsZXQgaXNHbG9ic3RhciA9IGZhbHNlO1xuICBsZXQgYnJhY2VFc2NhcGVkID0gZmFsc2U7XG4gIGxldCBiYWNrc2xhc2hlcyA9IGZhbHNlO1xuICBsZXQgbmVnYXRlZCA9IGZhbHNlO1xuICBsZXQgbmVnYXRlZEV4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gIGxldCBicmFjZXMgPSAwO1xuICBsZXQgcHJldjtcbiAgbGV0IGNvZGU7XG4gIGxldCB0b2tlbiA9IHsgdmFsdWU6ICcnLCBkZXB0aDogMCwgaXNHbG9iOiBmYWxzZSB9O1xuXG4gIGNvbnN0IGVvcyA9ICgpID0+IGluZGV4ID49IGxlbmd0aDtcbiAgY29uc3QgcGVlayA9ICgpID0+IHN0ci5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiB7XG4gICAgcHJldiA9IGNvZGU7XG4gICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpO1xuICB9O1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgbGV0IG5leHQ7XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICBjb2RlID0gYWR2YW5jZSgpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgIGJyYWNlRXNjYXBlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoYnJhY2VFc2NhcGVkID09PSB0cnVlIHx8IGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgYnJhY2VzKys7XG5cbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfRE9UICYmIChjb2RlID0gYWR2YW5jZSgpKSA9PT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChicmFjZUVzY2FwZWQgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9DT01NQSkge1xuICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgICAgICBicmFjZXMtLTtcblxuICAgICAgICAgIGlmIChicmFjZXMgPT09IDApIHtcbiAgICAgICAgICAgIGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIHNsYXNoZXMucHVzaChpbmRleCk7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICB0b2tlbiA9IHsgdmFsdWU6ICcnLCBkZXB0aDogMCwgaXNHbG9iOiBmYWxzZSB9O1xuXG4gICAgICBpZiAoZmluaXNoZWQgPT09IHRydWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZXYgPT09IENIQVJfRE9UICYmIGluZGV4ID09PSAoc3RhcnQgKyAxKSkge1xuICAgICAgICBzdGFydCArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGFzdEluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9leHQgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYkNoYXIgPSBjb2RlID09PSBDSEFSX1BMVVNcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BVFxuICAgICAgICB8fCBjb2RlID09PSBDSEFSX0FTVEVSSVNLXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUks7XG5cbiAgICAgIGlmIChpc0V4dGdsb2JDaGFyID09PSB0cnVlICYmIHBlZWsoKSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgIGlzRXh0Z2xvYiA9IHRva2VuLmlzRXh0Z2xvYiA9IHRydWU7XG4gICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfRVhDTEFNQVRJT05fTUFSSyAmJiBpbmRleCA9PT0gc3RhcnQpIHtcbiAgICAgICAgICBuZWdhdGVkRXh0Z2xvYiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgd2hpbGUgKGVvcygpICE9PSB0cnVlICYmIChjb2RlID0gYWR2YW5jZSgpKSkge1xuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9BU1RFUklTSykge1xuICAgICAgaWYgKHByZXYgPT09IENIQVJfQVNURVJJU0spIGlzR2xvYnN0YXIgPSB0b2tlbi5pc0dsb2JzdGFyID0gdHJ1ZTtcbiAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9RVUVTVElPTl9NQVJLKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgd2hpbGUgKGVvcygpICE9PSB0cnVlICYmIChuZXh0ID0gYWR2YW5jZSgpKSkge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgaXNCcmFja2V0ID0gdG9rZW4uaXNCcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAob3B0cy5ub25lZ2F0ZSAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgaW5kZXggPT09IHN0YXJ0KSB7XG4gICAgICBuZWdhdGVkID0gdG9rZW4ubmVnYXRlZCA9IHRydWU7XG4gICAgICBzdGFydCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9wYXJlbiAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0xFRlRfUEFSRU5USEVTRVMpIHtcbiAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgd2hpbGUgKGVvcygpICE9PSB0cnVlICYmIChjb2RlID0gYWR2YW5jZSgpKSkge1xuICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX0xFRlRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgY29kZSA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaXNHbG9iID09PSB0cnVlKSB7XG4gICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLm5vZXh0ID09PSB0cnVlKSB7XG4gICAgaXNFeHRnbG9iID0gZmFsc2U7XG4gICAgaXNHbG9iID0gZmFsc2U7XG4gIH1cblxuICBsZXQgYmFzZSA9IHN0cjtcbiAgbGV0IHByZWZpeCA9ICcnO1xuICBsZXQgZ2xvYiA9ICcnO1xuXG4gIGlmIChzdGFydCA+IDApIHtcbiAgICBwcmVmaXggPSBzdHIuc2xpY2UoMCwgc3RhcnQpO1xuICAgIHN0ciA9IHN0ci5zbGljZShzdGFydCk7XG4gICAgbGFzdEluZGV4IC09IHN0YXJ0O1xuICB9XG5cbiAgaWYgKGJhc2UgJiYgaXNHbG9iID09PSB0cnVlICYmIGxhc3RJbmRleCA+IDApIHtcbiAgICBiYXNlID0gc3RyLnNsaWNlKDAsIGxhc3RJbmRleCk7XG4gICAgZ2xvYiA9IHN0ci5zbGljZShsYXN0SW5kZXgpO1xuICB9IGVsc2UgaWYgKGlzR2xvYiA9PT0gdHJ1ZSkge1xuICAgIGJhc2UgPSAnJztcbiAgICBnbG9iID0gc3RyO1xuICB9IGVsc2Uge1xuICAgIGJhc2UgPSBzdHI7XG4gIH1cblxuICBpZiAoYmFzZSAmJiBiYXNlICE9PSAnJyAmJiBiYXNlICE9PSAnLycgJiYgYmFzZSAhPT0gc3RyKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihiYXNlLmNoYXJDb2RlQXQoYmFzZS5sZW5ndGggLSAxKSkpIHtcbiAgICAgIGJhc2UgPSBiYXNlLnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy51bmVzY2FwZSA9PT0gdHJ1ZSkge1xuICAgIGlmIChnbG9iKSBnbG9iID0gdXRpbHMucmVtb3ZlQmFja3NsYXNoZXMoZ2xvYik7XG5cbiAgICBpZiAoYmFzZSAmJiBiYWNrc2xhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgYmFzZSA9IHV0aWxzLnJlbW92ZUJhY2tzbGFzaGVzKGJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHByZWZpeCxcbiAgICBpbnB1dCxcbiAgICBzdGFydCxcbiAgICBiYXNlLFxuICAgIGdsb2IsXG4gICAgaXNCcmFjZSxcbiAgICBpc0JyYWNrZXQsXG4gICAgaXNHbG9iLFxuICAgIGlzRXh0Z2xvYixcbiAgICBpc0dsb2JzdGFyLFxuICAgIG5lZ2F0ZWQsXG4gICAgbmVnYXRlZEV4dGdsb2JcbiAgfTtcblxuICBpZiAob3B0cy50b2tlbnMgPT09IHRydWUpIHtcbiAgICBzdGF0ZS5tYXhEZXB0aCA9IDA7XG4gICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICB9XG4gICAgc3RhdGUudG9rZW5zID0gdG9rZW5zO1xuICB9XG5cbiAgaWYgKG9wdHMucGFydHMgPT09IHRydWUgfHwgb3B0cy50b2tlbnMgPT09IHRydWUpIHtcbiAgICBsZXQgcHJldkluZGV4O1xuXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgc2xhc2hlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBuID0gcHJldkluZGV4ID8gcHJldkluZGV4ICsgMSA6IHN0YXJ0O1xuICAgICAgY29uc3QgaSA9IHNsYXNoZXNbaWR4XTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQuc2xpY2UobiwgaSk7XG4gICAgICBpZiAob3B0cy50b2tlbnMpIHtcbiAgICAgICAgaWYgKGlkeCA9PT0gMCAmJiBzdGFydCAhPT0gMCkge1xuICAgICAgICAgIHRva2Vuc1tpZHhdLmlzUHJlZml4ID0gdHJ1ZTtcbiAgICAgICAgICB0b2tlbnNbaWR4XS52YWx1ZSA9IHByZWZpeDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnNbaWR4XS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGRlcHRoKHRva2Vuc1tpZHhdKTtcbiAgICAgICAgc3RhdGUubWF4RGVwdGggKz0gdG9rZW5zW2lkeF0uZGVwdGg7XG4gICAgICB9XG4gICAgICBpZiAoaWR4ICE9PSAwIHx8IHZhbHVlICE9PSAnJykge1xuICAgICAgICBwYXJ0cy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHByZXZJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZJbmRleCAmJiBwcmV2SW5kZXggKyAxIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnNsaWNlKHByZXZJbmRleCArIDEpO1xuICAgICAgcGFydHMucHVzaCh2YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRzLnRva2Vucykge1xuICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRlcHRoKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICBzdGF0ZS5tYXhEZXB0aCArPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLmRlcHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLnNsYXNoZXMgPSBzbGFzaGVzO1xuICAgIHN0YXRlLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNjYW47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBQT1NJWF9SRUdFWF9TT1VSQ0UsXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsXG4gIFJFUExBQ0VNRU5UU1xufSA9IGNvbnN0YW50cztcblxuLyoqXG4gKiBIZWxwZXJzXG4gKi9cblxuY29uc3QgZXhwYW5kUmFuZ2UgPSAoYXJncywgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwYW5kUmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5leHBhbmRSYW5nZSguLi5hcmdzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFyZ3Muc29ydCgpO1xuICBjb25zdCB2YWx1ZSA9IGBbJHthcmdzLmpvaW4oJy0nKX1dYDtcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgKi9cbiAgICBuZXcgUmVnRXhwKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXR1cm4gYXJncy5tYXAodiA9PiB1dGlscy5lc2NhcGVSZWdleCh2KSkuam9pbignLi4nKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBtZXNzYWdlIGZvciBhIHN5bnRheCBlcnJvclxuICovXG5cbmNvbnN0IHN5bnRheEVycm9yID0gKHR5cGUsIGNoYXIpID0+IHtcbiAgcmV0dXJuIGBNaXNzaW5nICR7dHlwZX06IFwiJHtjaGFyfVwiIC0gdXNlIFwiXFxcXFxcXFwke2NoYXJ9XCIgdG8gbWF0Y2ggbGl0ZXJhbCBjaGFyYWN0ZXJzYDtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGlucHV0IHN0cmluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpbnB1dCA9IFJFUExBQ0VNRU5UU1tpbnB1dF0gfHwgaW5wdXQ7XG5cbiAgY29uc3Qgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBtYXggPSB0eXBlb2Ygb3B0cy5tYXhMZW5ndGggPT09ICdudW1iZXInID8gTWF0aC5taW4oTUFYX0xFTkdUSCwgb3B0cy5tYXhMZW5ndGgpIDogTUFYX0xFTkdUSDtcblxuICBsZXQgbGVuID0gaW5wdXQubGVuZ3RoO1xuICBpZiAobGVuID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGg6ICR7bGVufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke21heH1gKTtcbiAgfVxuXG4gIGNvbnN0IGJvcyA9IHsgdHlwZTogJ2JvcycsIHZhbHVlOiAnJywgb3V0cHV0OiBvcHRzLnByZXBlbmQgfHwgJycgfTtcbiAgY29uc3QgdG9rZW5zID0gW2Jvc107XG5cbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgd2luMzIgPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG5cbiAgLy8gY3JlYXRlIGNvbnN0YW50cyBiYXNlZCBvbiBwbGF0Zm9ybSwgZm9yIHdpbmRvd3Mgb3IgcG9zaXhcbiAgY29uc3QgUExBVEZPUk1fQ0hBUlMgPSBjb25zdGFudHMuZ2xvYkNoYXJzKHdpbjMyKTtcbiAgY29uc3QgRVhUR0xPQl9DSEFSUyA9IGNvbnN0YW50cy5leHRnbG9iQ2hhcnMoUExBVEZPUk1fQ0hBUlMpO1xuXG4gIGNvbnN0IHtcbiAgICBET1RfTElURVJBTCxcbiAgICBQTFVTX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RfU0xBU0gsXG4gICAgTk9fRE9UU19TTEFTSCxcbiAgICBRTUFSSyxcbiAgICBRTUFSS19OT19ET1QsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IFBMQVRGT1JNX0NIQVJTO1xuXG4gIGNvbnN0IGdsb2JzdGFyID0gb3B0cyA9PiB7XG4gICAgcmV0dXJuIGAoJHtjYXB0dXJlfSg/Oig/ISR7U1RBUlRfQU5DSE9SfSR7b3B0cy5kb3QgPyBET1RTX1NMQVNIIDogRE9UX0xJVEVSQUx9KS4pKj8pYDtcbiAgfTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gJycgOiBOT19ET1Q7XG4gIGNvbnN0IHFtYXJrTm9Eb3QgPSBvcHRzLmRvdCA/IFFNQVJLIDogUU1BUktfTk9fRE9UO1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/IGdsb2JzdGFyKG9wdHMpIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgLy8gbWluaW1hdGNoIG9wdGlvbnMgc3VwcG9ydFxuICBpZiAodHlwZW9mIG9wdHMubm9leHQgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMubm9leHRnbG9iID0gb3B0cy5ub2V4dDtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGlucHV0LFxuICAgIGluZGV4OiAtMSxcbiAgICBzdGFydDogMCxcbiAgICBkb3Q6IG9wdHMuZG90ID09PSB0cnVlLFxuICAgIGNvbnN1bWVkOiAnJyxcbiAgICBvdXRwdXQ6ICcnLFxuICAgIHByZWZpeDogJycsXG4gICAgYmFja3RyYWNrOiBmYWxzZSxcbiAgICBuZWdhdGVkOiBmYWxzZSxcbiAgICBicmFja2V0czogMCxcbiAgICBicmFjZXM6IDAsXG4gICAgcGFyZW5zOiAwLFxuICAgIHF1b3RlczogMCxcbiAgICBnbG9ic3RhcjogZmFsc2UsXG4gICAgdG9rZW5zXG4gIH07XG5cbiAgaW5wdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGVuID0gaW5wdXQubGVuZ3RoO1xuXG4gIGNvbnN0IGV4dGdsb2JzID0gW107XG4gIGNvbnN0IGJyYWNlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgcHJldiA9IGJvcztcbiAgbGV0IHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUb2tlbml6aW5nIGhlbHBlcnNcbiAgICovXG5cbiAgY29uc3QgZW9zID0gKCkgPT4gc3RhdGUuaW5kZXggPT09IGxlbiAtIDE7XG4gIGNvbnN0IHBlZWsgPSBzdGF0ZS5wZWVrID0gKG4gPSAxKSA9PiBpbnB1dFtzdGF0ZS5pbmRleCArIG5dO1xuICBjb25zdCBhZHZhbmNlID0gc3RhdGUuYWR2YW5jZSA9ICgpID0+IGlucHV0Wysrc3RhdGUuaW5kZXhdIHx8ICcnO1xuICBjb25zdCByZW1haW5pbmcgPSAoKSA9PiBpbnB1dC5zbGljZShzdGF0ZS5pbmRleCArIDEpO1xuICBjb25zdCBjb25zdW1lID0gKHZhbHVlID0gJycsIG51bSA9IDApID0+IHtcbiAgICBzdGF0ZS5jb25zdW1lZCArPSB2YWx1ZTtcbiAgICBzdGF0ZS5pbmRleCArPSBudW07XG4gIH07XG5cbiAgY29uc3QgYXBwZW5kID0gdG9rZW4gPT4ge1xuICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuICAgIGNvbnN1bWUodG9rZW4udmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IG5lZ2F0ZSA9ICgpID0+IHtcbiAgICBsZXQgY291bnQgPSAxO1xuXG4gICAgd2hpbGUgKHBlZWsoKSA9PT0gJyEnICYmIChwZWVrKDIpICE9PSAnKCcgfHwgcGVlaygzKSA9PT0gJz8nKSkge1xuICAgICAgYWR2YW5jZSgpO1xuICAgICAgc3RhdGUuc3RhcnQrKztcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ICUgMiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRlLm5lZ2F0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgaW5jcmVtZW50ID0gdHlwZSA9PiB7XG4gICAgc3RhdGVbdHlwZV0rKztcbiAgICBzdGFjay5wdXNoKHR5cGUpO1xuICB9O1xuXG4gIGNvbnN0IGRlY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdLS07XG4gICAgc3RhY2sucG9wKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1c2ggdG9rZW5zIG9udG8gdGhlIHRva2VucyBhcnJheS4gVGhpcyBoZWxwZXIgc3BlZWRzIHVwXG4gICAqIHRva2VuaXppbmcgYnkgMSkgaGVscGluZyB1cyBhdm9pZCBiYWNrdHJhY2tpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIDIpIGhlbHBpbmcgdXMgYXZvaWQgY3JlYXRpbmcgZXh0cmEgdG9rZW5zIHdoZW4gY29uc2VjdXRpdmVcbiAgICogY2hhcmFjdGVycyBhcmUgcGxhaW4gdGV4dC4gVGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgc2ltcGxpZmllc1xuICAgKiBsb29rYmVoaW5kcy5cbiAgICovXG5cbiAgY29uc3QgcHVzaCA9IHRvayA9PiB7XG4gICAgaWYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJykge1xuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHRvay50eXBlID09PSAnY29tbWEnIHx8IHRvay50eXBlID09PSAnYnJhY2UnKTtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYiA9IHRvay5leHRnbG9iID09PSB0cnVlIHx8IChleHRnbG9icy5sZW5ndGggJiYgKHRvay50eXBlID09PSAncGlwZScgfHwgdG9rLnR5cGUgPT09ICdwYXJlbicpKTtcblxuICAgICAgaWYgKHRvay50eXBlICE9PSAnc2xhc2gnICYmIHRvay50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2Lm91dHB1dC5sZW5ndGgpO1xuICAgICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgPSAnKic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYub3V0cHV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRnbG9icy5sZW5ndGggJiYgdG9rLnR5cGUgIT09ICdwYXJlbicpIHtcbiAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmlubmVyICs9IHRvay52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rLnZhbHVlIHx8IHRvay5vdXRwdXQpIGFwcGVuZCh0b2spO1xuICAgIGlmIChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ3RleHQnICYmIHRvay50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gdG9rLnZhbHVlO1xuICAgICAgcHJldi5vdXRwdXQgPSAocHJldi5vdXRwdXQgfHwgJycpICsgdG9rLnZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRvay5wcmV2ID0gcHJldjtcbiAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgIHByZXYgPSB0b2s7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYk9wZW4gPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHsgLi4uRVhUR0xPQl9DSEFSU1t2YWx1ZV0sIGNvbmRpdGlvbnM6IDEsIGlubmVyOiAnJyB9O1xuXG4gICAgdG9rZW4ucHJldiA9IHByZXY7XG4gICAgdG9rZW4ucGFyZW5zID0gc3RhdGUucGFyZW5zO1xuICAgIHRva2VuLm91dHB1dCA9IHN0YXRlLm91dHB1dDtcbiAgICBjb25zdCBvdXRwdXQgPSAob3B0cy5jYXB0dXJlID8gJygnIDogJycpICsgdG9rZW4ub3BlbjtcblxuICAgIGluY3JlbWVudCgncGFyZW5zJyk7XG4gICAgcHVzaCh7IHR5cGUsIHZhbHVlLCBvdXRwdXQ6IHN0YXRlLm91dHB1dCA/ICcnIDogT05FX0NIQVIgfSk7XG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlOiBhZHZhbmNlKCksIG91dHB1dCB9KTtcbiAgICBleHRnbG9icy5wdXNoKHRva2VuKTtcbiAgfTtcblxuICBjb25zdCBleHRnbG9iQ2xvc2UgPSB0b2tlbiA9PiB7XG4gICAgbGV0IG91dHB1dCA9IHRva2VuLmNsb3NlICsgKG9wdHMuY2FwdHVyZSA/ICcpJyA6ICcnKTtcbiAgICBsZXQgcmVzdDtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnbmVnYXRlJykge1xuICAgICAgbGV0IGV4dGdsb2JTdGFyID0gc3RhcjtcblxuICAgICAgaWYgKHRva2VuLmlubmVyICYmIHRva2VuLmlubmVyLmxlbmd0aCA+IDEgJiYgdG9rZW4uaW5uZXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRnbG9iU3RhciA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0Z2xvYlN0YXIgIT09IHN0YXIgfHwgZW9zKCkgfHwgL15cXCkrJC8udGVzdChyZW1haW5pbmcoKSkpIHtcbiAgICAgICAgb3V0cHV0ID0gdG9rZW4uY2xvc2UgPSBgKSQpKSR7ZXh0Z2xvYlN0YXJ9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLmlubmVyLmluY2x1ZGVzKCcqJykgJiYgKHJlc3QgPSByZW1haW5pbmcoKSkgJiYgL15cXC5bXlxcXFwvLl0rJC8udGVzdChyZXN0KSkge1xuICAgICAgICAvLyBBbnkgbm9uLW1hZ2ljYWwgc3RyaW5nIChgLnRzYCkgb3IgZXZlbiBuZXN0ZWQgZXhwcmVzc2lvbiAoYC57dHMsdHN4fWApIGNhbiBmb2xsb3cgYWZ0ZXIgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwYXJzZSB0aGUgc3RyaW5nIGFuZCB1c2UgaXQgaW4gdGhlIG91dHB1dCBvZiB0aGUgb3JpZ2luYWwgcGF0dGVybi5cbiAgICAgICAgLy8gU3VpdGFibGUgcGF0dGVybnM6IGAvISgqLmQpLnRzYCwgYC8hKCouZCkue3RzLHRzeH1gLCBgKiovISgqLWRiZykuQChqcylgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBEaXNhYmxpbmcgdGhlIGBmYXN0cGF0aHNgIG9wdGlvbiBkdWUgdG8gYSBwcm9ibGVtIHdpdGggcGFyc2luZyBzdHJpbmdzIGFzIGAudHNgIGluIHRoZSBwYXR0ZXJuIGxpa2UgYCoqLyEoKi5kKS50c2AuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBwYXJzZShyZXN0LCB7IC4uLm9wdGlvbnMsIGZhc3RwYXRoczogZmFsc2UgfSkub3V0cHV0O1xuXG4gICAgICAgIG91dHB1dCA9IHRva2VuLmNsb3NlID0gYCkke2V4cHJlc3Npb259KSR7ZXh0Z2xvYlN0YXJ9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5wcmV2LnR5cGUgPT09ICdib3MnKSB7XG4gICAgICAgIHN0YXRlLm5lZ2F0ZWRFeHRnbG9iID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dCB9KTtcbiAgICBkZWNyZW1lbnQoJ3BhcmVucycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGYXN0IHBhdGhzXG4gICAqL1xuXG4gIGlmIChvcHRzLmZhc3RwYXRocyAhPT0gZmFsc2UgJiYgIS8oXlsqIV18Wy8oKVtcXF17fVwiXSkvLnRlc3QoaW5wdXQpKSB7XG4gICAgbGV0IGJhY2tzbGFzaGVzID0gZmFsc2U7XG5cbiAgICBsZXQgb3V0cHV0ID0gaW5wdXQucmVwbGFjZShSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsIChtLCBlc2MsIGNoYXJzLCBmaXJzdCwgcmVzdCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChmaXJzdCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJz8nKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHFtYXJrTm9Eb3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFFNQVJLLnJlcGVhdChjaGFycy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICcuJykge1xuICAgICAgICByZXR1cm4gRE9UX0xJVEVSQUwucmVwZWF0KGNoYXJzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJyonKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IHN0YXIgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXNjID8gbSA6IGBcXFxcJHttfWA7XG4gICAgfSk7XG5cbiAgICBpZiAoYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcKy9nLCBtID0+IHtcbiAgICAgICAgICByZXR1cm4gbS5sZW5ndGggJSAyID09PSAwID8gJ1xcXFxcXFxcJyA6IChtID8gJ1xcXFwnIDogJycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3V0cHV0ID09PSBpbnB1dCAmJiBvcHRzLmNvbnRhaW5zID09PSB0cnVlKSB7XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy53cmFwT3V0cHV0KG91dHB1dCwgc3RhdGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZSBpbnB1dCB1bnRpbCB3ZSByZWFjaCBlbmQtb2Ytc3RyaW5nXG4gICAqL1xuXG4gIHdoaWxlICghZW9zKCkpIHtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcdTAwMDAnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVkIGNoYXJhY3RlcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcXFwnKSB7XG4gICAgICBjb25zdCBuZXh0ID0gcGVlaygpO1xuXG4gICAgICBpZiAobmV4dCA9PT0gJy8nICYmIG9wdHMuYmFzaCAhPT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHQgPT09ICcuJyB8fCBuZXh0ID09PSAnOycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghbmV4dCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCc7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sbGFwc2Ugc2xhc2hlcyB0byByZWR1Y2UgcG90ZW50aWFsIGZvciBleHBsb2l0c1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXlxcXFwrLy5leGVjKHJlbWFpbmluZygpKTtcbiAgICAgIGxldCBzbGFzaGVzID0gMDtcblxuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzBdLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgc2xhc2hlcyA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgc3RhdGUuaW5kZXggKz0gc2xhc2hlcztcbiAgICAgICAgaWYgKHNsYXNoZXMgJSAyICE9PSAwKSB7XG4gICAgICAgICAgdmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuYnJhY2tldHMgPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzcywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBicmFja2V0LlxuICAgICAqL1xuXG4gICAgaWYgKHN0YXRlLmJyYWNrZXRzID4gMCAmJiAodmFsdWUgIT09ICddJyB8fCBwcmV2LnZhbHVlID09PSAnWycgfHwgcHJldi52YWx1ZSA9PT0gJ1teJykpIHtcbiAgICAgIGlmIChvcHRzLnBvc2l4ICE9PSBmYWxzZSAmJiB2YWx1ZSA9PT0gJzonKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gcHJldi52YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgaWYgKGlubmVyLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICBwcmV2LnBvc2l4ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpbm5lci5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBwcmV2LnZhbHVlLmxhc3RJbmRleE9mKCdbJyk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSBwcmV2LnZhbHVlLnNsaWNlKDAsIGlkeCk7XG4gICAgICAgICAgICBjb25zdCByZXN0ID0gcHJldi52YWx1ZS5zbGljZShpZHggKyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l4ID0gUE9TSVhfUkVHRVhfU09VUkNFW3Jlc3RdO1xuICAgICAgICAgICAgaWYgKHBvc2l4KSB7XG4gICAgICAgICAgICAgIHByZXYudmFsdWUgPSBwcmUgKyBwb3NpeDtcbiAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICAgIGlmICghYm9zLm91dHB1dCAmJiB0b2tlbnMuaW5kZXhPZihwcmV2KSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJvcy5vdXRwdXQgPSBPTkVfQ0hBUjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCh2YWx1ZSA9PT0gJ1snICYmIHBlZWsoKSAhPT0gJzonKSB8fCAodmFsdWUgPT09ICctJyAmJiBwZWVrKCkgPT09ICddJykpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSAnXScgJiYgKHByZXYudmFsdWUgPT09ICdbJyB8fCBwcmV2LnZhbHVlID09PSAnW14nKSkge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5wb3NpeCA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gJyEnICYmIHByZXYudmFsdWUgPT09ICdbJykge1xuICAgICAgICB2YWx1ZSA9ICdeJztcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgd2UncmUgaW5zaWRlIGEgcXVvdGVkIHN0cmluZywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBkb3VibGUgcXVvdGUuXG4gICAgICovXG5cbiAgICBpZiAoc3RhdGUucXVvdGVzID09PSAxICYmIHZhbHVlICE9PSAnXCInKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmVzY2FwZVJlZ2V4KHZhbHVlKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvdWJsZSBxdW90ZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1wiJykge1xuICAgICAgc3RhdGUucXVvdGVzID0gc3RhdGUucXVvdGVzID09PSAxID8gMCA6IDE7XG4gICAgICBpZiAob3B0cy5rZWVwUXVvdGVzID09PSB0cnVlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJygnKSB7XG4gICAgICBpbmNyZW1lbnQoJ3BhcmVucycpO1xuICAgICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnKScpIHtcbiAgICAgIGlmIChzdGF0ZS5wYXJlbnMgPT09IDAgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ29wZW5pbmcnLCAnKCcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0Z2xvYiA9IGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGV4dGdsb2IgJiYgc3RhdGUucGFyZW5zID09PSBleHRnbG9iLnBhcmVucyArIDEpIHtcbiAgICAgICAgZXh0Z2xvYkNsb3NlKGV4dGdsb2JzLnBvcCgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCB2YWx1ZSwgb3V0cHV0OiBzdGF0ZS5wYXJlbnMgPyAnKScgOiAnXFxcXCknIH0pO1xuICAgICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNxdWFyZSBicmFja2V0c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnWycpIHtcbiAgICAgIGlmIChvcHRzLm5vYnJhY2tldCA9PT0gdHJ1ZSB8fCAhcmVtYWluaW5nKCkuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBpZiAob3B0cy5ub2JyYWNrZXQgIT09IHRydWUgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICddJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY3JlbWVudCgnYnJhY2tldHMnKTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdicmFja2V0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICddJykge1xuICAgICAgaWYgKG9wdHMubm9icmFja2V0ID09PSB0cnVlIHx8IChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnICYmIHByZXYudmFsdWUubGVuZ3RoID09PSAxKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBgXFxcXCR7dmFsdWV9YCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5icmFja2V0cyA9PT0gMCkge1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignb3BlbmluZycsICdbJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogYFxcXFwke3ZhbHVlfWAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkZWNyZW1lbnQoJ2JyYWNrZXRzJyk7XG5cbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHByZXYudmFsdWUuc2xpY2UoMSk7XG4gICAgICBpZiAocHJldi5wb3NpeCAhPT0gdHJ1ZSAmJiBwcmV2VmFsdWVbMF0gPT09ICdeJyAmJiAhcHJldlZhbHVlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgdmFsdWUgPSBgLyR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICAgIC8vIGFzc3VtZSB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSBmYWxzZSB8fCB1dGlscy5oYXNSZWdleENoYXJzKHByZXZWYWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVzY2FwZWQgPSB1dGlscy5lc2NhcGVSZWdleChwcmV2LnZhbHVlKTtcbiAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgICAgLy8gYXNzdW1lIHdlIHNob3VsZCBlc2NhcGUgdGhlIGJyYWNrZXRzIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBlc2NhcGVkO1xuICAgICAgICBwcmV2LnZhbHVlID0gZXNjYXBlZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIG5vdGhpbmcsIHRyeSB0byBtYXRjaCBib3RoXG4gICAgICBwcmV2LnZhbHVlID0gYCgke2NhcHR1cmV9JHtlc2NhcGVkfXwke3ByZXYudmFsdWV9KWA7XG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi52YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyYWNlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAneycgJiYgb3B0cy5ub2JyYWNlICE9PSB0cnVlKSB7XG4gICAgICBpbmNyZW1lbnQoJ2JyYWNlcycpO1xuXG4gICAgICBjb25zdCBvcGVuID0ge1xuICAgICAgICB0eXBlOiAnYnJhY2UnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3V0cHV0OiAnKCcsXG4gICAgICAgIG91dHB1dEluZGV4OiBzdGF0ZS5vdXRwdXQubGVuZ3RoLFxuICAgICAgICB0b2tlbnNJbmRleDogc3RhdGUudG9rZW5zLmxlbmd0aFxuICAgICAgfTtcblxuICAgICAgYnJhY2VzLnB1c2gob3Blbik7XG4gICAgICBwdXNoKG9wZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnfScpIHtcbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKG9wdHMubm9icmFjZSA9PT0gdHJ1ZSB8fCAhYnJhY2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0ID0gJyknO1xuXG4gICAgICBpZiAoYnJhY2UuZG90cyA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBhcnIgPSB0b2tlbnMuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSAhPT0gJ2RvdHMnKSB7XG4gICAgICAgICAgICByYW5nZS51bnNoaWZ0KGFycltpXS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0ID0gZXhwYW5kUmFuZ2UocmFuZ2UsIG9wdHMpO1xuICAgICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJhY2UuY29tbWEgIT09IHRydWUgJiYgYnJhY2UuZG90cyAhPT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgYnJhY2Uub3V0cHV0SW5kZXgpO1xuICAgICAgICBjb25zdCB0b2tzID0gc3RhdGUudG9rZW5zLnNsaWNlKGJyYWNlLnRva2Vuc0luZGV4KTtcbiAgICAgICAgYnJhY2UudmFsdWUgPSBicmFjZS5vdXRwdXQgPSAnXFxcXHsnO1xuICAgICAgICB2YWx1ZSA9IG91dHB1dCA9ICdcXFxcfSc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IG91dDtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRva3MpIHtcbiAgICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gKHQub3V0cHV0IHx8IHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnYnJhY2UnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgZGVjcmVtZW50KCdicmFjZXMnKTtcbiAgICAgIGJyYWNlcy5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBpcGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICd8Jykge1xuICAgICAgaWYgKGV4dGdsb2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0Z2xvYnNbZXh0Z2xvYnMubGVuZ3RoIC0gMV0uY29uZGl0aW9ucysrO1xuICAgICAgfVxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21tYXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJywnKSB7XG4gICAgICBsZXQgb3V0cHV0ID0gdmFsdWU7XG5cbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChicmFjZSAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gJ2JyYWNlcycpIHtcbiAgICAgICAgYnJhY2UuY29tbWEgPSB0cnVlO1xuICAgICAgICBvdXRwdXQgPSAnfCc7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xhc2hlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLycpIHtcbiAgICAgIC8vIGlmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdsb2IgaXMgXCIuL1wiLCBhZHZhbmNlIHRoZSBzdGFydFxuICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgaW5kZXgsIGFuZCBkb24ndCBhZGQgdGhlIFwiLi9cIiBjaGFyYWN0ZXJzXG4gICAgICAvLyB0byB0aGUgc3RhdGUuIFRoaXMgZ3JlYXRseSBzaW1wbGlmaWVzIGxvb2tiZWhpbmRzIHdoZW5cbiAgICAgIC8vIGNoZWNraW5nIGZvciBCT1MgY2hhcmFjdGVycyBsaWtlIFwiIVwiIGFuZCBcIi5cIiAobm90IFwiLi9cIilcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdkb3QnICYmIHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCArIDEpIHtcbiAgICAgICAgc3RhdGUuc3RhcnQgPSBzdGF0ZS5pbmRleCArIDE7XG4gICAgICAgIHN0YXRlLmNvbnN1bWVkID0gJyc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuICAgICAgICB0b2tlbnMucG9wKCk7XG4gICAgICAgIHByZXYgPSBib3M7IC8vIHJlc2V0IFwicHJldlwiIHRvIHRoZSBmaXJzdCB0b2tlblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlLCBvdXRwdXQ6IFNMQVNIX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEb3RzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcuJykge1xuICAgICAgaWYgKHN0YXRlLmJyYWNlcyA+IDAgJiYgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBpZiAocHJldi52YWx1ZSA9PT0gJy4nKSBwcmV2Lm91dHB1dCA9IERPVF9MSVRFUkFMO1xuICAgICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHByZXYudHlwZSA9ICdkb3RzJztcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gdmFsdWU7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIGJyYWNlLmRvdHMgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChzdGF0ZS5icmFjZXMgKyBzdGF0ZS5wYXJlbnMpID09PSAwICYmIHByZXYudHlwZSAhPT0gJ2JvcycgJiYgcHJldi50eXBlICE9PSAnc2xhc2gnKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IERPVF9MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSwgb3V0cHV0OiBET1RfTElURVJBTCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXN0aW9uIG1hcmtzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICc/Jykge1xuICAgICAgY29uc3QgaXNHcm91cCA9IHByZXYgJiYgcHJldi52YWx1ZSA9PT0gJygnO1xuICAgICAgaWYgKCFpc0dyb3VwICYmIG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBleHRnbG9iT3BlbigncW1hcmsnLCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdwYXJlbicpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHBlZWsoKTtcbiAgICAgICAgbGV0IG91dHB1dCA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSAnPCcgJiYgIXV0aWxzLnN1cHBvcnRzTG9va2JlaGluZHMoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZS5qcyB2MTAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkIGZvciByZWdleCBsb29rYmVoaW5kcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChwcmV2LnZhbHVlID09PSAnKCcgJiYgIS9bIT08Ol0vLnRlc3QobmV4dCkpIHx8IChuZXh0ID09PSAnPCcgJiYgIS88KFshPV18XFx3Kz4pLy50ZXN0KHJlbWFpbmluZygpKSkpIHtcbiAgICAgICAgICBvdXRwdXQgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5kb3QgIT09IHRydWUgJiYgKHByZXYudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmV2LnR5cGUgPT09ICdib3MnKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3FtYXJrJywgdmFsdWUsIG91dHB1dDogUU1BUktfTk9fRE9UIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdxbWFyaycsIHZhbHVlLCBvdXRwdXQ6IFFNQVJLIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhjbGFtYXRpb25cbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJyEnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcpIHtcbiAgICAgICAgaWYgKHBlZWsoMikgIT09ICc/JyB8fCAhL1shPTw6XS8udGVzdChwZWVrKDMpKSkge1xuICAgICAgICAgIGV4dGdsb2JPcGVuKCduZWdhdGUnLCB2YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgc3RhdGUuaW5kZXggPT09IDApIHtcbiAgICAgICAgbmVnYXRlKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsdXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJysnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcgJiYgcGVlaygyKSAhPT0gJz8nKSB7XG4gICAgICAgIGV4dGdsb2JPcGVuKCdwbHVzJywgdmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIHByZXYudmFsdWUgPT09ICcoJykgfHwgb3B0cy5yZWdleCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWUsIG91dHB1dDogUExVU19MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdicmFja2V0JyB8fCBwcmV2LnR5cGUgPT09ICdwYXJlbicgfHwgcHJldi50eXBlID09PSAnYnJhY2UnKSkgfHwgc3RhdGUucGFyZW5zID4gMCkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlOiBQTFVTX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0XG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdAJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ2F0JywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsYWluIHRleHRcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSAhPT0gJyonKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICckJyB8fCB2YWx1ZSA9PT0gJ14nKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gUkVHRVhfTk9OX1NQRUNJQUxfQ0hBUlMuZXhlYyhyZW1haW5pbmcoKSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdmFsdWUgKz0gbWF0Y2hbMF07XG4gICAgICAgIHN0YXRlLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFyc1xuICAgICAqL1xuXG4gICAgaWYgKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJyB8fCBwcmV2LnN0YXIgPT09IHRydWUpKSB7XG4gICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICBwcmV2LnN0YXIgPSB0cnVlO1xuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCByZXN0ID0gcmVtYWluaW5nKCk7XG4gICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIC9eXFwoW14/XS8udGVzdChyZXN0KSkge1xuICAgICAgZXh0Z2xvYk9wZW4oJ3N0YXInLCB2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldi50eXBlID09PSAnc3RhcicpIHtcbiAgICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmlvciA9IHByZXYucHJldjtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByaW9yLnByZXY7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gcHJpb3IudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmlvci50eXBlID09PSAnYm9zJztcbiAgICAgIGNvbnN0IGFmdGVyU3RhciA9IGJlZm9yZSAmJiAoYmVmb3JlLnR5cGUgPT09ICdzdGFyJyB8fCBiZWZvcmUudHlwZSA9PT0gJ2dsb2JzdGFyJyk7XG5cbiAgICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUgJiYgKCFpc1N0YXJ0IHx8IChyZXN0WzBdICYmIHJlc3RbMF0gIT09ICcvJykpKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHByaW9yLnR5cGUgPT09ICdjb21tYScgfHwgcHJpb3IudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSBleHRnbG9icy5sZW5ndGggJiYgKHByaW9yLnR5cGUgPT09ICdwaXBlJyB8fCBwcmlvci50eXBlID09PSAncGFyZW4nKTtcbiAgICAgIGlmICghaXNTdGFydCAmJiBwcmlvci50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzdGFyJywgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdHJpcCBjb25zZWN1dGl2ZSBgLyoqL2BcbiAgICAgIHdoaWxlIChyZXN0LnNsaWNlKDAsIDMpID09PSAnLyoqJykge1xuICAgICAgICBjb25zdCBhZnRlciA9IGlucHV0W3N0YXRlLmluZGV4ICsgNF07XG4gICAgICAgIGlmIChhZnRlciAmJiBhZnRlciAhPT0gJy8nKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMyk7XG4gICAgICAgIGNvbnN1bWUoJy8qKicsIDMpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgZW9zKCkpIHtcbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmICFhZnRlclN0YXIgJiYgZW9zKCkpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cykgKyAob3B0cy5zdHJpY3RTbGFzaGVzID8gJyknIDogJ3wkKScpO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dDtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmIHJlc3RbMF0gPT09ICcvJykge1xuICAgICAgICBjb25zdCBlbmQgPSByZXN0WzFdICE9PSB2b2lkIDAgPyAnfCQnIDogJyc7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfXwke1NMQVNIX0xJVEVSQUx9JHtlbmR9KWA7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG5cbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlOiAnLycsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgcmVzdFswXSA9PT0gJy8nKSB7XG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCg/Ol58JHtTTEFTSF9MSVRFUkFMfXwke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pYDtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZTogJy8nLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVtb3ZlIHNpbmdsZSBzdGFyIGZyb20gb3V0cHV0XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLXByZXYub3V0cHV0Lmxlbmd0aCk7XG5cbiAgICAgIC8vIHJlc2V0IHByZXZpb3VzIHRva2VuIHRvIGdsb2JzdGFyXG4gICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgIC8vIHJlc2V0IG91dHB1dCB3aXRoIGdsb2JzdGFyXG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi5vdXRwdXQ7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0geyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6IHN0YXIgfTtcblxuICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUpIHtcbiAgICAgIHRva2VuLm91dHB1dCA9ICcuKj8nO1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2JvcycgfHwgcHJldi50eXBlID09PSAnc2xhc2gnKSB7XG4gICAgICAgIHRva2VuLm91dHB1dCA9IG5vZG90ICsgdG9rZW4ub3V0cHV0O1xuICAgICAgfVxuICAgICAgcHVzaCh0b2tlbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiAocHJldi50eXBlID09PSAnYnJhY2tldCcgfHwgcHJldi50eXBlID09PSAncGFyZW4nKSAmJiBvcHRzLnJlZ2V4ID09PSB0cnVlKSB7XG4gICAgICB0b2tlbi5vdXRwdXQgPSB2YWx1ZTtcbiAgICAgIHB1c2godG9rZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCB8fCBwcmV2LnR5cGUgPT09ICdzbGFzaCcgfHwgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE5PX0RPVF9TTEFTSDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gTk9fRE9UX1NMQVNIO1xuXG4gICAgICB9IGVsc2UgaWYgKG9wdHMuZG90ID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gbm9kb3Q7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IG5vZG90O1xuICAgICAgfVxuXG4gICAgICBpZiAocGVlaygpICE9PSAnKicpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE9ORV9DSEFSO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBPTkVfQ0hBUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHRva2VuKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFja2V0cyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJ10nKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICdbJyk7XG4gICAgZGVjcmVtZW50KCdicmFja2V0cycpO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBhcmVucyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJyknKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICcoJyk7XG4gICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFjZXMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICd9JykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAneycpO1xuICAgIGRlY3JlbWVudCgnYnJhY2VzJyk7XG4gIH1cblxuICBpZiAob3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlICYmIChwcmV2LnR5cGUgPT09ICdzdGFyJyB8fCBwcmV2LnR5cGUgPT09ICdicmFja2V0JykpIHtcbiAgICBwdXNoKHsgdHlwZTogJ21heWJlX3NsYXNoJywgdmFsdWU6ICcnLCBvdXRwdXQ6IGAke1NMQVNIX0xJVEVSQUx9P2AgfSk7XG4gIH1cblxuICAvLyByZWJ1aWxkIHRoZSBvdXRwdXQgaWYgd2UgaGFkIHRvIGJhY2t0cmFjayBhdCBhbnkgcG9pbnRcbiAgaWYgKHN0YXRlLmJhY2t0cmFjayA9PT0gdHJ1ZSkge1xuICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBzdGF0ZS50b2tlbnMpIHtcbiAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuXG4gICAgICBpZiAodG9rZW4uc3VmZml4KSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5zdWZmaXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBGYXN0IHBhdGhzIGZvciBjcmVhdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbiAqIFRoaXMgY2FuIHNpZ25pZmljYW50bHkgc3BlZWQgdXAgcHJvY2Vzc2luZyBhbmQgaGFzIHZlcnkgbGl0dGxlIGRvd25zaWRlXG4gKiBpbXBhY3Qgd2hlbiBub25lIG9mIHRoZSBmYXN0IHBhdGhzIG1hdGNoLlxuICovXG5cbnBhcnNlLmZhc3RwYXRocyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBvcHRzID0geyAuLi5vcHRpb25zIH07XG4gIGNvbnN0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBjb25zdCBsZW4gPSBpbnB1dC5sZW5ndGg7XG4gIGlmIChsZW4gPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aDogJHtsZW59LCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBsZW5ndGg6ICR7bWF4fWApO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuICBjb25zdCB3aW4zMiA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcblxuICAvLyBjcmVhdGUgY29uc3RhbnRzIGJhc2VkIG9uIHBsYXRmb3JtLCBmb3Igd2luZG93cyBvciBwb3NpeFxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RTLFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IGNvbnN0YW50cy5nbG9iQ2hhcnMod2luMzIpO1xuXG4gIGNvbnN0IG5vZG90ID0gb3B0cy5kb3QgPyBOT19ET1RTIDogTk9fRE9UO1xuICBjb25zdCBzbGFzaERvdCA9IG9wdHMuZG90ID8gTk9fRE9UU19TTEFTSCA6IE5PX0RPVDtcbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgc3RhdGUgPSB7IG5lZ2F0ZWQ6IGZhbHNlLCBwcmVmaXg6ICcnIH07XG4gIGxldCBzdGFyID0gb3B0cy5iYXNoID09PSB0cnVlID8gJy4qPycgOiBTVEFSO1xuXG4gIGlmIChvcHRzLmNhcHR1cmUpIHtcbiAgICBzdGFyID0gYCgke3N0YXJ9KWA7XG4gIH1cblxuICBjb25zdCBnbG9ic3RhciA9IG9wdHMgPT4ge1xuICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHJldHVybiBzdGFyO1xuICAgIHJldHVybiBgKCR7Y2FwdHVyZX0oPzooPyEke1NUQVJUX0FOQ0hPUn0ke29wdHMuZG90ID8gRE9UU19TTEFTSCA6IERPVF9MSVRFUkFMfSkuKSo/KWA7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlID0gc3RyID0+IHtcbiAgICBzd2l0Y2ggKHN0cikge1xuICAgICAgY2FzZSAnKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcuKic6XG4gICAgICAgIHJldHVybiBgJHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqLionOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtzdGFyfSR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi8qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke1NMQVNIX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3NsYXNoRG90fSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKic6XG4gICAgICAgIHJldHVybiBub2RvdCArIGdsb2JzdGFyKG9wdHMpO1xuXG4gICAgICBjYXNlICcqKi8qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8qLionOlxuICAgICAgICByZXR1cm4gYCg/OiR7bm9kb3R9JHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9KT8ke3NsYXNoRG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyoqLy4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL14oLio/KVxcLihcXHcrKSQvLmV4ZWMoc3RyKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNyZWF0ZShtYXRjaFsxXSk7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZSArIERPVF9MSVRFUkFMICsgbWF0Y2hbMl07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dCA9IHV0aWxzLnJlbW92ZVByZWZpeChpbnB1dCwgc3RhdGUpO1xuICBsZXQgc291cmNlID0gY3JlYXRlKG91dHB1dCk7XG5cbiAgaWYgKHNvdXJjZSAmJiBvcHRzLnN0cmljdFNsYXNoZXMgIT09IHRydWUpIHtcbiAgICBzb3VyY2UgKz0gYCR7U0xBU0hfTElURVJBTH0/YDtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHNjYW4gPSByZXF1aXJlKCcuL3NjYW4nKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgaXNPYmplY3QgPSB2YWwgPT4gdmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdGNoZXIgZnVuY3Rpb24gZnJvbSBvbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zLiBUaGVcbiAqIHJldHVybmVkIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIHRvIG1hdGNoIGFzIGl0cyBmaXJzdCBhcmd1bWVudCxcbiAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIG1hdGNoLiBUaGUgcmV0dXJuZWQgbWF0Y2hlclxuICogZnVuY3Rpb24gYWxzbyB0YWtlcyBhIGJvb2xlYW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0aGF0LCB3aGVuIHRydWUsXG4gKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoKGdsb2JbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgaXNNYXRjaCA9IHBpY29tYXRjaCgnKi4hKCphKScpO1xuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5hJykpOyAvLz0+IGZhbHNlXG4gKiBjb25zb2xlLmxvZyhpc01hdGNoKCdhLmInKSk7IC8vPT4gdHJ1ZVxuICogYGBgXG4gKiBAbmFtZSBwaWNvbWF0Y2hcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgZ2xvYnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMuXG4gKiBAcGFyYW0ge09iamVjdD19IGBvcHRpb25zYFxuICogQHJldHVybiB7RnVuY3Rpb249fSBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgcGljb21hdGNoID0gKGdsb2IsIG9wdGlvbnMsIHJldHVyblN0YXRlID0gZmFsc2UpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ2xvYikpIHtcbiAgICBjb25zdCBmbnMgPSBnbG9iLm1hcChpbnB1dCA9PiBwaWNvbWF0Y2goaW5wdXQsIG9wdGlvbnMsIHJldHVyblN0YXRlKSk7XG4gICAgY29uc3QgYXJyYXlNYXRjaGVyID0gc3RyID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXNNYXRjaCBvZiBmbnMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc01hdGNoKHN0cik7XG4gICAgICAgIGlmIChzdGF0ZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5TWF0Y2hlcjtcbiAgfVxuXG4gIGNvbnN0IGlzU3RhdGUgPSBpc09iamVjdChnbG9iKSAmJiBnbG9iLnRva2VucyAmJiBnbG9iLmlucHV0O1xuXG4gIGlmIChnbG9iID09PSAnJyB8fCAodHlwZW9mIGdsb2IgIT09ICdzdHJpbmcnICYmICFpc1N0YXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhdHRlcm4gdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgcG9zaXggPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG4gIGNvbnN0IHJlZ2V4ID0gaXNTdGF0ZVxuICAgID8gcGljb21hdGNoLmNvbXBpbGVSZShnbG9iLCBvcHRpb25zKVxuICAgIDogcGljb21hdGNoLm1ha2VSZShnbG9iLCBvcHRpb25zLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgY29uc3Qgc3RhdGUgPSByZWdleC5zdGF0ZTtcbiAgZGVsZXRlIHJlZ2V4LnN0YXRlO1xuXG4gIGxldCBpc0lnbm9yZWQgPSAoKSA9PiBmYWxzZTtcbiAgaWYgKG9wdHMuaWdub3JlKSB7XG4gICAgY29uc3QgaWdub3JlT3B0cyA9IHsgLi4ub3B0aW9ucywgaWdub3JlOiBudWxsLCBvbk1hdGNoOiBudWxsLCBvblJlc3VsdDogbnVsbCB9O1xuICAgIGlzSWdub3JlZCA9IHBpY29tYXRjaChvcHRzLmlnbm9yZSwgaWdub3JlT3B0cywgcmV0dXJuU3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlciA9IChpbnB1dCwgcmV0dXJuT2JqZWN0ID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCB7IGlzTWF0Y2gsIG1hdGNoLCBvdXRwdXQgfSA9IHBpY29tYXRjaC50ZXN0KGlucHV0LCByZWdleCwgb3B0aW9ucywgeyBnbG9iLCBwb3NpeCB9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7IGdsb2IsIHN0YXRlLCByZWdleCwgcG9zaXgsIGlucHV0LCBvdXRwdXQsIG1hdGNoLCBpc01hdGNoIH07XG5cbiAgICBpZiAodHlwZW9mIG9wdHMub25SZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdHMub25SZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpIHtcbiAgICAgIHJlc3VsdC5pc01hdGNoID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzSWdub3JlZChpbnB1dCkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5vbklnbm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvcHRzLm9uSWdub3JlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXN1bHQuaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5vbk1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLm9uTWF0Y2gocmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IHRydWU7XG4gIH07XG5cbiAgaWYgKHJldHVyblN0YXRlKSB7XG4gICAgbWF0Y2hlci5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXI7XG59O1xuXG4vKipcbiAqIFRlc3QgYGlucHV0YCB3aXRoIHRoZSBnaXZlbiBgcmVnZXhgLiBUaGlzIGlzIHVzZWQgYnkgdGhlIG1haW5cbiAqIGBwaWNvbWF0Y2goKWAgZnVuY3Rpb24gdG8gdGVzdCB0aGUgaW5wdXQgc3RyaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC50ZXN0KGlucHV0LCByZWdleFssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gudGVzdCgnZm9vL2JhcicsIC9eKD86KFteL10qPylcXC8oW14vXSo/KSkkLykpO1xuICogLy8geyBpc01hdGNoOiB0cnVlLCBtYXRjaDogWyAnZm9vLycsICdmb28nLCAnYmFyJyBdLCBvdXRwdXQ6ICdmb28vYmFyJyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtSZWdFeHB9IGByZWdleGBcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBtYXRjaGluZyBpbmZvLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gudGVzdCA9IChpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHsgZ2xvYiwgcG9zaXggfSA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaW5wdXQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICByZXR1cm4geyBpc01hdGNoOiBmYWxzZSwgb3V0cHV0OiAnJyB9O1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGZvcm1hdCA9IG9wdHMuZm9ybWF0IHx8IChwb3NpeCA/IHV0aWxzLnRvUG9zaXhTbGFzaGVzIDogbnVsbCk7XG4gIGxldCBtYXRjaCA9IGlucHV0ID09PSBnbG9iO1xuICBsZXQgb3V0cHV0ID0gKG1hdGNoICYmIGZvcm1hdCkgPyBmb3JtYXQoaW5wdXQpIDogaW5wdXQ7XG5cbiAgaWYgKG1hdGNoID09PSBmYWxzZSkge1xuICAgIG91dHB1dCA9IGZvcm1hdCA/IGZvcm1hdChpbnB1dCkgOiBpbnB1dDtcbiAgICBtYXRjaCA9IG91dHB1dCA9PT0gZ2xvYjtcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gZmFsc2UgfHwgb3B0cy5jYXB0dXJlID09PSB0cnVlKSB7XG4gICAgaWYgKG9wdHMubWF0Y2hCYXNlID09PSB0cnVlIHx8IG9wdHMuYmFzZW5hbWUgPT09IHRydWUpIHtcbiAgICAgIG1hdGNoID0gcGljb21hdGNoLm1hdGNoQmFzZShpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHBvc2l4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2ggPSByZWdleC5leGVjKG91dHB1dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgaXNNYXRjaDogQm9vbGVhbihtYXRjaCksIG1hdGNoLCBvdXRwdXQgfTtcbn07XG5cbi8qKlxuICogTWF0Y2ggdGhlIGJhc2VuYW1lIG9mIGEgZmlsZXBhdGguXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLm1hdGNoQmFzZShpbnB1dCwgZ2xvYlssIG9wdGlvbnNdKTtcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5tYXRjaEJhc2UoJ2Zvby9iYXIuanMnLCAnKi5qcycpOyAvLyB0cnVlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBgZ2xvYmAgR2xvYiBwYXR0ZXJuIG9yIHJlZ2V4IGNyZWF0ZWQgYnkgWy5tYWtlUmVdKCNtYWtlUmUpLlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLm1hdGNoQmFzZSA9IChpbnB1dCwgZ2xvYiwgb3B0aW9ucywgcG9zaXggPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucykpID0+IHtcbiAgY29uc3QgcmVnZXggPSBnbG9iIGluc3RhbmNlb2YgUmVnRXhwID8gZ2xvYiA6IHBpY29tYXRjaC5tYWtlUmUoZ2xvYiwgb3B0aW9ucyk7XG4gIHJldHVybiByZWdleC50ZXN0KHBhdGguYmFzZW5hbWUoaW5wdXQpKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmICoqYW55Kiogb2YgdGhlIGdpdmVuIGdsb2IgYHBhdHRlcm5zYCBtYXRjaCB0aGUgc3BlY2lmaWVkIGBzdHJpbmdgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5pc01hdGNoKHN0cmluZywgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLmlzTWF0Y2goJ2EuYScsIFsnYi4qJywgJyouYSddKSk7IC8vPT4gdHJ1ZVxuICogY29uc29sZS5sb2cocGljb21hdGNoLmlzTWF0Y2goJ2EuYScsICdiLionKSk7IC8vPT4gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHN0ciBUaGUgc3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gcGF0dGVybnMgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IHBhdHRlcm5zIG1hdGNoIGBzdHJgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5pc01hdGNoID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJucywgb3B0aW9ucykoc3RyKTtcblxuLyoqXG4gKiBQYXJzZSBhIGdsb2IgcGF0dGVybiB0byBjcmVhdGUgdGhlIHNvdXJjZSBzdHJpbmcgZm9yIGEgcmVndWxhclxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiBjb25zdCByZXN1bHQgPSBwaWNvbWF0Y2gucGFyc2UocGF0dGVyblssIG9wdGlvbnNdKTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHVzZWZ1bCBwcm9wZXJ0aWVzIGFuZCBvdXRwdXQgdG8gYmUgdXNlZCBhcyBhIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5wYXJzZSA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSByZXR1cm4gcGF0dGVybi5tYXAocCA9PiBwaWNvbWF0Y2gucGFyc2UocCwgb3B0aW9ucykpO1xuICByZXR1cm4gcGFyc2UocGF0dGVybiwgeyAuLi5vcHRpb25zLCBmYXN0cGF0aHM6IGZhbHNlIH0pO1xufTtcblxuLyoqXG4gKiBTY2FuIGEgZ2xvYiBwYXR0ZXJuIHRvIHNlcGFyYXRlIHRoZSBwYXR0ZXJuIGludG8gc2VnbWVudHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnNjYW4oaW5wdXRbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gcGljb21hdGNoLnNjYW4oJyEuL2Zvby8qLmpzJyk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICogeyBwcmVmaXg6ICchLi8nLFxuICogICBpbnB1dDogJyEuL2Zvby8qLmpzJyxcbiAqICAgc3RhcnQ6IDMsXG4gKiAgIGJhc2U6ICdmb28nLFxuICogICBnbG9iOiAnKi5qcycsXG4gKiAgIGlzQnJhY2U6IGZhbHNlLFxuICogICBpc0JyYWNrZXQ6IGZhbHNlLFxuICogICBpc0dsb2I6IHRydWUsXG4gKiAgIGlzRXh0Z2xvYjogZmFsc2UsXG4gKiAgIGlzR2xvYnN0YXI6IGZhbHNlLFxuICogICBuZWdhdGVkOiB0cnVlIH1cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgR2xvYiBwYXR0ZXJuIHRvIHNjYW4uXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGhcbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHNjYW4oaW5wdXQsIG9wdGlvbnMpO1xuXG4vKipcbiAqIENvbXBpbGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgYHN0YXRlYCBvYmplY3QgcmV0dXJuZWQgYnkgdGhlXG4gKiBbcGFyc2UoKV0oI3BhcnNlKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGBzdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVybk91dHB1dGAgSW50ZW5kZWQgZm9yIGltcGxlbWVudG9ycywgdGhpcyBhcmd1bWVudCBhbGxvd3MgeW91IHRvIHJldHVybiB0aGUgcmF3IG91dHB1dCBmcm9tIHRoZSBwYXJzZXIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5TdGF0ZWAgQWRkcyB0aGUgc3RhdGUgdG8gYSBgc3RhdGVgIHByb3BlcnR5IG9uIHRoZSByZXR1cm5lZCByZWdleC4gVXNlZnVsIGZvciBpbXBsZW1lbnRvcnMgYW5kIGRlYnVnZ2luZy5cbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLmNvbXBpbGVSZSA9IChzdGF0ZSwgb3B0aW9ucywgcmV0dXJuT3V0cHV0ID0gZmFsc2UsIHJldHVyblN0YXRlID0gZmFsc2UpID0+IHtcbiAgaWYgKHJldHVybk91dHB1dCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBzdGF0ZS5vdXRwdXQ7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgcHJlcGVuZCA9IG9wdHMuY29udGFpbnMgPyAnJyA6ICdeJztcbiAgY29uc3QgYXBwZW5kID0gb3B0cy5jb250YWlucyA/ICcnIDogJyQnO1xuXG4gIGxldCBzb3VyY2UgPSBgJHtwcmVwZW5kfSg/OiR7c3RhdGUub3V0cHV0fSkke2FwcGVuZH1gO1xuICBpZiAoc3RhdGUgJiYgc3RhdGUubmVnYXRlZCA9PT0gdHJ1ZSkge1xuICAgIHNvdXJjZSA9IGBeKD8hJHtzb3VyY2V9KS4qJGA7XG4gIH1cblxuICBjb25zdCByZWdleCA9IHBpY29tYXRjaC50b1JlZ2V4KHNvdXJjZSwgb3B0aW9ucyk7XG4gIGlmIChyZXR1cm5TdGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJlZ2V4LnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICByZXR1cm4gcmVnZXg7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIGEgcGFyc2VkIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiBjb25zdCBzdGF0ZSA9IHBpY29tYXRjaC5wYXJzZSgnKi5qcycpO1xuICogLy8gcGljb21hdGNoLmNvbXBpbGVSZShzdGF0ZVssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guY29tcGlsZVJlKHN0YXRlKSk7XG4gKiAvLz0+IC9eKD86KD8hXFwuKSg/PS4pW14vXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzdGF0ZWAgVGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZSBgLnBhcnNlYCBtZXRob2QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5PdXRwdXRgIEltcGxlbWVudG9ycyBtYXkgdXNlIHRoaXMgYXJndW1lbnQgdG8gcmV0dXJuIHRoZSBjb21waWxlZCBvdXRwdXQsIGluc3RlYWQgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24uIFRoaXMgaXMgbm90IGV4cG9zZWQgb24gdGhlIG9wdGlvbnMgdG8gcHJldmVudCBlbmQtdXNlcnMgZnJvbSBtdXRhdGluZyB0aGUgcmVzdWx0LlxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuU3RhdGVgIEltcGxlbWVudG9ycyBtYXkgdXNlIHRoaXMgYXJndW1lbnQgdG8gcmV0dXJuIHRoZSBzdGF0ZSBmcm9tIHRoZSBwYXJzZWQgZ2xvYiB3aXRoIHRoZSByZXR1cm5lZCByZWd1bGFyIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJuIHtSZWdFeHB9IFJldHVybnMgYSByZWdleCBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHBhdHRlcm4uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5tYWtlUmUgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSwgcmV0dXJuT3V0cHV0ID0gZmFsc2UsIHJldHVyblN0YXRlID0gZmFsc2UpID0+IHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBsZXQgcGFyc2VkID0geyBuZWdhdGVkOiBmYWxzZSwgZmFzdHBhdGhzOiB0cnVlIH07XG5cbiAgaWYgKG9wdGlvbnMuZmFzdHBhdGhzICE9PSBmYWxzZSAmJiAoaW5wdXRbMF0gPT09ICcuJyB8fCBpbnB1dFswXSA9PT0gJyonKSkge1xuICAgIHBhcnNlZC5vdXRwdXQgPSBwYXJzZS5mYXN0cGF0aHMoaW5wdXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKCFwYXJzZWQub3V0cHV0KSB7XG4gICAgcGFyc2VkID0gcGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHBpY29tYXRjaC5jb21waWxlUmUocGFyc2VkLCBvcHRpb25zLCByZXR1cm5PdXRwdXQsIHJldHVyblN0YXRlKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIGdpdmVuIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnRvUmVnZXgoc291cmNlWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IHsgb3V0cHV0IH0gPSBwaWNvbWF0Y2gucGFyc2UoJyouanMnKTtcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC50b1JlZ2V4KG91dHB1dCkpO1xuICogLy89PiAvXig/Oig/IVxcLikoPz0uKVteL10qP1xcLmpzKSQvXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc291cmNlYCBSZWd1bGFyIGV4cHJlc3Npb24gc291cmNlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnRvUmVnZXggPSAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlLCBvcHRzLmZsYWdzIHx8IChvcHRzLm5vY2FzZSA/ICdpJyA6ICcnKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWcgPT09IHRydWUpIHRocm93IGVycjtcbiAgICByZXR1cm4gLyReLztcbiAgfVxufTtcblxuLyoqXG4gKiBQaWNvbWF0Y2ggY29uc3RhbnRzLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5cbnBpY29tYXRjaC5jb25zdGFudHMgPSBjb25zdGFudHM7XG5cbi8qKlxuICogRXhwb3NlIFwicGljb21hdGNoXCJcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBpY29tYXRjaDtcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcGljb21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG5jb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgncGljb21hdGNoL2xpYi91dGlscycpO1xuXG5jb25zdCBpc0VtcHR5U3RyaW5nID0gdiA9PiB2ID09PSAnJyB8fCB2ID09PSAnLi8nO1xuY29uc3QgaGFzQnJhY2VzID0gdiA9PiB7XG4gIGNvbnN0IGluZGV4ID0gdi5pbmRleE9mKCd7Jyk7XG4gIHJldHVybiBpbmRleCA+IC0xICYmIHYuaW5kZXhPZignfScsIGluZGV4KSA+IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBtYXRjaCBvbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tKGxpc3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tKFsnYS5qcycsICdhLnR4dCddLCBbJyouanMnXSkpO1xuICogLy89PiBbICdhLmpzJyBdXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PHN0cmluZz59IGBsaXN0YCBMaXN0IG9mIHN0cmluZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxzdHJpbmc+fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBtYXRjaGVzXG4gKiBAc3VtbWFyeSBmYWxzZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jb25zdCBtaWNyb21hdGNoID0gKGxpc3QsIHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG4gIHBhdHRlcm5zID0gW10uY29uY2F0KHBhdHRlcm5zKTtcbiAgbGlzdCA9IFtdLmNvbmNhdChsaXN0KTtcblxuICBsZXQgb21pdCA9IG5ldyBTZXQoKTtcbiAgbGV0IGtlZXAgPSBuZXcgU2V0KCk7XG4gIGxldCBpdGVtcyA9IG5ldyBTZXQoKTtcbiAgbGV0IG5lZ2F0aXZlcyA9IDA7XG5cbiAgbGV0IG9uUmVzdWx0ID0gc3RhdGUgPT4ge1xuICAgIGl0ZW1zLmFkZChzdGF0ZS5vdXRwdXQpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub25SZXN1bHQpIHtcbiAgICAgIG9wdGlvbnMub25SZXN1bHQoc3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGlzTWF0Y2ggPSBwaWNvbWF0Y2goU3RyaW5nKHBhdHRlcm5zW2ldKSwgeyAuLi5vcHRpb25zLCBvblJlc3VsdCB9LCB0cnVlKTtcbiAgICBsZXQgbmVnYXRlZCA9IGlzTWF0Y2guc3RhdGUubmVnYXRlZCB8fCBpc01hdGNoLnN0YXRlLm5lZ2F0ZWRFeHRnbG9iO1xuICAgIGlmIChuZWdhdGVkKSBuZWdhdGl2ZXMrKztcblxuICAgIGZvciAobGV0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgbGV0IG1hdGNoZWQgPSBpc01hdGNoKGl0ZW0sIHRydWUpO1xuXG4gICAgICBsZXQgbWF0Y2ggPSBuZWdhdGVkID8gIW1hdGNoZWQuaXNNYXRjaCA6IG1hdGNoZWQuaXNNYXRjaDtcbiAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAobmVnYXRlZCkge1xuICAgICAgICBvbWl0LmFkZChtYXRjaGVkLm91dHB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbWl0LmRlbGV0ZShtYXRjaGVkLm91dHB1dCk7XG4gICAgICAgIGtlZXAuYWRkKG1hdGNoZWQub3V0cHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbmVnYXRpdmVzID09PSBwYXR0ZXJucy5sZW5ndGggPyBbLi4uaXRlbXNdIDogWy4uLmtlZXBdO1xuICBsZXQgbWF0Y2hlcyA9IHJlc3VsdC5maWx0ZXIoaXRlbSA9PiAhb21pdC5oYXMoaXRlbSkpO1xuXG4gIGlmIChvcHRpb25zICYmIG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKG9wdGlvbnMuZmFpbGdsb2IgPT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWF0Y2hlcyBmb3VuZCBmb3IgXCIke3BhdHRlcm5zLmpvaW4oJywgJyl9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5ub251bGwgPT09IHRydWUgfHwgb3B0aW9ucy5udWxsZ2xvYiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMudW5lc2NhcGUgPyBwYXR0ZXJucy5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJycpKSA6IHBhdHRlcm5zO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuLyoqXG4gKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICovXG5cbm1pY3JvbWF0Y2gubWF0Y2ggPSBtaWNyb21hdGNoO1xuXG4vKipcbiAqIFJldHVybnMgYSBtYXRjaGVyIGZ1bmN0aW9uIGZyb20gdGhlIGdpdmVuIGdsb2IgYHBhdHRlcm5gIGFuZCBgb3B0aW9uc2AuXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdG8gbWF0Y2ggYXMgaXRzIG9ubHkgYXJndW1lbnQgYW5kIHJldHVybnNcbiAqIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIG1hdGNoLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLm1hdGNoZXIocGF0dGVyblssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCBpc01hdGNoID0gbW0ubWF0Y2hlcignKi4hKCphKScpO1xuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5hJykpOyAvLz0+IGZhbHNlXG4gKiBjb25zb2xlLmxvZyhpc01hdGNoKCdhLmInKSk7IC8vPT4gdHJ1ZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIEdsb2IgcGF0dGVyblxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBtYXRjaGVyIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLm1hdGNoZXIgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gcGljb21hdGNoKHBhdHRlcm4sIG9wdGlvbnMpO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiAqKmFueSoqIG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AgbWF0Y2ggdGhlIHNwZWNpZmllZCBgc3RyaW5nYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5pc01hdGNoKHN0cmluZywgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uaXNNYXRjaCgnYS5hJywgWydiLionLCAnKi5hJ10pKTsgLy89PiB0cnVlXG4gKiBjb25zb2xlLmxvZyhtbS5pc01hdGNoKCdhLmEnLCAnYi4qJykpOyAvLz0+IGZhbHNlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyYCBUaGUgc3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYFtvcHRpb25zXWAgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpLlxuICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBwYXR0ZXJucyBtYXRjaCBgc3RyYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLmlzTWF0Y2ggPSAoc3RyLCBwYXR0ZXJucywgb3B0aW9ucykgPT4gcGljb21hdGNoKHBhdHRlcm5zLCBvcHRpb25zKShzdHIpO1xuXG4vKipcbiAqIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gKi9cblxubWljcm9tYXRjaC5hbnkgPSBtaWNyb21hdGNoLmlzTWF0Y2g7XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IF8qKmRvIG5vdCBtYXRjaCBhbnkqKl8gb2YgdGhlIGdpdmVuIGBwYXR0ZXJuc2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0ubm90KGxpc3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLm5vdChbJ2EuYScsICdiLmInLCAnYy5jJ10sICcqLmEnKSk7XG4gKiAvLz0+IFsnYi5iJywgJ2MuYyddXG4gKiBgYGBcbiAqIEBwYXJhbSB7QXJyYXl9IGBsaXN0YCBBcnJheSBvZiBzdHJpbmdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJuIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKSBmb3IgY2hhbmdpbmcgaG93IG1hdGNoZXMgYXJlIHBlcmZvcm1lZFxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0ICoqZG8gbm90IG1hdGNoKiogdGhlIGdpdmVuIHBhdHRlcm5zLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLm5vdCA9IChsaXN0LCBwYXR0ZXJucywgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIHBhdHRlcm5zID0gW10uY29uY2F0KHBhdHRlcm5zKS5tYXAoU3RyaW5nKTtcbiAgbGV0IHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgbGV0IGl0ZW1zID0gW107XG5cbiAgbGV0IG9uUmVzdWx0ID0gc3RhdGUgPT4ge1xuICAgIGlmIChvcHRpb25zLm9uUmVzdWx0KSBvcHRpb25zLm9uUmVzdWx0KHN0YXRlKTtcbiAgICBpdGVtcy5wdXNoKHN0YXRlLm91dHB1dCk7XG4gIH07XG5cbiAgbGV0IG1hdGNoZXMgPSBuZXcgU2V0KG1pY3JvbWF0Y2gobGlzdCwgcGF0dGVybnMsIHsgLi4ub3B0aW9ucywgb25SZXN1bHQgfSkpO1xuXG4gIGZvciAobGV0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoIW1hdGNoZXMuaGFzKGl0ZW0pKSB7XG4gICAgICByZXN1bHQuYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnJlc3VsdF07XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYHN0cmluZ2AgY29udGFpbnMgdGhlIGdpdmVuIHBhdHRlcm4uIFNpbWlsYXJcbiAqIHRvIFsuaXNNYXRjaF0oI2lzTWF0Y2gpIGJ1dCB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggYW55IHBhcnQgb2YgdGhlIHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uY29udGFpbnMoc3RyaW5nLCBwYXR0ZXJuWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLmNvbnRhaW5zKCdhYS9iYi9jYycsICcqYicpKTtcbiAqIC8vPT4gdHJ1ZVxuICogY29uc29sZS5sb2cobW0uY29udGFpbnMoJ2FhL2JiL2NjJywgJypkJykpO1xuICogLy89PiBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmAgVGhlIHN0cmluZyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIEdsb2IgcGF0dGVybiB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIHBhdHRlcm5zIG1hdGNoZXMgYW55IHBhcnQgb2YgYHN0cmAuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guY29udGFpbnMgPSAoc3RyLCBwYXR0ZXJuLCBvcHRpb25zKSA9PiB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nOiBcIiR7dXRpbC5pbnNwZWN0KHN0cil9XCJgKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc29tZShwID0+IG1pY3JvbWF0Y2guY29udGFpbnMoc3RyLCBwLCBvcHRpb25zKSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzRW1wdHlTdHJpbmcoc3RyKSB8fCBpc0VtcHR5U3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0ci5pbmNsdWRlcyhwYXR0ZXJuKSB8fCAoc3RyLnN0YXJ0c1dpdGgoJy4vJykgJiYgc3RyLnNsaWNlKDIpLmluY2x1ZGVzKHBhdHRlcm4pKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pY3JvbWF0Y2guaXNNYXRjaChzdHIsIHBhdHRlcm4sIHsgLi4ub3B0aW9ucywgY29udGFpbnM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB0aGUga2V5cyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIGBnbG9iYCBwYXR0ZXJuXG4gKiBhbmQgYG9wdGlvbnNgLiBEb2VzIG5vdCBhdHRlbXB0IHRvIG1hdGNoIG5lc3RlZCBrZXlzLiBJZiB5b3UgbmVlZCB0aGlzIGZlYXR1cmUsXG4gKiB1c2UgW2dsb2Itb2JqZWN0XVtdIGluc3RlYWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0ubWF0Y2hLZXlzKG9iamVjdCwgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3Qgb2JqID0geyBhYTogJ2EnLCBhYjogJ2InLCBhYzogJ2MnIH07XG4gKiBjb25zb2xlLmxvZyhtbS5tYXRjaEtleXMob2JqLCAnKmInKSk7XG4gKiAvLz0+IHsgYWI6ICdiJyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb2JqZWN0YCBUaGUgb2JqZWN0IHdpdGgga2V5cyB0byBmaWx0ZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKSBmb3IgY2hhbmdpbmcgaG93IG1hdGNoZXMgYXJlIHBlcmZvcm1lZFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIG9ubHkga2V5cyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJucy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5tYXRjaEtleXMgPSAob2JqLCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgbGV0IGtleXMgPSBtaWNyb21hdGNoKE9iamVjdC5rZXlzKG9iaiksIHBhdHRlcm5zLCBvcHRpb25zKTtcbiAgbGV0IHJlcyA9IHt9O1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykgcmVzW2tleV0gPSBvYmpba2V5XTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHNvbWUgb2YgdGhlIHN0cmluZ3MgaW4gdGhlIGdpdmVuIGBsaXN0YCBtYXRjaCBhbnkgb2YgdGhlIGdpdmVuIGdsb2IgYHBhdHRlcm5zYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5zb21lKGxpc3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLnNvbWUoWydmb28uanMnLCAnYmFyLmpzJ10sIFsnKi5qcycsICchZm9vLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLnNvbWUoWydmb28uanMnXSwgWycqLmpzJywgJyFmb28uanMnXSkpO1xuICogLy8gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBsaXN0YCBUaGUgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gdGVzdC4gUmV0dXJucyBhcyBzb29uIGFzIHRoZSBmaXJzdCBtYXRjaCBpcyBmb3VuZC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IGBwYXR0ZXJuc2AgbWF0Y2hlcyBhbnkgb2YgdGhlIHN0cmluZ3MgaW4gYGxpc3RgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guc29tZSA9IChsaXN0LCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBsZXQgaXRlbXMgPSBbXS5jb25jYXQobGlzdCk7XG5cbiAgZm9yIChsZXQgcGF0dGVybiBvZiBbXS5jb25jYXQocGF0dGVybnMpKSB7XG4gICAgbGV0IGlzTWF0Y2ggPSBwaWNvbWF0Y2goU3RyaW5nKHBhdHRlcm4pLCBvcHRpb25zKTtcbiAgICBpZiAoaXRlbXMuc29tZShpdGVtID0+IGlzTWF0Y2goaXRlbSkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgc3RyaW5nIGluIHRoZSBnaXZlbiBgbGlzdGAgbWF0Y2hlc1xuICogYW55IG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uZXZlcnkobGlzdCwgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uZXZlcnkoJ2Zvby5qcycsIFsnZm9vLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLmV2ZXJ5KFsnZm9vLmpzJywgJ2Jhci5qcyddLCBbJyouanMnXSkpO1xuICogLy8gdHJ1ZVxuICogY29uc29sZS5sb2cobW0uZXZlcnkoWydmb28uanMnLCAnYmFyLmpzJ10sIFsnKi5qcycsICchZm9vLmpzJ10pKTtcbiAqIC8vIGZhbHNlXG4gKiBjb25zb2xlLmxvZyhtbS5ldmVyeShbJ2Zvby5qcyddLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYGxpc3RgIFRoZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbGwgYHBhdHRlcm5zYCBtYXRjaGVzIGFsbCBvZiB0aGUgc3RyaW5ncyBpbiBgbGlzdGBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5ldmVyeSA9IChsaXN0LCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBsZXQgaXRlbXMgPSBbXS5jb25jYXQobGlzdCk7XG5cbiAgZm9yIChsZXQgcGF0dGVybiBvZiBbXS5jb25jYXQocGF0dGVybnMpKSB7XG4gICAgbGV0IGlzTWF0Y2ggPSBwaWNvbWF0Y2goU3RyaW5nKHBhdHRlcm4pLCBvcHRpb25zKTtcbiAgICBpZiAoIWl0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXNNYXRjaChpdGVtKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiAqKmFsbCoqIG9mIHRoZSBnaXZlbiBgcGF0dGVybnNgIG1hdGNoXG4gKiB0aGUgc3BlY2lmaWVkIHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5hbGwoc3RyaW5nLCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5hbGwoJ2Zvby5qcycsIFsnZm9vLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5hbGwoJ2Zvby5qcycsIFsnKi5qcycsICchZm9vLmpzJ10pKTtcbiAqIC8vIGZhbHNlXG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJyouanMnLCAnZm9vLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5hbGwoJ2Zvby5qcycsIFsnKi5qcycsICdmKicsICcqbyonLCAnKm8uanMnXSkpO1xuICogLy8gdHJ1ZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHN0cmAgVGhlIHN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGF0dGVybnMgbWF0Y2ggYHN0cmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5hbGwgPSAoc3RyLCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZzogXCIke3V0aWwuaW5zcGVjdChzdHIpfVwiYCk7XG4gIH1cblxuICByZXR1cm4gW10uY29uY2F0KHBhdHRlcm5zKS5ldmVyeShwID0+IHBpY29tYXRjaChwLCBvcHRpb25zKShzdHIpKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtYXRjaGVzIGNhcHR1cmVkIGJ5IGBwYXR0ZXJuYCBpbiBgc3RyaW5nLCBvciBgbnVsbGAgaWYgdGhlIHBhdHRlcm4gZGlkIG5vdCBtYXRjaC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5jYXB0dXJlKHBhdHRlcm4sIHN0cmluZ1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5jYXB0dXJlKCd0ZXN0LyouanMnLCAndGVzdC9mb28uanMnKSk7XG4gKiAvLz0+IFsnZm9vJ11cbiAqIGNvbnNvbGUubG9nKG1tLmNhcHR1cmUoJ3Rlc3QvKi5qcycsICdmb28vYmFyLmNzcycpKTtcbiAqIC8vPT4gbnVsbFxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGdsb2JgIEdsb2IgcGF0dGVybiB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgU3RyaW5nIHRvIG1hdGNoXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKSBmb3IgY2hhbmdpbmcgaG93IG1hdGNoZXMgYXJlIHBlcmZvcm1lZFxuICogQHJldHVybiB7QXJyYXl8bnVsbH0gUmV0dXJucyBhbiBhcnJheSBvZiBjYXB0dXJlcyBpZiB0aGUgaW5wdXQgbWF0Y2hlcyB0aGUgZ2xvYiBwYXR0ZXJuLCBvdGhlcndpc2UgYG51bGxgLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLmNhcHR1cmUgPSAoZ2xvYiwgaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHBvc2l4ID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuICBsZXQgcmVnZXggPSBwaWNvbWF0Y2gubWFrZVJlKFN0cmluZyhnbG9iKSwgeyAuLi5vcHRpb25zLCBjYXB0dXJlOiB0cnVlIH0pO1xuICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHBvc2l4ID8gdXRpbHMudG9Qb3NpeFNsYXNoZXMoaW5wdXQpIDogaW5wdXQpO1xuXG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaC5zbGljZSgxKS5tYXAodiA9PiB2ID09PSB2b2lkIDAgPyAnJyA6IHYpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5tYWtlUmUocGF0dGVyblssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5tYWtlUmUoJyouanMnKSk7XG4gKiAvLz0+IC9eKD86KFxcLltcXFxcXFwvXSk/KD8hXFwuKSg/PS4pW15cXC9dKj9cXC5qcykkL1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIEEgZ2xvYiBwYXR0ZXJuIHRvIGNvbnZlcnQgdG8gcmVnZXguXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtSZWdFeHB9IFJldHVybnMgYSByZWdleCBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHBhdHRlcm4uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2gubWFrZVJlID0gKC4uLmFyZ3MpID0+IHBpY29tYXRjaC5tYWtlUmUoLi4uYXJncyk7XG5cbi8qKlxuICogU2NhbiBhIGdsb2IgcGF0dGVybiB0byBzZXBhcmF0ZSB0aGUgcGF0dGVybiBpbnRvIHNlZ21lbnRzLiBVc2VkXG4gKiBieSB0aGUgW3NwbGl0XSgjc3BsaXQpIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiBjb25zdCBzdGF0ZSA9IG1tLnNjYW4ocGF0dGVyblssIG9wdGlvbnNdKTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guc2NhbiA9ICguLi5hcmdzKSA9PiBwaWNvbWF0Y2guc2NhbiguLi5hcmdzKTtcblxuLyoqXG4gKiBQYXJzZSBhIGdsb2IgcGF0dGVybiB0byBjcmVhdGUgdGhlIHNvdXJjZSBzdHJpbmcgZm9yIGEgcmVndWxhclxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiBjb25zdCBzdGF0ZSA9IG1tLnBhcnNlKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgZ2xvYmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1c2VmdWwgcHJvcGVydGllcyBhbmQgb3V0cHV0IHRvIGJlIHVzZWQgYXMgcmVnZXggc291cmNlIHN0cmluZy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5wYXJzZSA9IChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzID0gW107XG4gIGZvciAobGV0IHBhdHRlcm4gb2YgW10uY29uY2F0KHBhdHRlcm5zIHx8IFtdKSkge1xuICAgIGZvciAobGV0IHN0ciBvZiBicmFjZXMoU3RyaW5nKHBhdHRlcm4pLCBvcHRpb25zKSkge1xuICAgICAgcmVzLnB1c2gocGljb21hdGNoLnBhcnNlKHN0ciwgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSBnaXZlbiBicmFjZSBgcGF0dGVybmAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHsgYnJhY2VzIH0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMoJ2Zvby97YSxiLGN9L2JhcicpKTtcbiAqIC8vPT4gWyAnZm9vLyhhfGJ8YykvYmFyJyBdXG4gKlxuICogY29uc29sZS5sb2coYnJhY2VzKCdmb28ve2EsYixjfS9iYXInLCB7IGV4cGFuZDogdHJ1ZSB9KSk7XG4gKiAvLz0+IFsgJ2Zvby9hL2JhcicsICdmb28vYi9iYXInLCAnZm9vL2MvYmFyJyBdXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmAgU3RyaW5nIHdpdGggYnJhY2UgcGF0dGVybiB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBBbnkgW29wdGlvbnNdKCNvcHRpb25zKSB0byBjaGFuZ2UgaG93IGV4cGFuc2lvbiBpcyBwZXJmb3JtZWQuIFNlZSB0aGUgW2JyYWNlc11bXSBsaWJyYXJ5IGZvciBhbGwgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5icmFjZXMgPSAocGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICBpZiAoKG9wdGlvbnMgJiYgb3B0aW9ucy5ub2JyYWNlID09PSB0cnVlKSB8fCAhaGFzQnJhY2VzKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgfVxuICByZXR1cm4gYnJhY2VzKHBhdHRlcm4sIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBFeHBhbmQgYnJhY2VzXG4gKi9cblxubWljcm9tYXRjaC5icmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIHJldHVybiBtaWNyb21hdGNoLmJyYWNlcyhwYXR0ZXJuLCB7IC4uLm9wdGlvbnMsIGV4cGFuZDogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogRXhwb3NlIG1pY3JvbWF0Y2hcbiAqL1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0c1xubWljcm9tYXRjaC5oYXNCcmFjZXMgPSBoYXNCcmFjZXM7XG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvbWF0Y2g7XG4iLCAiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cbmZ1bmN0aW9uIGN1cHJlYWRkaXIoKSB7XG5cbiAgdGhpcy5nZXRBbGxGaWxlUGF0aHMgPSBhc3luYyBmdW5jdGlvbiAoZGlyKSB7XG4gICAgbGV0IGZpbGVQYXRocyA9IFtdXG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cihkaXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBpdGVtcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZGlyLCB7d2l0aEZpbGVUeXBlczogdHJ1ZX0pXG4gICAgICAgIGxldCBwZW5kaW5nRGlycyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgbGV0IHVybCA9IHBhdGguam9pbihkaXIsIGl0ZW0ubmFtZSlcbiAgICAgICAgICBpZiAoaXRlbS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBwZW5kaW5nRGlycy5wdXNoKCByZWN1cih1cmwpIClcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaXNGaWxlKCkpIHtcbiAgICAgICAgICAgIGZpbGVQYXRocy5wdXNoKHVybClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZ0RpcnMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHJlY3VyKGRpcilcbiAgICByZXR1cm4gZmlsZVBhdGhzXG4gIH1cblxuICB0aGlzLmdldERpclN0cnVjdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIChkaXIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZW50cmllc1xuICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmlzRGlyZWN0b3J5KCkpXG4gICAgICAgIC5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBlbnRyeS5uYW1lKVxuICAgICAgICAgIGNvbnN0IHN1YiA9IGF3YWl0IHRoaXMuZ2V0RGlyU3RydWN0dXJlKGZ1bGxQYXRoKVxuICAgICAgICAgIHJldHVybiBbZW50cnkubmFtZSwgc3ViXVxuICAgICAgICB9KVxuICAgIClcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMocmVzdWx0cylcbiAgfVxuXG4gIHRoaXMuc29ydCA9IGFzeW5jIGZ1bmN0aW9uIChmaWxlcGF0aHMsIHByb3BlcnR5LCBkZXNjZW5kaW5nPWZhbHNlKSB7XG4gICAgbGV0IGZpbGVJbmZvID0gYXdhaXQgUHJvbWlzZS5hbGwoZmlsZXBhdGhzLm1hcChhc3luYyAoZmlsZXBhdGgpID0+IHtcbiAgICAgIGxldCBzdGF0cyA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQoZmlsZXBhdGgpXG4gICAgICBzdGF0cy51cmwgPSBmaWxlcGF0aFxuICAgICAgcmV0dXJuIHN0YXRzXG4gICAgfSkpXG5cbiAgICByZXR1cm4gKGRlc2NlbmRpbmcpID9cbiAgICBmaWxlSW5mby5zb3J0KChhLCBiKSA9PiB7cmV0dXJuIGJbcHJvcGVydHldIC0gYVtwcm9wZXJ0eV19KSA6XG4gICAgZmlsZUluZm8uc29ydCgoYSwgYikgPT4ge3JldHVybiBhW3Byb3BlcnR5XSAtIGJbcHJvcGVydHldfSlcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBuZXcgY3VwcmVhZGRpcigpXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNwbGl0V2hlbiA9IGV4cG9ydHMuZmxhdHRlbiA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChjb2xsZWN0aW9uLCBpdGVtKSA9PiBbXS5jb25jYXQoY29sbGVjdGlvbiwgaXRlbSksIFtdKTtcbn1cbmV4cG9ydHMuZmxhdHRlbiA9IGZsYXR0ZW47XG5mdW5jdGlvbiBzcGxpdFdoZW4oaXRlbXMsIHByZWRpY2F0ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtbXV07XG4gICAgbGV0IGdyb3VwSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICBncm91cEluZGV4Kys7XG4gICAgICAgICAgICByZXN1bHRbZ3JvdXBJbmRleF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtncm91cEluZGV4XS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNwbGl0V2hlbiA9IHNwbGl0V2hlbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0Vub2VudENvZGVFcnJvcihlcnJvcikge1xuICAgIHJldHVybiBlcnJvci5jb2RlID09PSAnRU5PRU5UJztcbn1cbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSBpc0Vub2VudENvZGVFcnJvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGlyZW50RnJvbVN0YXRzID0gdm9pZCAwO1xuY2xhc3MgRGlyZW50RnJvbVN0YXRzIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBzdGF0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmlzQmxvY2tEZXZpY2UgPSBzdGF0cy5pc0Jsb2NrRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlID0gc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBzdGF0cy5pc0RpcmVjdG9yeS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0ZJRk8gPSBzdGF0cy5pc0ZJRk8uYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGaWxlID0gc3RhdHMuaXNGaWxlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU29ja2V0ID0gc3RhdHMuaXNTb2NrZXQuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNTeW1ib2xpY0xpbmsgPSBzdGF0cy5pc1N5bWJvbGljTGluay5iaW5kKHN0YXRzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpIHtcbiAgICByZXR1cm4gbmV3IERpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cyk7XG59XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IGNyZWF0ZURpcmVudEZyb21TdGF0cztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydFBvc2l4UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuID0gZXhwb3J0cy5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuZXNjYXBlUG9zaXhQYXRoID0gZXhwb3J0cy5lc2NhcGVXaW5kb3dzUGF0aCA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5yZW1vdmVMZWFkaW5nRG90U2VnbWVudCA9IGV4cG9ydHMubWFrZUFic29sdXRlID0gZXhwb3J0cy51bml4aWZ5ID0gdm9pZCAwO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBJU19XSU5ET1dTX1BMQVRGT1JNID0gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbmNvbnN0IExFQURJTkdfRE9UX1NFR01FTlRfQ0hBUkFDVEVSU19DT1VOVCA9IDI7IC8vIC4vIG9yIC5cXFxcXG4vKipcbiAqIEFsbCBub24tZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKiBQb3NpeDogKCkqP1tde3x9LCAhK0AgYmVmb3JlICgsICEgYXQgdGhlIGJlZ2lubmluZywgXFxcXCBiZWZvcmUgbm9uLXNwZWNpYWwgY2hhcmFjdGVycy5cbiAqIFdpbmRvd3M6ICgpe31bXSwgIStAIGJlZm9yZSAoLCAhIGF0IHRoZSBiZWdpbm5pbmcuXG4gKi9cbmNvbnN0IFBPU0lYX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKCkqP1tcXF17fH1dfF4hfFshK0BdKD89XFwoKXxcXFxcKD8hWyEoKSorP0BbXFxde3x9XSkpL2c7XG5jb25zdCBXSU5ET1dTX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKClbXFxde31dfF4hfFshK0BdKD89XFwoKSkvZztcbi8qKlxuICogVGhlIGRldmljZSBwYXRoIChcXFxcLlxcIG9yIFxcXFw/XFwpLlxuICogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9zdGFuZGFyZC9pby9maWxlLXBhdGgtZm9ybWF0cyNkb3MtZGV2aWNlLXBhdGhzXG4gKi9cbmNvbnN0IERPU19ERVZJQ0VfUEFUSF9SRSA9IC9eXFxcXFxcXFwoWy4/XSkvO1xuLyoqXG4gKiBBbGwgYmFja3NsYXNoZXMgZXhjZXB0IHRob3NlIGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAqIFdpbmRvd3M6ICEoKStAe31cbiAqIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2ZpbGVpby9uYW1pbmctYS1maWxlI25hbWluZy1jb252ZW50aW9uc1xuICovXG5jb25zdCBXSU5ET1dTX0JBQ0tTTEFTSEVTX1JFID0gL1xcXFwoPyFbISgpK0BbXFxde31dKS9nO1xuLyoqXG4gKiBEZXNpZ25lZCB0byB3b3JrIG9ubHkgd2l0aCBzaW1wbGUgcGF0aHM6IGBkaXJcXFxcZmlsZWAuXG4gKi9cbmZ1bmN0aW9uIHVuaXhpZnkoZmlsZXBhdGgpIHtcbiAgICByZXR1cm4gZmlsZXBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufVxuZXhwb3J0cy51bml4aWZ5ID0gdW5peGlmeTtcbmZ1bmN0aW9uIG1ha2VBYnNvbHV0ZShjd2QsIGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShjd2QsIGZpbGVwYXRoKTtcbn1cbmV4cG9ydHMubWFrZUFic29sdXRlID0gbWFrZUFic29sdXRlO1xuZnVuY3Rpb24gcmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQoZW50cnkpIHtcbiAgICAvLyBXZSBkbyBub3QgdXNlIGBzdGFydHNXaXRoYCBiZWNhdXNlIHRoaXMgaXMgMTB4IHNsb3dlciB0aGFuIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZm9yIHNvbWUgY2FzZXMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItc3RyaW5nLXN0YXJ0cy1lbmRzLXdpdGhcbiAgICBpZiAoZW50cnkuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kQ2hhcmFjdGVyeSA9IGVudHJ5LmNoYXJBdCgxKTtcbiAgICAgICAgaWYgKHNlY29uZENoYXJhY3RlcnkgPT09ICcvJyB8fCBzZWNvbmRDaGFyYWN0ZXJ5ID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5zbGljZShMRUFESU5HX0RPVF9TRUdNRU5UX0NIQVJBQ1RFUlNfQ09VTlQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbn1cbmV4cG9ydHMucmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQgPSByZW1vdmVMZWFkaW5nRG90U2VnbWVudDtcbmV4cG9ydHMuZXNjYXBlID0gSVNfV0lORE9XU19QTEFURk9STSA/IGVzY2FwZVdpbmRvd3NQYXRoIDogZXNjYXBlUG9zaXhQYXRoO1xuZnVuY3Rpb24gZXNjYXBlV2luZG93c1BhdGgocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoV0lORE9XU19VTkVTQ0FQRURfR0xPQl9TWU1CT0xTX1JFLCAnXFxcXCQyJyk7XG59XG5leHBvcnRzLmVzY2FwZVdpbmRvd3NQYXRoID0gZXNjYXBlV2luZG93c1BhdGg7XG5mdW5jdGlvbiBlc2NhcGVQb3NpeFBhdGgocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoUE9TSVhfVU5FU0NBUEVEX0dMT0JfU1lNQk9MU19SRSwgJ1xcXFwkMicpO1xufVxuZXhwb3J0cy5lc2NhcGVQb3NpeFBhdGggPSBlc2NhcGVQb3NpeFBhdGg7XG5leHBvcnRzLmNvbnZlcnRQYXRoVG9QYXR0ZXJuID0gSVNfV0lORE9XU19QTEFURk9STSA/IGNvbnZlcnRXaW5kb3dzUGF0aFRvUGF0dGVybiA6IGNvbnZlcnRQb3NpeFBhdGhUb1BhdHRlcm47XG5mdW5jdGlvbiBjb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm4oZmlsZXBhdGgpIHtcbiAgICByZXR1cm4gZXNjYXBlV2luZG93c1BhdGgoZmlsZXBhdGgpXG4gICAgICAgIC5yZXBsYWNlKERPU19ERVZJQ0VfUEFUSF9SRSwgJy8vJDEnKVxuICAgICAgICAucmVwbGFjZShXSU5ET1dTX0JBQ0tTTEFTSEVTX1JFLCAnLycpO1xufVxuZXhwb3J0cy5jb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm4gPSBjb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm47XG5mdW5jdGlvbiBjb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuKGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIGVzY2FwZVBvc2l4UGF0aChmaWxlcGF0aCk7XG59XG5leHBvcnRzLmNvbnZlcnRQb3NpeFBhdGhUb1BhdHRlcm4gPSBjb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuO1xuIiwgIi8qIVxuICogaXMtZXh0Z2xvYiA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtZXh0Z2xvYj5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0V4dGdsb2Ioc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gLyhcXFxcKS58KFtAPyErKl1cXCguKlxcKSkvZy5leGVjKHN0cikpKSB7XG4gICAgaWYgKG1hdGNoWzJdKSByZXR1cm4gdHJ1ZTtcbiAgICBzdHIgPSBzdHIuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIvKiFcbiAqIGlzLWdsb2IgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLWdsb2I+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbnZhciBpc0V4dGdsb2IgPSByZXF1aXJlKCdpcy1leHRnbG9iJyk7XG52YXIgY2hhcnMgPSB7ICd7JzogJ30nLCAnKCc6ICcpJywgJ1snOiAnXSd9O1xudmFyIHN0cmljdENoZWNrID0gZnVuY3Rpb24oc3RyKSB7XG4gIGlmIChzdHJbMF0gPT09ICchJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBwaXBlSW5kZXggPSAtMjtcbiAgdmFyIGNsb3NlU3F1YXJlSW5kZXggPSAtMjtcbiAgdmFyIGNsb3NlQ3VybHlJbmRleCA9IC0yO1xuICB2YXIgY2xvc2VQYXJlbkluZGV4ID0gLTI7XG4gIHZhciBiYWNrU2xhc2hJbmRleCA9IC0yO1xuICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgaWYgKHN0cltpbmRleF0gPT09ICcqJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0cltpbmRleCArIDFdID09PSAnPycgJiYgL1tcXF0uKyldLy50ZXN0KHN0cltpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VTcXVhcmVJbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJ1snICYmIHN0cltpbmRleCArIDFdICE9PSAnXScpIHtcbiAgICAgIGlmIChjbG9zZVNxdWFyZUluZGV4IDwgaW5kZXgpIHtcbiAgICAgICAgY2xvc2VTcXVhcmVJbmRleCA9IHN0ci5pbmRleE9mKCddJywgaW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNsb3NlU3F1YXJlSW5kZXggPiBpbmRleCkge1xuICAgICAgICBpZiAoYmFja1NsYXNoSW5kZXggPT09IC0xIHx8IGJhY2tTbGFzaEluZGV4ID4gY2xvc2VTcXVhcmVJbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJhY2tTbGFzaEluZGV4ID0gc3RyLmluZGV4T2YoJ1xcXFwnLCBpbmRleCk7XG4gICAgICAgIGlmIChiYWNrU2xhc2hJbmRleCA9PT0gLTEgfHwgYmFja1NsYXNoSW5kZXggPiBjbG9zZVNxdWFyZUluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xvc2VDdXJseUluZGV4ICE9PSAtMSAmJiBzdHJbaW5kZXhdID09PSAneycgJiYgc3RyW2luZGV4ICsgMV0gIT09ICd9Jykge1xuICAgICAgY2xvc2VDdXJseUluZGV4ID0gc3RyLmluZGV4T2YoJ30nLCBpbmRleCk7XG4gICAgICBpZiAoY2xvc2VDdXJseUluZGV4ID4gaW5kZXgpIHtcbiAgICAgICAgYmFja1NsYXNoSW5kZXggPSBzdHIuaW5kZXhPZignXFxcXCcsIGluZGV4KTtcbiAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlQ3VybHlJbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlUGFyZW5JbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJygnICYmIHN0cltpbmRleCArIDFdID09PSAnPycgJiYgL1s6IT1dLy50ZXN0KHN0cltpbmRleCArIDJdKSAmJiBzdHJbaW5kZXggKyAzXSAhPT0gJyknKSB7XG4gICAgICBjbG9zZVBhcmVuSW5kZXggPSBzdHIuaW5kZXhPZignKScsIGluZGV4KTtcbiAgICAgIGlmIChjbG9zZVBhcmVuSW5kZXggPiBpbmRleCkge1xuICAgICAgICBiYWNrU2xhc2hJbmRleCA9IHN0ci5pbmRleE9mKCdcXFxcJywgaW5kZXgpO1xuICAgICAgICBpZiAoYmFja1NsYXNoSW5kZXggPT09IC0xIHx8IGJhY2tTbGFzaEluZGV4ID4gY2xvc2VQYXJlbkluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGlwZUluZGV4ICE9PSAtMSAmJiBzdHJbaW5kZXhdID09PSAnKCcgJiYgc3RyW2luZGV4ICsgMV0gIT09ICd8Jykge1xuICAgICAgaWYgKHBpcGVJbmRleCA8IGluZGV4KSB7XG4gICAgICAgIHBpcGVJbmRleCA9IHN0ci5pbmRleE9mKCd8JywgaW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKHBpcGVJbmRleCAhPT0gLTEgJiYgc3RyW3BpcGVJbmRleCArIDFdICE9PSAnKScpIHtcbiAgICAgICAgY2xvc2VQYXJlbkluZGV4ID0gc3RyLmluZGV4T2YoJyknLCBwaXBlSW5kZXgpO1xuICAgICAgICBpZiAoY2xvc2VQYXJlbkluZGV4ID4gcGlwZUluZGV4KSB7XG4gICAgICAgICAgYmFja1NsYXNoSW5kZXggPSBzdHIuaW5kZXhPZignXFxcXCcsIHBpcGVJbmRleCk7XG4gICAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlUGFyZW5JbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0cltpbmRleF0gPT09ICdcXFxcJykge1xuICAgICAgdmFyIG9wZW4gPSBzdHJbaW5kZXggKyAxXTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICB2YXIgY2xvc2UgPSBjaGFyc1tvcGVuXTtcblxuICAgICAgaWYgKGNsb3NlKSB7XG4gICAgICAgIHZhciBuID0gc3RyLmluZGV4T2YoY2xvc2UsIGluZGV4KTtcbiAgICAgICAgaWYgKG4gIT09IC0xKSB7XG4gICAgICAgICAgaW5kZXggPSBuICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyW2luZGV4XSA9PT0gJyEnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgcmVsYXhlZENoZWNrID0gZnVuY3Rpb24oc3RyKSB7XG4gIGlmIChzdHJbMF0gPT09ICchJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBpZiAoL1sqP3t9KClbXFxdXS8udGVzdChzdHJbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0cltpbmRleF0gPT09ICdcXFxcJykge1xuICAgICAgdmFyIG9wZW4gPSBzdHJbaW5kZXggKyAxXTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICB2YXIgY2xvc2UgPSBjaGFyc1tvcGVuXTtcblxuICAgICAgaWYgKGNsb3NlKSB7XG4gICAgICAgIHZhciBuID0gc3RyLmluZGV4T2YoY2xvc2UsIGluZGV4KTtcbiAgICAgICAgaWYgKG4gIT09IC0xKSB7XG4gICAgICAgICAgaW5kZXggPSBuICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyW2luZGV4XSA9PT0gJyEnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzR2xvYihzdHIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnIHx8IHN0ciA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNFeHRnbG9iKHN0cikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjaGVjayA9IHN0cmljdENoZWNrO1xuXG4gIC8vIG9wdGlvbmFsbHkgcmVsYXggY2hlY2tcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QgPT09IGZhbHNlKSB7XG4gICAgY2hlY2sgPSByZWxheGVkQ2hlY2s7XG4gIH1cblxuICByZXR1cm4gY2hlY2soc3RyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNHbG9iID0gcmVxdWlyZSgnaXMtZ2xvYicpO1xudmFyIHBhdGhQb3NpeERpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykucG9zaXguZGlybmFtZTtcbnZhciBpc1dpbjMyID0gcmVxdWlyZSgnb3MnKS5wbGF0Zm9ybSgpID09PSAnd2luMzInO1xuXG52YXIgc2xhc2ggPSAnLyc7XG52YXIgYmFja3NsYXNoID0gL1xcXFwvZztcbnZhciBlbmNsb3N1cmUgPSAvW1xce1xcW10uKltcXH1cXF1dJC87XG52YXIgZ2xvYmJ5ID0gLyhefFteXFxcXF0pKFtcXHtcXFtdfFxcKFteXFwpXSskKS87XG52YXIgZXNjYXBlZCA9IC9cXFxcKFtcXCFcXCpcXD9cXHxcXFtcXF1cXChcXClcXHtcXH1dKS9nO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBCYWNrc2xhc2hlcz10cnVlXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnbG9iUGFyZW50KHN0ciwgb3B0cykge1xuICB2YXIgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBmbGlwQmFja3NsYXNoZXM6IHRydWUgfSwgb3B0cyk7XG5cbiAgLy8gZmxpcCB3aW5kb3dzIHBhdGggc2VwYXJhdG9yc1xuICBpZiAob3B0aW9ucy5mbGlwQmFja3NsYXNoZXMgJiYgaXNXaW4zMiAmJiBzdHIuaW5kZXhPZihzbGFzaCkgPCAwKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoYmFja3NsYXNoLCBzbGFzaCk7XG4gIH1cblxuICAvLyBzcGVjaWFsIGNhc2UgZm9yIHN0cmluZ3MgZW5kaW5nIGluIGVuY2xvc3VyZSBjb250YWluaW5nIHBhdGggc2VwYXJhdG9yXG4gIGlmIChlbmNsb3N1cmUudGVzdChzdHIpKSB7XG4gICAgc3RyICs9IHNsYXNoO1xuICB9XG5cbiAgLy8gcHJlc2VydmVzIGZ1bGwgcGF0aCBpbiBjYXNlIG9mIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yXG4gIHN0ciArPSAnYSc7XG5cbiAgLy8gcmVtb3ZlIHBhdGggcGFydHMgdGhhdCBhcmUgZ2xvYmJ5XG4gIGRvIHtcbiAgICBzdHIgPSBwYXRoUG9zaXhEaXJuYW1lKHN0cik7XG4gIH0gd2hpbGUgKGlzR2xvYihzdHIpIHx8IGdsb2JieS50ZXN0KHN0cikpO1xuXG4gIC8vIHJlbW92ZSBlc2NhcGUgY2hhcnMgYW5kIHJldHVybiByZXN1bHRcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGVzY2FwZWQsICckMScpO1xufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGV4cG9ydHMucGFydGl0aW9uQWJzb2x1dGVBbmRSZWxhdGl2ZSA9IGV4cG9ydHMucmVtb3ZlRHVwbGljYXRlU2xhc2hlcyA9IGV4cG9ydHMubWF0Y2hBbnkgPSBleHBvcnRzLmNvbnZlcnRQYXR0ZXJuc1RvUmUgPSBleHBvcnRzLm1ha2VSZSA9IGV4cG9ydHMuZ2V0UGF0dGVyblBhcnRzID0gZXhwb3J0cy5leHBhbmRCcmFjZUV4cGFuc2lvbiA9IGV4cG9ydHMuZXhwYW5kUGF0dGVybnNXaXRoQnJhY2VFeHBhbnNpb24gPSBleHBvcnRzLmlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuID0gZXhwb3J0cy5lbmRzV2l0aFNsYXNoR2xvYlN0YXIgPSBleHBvcnRzLmhhc0dsb2JTdGFyID0gZXhwb3J0cy5nZXRCYXNlRGlyZWN0b3J5ID0gZXhwb3J0cy5pc1BhdHRlcm5SZWxhdGVkVG9QYXJlbnREaXJlY3RvcnkgPSBleHBvcnRzLmdldFBhdHRlcm5zT3V0c2lkZUN1cnJlbnREaXJlY3RvcnkgPSBleHBvcnRzLmdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeSA9IGV4cG9ydHMuZ2V0UG9zaXRpdmVQYXR0ZXJucyA9IGV4cG9ydHMuZ2V0TmVnYXRpdmVQYXR0ZXJucyA9IGV4cG9ydHMuaXNQb3NpdGl2ZVBhdHRlcm4gPSBleHBvcnRzLmlzTmVnYXRpdmVQYXR0ZXJuID0gZXhwb3J0cy5jb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm4gPSBleHBvcnRzLmNvbnZlcnRUb1Bvc2l0aXZlUGF0dGVybiA9IGV4cG9ydHMuaXNEeW5hbWljUGF0dGVybiA9IGV4cG9ydHMuaXNTdGF0aWNQYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZ2xvYlBhcmVudCA9IHJlcXVpcmUoXCJnbG9iLXBhcmVudFwiKTtcbmNvbnN0IG1pY3JvbWF0Y2ggPSByZXF1aXJlKFwibWljcm9tYXRjaFwiKTtcbmNvbnN0IEdMT0JTVEFSID0gJyoqJztcbmNvbnN0IEVTQ0FQRV9TWU1CT0wgPSAnXFxcXCc7XG5jb25zdCBDT01NT05fR0xPQl9TWU1CT0xTX1JFID0gL1sqP118XiEvO1xuY29uc3QgUkVHRVhfQ0hBUkFDVEVSX0NMQVNTX1NZTUJPTFNfUkUgPSAvXFxbW15bXSpdLztcbmNvbnN0IFJFR0VYX0dST1VQX1NZTUJPTFNfUkUgPSAvKD86XnxbXiEqKz9AXSlcXChbXihdKlxcfFtefF0qXFwpLztcbmNvbnN0IEdMT0JfRVhURU5TSU9OX1NZTUJPTFNfUkUgPSAvWyEqKz9AXVxcKFteKF0qXFwpLztcbmNvbnN0IEJSQUNFX0VYUEFOU0lPTl9TRVBBUkFUT1JTX1JFID0gLyx8XFwuXFwuLztcbi8qKlxuICogTWF0Y2hlcyBhIHNlcXVlbmNlIG9mIHR3byBvciBtb3JlIGNvbnNlY3V0aXZlIHNsYXNoZXMsIGV4Y2x1ZGluZyB0aGUgZmlyc3QgdHdvIHNsYXNoZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLlxuICogVGhlIGxhdHRlciBpcyBkdWUgdG8gdGhlIHByZXNlbmNlIG9mIHRoZSBkZXZpY2UgcGF0aCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBVTkMgcGF0aC5cbiAqL1xuY29uc3QgRE9VQkxFX1NMQVNIX1JFID0gLyg/IV4pXFwvezIsfS9nO1xuZnVuY3Rpb24gaXNTdGF0aWNQYXR0ZXJuKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiAhaXNEeW5hbWljUGF0dGVybihwYXR0ZXJuLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuaXNTdGF0aWNQYXR0ZXJuID0gaXNTdGF0aWNQYXR0ZXJuO1xuZnVuY3Rpb24gaXNEeW5hbWljUGF0dGVybihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2FzZSB3aXRoIGFuIGVtcHR5IHN0cmluZyBpcyBuZWNlc3NhcnkgZm9yIG1hdGNoaW5nIHBhdHRlcm5zIHRoYXQgc3RhcnQgd2l0aCBhIGZvcndhcmQgc2xhc2guXG4gICAgICogQW4gZW1wdHkgc3RyaW5nIGNhbm5vdCBiZSBhIGR5bmFtaWMgcGF0dGVybi5cbiAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gYC9saWIvKmAgd2lsbCBiZSBzcHJlYWQgaW50byBwYXJ0czogJycsICdsaWInLCAnKicuXG4gICAgICovXG4gICAgaWYgKHBhdHRlcm4gPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgYGNhc2VTZW5zaXRpdmVNYXRjaGAgb3B0aW9uIGlzIGRpc2FibGVkLCBhbGwgcGF0dGVybnMgbXVzdCBiZSBtYXJrZWQgYXMgZHluYW1pYywgYmVjYXVzZSB3ZSBjYW5ub3QgY2hlY2tcbiAgICAgKiBmaWxlcGF0aCBkaXJlY3RseSAod2l0aG91dCByZWFkIGRpcmVjdG9yeSkuXG4gICAgICovXG4gICAgaWYgKG9wdGlvbnMuY2FzZVNlbnNpdGl2ZU1hdGNoID09PSBmYWxzZSB8fCBwYXR0ZXJuLmluY2x1ZGVzKEVTQ0FQRV9TWU1CT0wpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoQ09NTU9OX0dMT0JfU1lNQk9MU19SRS50ZXN0KHBhdHRlcm4pIHx8IFJFR0VYX0NIQVJBQ1RFUl9DTEFTU19TWU1CT0xTX1JFLnRlc3QocGF0dGVybikgfHwgUkVHRVhfR1JPVVBfU1lNQk9MU19SRS50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leHRnbG9iICE9PSBmYWxzZSAmJiBHTE9CX0VYVEVOU0lPTl9TWU1CT0xTX1JFLnRlc3QocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJyYWNlRXhwYW5zaW9uICE9PSBmYWxzZSAmJiBoYXNCcmFjZUV4cGFuc2lvbihwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5pc0R5bmFtaWNQYXR0ZXJuID0gaXNEeW5hbWljUGF0dGVybjtcbmZ1bmN0aW9uIGhhc0JyYWNlRXhwYW5zaW9uKHBhdHRlcm4pIHtcbiAgICBjb25zdCBvcGVuaW5nQnJhY2VJbmRleCA9IHBhdHRlcm4uaW5kZXhPZigneycpO1xuICAgIGlmIChvcGVuaW5nQnJhY2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjbG9zaW5nQnJhY2VJbmRleCA9IHBhdHRlcm4uaW5kZXhPZignfScsIG9wZW5pbmdCcmFjZUluZGV4ICsgMSk7XG4gICAgaWYgKGNsb3NpbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJyYWNlQ29udGVudCA9IHBhdHRlcm4uc2xpY2Uob3BlbmluZ0JyYWNlSW5kZXgsIGNsb3NpbmdCcmFjZUluZGV4KTtcbiAgICByZXR1cm4gQlJBQ0VfRVhQQU5TSU9OX1NFUEFSQVRPUlNfUkUudGVzdChicmFjZUNvbnRlbnQpO1xufVxuZnVuY3Rpb24gY29udmVydFRvUG9zaXRpdmVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gaXNOZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikgPyBwYXR0ZXJuLnNsaWNlKDEpIDogcGF0dGVybjtcbn1cbmV4cG9ydHMuY29udmVydFRvUG9zaXRpdmVQYXR0ZXJuID0gY29udmVydFRvUG9zaXRpdmVQYXR0ZXJuO1xuZnVuY3Rpb24gY29udmVydFRvTmVnYXRpdmVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gJyEnICsgcGF0dGVybjtcbn1cbmV4cG9ydHMuY29udmVydFRvTmVnYXRpdmVQYXR0ZXJuID0gY29udmVydFRvTmVnYXRpdmVQYXR0ZXJuO1xuZnVuY3Rpb24gaXNOZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKSAmJiBwYXR0ZXJuWzFdICE9PSAnKCc7XG59XG5leHBvcnRzLmlzTmVnYXRpdmVQYXR0ZXJuID0gaXNOZWdhdGl2ZVBhdHRlcm47XG5mdW5jdGlvbiBpc1Bvc2l0aXZlUGF0dGVybihwYXR0ZXJuKSB7XG4gICAgcmV0dXJuICFpc05lZ2F0aXZlUGF0dGVybihwYXR0ZXJuKTtcbn1cbmV4cG9ydHMuaXNQb3NpdGl2ZVBhdHRlcm4gPSBpc1Bvc2l0aXZlUGF0dGVybjtcbmZ1bmN0aW9uIGdldE5lZ2F0aXZlUGF0dGVybnMocGF0dGVybnMpIHtcbiAgICByZXR1cm4gcGF0dGVybnMuZmlsdGVyKGlzTmVnYXRpdmVQYXR0ZXJuKTtcbn1cbmV4cG9ydHMuZ2V0TmVnYXRpdmVQYXR0ZXJucyA9IGdldE5lZ2F0aXZlUGF0dGVybnM7XG5mdW5jdGlvbiBnZXRQb3NpdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcihpc1Bvc2l0aXZlUGF0dGVybik7XG59XG5leHBvcnRzLmdldFBvc2l0aXZlUGF0dGVybnMgPSBnZXRQb3NpdGl2ZVBhdHRlcm5zO1xuLyoqXG4gKiBSZXR1cm5zIHBhdHRlcm5zIHRoYXQgY2FuIGJlIGFwcGxpZWQgaW5zaWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWycuLyonLCAnKicsICdhLyonXVxuICogZ2V0UGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KFsnLi8qJywgJyonLCAnYS8qJywgJy4uLyonLCAnLi8uLi8qJ10pXG4gKi9cbmZ1bmN0aW9uIGdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeShwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5maWx0ZXIoKHBhdHRlcm4pID0+ICFpc1BhdHRlcm5SZWxhdGVkVG9QYXJlbnREaXJlY3RvcnkocGF0dGVybikpO1xufVxuZXhwb3J0cy5nZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkgPSBnZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3Rvcnk7XG4vKipcbiAqIFJldHVybnMgcGF0dGVybnMgdG8gYmUgZXhwYW5kZWQgcmVsYXRpdmUgdG8gKG91dHNpZGUpIHRoZSBjdXJyZW50IGRpcmVjdG9yeS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWycuLi8qJywgJy4vLi4vKiddXG4gKiBnZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkoWycuLyonLCAnKicsICdhLyonLCAnLi4vKicsICcuLy4uLyonXSlcbiAqL1xuZnVuY3Rpb24gZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeShwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5maWx0ZXIoaXNQYXR0ZXJuUmVsYXRlZFRvUGFyZW50RGlyZWN0b3J5KTtcbn1cbmV4cG9ydHMuZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IGdldFBhdHRlcm5zT3V0c2lkZUN1cnJlbnREaXJlY3Rvcnk7XG5mdW5jdGlvbiBpc1BhdHRlcm5SZWxhdGVkVG9QYXJlbnREaXJlY3RvcnkocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy4uJykgfHwgcGF0dGVybi5zdGFydHNXaXRoKCcuLy4uJyk7XG59XG5leHBvcnRzLmlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeSA9IGlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeTtcbmZ1bmN0aW9uIGdldEJhc2VEaXJlY3RvcnkocGF0dGVybikge1xuICAgIHJldHVybiBnbG9iUGFyZW50KHBhdHRlcm4sIHsgZmxpcEJhY2tzbGFzaGVzOiBmYWxzZSB9KTtcbn1cbmV4cG9ydHMuZ2V0QmFzZURpcmVjdG9yeSA9IGdldEJhc2VEaXJlY3Rvcnk7XG5mdW5jdGlvbiBoYXNHbG9iU3RhcihwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5jbHVkZXMoR0xPQlNUQVIpO1xufVxuZXhwb3J0cy5oYXNHbG9iU3RhciA9IGhhc0dsb2JTdGFyO1xuZnVuY3Rpb24gZW5kc1dpdGhTbGFzaEdsb2JTdGFyKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5lbmRzV2l0aCgnLycgKyBHTE9CU1RBUik7XG59XG5leHBvcnRzLmVuZHNXaXRoU2xhc2hHbG9iU3RhciA9IGVuZHNXaXRoU2xhc2hHbG9iU3RhcjtcbmZ1bmN0aW9uIGlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUocGF0dGVybik7XG4gICAgcmV0dXJuIGVuZHNXaXRoU2xhc2hHbG9iU3RhcihwYXR0ZXJuKSB8fCBpc1N0YXRpY1BhdHRlcm4oYmFzZW5hbWUpO1xufVxuZXhwb3J0cy5pc0FmZmVjdERlcHRoT2ZSZWFkaW5nUGF0dGVybiA9IGlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuO1xuZnVuY3Rpb24gZXhwYW5kUGF0dGVybnNXaXRoQnJhY2VFeHBhbnNpb24ocGF0dGVybnMpIHtcbiAgICByZXR1cm4gcGF0dGVybnMucmVkdWNlKChjb2xsZWN0aW9uLCBwYXR0ZXJuKSA9PiB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uLmNvbmNhdChleHBhbmRCcmFjZUV4cGFuc2lvbihwYXR0ZXJuKSk7XG4gICAgfSwgW10pO1xufVxuZXhwb3J0cy5leHBhbmRQYXR0ZXJuc1dpdGhCcmFjZUV4cGFuc2lvbiA9IGV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uO1xuZnVuY3Rpb24gZXhwYW5kQnJhY2VFeHBhbnNpb24ocGF0dGVybikge1xuICAgIGNvbnN0IHBhdHRlcm5zID0gbWljcm9tYXRjaC5icmFjZXMocGF0dGVybiwgeyBleHBhbmQ6IHRydWUsIG5vZHVwZXM6IHRydWUsIGtlZXBFc2NhcGluZzogdHJ1ZSB9KTtcbiAgICAvKipcbiAgICAgKiBTb3J0IHRoZSBwYXR0ZXJucyBieSBsZW5ndGggc28gdGhhdCB0aGUgc2FtZSBkZXB0aCBwYXR0ZXJucyBhcmUgcHJvY2Vzc2VkIHNpZGUgYnkgc2lkZS5cbiAgICAgKiBgYS97Yix9L3tjLH0vKmAgXHUyMDEzIGBbJ2EvLy8qJywgJ2EvYi8vKicsICdhLy9jLyonLCAnYS9iL2MvKiddYFxuICAgICAqL1xuICAgIHBhdHRlcm5zLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xuICAgIC8qKlxuICAgICAqIE1pY3JvbWF0Y2ggY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNhc2Ugb2YgcGF0dGVybnMgbGlrZSBge2EsfWAuXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT4gcGF0dGVybiAhPT0gJycpO1xufVxuZXhwb3J0cy5leHBhbmRCcmFjZUV4cGFuc2lvbiA9IGV4cGFuZEJyYWNlRXhwYW5zaW9uO1xuZnVuY3Rpb24gZ2V0UGF0dGVyblBhcnRzKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBsZXQgeyBwYXJ0cyB9ID0gbWljcm9tYXRjaC5zY2FuKHBhdHRlcm4sIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgcGFydHM6IHRydWUgfSkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FuIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGluIHNvbWUgY2FzZXMuXG4gICAgICogU2VlIG1pY3JvbWF0Y2gvcGljb21hdGNoIzU4IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICovXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYXJ0cyA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNjYW4gbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbiBlbXB0eSBwYXJ0IGZvciB0aGUgcGF0dGVybiB3aXRoIGEgZm9yd2FyZCBzbGFzaC5cbiAgICAgKiBUaGlzIGlzIGFub3RoZXIgcGFydCBvZiBtaWNyb21hdGNoL3BpY29tYXRjaCM1OC5cbiAgICAgKi9cbiAgICBpZiAocGFydHNbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0uc2xpY2UoMSk7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoJycpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHM7XG59XG5leHBvcnRzLmdldFBhdHRlcm5QYXJ0cyA9IGdldFBhdHRlcm5QYXJ0cztcbmZ1bmN0aW9uIG1ha2VSZShwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1pY3JvbWF0Y2gubWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1JlKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gbWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9SZSA9IGNvbnZlcnRQYXR0ZXJuc1RvUmU7XG5mdW5jdGlvbiBtYXRjaEFueShlbnRyeSwgcGF0dGVybnNSZSkge1xuICAgIHJldHVybiBwYXR0ZXJuc1JlLnNvbWUoKHBhdHRlcm5SZSkgPT4gcGF0dGVyblJlLnRlc3QoZW50cnkpKTtcbn1cbmV4cG9ydHMubWF0Y2hBbnkgPSBtYXRjaEFueTtcbi8qKlxuICogVGhpcyBwYWNrYWdlIG9ubHkgd29ya3Mgd2l0aCBmb3J3YXJkIHNsYXNoZXMgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqIEJlY2F1c2Ugb2YgdGhpcywgd2UgY2Fubm90IHVzZSB0aGUgc3RhbmRhcmQgYHBhdGgubm9ybWFsaXplYCBtZXRob2QsIGJlY2F1c2Ugb24gV2luZG93cyBwbGF0Zm9ybSBpdCB3aWxsIHVzZSBvZiBiYWNrc2xhc2hlcy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlU2xhc2hlcyhwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZShET1VCTEVfU0xBU0hfUkUsICcvJyk7XG59XG5leHBvcnRzLnJlbW92ZUR1cGxpY2F0ZVNsYXNoZXMgPSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzO1xuZnVuY3Rpb24gcGFydGl0aW9uQWJzb2x1dGVBbmRSZWxhdGl2ZShwYXR0ZXJucykge1xuICAgIGNvbnN0IGFic29sdXRlID0gW107XG4gICAgY29uc3QgcmVsYXRpdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgaWYgKGlzQWJzb2x1dGUocGF0dGVybikpIHtcbiAgICAgICAgICAgIGFic29sdXRlLnB1c2gocGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWxhdGl2ZS5wdXNoKHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbYWJzb2x1dGUsIHJlbGF0aXZlXTtcbn1cbmV4cG9ydHMucGFydGl0aW9uQWJzb2x1dGVBbmRSZWxhdGl2ZSA9IHBhcnRpdGlvbkFic29sdXRlQW5kUmVsYXRpdmU7XG5mdW5jdGlvbiBpc0Fic29sdXRlKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0aC5pc0Fic29sdXRlKHBhdHRlcm4pO1xufVxuZXhwb3J0cy5pc0Fic29sdXRlID0gaXNBYnNvbHV0ZTtcbiIsICIndXNlIHN0cmljdCdcbi8qXG4gKiBtZXJnZTJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZWFtYml0aW9uL21lcmdlMlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIwIFRlYW1iaXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IFBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoXG5jb25zdCBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlMlxuXG5mdW5jdGlvbiBtZXJnZTIgKCkge1xuICBjb25zdCBzdHJlYW1zUXVldWUgPSBbXVxuICBjb25zdCBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIGxldCBtZXJnaW5nID0gZmFsc2VcbiAgbGV0IG9wdGlvbnMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV1cblxuICBpZiAob3B0aW9ucyAmJiAhQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLnBpcGUgPT0gbnVsbCkge1xuICAgIGFyZ3MucG9wKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIGNvbnN0IGRvRW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlXG4gIGNvbnN0IGRvUGlwZUVycm9yID0gb3B0aW9ucy5waXBlRXJyb3IgPT09IHRydWVcbiAgaWYgKG9wdGlvbnMub2JqZWN0TW9kZSA9PSBudWxsKSB7XG4gICAgb3B0aW9ucy5vYmplY3RNb2RlID0gdHJ1ZVxuICB9XG4gIGlmIChvcHRpb25zLmhpZ2hXYXRlck1hcmsgPT0gbnVsbCkge1xuICAgIG9wdGlvbnMuaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNFxuICB9XG4gIGNvbnN0IG1lcmdlZFN0cmVhbSA9IFBhc3NUaHJvdWdoKG9wdGlvbnMpXG5cbiAgZnVuY3Rpb24gYWRkU3RyZWFtICgpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzdHJlYW1zUXVldWUucHVzaChwYXVzZVN0cmVhbXMoYXJndW1lbnRzW2ldLCBvcHRpb25zKSlcbiAgICB9XG4gICAgbWVyZ2VTdHJlYW0oKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZVN0cmVhbSAoKSB7XG4gICAgaWYgKG1lcmdpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBtZXJnaW5nID0gdHJ1ZVxuXG4gICAgbGV0IHN0cmVhbXMgPSBzdHJlYW1zUXVldWUuc2hpZnQoKVxuICAgIGlmICghc3RyZWFtcykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbmRTdHJlYW0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0cmVhbXMpKSB7XG4gICAgICBzdHJlYW1zID0gW3N0cmVhbXNdXG4gICAgfVxuXG4gICAgbGV0IHBpcGVzQ291bnQgPSBzdHJlYW1zLmxlbmd0aCArIDFcblxuICAgIGZ1bmN0aW9uIG5leHQgKCkge1xuICAgICAgaWYgKC0tcGlwZXNDb3VudCA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBtZXJnaW5nID0gZmFsc2VcbiAgICAgIG1lcmdlU3RyZWFtKClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwaXBlIChzdHJlYW0pIHtcbiAgICAgIGZ1bmN0aW9uIG9uZW5kICgpIHtcbiAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdtZXJnZTJVbnBpcGVFbmQnLCBvbmVuZClcbiAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZClcbiAgICAgICAgaWYgKGRvUGlwZUVycm9yKSB7XG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBvbmVycm9yIChlcnIpIHtcbiAgICAgICAgbWVyZ2VkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfVxuICAgICAgLy8gc2tpcCBlbmRlZCBzdHJlYW1cbiAgICAgIGlmIChzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS5vbignbWVyZ2UyVW5waXBlRW5kJywgb25lbmQpXG4gICAgICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKVxuXG4gICAgICBpZiAoZG9QaXBlRXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS5waXBlKG1lcmdlZFN0cmVhbSwgeyBlbmQ6IGZhbHNlIH0pXG4gICAgICAvLyBjb21wYXRpYmxlIGZvciBvbGQgc3RyZWFtXG4gICAgICBzdHJlYW0ucmVzdW1lKClcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmVhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBpcGUoc3RyZWFtc1tpXSlcbiAgICB9XG5cbiAgICBuZXh0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFN0cmVhbSAoKSB7XG4gICAgbWVyZ2luZyA9IGZhbHNlXG4gICAgLy8gZW1pdCAncXVldWVEcmFpbicgd2hlbiBhbGwgc3RyZWFtcyBtZXJnZWQuXG4gICAgbWVyZ2VkU3RyZWFtLmVtaXQoJ3F1ZXVlRHJhaW4nKVxuICAgIGlmIChkb0VuZCkge1xuICAgICAgbWVyZ2VkU3RyZWFtLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VkU3RyZWFtLnNldE1heExpc3RlbmVycygwKVxuICBtZXJnZWRTdHJlYW0uYWRkID0gYWRkU3RyZWFtXG4gIG1lcmdlZFN0cmVhbS5vbigndW5waXBlJywgZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgIHN0cmVhbS5lbWl0KCdtZXJnZTJVbnBpcGVFbmQnKVxuICB9KVxuXG4gIGlmIChhcmdzLmxlbmd0aCkge1xuICAgIGFkZFN0cmVhbS5hcHBseShudWxsLCBhcmdzKVxuICB9XG4gIHJldHVybiBtZXJnZWRTdHJlYW1cbn1cblxuLy8gY2hlY2sgYW5kIHBhdXNlIHN0cmVhbXMgZm9yIHBpcGUuXG5mdW5jdGlvbiBwYXVzZVN0cmVhbXMgKHN0cmVhbXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0cmVhbXMpKSB7XG4gICAgLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG9sZC1zdHlsZSBzdHJlYW1zXG4gICAgaWYgKCFzdHJlYW1zLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbXMucGlwZSkge1xuICAgICAgc3RyZWFtcyA9IHN0cmVhbXMucGlwZShQYXNzVGhyb3VnaChvcHRpb25zKSlcbiAgICB9XG4gICAgaWYgKCFzdHJlYW1zLl9yZWFkYWJsZVN0YXRlIHx8ICFzdHJlYW1zLnBhdXNlIHx8ICFzdHJlYW1zLnBpcGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSByZWFkYWJsZSBzdHJlYW0gY2FuIGJlIG1lcmdlZC4nKVxuICAgIH1cbiAgICBzdHJlYW1zLnBhdXNlKClcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3RyZWFtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgc3RyZWFtc1tpXSA9IHBhdXNlU3RyZWFtcyhzdHJlYW1zW2ldLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyZWFtc1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZSA9IHZvaWQgMDtcbmNvbnN0IG1lcmdlMiA9IHJlcXVpcmUoXCJtZXJnZTJcIik7XG5mdW5jdGlvbiBtZXJnZShzdHJlYW1zKSB7XG4gICAgY29uc3QgbWVyZ2VkU3RyZWFtID0gbWVyZ2UyKHN0cmVhbXMpO1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4gbWVyZ2VkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcbiAgICB9KTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiBwcm9wYWdhdGVDbG9zZUV2ZW50VG9Tb3VyY2VzKHN0cmVhbXMpKTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnZW5kJywgKCkgPT4gcHJvcGFnYXRlQ2xvc2VFdmVudFRvU291cmNlcyhzdHJlYW1zKSk7XG4gICAgcmV0dXJuIG1lcmdlZFN0cmVhbTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbmZ1bmN0aW9uIHByb3BhZ2F0ZUNsb3NlRXZlbnRUb1NvdXJjZXMoc3RyZWFtcykge1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiBzdHJlYW0uZW1pdCgnY2xvc2UnKSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRW1wdHkgPSBleHBvcnRzLmlzU3RyaW5nID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbmZ1bmN0aW9uIGlzRW1wdHkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09ICcnO1xufVxuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnBhdHRlcm4gPSBleHBvcnRzLnBhdGggPSBleHBvcnRzLmZzID0gZXhwb3J0cy5lcnJubyA9IGV4cG9ydHMuYXJyYXkgPSB2b2lkIDA7XG5jb25zdCBhcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xuY29uc3QgZXJybm8gPSByZXF1aXJlKFwiLi9lcnJub1wiKTtcbmV4cG9ydHMuZXJybm8gPSBlcnJubztcbmNvbnN0IGZzID0gcmVxdWlyZShcIi4vZnNcIik7XG5leHBvcnRzLmZzID0gZnM7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcIi4vcGF0aFwiKTtcbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5jb25zdCBwYXR0ZXJuID0gcmVxdWlyZShcIi4vcGF0dGVyblwiKTtcbmV4cG9ydHMucGF0dGVybiA9IHBhdHRlcm47XG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKFwiLi9zdHJlYW1cIik7XG5leHBvcnRzLnN0cmVhbSA9IHN0cmVhbTtcbmNvbnN0IHN0cmluZyA9IHJlcXVpcmUoXCIuL3N0cmluZ1wiKTtcbmV4cG9ydHMuc3RyaW5nID0gc3RyaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3VwVG9UYXNrID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MgPSBleHBvcnRzLmdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkgPSBleHBvcnRzLmdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlID0gZXhwb3J0cy5nZXRQb3NpdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybnNUb1Rhc2tzID0gZXhwb3J0cy5nZW5lcmF0ZSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBwcm9jZXNzUGF0dGVybnMoaW5wdXQsIHNldHRpbmdzKTtcbiAgICBjb25zdCBpZ25vcmUgPSBwcm9jZXNzUGF0dGVybnMoc2V0dGluZ3MuaWdub3JlLCBzZXR0aW5ncyk7XG4gICAgY29uc3QgcG9zaXRpdmVQYXR0ZXJucyA9IGdldFBvc2l0aXZlUGF0dGVybnMocGF0dGVybnMpO1xuICAgIGNvbnN0IG5lZ2F0aXZlUGF0dGVybnMgPSBnZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZShwYXR0ZXJucywgaWdub3JlKTtcbiAgICBjb25zdCBzdGF0aWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzU3RhdGljUGF0dGVybihwYXR0ZXJuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4ocGF0dGVybiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBzdGF0aWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3Moc3RhdGljUGF0dGVybnMsIG5lZ2F0aXZlUGF0dGVybnMsIC8qIGR5bmFtaWMgKi8gZmFsc2UpO1xuICAgIGNvbnN0IGR5bmFtaWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3MoZHluYW1pY1BhdHRlcm5zLCBuZWdhdGl2ZVBhdHRlcm5zLCAvKiBkeW5hbWljICovIHRydWUpO1xuICAgIHJldHVybiBzdGF0aWNUYXNrcy5jb25jYXQoZHluYW1pY1Rhc2tzKTtcbn1cbmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbmZ1bmN0aW9uIHByb2Nlc3NQYXR0ZXJucyhpbnB1dCwgc2V0dGluZ3MpIHtcbiAgICBsZXQgcGF0dGVybnMgPSBpbnB1dDtcbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwgcGF0dGVybiBsaWtlIGB7LCosKiosYS8qfWAgY2FuIGxlYWQgdG8gcHJvYmxlbXMgY2hlY2tpbmcgdGhlIGRlcHRoIHdoZW4gbWF0Y2hpbmcgZW50cnlcbiAgICAgKiBhbmQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBtaWNyb21hdGNoIHBhY2thZ2UgKHNlZSBmYXN0LWdsb2IgaXNzdWVzOiAjMzY1LCAjMzk0KS5cbiAgICAgKlxuICAgICAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgZXhwYW5kIGFsbCBwYXR0ZXJucyBjb250YWluaW5nIGJyYWNlIGV4cGFuc2lvbi4gVGhpcyBjYW4gbGVhZCB0byBhIHNsaWdodCBzbG93ZG93blxuICAgICAqIGluIG1hdGNoaW5nIGluIHRoZSBjYXNlIG9mIGEgbGFyZ2Ugc2V0IG9mIHBhdHRlcm5zIGFmdGVyIGV4cGFuc2lvbi5cbiAgICAgKi9cbiAgICBpZiAoc2V0dGluZ3MuYnJhY2VFeHBhbnNpb24pIHtcbiAgICAgICAgcGF0dGVybnMgPSB1dGlscy5wYXR0ZXJuLmV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uKHBhdHRlcm5zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGBiYXNlTmFtZU1hdGNoYCBvcHRpb24gaXMgZW5hYmxlZCwgd2UgbXVzdCBhZGQgZ2xvYnN0YXIgdG8gcGF0dGVybnMsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZFxuICAgICAqIGF0IGFueSBuZXN0aW5nIGxldmVsLlxuICAgICAqXG4gICAgICogV2UgZG8gdGhpcyBoZXJlLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBoYXZlIHRvIGNvbXBsaWNhdGUgdGhlIGZpbHRlcmluZyBsb2dpYy4gRm9yIGV4YW1wbGUsIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICogdGhlIHBhdHRlcm4gaW4gdGhlIGZpbHRlciBiZWZvcmUgY3JlYXRpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBwYXR0ZXJuc1xuICAgICAqIGluIHRoZSBhcHBsaWNhdGlvbi4gT25seSBvbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgaWYgKHNldHRpbmdzLmJhc2VOYW1lTWF0Y2gpIHtcbiAgICAgICAgcGF0dGVybnMgPSBwYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSA/IHBhdHRlcm4gOiBgKiovJHtwYXR0ZXJufWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHJlbW92ZXMgZHVwbGljYXRlIHNsYXNoZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGluIHRoZSBwYXR0ZXJuIG9yIGZvcm1lZCBhcyBhIHJlc3VsdCBvZiBleHBhbnNpb24uXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gdXRpbHMucGF0dGVybi5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHBhdHRlcm4pKTtcbn1cbi8qKlxuICogUmV0dXJucyB0YXNrcyBncm91cGVkIGJ5IGJhc2ljIHBhdHRlcm4gZGlyZWN0b3JpZXMuXG4gKlxuICogUGF0dGVybnMgdGhhdCBjYW4gYmUgZm91bmQgaW5zaWRlIChgLi9gKSBhbmQgb3V0c2lkZSAoYC4uL2ApIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkaXJlY3RvcnkgdHJhdmVyc2FsIHN0YXJ0cyBhdCB0aGUgYmFzZSBkaXJlY3RvcnkgYW5kIGdvZXMgZGVlcGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1Rhc2tzKHBvc2l0aXZlLCBuZWdhdGl2ZSwgZHluYW1pYykge1xuICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgY29uc3QgcGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IHV0aWxzLnBhdHRlcm4uZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeShwb3NpdGl2ZSk7XG4gICAgY29uc3QgcGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5ID0gdXRpbHMucGF0dGVybi5nZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkocG9zaXRpdmUpO1xuICAgIGNvbnN0IG91dHNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAgPSBncm91cFBhdHRlcm5zQnlCYXNlRGlyZWN0b3J5KHBhdHRlcm5zT3V0c2lkZUN1cnJlbnREaXJlY3RvcnkpO1xuICAgIGNvbnN0IGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkocGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KTtcbiAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhvdXRzaWRlQ3VycmVudERpcmVjdG9yeUdyb3VwLCBuZWdhdGl2ZSwgZHluYW1pYykpO1xuICAgIC8qXG4gICAgICogRm9yIHRoZSBzYWtlIG9mIHJlZHVjaW5nIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGUgZmlsZSBzeXN0ZW0sIHdlIG1lcmdlIGFsbCB0YXNrcyB3aXRoaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgICogaW50byBhIGdsb2JhbCB0YXNrLCBpZiBhdCBsZWFzdCBvbmUgcGF0dGVybiByZWZlcnMgdG8gdGhlIHJvb3QgKGAuYCkuIEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCB0YXNrIGNvdmVycyB0aGUgcmVzdC5cbiAgICAgKi9cbiAgICBpZiAoJy4nIGluIGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCkge1xuICAgICAgICB0YXNrcy5wdXNoKGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soJy4nLCBwYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnksIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhpbnNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAsIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXNrcztcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9UYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3M7XG5mdW5jdGlvbiBnZXRQb3NpdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4uZ2V0UG9zaXRpdmVQYXR0ZXJucyhwYXR0ZXJucyk7XG59XG5leHBvcnRzLmdldFBvc2l0aXZlUGF0dGVybnMgPSBnZXRQb3NpdGl2ZVBhdHRlcm5zO1xuZnVuY3Rpb24gZ2V0TmVnYXRpdmVQYXR0ZXJuc0FzUG9zaXRpdmUocGF0dGVybnMsIGlnbm9yZSkge1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gdXRpbHMucGF0dGVybi5nZXROZWdhdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKS5jb25jYXQoaWdub3JlKTtcbiAgICBjb25zdCBwb3NpdGl2ZSA9IG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb1Bvc2l0aXZlUGF0dGVybik7XG4gICAgcmV0dXJuIHBvc2l0aXZlO1xufVxuZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZSA9IGdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlO1xuZnVuY3Rpb24gZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeShwYXR0ZXJucykge1xuICAgIGNvbnN0IGdyb3VwID0ge307XG4gICAgcmV0dXJuIHBhdHRlcm5zLnJlZHVjZSgoY29sbGVjdGlvbiwgcGF0dGVybikgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gdXRpbHMucGF0dGVybi5nZXRCYXNlRGlyZWN0b3J5KHBhdHRlcm4pO1xuICAgICAgICBpZiAoYmFzZSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdLnB1c2gocGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH0sIGdyb3VwKTtcbn1cbmV4cG9ydHMuZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeSA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3Rvcnk7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MocG9zaXRpdmUsIG5lZ2F0aXZlLCBkeW5hbWljKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHBvc2l0aXZlKS5tYXAoKGJhc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soYmFzZSwgcG9zaXRpdmVbYmFzZV0sIG5lZ2F0aXZlLCBkeW5hbWljKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzID0gY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzO1xuZnVuY3Rpb24gY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayhiYXNlLCBwb3NpdGl2ZSwgbmVnYXRpdmUsIGR5bmFtaWMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICBwb3NpdGl2ZSxcbiAgICAgICAgbmVnYXRpdmUsXG4gICAgICAgIGJhc2UsXG4gICAgICAgIHBhdHRlcm5zOiBbXS5jb25jYXQocG9zaXRpdmUsIG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb05lZ2F0aXZlUGF0dGVybikpXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayA9IGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2s7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5mdW5jdGlvbiByZWFkKHBhdGgsIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLmxzdGF0KHBhdGgsIChsc3RhdEVycm9yLCBsc3RhdCkgPT4ge1xuICAgICAgICBpZiAobHN0YXRFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgbHN0YXRFcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsc3RhdC5pc1N5bWJvbGljTGluaygpIHx8ICFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgIGNhbGxTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2ssIGxzdGF0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KHBhdGgsIChzdGF0RXJyb3IsIHN0YXQpID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0RXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgbHN0YXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5tYXJrU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBzdGF0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpIHtcbiAgICBjYWxsYmFjayhlcnJvcik7XG59XG5mdW5jdGlvbiBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCByZXN1bHQpIHtcbiAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkID0gdm9pZCAwO1xuZnVuY3Rpb24gcmVhZChwYXRoLCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGxzdGF0ID0gc2V0dGluZ3MuZnMubHN0YXRTeW5jKHBhdGgpO1xuICAgIGlmICghbHN0YXQuaXNTeW1ib2xpY0xpbmsoKSB8fCAhc2V0dGluZ3MuZm9sbG93U3ltYm9saWNMaW5rKSB7XG4gICAgICAgIHJldHVybiBsc3RhdDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdCA9IHNldHRpbmdzLmZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWFya1N5bWJvbGljTGluaykge1xuICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIXNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgcmV0dXJuIGxzdGF0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbmV4cG9ydHMucmVhZCA9IHJlYWQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5leHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIgPSB7XG4gICAgbHN0YXQ6IGZzLmxzdGF0LFxuICAgIHN0YXQ6IGZzLnN0YXQsXG4gICAgbHN0YXRTeW5jOiBmcy5sc3RhdFN5bmMsXG4gICAgc3RhdFN5bmM6IGZzLnN0YXRTeW5jXG59O1xuZnVuY3Rpb24gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXIoZnNNZXRob2RzKSB7XG4gICAgaWYgKGZzTWV0aG9kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVI7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiksIGZzTWV0aG9kcyk7XG59XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZm9sbG93U3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLm1hcmtTeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLm1hcmtTeW1ib2xpY0xpbmssIGZhbHNlKTtcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaywgdHJ1ZSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdFN5bmMgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLlNldHRpbmdzID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc3RhdChwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zdGF0ID0gc3RhdDtcbmZ1bmN0aW9uIHN0YXRTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnN0YXRTeW5jID0gc3RhdFN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIi8qISBxdWV1ZS1taWNyb3Rhc2suIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmxldCBwcm9taXNlXG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXG4gID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbiAgLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxuICA6IGNiID0+IChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKVxuICAgIC50aGVuKGNiKVxuICAgIC5jYXRjaChlcnIgPT4gc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVyciB9LCAwKSlcbiIsICIvKiEgcnVuLXBhcmFsbGVsLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5tb2R1bGUuZXhwb3J0cyA9IHJ1blBhcmFsbGVsXG5cbmNvbnN0IHF1ZXVlTWljcm90YXNrID0gcmVxdWlyZSgncXVldWUtbWljcm90YXNrJylcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwgKHRhc2tzLCBjYikge1xuICBsZXQgcmVzdWx0cywgcGVuZGluZywga2V5c1xuICBsZXQgaXNTeW5jID0gdHJ1ZVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgIHJlc3VsdHMgPSBbXVxuICAgIHBlbmRpbmcgPSB0YXNrcy5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModGFza3MpXG4gICAgcmVzdWx0cyA9IHt9XG4gICAgcGVuZGluZyA9IGtleXMubGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICBmdW5jdGlvbiBlbmQgKCkge1xuICAgICAgaWYgKGNiKSBjYihlcnIsIHJlc3VsdHMpXG4gICAgICBjYiA9IG51bGxcbiAgICB9XG4gICAgaWYgKGlzU3luYykgcXVldWVNaWNyb3Rhc2soZW5kKVxuICAgIGVsc2UgZW5kKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhY2ggKGksIGVyciwgcmVzdWx0KSB7XG4gICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgIGlmICgtLXBlbmRpbmcgPT09IDAgfHwgZXJyKSB7XG4gICAgICBkb25lKGVycilcbiAgICB9XG4gIH1cblxuICBpZiAoIXBlbmRpbmcpIHtcbiAgICAvLyBlbXB0eVxuICAgIGRvbmUobnVsbClcbiAgfSBlbHNlIGlmIChrZXlzKSB7XG4gICAgLy8gb2JqZWN0XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRhc2tzW2tleV0oZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7IGVhY2goa2V5LCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIC8vIGFycmF5XG4gICAgdGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaywgaSkge1xuICAgICAgdGFzayhmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHsgZWFjaChpLCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9XG5cbiAgaXNTeW5jID0gZmFsc2Vcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IHZvaWQgMDtcbmNvbnN0IE5PREVfUFJPQ0VTU19WRVJTSU9OX1BBUlRTID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJyk7XG5pZiAoTk9ERV9QUk9DRVNTX1ZFUlNJT05fUEFSVFNbMF0gPT09IHVuZGVmaW5lZCB8fCBOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgJ3Byb2Nlc3MudmVyc2lvbnMubm9kZScgdmFyaWFibGUgaGFzIGludmFsaWQgdmFsdWU6ICR7cHJvY2Vzcy52ZXJzaW9ucy5ub2RlfWApO1xufVxuY29uc3QgTUFKT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1swXSwgMTApO1xuY29uc3QgTUlOT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSwgMTApO1xuY29uc3QgU1VQUE9SVEVEX01BSk9SX1ZFUlNJT04gPSAxMDtcbmNvbnN0IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OID0gMTA7XG5jb25zdCBJU19NQVRDSEVEX0JZX01BSk9SID0gTUFKT1JfVkVSU0lPTiA+IFNVUFBPUlRFRF9NQUpPUl9WRVJTSU9OO1xuY29uc3QgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1IgPSBNQUpPUl9WRVJTSU9OID09PSBTVVBQT1JURURfTUFKT1JfVkVSU0lPTiAmJiBNSU5PUl9WRVJTSU9OID49IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OO1xuLyoqXG4gKiBJUyBgdHJ1ZWAgZm9yIE5vZGUuanMgMTAuMTAgYW5kIGdyZWF0ZXIuXG4gKi9cbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IElTX01BVENIRURfQllfTUFKT1IgfHwgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1I7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IHZvaWQgMDtcbmNsYXNzIERpcmVudEZyb21TdGF0cyB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgc3RhdHMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc0Jsb2NrRGV2aWNlID0gc3RhdHMuaXNCbG9ja0RldmljZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0NoYXJhY3RlckRldmljZSA9IHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRGlyZWN0b3J5ID0gc3RhdHMuaXNEaXJlY3RvcnkuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGSUZPID0gc3RhdHMuaXNGSUZPLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRmlsZSA9IHN0YXRzLmlzRmlsZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc1NvY2tldCA9IHN0YXRzLmlzU29ja2V0LmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU3ltYm9saWNMaW5rID0gc3RhdHMuaXNTeW1ib2xpY0xpbmsuYmluZChzdGF0cyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRGlyZW50RnJvbVN0YXRzKG5hbWUsIHN0YXRzKSB7XG4gICAgcmV0dXJuIG5ldyBEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpO1xufVxuZXhwb3J0cy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMgPSBjcmVhdGVEaXJlbnRGcm9tU3RhdHM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZzID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiLi9mc1wiKTtcbmV4cG9ydHMuZnMgPSBmcztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuam9pblBhdGhTZWdtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGpvaW5QYXRoU2VnbWVudHMoYSwgYiwgc2VwYXJhdG9yKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FzZXMgd2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIHJvb3QgKGAvYCwgYEM6L2ApIG9yIFVOQyBwYXRoIChgLy8/L0M6L2ApLlxuICAgICAqL1xuICAgIGlmIChhLmVuZHNXaXRoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH1cbiAgICByZXR1cm4gYSArIHNlcGFyYXRvciArIGI7XG59XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBqb2luUGF0aFNlZ21lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkZGlyID0gZXhwb3J0cy5yZWFkZGlyV2l0aEZpbGVUeXBlcyA9IGV4cG9ydHMucmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZzU3RhdCA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zdGF0XCIpO1xuY29uc3QgcnBsID0gcmVxdWlyZShcInJ1bi1wYXJhbGxlbFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIGlmICghc2V0dGluZ3Muc3RhdHMgJiYgY29uc3RhbnRzXzEuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUykge1xuICAgICAgICByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncywgY2FsbGJhY2spIHtcbiAgICBzZXR0aW5ncy5mcy5yZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChyZWFkZGlyRXJyb3IsIGRpcmVudHMpID0+IHtcbiAgICAgICAgaWYgKHJlYWRkaXJFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgcmVhZGRpckVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4gKHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBlbnRyaWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXNrcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gbWFrZVJwbFRhc2tFbnRyeShlbnRyeSwgc2V0dGluZ3MpKTtcbiAgICAgICAgcnBsKHRhc2tzLCAocnBsRXJyb3IsIHJwbEVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChycGxFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHJwbEVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBycGxFbnRyaWVzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXJXaXRoRmlsZVR5cGVzID0gcmVhZGRpcldpdGhGaWxlVHlwZXM7XG5mdW5jdGlvbiBtYWtlUnBsVGFza0VudHJ5KGVudHJ5LCBzZXR0aW5ncykge1xuICAgIHJldHVybiAoZG9uZSkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmRpcmVudC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBkb25lKG51bGwsIGVudHJ5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KGVudHJ5LnBhdGgsIChzdGF0RXJyb3IsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdEVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZShudWxsLCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLnJlYWRkaXIoZGlyZWN0b3J5LCAocmVhZGRpckVycm9yLCBuYW1lcykgPT4ge1xuICAgICAgICBpZiAocmVhZGRpckVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCByZWFkZGlyRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tzID0gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBuYW1lLCBzZXR0aW5ncy5wYXRoU2VnbWVudFNlcGFyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBmc1N0YXQuc3RhdChwYXRoLCBzZXR0aW5ncy5mc1N0YXRTZXR0aW5ncywgKGVycm9yLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlbnQ6IHV0aWxzLmZzLmNyZWF0ZURpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnN0YXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5zdGF0cyA9IHN0YXRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJwbCh0YXNrcywgKHJwbEVycm9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocnBsRXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCBycGxFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgZW50cmllcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkZGlyID0gcmVhZGRpcjtcbmZ1bmN0aW9uIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yKSB7XG4gICAgY2FsbGJhY2soZXJyb3IpO1xufVxuZnVuY3Rpb24gY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgcmVzdWx0KSB7XG4gICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSBleHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5zdGF0cyAmJiBjb25zdGFudHNfMS5JU19TVVBQT1JUX1JFQURESVJfV0lUSF9GSUxFX1RZUEVTKSB7XG4gICAgICAgIHJldHVybiByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGRpcmVudHMgPSBzZXR0aW5ncy5mcy5yZWFkZGlyU3luYyhkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5kaXJlbnQuaXNTeW1ib2xpY0xpbmsoKSAmJiBzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gc2V0dGluZ3MuZnMuc3RhdFN5bmMoZW50cnkucGF0aCk7XG4gICAgICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSByZWFkZGlyV2l0aEZpbGVUeXBlcztcbmZ1bmN0aW9uIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IG5hbWVzID0gc2V0dGluZ3MuZnMucmVhZGRpclN5bmMoZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGRpcmVjdG9yeSwgbmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzU3RhdC5zdGF0U3luYyhlbnRyeVBhdGgsIHNldHRpbmdzLmZzU3RhdFNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcGF0aDogZW50cnlQYXRoLFxuICAgICAgICAgICAgZGlyZW50OiB1dGlscy5mcy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZXR0aW5ncy5zdGF0cykge1xuICAgICAgICAgICAgZW50cnkuc3RhdHMgPSBzdGF0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXIgPSByZWFkZGlyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0ge1xuICAgIGxzdGF0OiBmcy5sc3RhdCxcbiAgICBzdGF0OiBmcy5zdGF0LFxuICAgIGxzdGF0U3luYzogZnMubHN0YXRTeW5jLFxuICAgIHN0YXRTeW5jOiBmcy5zdGF0U3luYyxcbiAgICByZWFkZGlyOiBmcy5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmcy5yZWFkZGlyU3luY1xufTtcbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKGZzTWV0aG9kcykge1xuICAgIGlmIChmc01ldGhvZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIpLCBmc01ldGhvZHMpO1xufVxuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLnBhdGhTZWdtZW50U2VwYXJhdG9yID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvciwgcGF0aC5zZXApO1xuICAgICAgICB0aGlzLnN0YXRzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdGF0cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mc1N0YXRTZXR0aW5ncyA9IG5ldyBmc1N0YXQuU2V0dGluZ3Moe1xuICAgICAgICAgICAgZm9sbG93U3ltYm9saWNMaW5rOiB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5mcyxcbiAgICAgICAgICAgIHRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluazogdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V0dGluZ3MgPSBleHBvcnRzLnNjYW5kaXJTeW5jID0gZXhwb3J0cy5zY2FuZGlyID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc2NhbmRpcihwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zY2FuZGlyID0gc2NhbmRpcjtcbmZ1bmN0aW9uIHNjYW5kaXJTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnNjYW5kaXJTeW5jID0gc2NhbmRpclN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiByZXVzaWZ5IChDb25zdHJ1Y3Rvcikge1xuICB2YXIgaGVhZCA9IG5ldyBDb25zdHJ1Y3RvcigpXG4gIHZhciB0YWlsID0gaGVhZFxuXG4gIGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBoZWFkXG5cbiAgICBpZiAoY3VycmVudC5uZXh0KSB7XG4gICAgICBoZWFkID0gY3VycmVudC5uZXh0XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQgPSBuZXcgQ29uc3RydWN0b3IoKVxuICAgICAgdGFpbCA9IGhlYWRcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHQgPSBudWxsXG5cbiAgICByZXR1cm4gY3VycmVudFxuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZSAob2JqKSB7XG4gICAgdGFpbC5uZXh0ID0gb2JqXG4gICAgdGFpbCA9IG9ialxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQ6IGdldCxcbiAgICByZWxlYXNlOiByZWxlYXNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXVzaWZ5XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG52YXIgcmV1c2lmeSA9IHJlcXVpcmUoJ3JldXNpZnknKVxuXG5mdW5jdGlvbiBmYXN0cXVldWUgKGNvbnRleHQsIHdvcmtlciwgX2NvbmN1cnJlbmN5KSB7XG4gIGlmICh0eXBlb2YgY29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF9jb25jdXJyZW5jeSA9IHdvcmtlclxuICAgIHdvcmtlciA9IGNvbnRleHRcbiAgICBjb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgaWYgKCEoX2NvbmN1cnJlbmN5ID49IDEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYXN0cXVldWUgY29uY3VycmVuY3kgbXVzdCBiZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMScpXG4gIH1cblxuICB2YXIgY2FjaGUgPSByZXVzaWZ5KFRhc2spXG4gIHZhciBxdWV1ZUhlYWQgPSBudWxsXG4gIHZhciBxdWV1ZVRhaWwgPSBudWxsXG4gIHZhciBfcnVubmluZyA9IDBcbiAgdmFyIGVycm9ySGFuZGxlciA9IG51bGxcblxuICB2YXIgc2VsZiA9IHtcbiAgICBwdXNoOiBwdXNoLFxuICAgIGRyYWluOiBub29wLFxuICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICBwYXVzZTogcGF1c2UsXG4gICAgcGF1c2VkOiBmYWxzZSxcblxuICAgIGdldCBjb25jdXJyZW5jeSAoKSB7XG4gICAgICByZXR1cm4gX2NvbmN1cnJlbmN5XG4gICAgfSxcbiAgICBzZXQgY29uY3VycmVuY3kgKHZhbHVlKSB7XG4gICAgICBpZiAoISh2YWx1ZSA+PSAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zhc3RxdWV1ZSBjb25jdXJyZW5jeSBtdXN0IGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAxJylcbiAgICAgIH1cbiAgICAgIF9jb25jdXJyZW5jeSA9IHZhbHVlXG5cbiAgICAgIGlmIChzZWxmLnBhdXNlZCkgcmV0dXJuXG4gICAgICBmb3IgKDsgcXVldWVIZWFkICYmIF9ydW5uaW5nIDwgX2NvbmN1cnJlbmN5Oykge1xuICAgICAgICBfcnVubmluZysrXG4gICAgICAgIHJlbGVhc2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBydW5uaW5nOiBydW5uaW5nLFxuICAgIHJlc3VtZTogcmVzdW1lLFxuICAgIGlkbGU6IGlkbGUsXG4gICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgZ2V0UXVldWU6IGdldFF1ZXVlLFxuICAgIHVuc2hpZnQ6IHVuc2hpZnQsXG4gICAgZW1wdHk6IG5vb3AsXG4gICAga2lsbDoga2lsbCxcbiAgICBraWxsQW5kRHJhaW46IGtpbGxBbmREcmFpbixcbiAgICBlcnJvcjogZXJyb3JcbiAgfVxuXG4gIHJldHVybiBzZWxmXG5cbiAgZnVuY3Rpb24gcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIF9ydW5uaW5nXG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSAoKSB7XG4gICAgc2VsZi5wYXVzZWQgPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBsZW5ndGggKCkge1xuICAgIHZhciBjdXJyZW50ID0gcXVldWVIZWFkXG4gICAgdmFyIGNvdW50ZXIgPSAwXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgICAgY291bnRlcisrXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50ZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1ZXVlICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHF1ZXVlSGVhZFxuICAgIHZhciB0YXNrcyA9IFtdXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgdGFza3MucHVzaChjdXJyZW50LnZhbHVlKVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgIH1cblxuICAgIHJldHVybiB0YXNrc1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHtcbiAgICBpZiAoIXNlbGYucGF1c2VkKSByZXR1cm5cbiAgICBzZWxmLnBhdXNlZCA9IGZhbHNlXG4gICAgaWYgKHF1ZXVlSGVhZCA9PT0gbnVsbCkge1xuICAgICAgX3J1bm5pbmcrK1xuICAgICAgcmVsZWFzZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZm9yICg7IHF1ZXVlSGVhZCAmJiBfcnVubmluZyA8IF9jb25jdXJyZW5jeTspIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHJlbGVhc2UoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlkbGUgKCkge1xuICAgIHJldHVybiBfcnVubmluZyA9PT0gMCAmJiBzZWxmLmxlbmd0aCgpID09PSAwXG4gIH1cblxuICBmdW5jdGlvbiBwdXNoICh2YWx1ZSwgZG9uZSkge1xuICAgIHZhciBjdXJyZW50ID0gY2FjaGUuZ2V0KClcblxuICAgIGN1cnJlbnQuY29udGV4dCA9IGNvbnRleHRcbiAgICBjdXJyZW50LnJlbGVhc2UgPSByZWxlYXNlXG4gICAgY3VycmVudC52YWx1ZSA9IHZhbHVlXG4gICAgY3VycmVudC5jYWxsYmFjayA9IGRvbmUgfHwgbm9vcFxuICAgIGN1cnJlbnQuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyXG5cbiAgICBpZiAoX3J1bm5pbmcgPj0gX2NvbmN1cnJlbmN5IHx8IHNlbGYucGF1c2VkKSB7XG4gICAgICBpZiAocXVldWVUYWlsKSB7XG4gICAgICAgIHF1ZXVlVGFpbC5uZXh0ID0gY3VycmVudFxuICAgICAgICBxdWV1ZVRhaWwgPSBjdXJyZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUhlYWQgPSBjdXJyZW50XG4gICAgICAgIHF1ZXVlVGFpbCA9IGN1cnJlbnRcbiAgICAgICAgc2VsZi5zYXR1cmF0ZWQoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfcnVubmluZysrXG4gICAgICB3b3JrZXIuY2FsbChjb250ZXh0LCBjdXJyZW50LnZhbHVlLCBjdXJyZW50LndvcmtlZClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1bnNoaWZ0ICh2YWx1ZSwgZG9uZSkge1xuICAgIHZhciBjdXJyZW50ID0gY2FjaGUuZ2V0KClcblxuICAgIGN1cnJlbnQuY29udGV4dCA9IGNvbnRleHRcbiAgICBjdXJyZW50LnJlbGVhc2UgPSByZWxlYXNlXG4gICAgY3VycmVudC52YWx1ZSA9IHZhbHVlXG4gICAgY3VycmVudC5jYWxsYmFjayA9IGRvbmUgfHwgbm9vcFxuICAgIGN1cnJlbnQuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyXG5cbiAgICBpZiAoX3J1bm5pbmcgPj0gX2NvbmN1cnJlbmN5IHx8IHNlbGYucGF1c2VkKSB7XG4gICAgICBpZiAocXVldWVIZWFkKSB7XG4gICAgICAgIGN1cnJlbnQubmV4dCA9IHF1ZXVlSGVhZFxuICAgICAgICBxdWV1ZUhlYWQgPSBjdXJyZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUhlYWQgPSBjdXJyZW50XG4gICAgICAgIHF1ZXVlVGFpbCA9IGN1cnJlbnRcbiAgICAgICAgc2VsZi5zYXR1cmF0ZWQoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfcnVubmluZysrXG4gICAgICB3b3JrZXIuY2FsbChjb250ZXh0LCBjdXJyZW50LnZhbHVlLCBjdXJyZW50LndvcmtlZClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWxlYXNlIChob2xkZXIpIHtcbiAgICBpZiAoaG9sZGVyKSB7XG4gICAgICBjYWNoZS5yZWxlYXNlKGhvbGRlcilcbiAgICB9XG4gICAgdmFyIG5leHQgPSBxdWV1ZUhlYWRcbiAgICBpZiAobmV4dCAmJiBfcnVubmluZyA8PSBfY29uY3VycmVuY3kpIHtcbiAgICAgIGlmICghc2VsZi5wYXVzZWQpIHtcbiAgICAgICAgaWYgKHF1ZXVlVGFpbCA9PT0gcXVldWVIZWFkKSB7XG4gICAgICAgICAgcXVldWVUYWlsID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSGVhZCA9IG5leHQubmV4dFxuICAgICAgICBuZXh0Lm5leHQgPSBudWxsXG4gICAgICAgIHdvcmtlci5jYWxsKGNvbnRleHQsIG5leHQudmFsdWUsIG5leHQud29ya2VkKVxuICAgICAgICBpZiAocXVldWVUYWlsID09PSBudWxsKSB7XG4gICAgICAgICAgc2VsZi5lbXB0eSgpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9ydW5uaW5nLS1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC0tX3J1bm5pbmcgPT09IDApIHtcbiAgICAgIHNlbGYuZHJhaW4oKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGwgKCkge1xuICAgIHF1ZXVlSGVhZCA9IG51bGxcbiAgICBxdWV1ZVRhaWwgPSBudWxsXG4gICAgc2VsZi5kcmFpbiA9IG5vb3BcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGxBbmREcmFpbiAoKSB7XG4gICAgcXVldWVIZWFkID0gbnVsbFxuICAgIHF1ZXVlVGFpbCA9IG51bGxcbiAgICBzZWxmLmRyYWluKClcbiAgICBzZWxmLmRyYWluID0gbm9vcFxuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IgKGhhbmRsZXIpIHtcbiAgICBlcnJvckhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBUYXNrICgpIHtcbiAgdGhpcy52YWx1ZSA9IG51bGxcbiAgdGhpcy5jYWxsYmFjayA9IG5vb3BcbiAgdGhpcy5uZXh0ID0gbnVsbFxuICB0aGlzLnJlbGVhc2UgPSBub29wXG4gIHRoaXMuY29udGV4dCA9IG51bGxcbiAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG5cbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgdGhpcy53b3JrZWQgPSBmdW5jdGlvbiB3b3JrZWQgKGVyciwgcmVzdWx0KSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2VsZi5jYWxsYmFja1xuICAgIHZhciBlcnJvckhhbmRsZXIgPSBzZWxmLmVycm9ySGFuZGxlclxuICAgIHZhciB2YWwgPSBzZWxmLnZhbHVlXG4gICAgc2VsZi52YWx1ZSA9IG51bGxcbiAgICBzZWxmLmNhbGxiYWNrID0gbm9vcFxuICAgIGlmIChzZWxmLmVycm9ySGFuZGxlcikge1xuICAgICAgZXJyb3JIYW5kbGVyKGVyciwgdmFsKVxuICAgIH1cbiAgICBjYWxsYmFjay5jYWxsKHNlbGYuY29udGV4dCwgZXJyLCByZXN1bHQpXG4gICAgc2VsZi5yZWxlYXNlKHNlbGYpXG4gIH1cbn1cblxuZnVuY3Rpb24gcXVldWVBc1Byb21pc2VkIChjb250ZXh0LCB3b3JrZXIsIF9jb25jdXJyZW5jeSkge1xuICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBfY29uY3VycmVuY3kgPSB3b3JrZXJcbiAgICB3b3JrZXIgPSBjb250ZXh0XG4gICAgY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzeW5jV3JhcHBlciAoYXJnLCBjYikge1xuICAgIHdvcmtlci5jYWxsKHRoaXMsIGFyZylcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgY2IobnVsbCwgcmVzKVxuICAgICAgfSwgY2IpXG4gIH1cblxuICB2YXIgcXVldWUgPSBmYXN0cXVldWUoY29udGV4dCwgYXN5bmNXcmFwcGVyLCBfY29uY3VycmVuY3kpXG5cbiAgdmFyIHB1c2hDYiA9IHF1ZXVlLnB1c2hcbiAgdmFyIHVuc2hpZnRDYiA9IHF1ZXVlLnVuc2hpZnRcblxuICBxdWV1ZS5wdXNoID0gcHVzaFxuICBxdWV1ZS51bnNoaWZ0ID0gdW5zaGlmdFxuICBxdWV1ZS5kcmFpbmVkID0gZHJhaW5lZFxuXG4gIHJldHVybiBxdWV1ZVxuXG4gIGZ1bmN0aW9uIHB1c2ggKHZhbHVlKSB7XG4gICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBwdXNoQ2IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIC8vIExldCdzIGZvcmsgdGhlIHByb21pc2UgY2hhaW4gdG9cbiAgICAvLyBtYWtlIHRoZSBlcnJvciBidWJibGUgdXAgdG8gdGhlIHVzZXIgYnV0XG4gICAgLy8gbm90IGxlYWQgdG8gYSB1bmhhbmRsZWRSZWplY3Rpb25cbiAgICBwLmNhdGNoKG5vb3ApXG5cbiAgICByZXR1cm4gcFxuICB9XG5cbiAgZnVuY3Rpb24gdW5zaGlmdCAodmFsdWUpIHtcbiAgICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHVuc2hpZnRDYih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgLy8gTGV0J3MgZm9yayB0aGUgcHJvbWlzZSBjaGFpbiB0b1xuICAgIC8vIG1ha2UgdGhlIGVycm9yIGJ1YmJsZSB1cCB0byB0aGUgdXNlciBidXRcbiAgICAvLyBub3QgbGVhZCB0byBhIHVuaGFuZGxlZFJlamVjdGlvblxuICAgIHAuY2F0Y2gobm9vcClcblxuICAgIHJldHVybiBwXG4gIH1cblxuICBmdW5jdGlvbiBkcmFpbmVkICgpIHtcbiAgICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXVlLmlkbGUoKSkge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2aW91c0RyYWluID0gcXVldWUuZHJhaW5cbiAgICAgICAgICBxdWV1ZS5kcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNEcmFpbiA9PT0gJ2Z1bmN0aW9uJykgcHJldmlvdXNEcmFpbigpXG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIHF1ZXVlLmRyYWluID0gcHJldmlvdXNEcmFpblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhc3RxdWV1ZVxubW9kdWxlLmV4cG9ydHMucHJvbWlzZSA9IHF1ZXVlQXNQcm9taXNlZFxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5qb2luUGF0aFNlZ21lbnRzID0gZXhwb3J0cy5yZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3IgPSBleHBvcnRzLmlzQXBwbGllZEZpbHRlciA9IGV4cG9ydHMuaXNGYXRhbEVycm9yID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNGYXRhbEVycm9yKHNldHRpbmdzLCBlcnJvcikge1xuICAgIGlmIChzZXR0aW5ncy5lcnJvckZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICFzZXR0aW5ncy5lcnJvckZpbHRlcihlcnJvcik7XG59XG5leHBvcnRzLmlzRmF0YWxFcnJvciA9IGlzRmF0YWxFcnJvcjtcbmZ1bmN0aW9uIGlzQXBwbGllZEZpbHRlcihmaWx0ZXIsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZpbHRlciA9PT0gbnVsbCB8fCBmaWx0ZXIodmFsdWUpO1xufVxuZXhwb3J0cy5pc0FwcGxpZWRGaWx0ZXIgPSBpc0FwcGxpZWRGaWx0ZXI7XG5mdW5jdGlvbiByZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3IoZmlsZXBhdGgsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiBmaWxlcGF0aC5zcGxpdCgvWy9cXFxcXS8pLmpvaW4oc2VwYXJhdG9yKTtcbn1cbmV4cG9ydHMucmVwbGFjZVBhdGhTZWdtZW50U2VwYXJhdG9yID0gcmVwbGFjZVBhdGhTZWdtZW50U2VwYXJhdG9yO1xuZnVuY3Rpb24gam9pblBhdGhTZWdtZW50cyhhLCBiLCBzZXBhcmF0b3IpIHtcbiAgICBpZiAoYSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGNhc2VzIHdoZW4gdGhlIGZpcnN0IHNlZ21lbnQgaXMgYSByb290IChgL2AsIGBDOi9gKSBvciBVTkMgcGF0aCAoYC8vPy9DOi9gKS5cbiAgICAgKi9cbiAgICBpZiAoYS5lbmRzV2l0aChzZXBhcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBhICsgYjtcbiAgICB9XG4gICAgcmV0dXJuIGEgKyBzZXBhcmF0b3IgKyBiO1xufVxuZXhwb3J0cy5qb2luUGF0aFNlZ21lbnRzID0gam9pblBhdGhTZWdtZW50cztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbW1vbiA9IHJlcXVpcmUoXCIuL2NvbW1vblwiKTtcbmNsYXNzIFJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yb290ID0gY29tbW9uLnJlcGxhY2VQYXRoU2VnbWVudFNlcGFyYXRvcihfcm9vdCwgX3NldHRpbmdzLnBhdGhTZWdtZW50U2VwYXJhdG9yKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBmc1NjYW5kaXIgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc2NhbmRpclwiKTtcbmNvbnN0IGZhc3RxID0gcmVxdWlyZShcImZhc3RxXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY29uc3QgcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5jbGFzcyBBc3luY1JlYWRlciBleHRlbmRzIHJlYWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKF9yb290LCBfc2V0dGluZ3MpIHtcbiAgICAgICAgc3VwZXIoX3Jvb3QsIF9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9zY2FuZGlyID0gZnNTY2FuZGlyLnNjYW5kaXI7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gZmFzdHEodGhpcy5fd29ya2VyLmJpbmQodGhpcyksIHRoaXMuX3NldHRpbmdzLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgdGhpcy5faXNGYXRhbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3F1ZXVlLmRyYWluID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0ZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZWFkKCkge1xuICAgICAgICB0aGlzLl9pc0ZhdGFsRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3B1c2hUb1F1ZXVlKHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzLmJhc2VQYXRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbWl0dGVyO1xuICAgIH1cbiAgICBnZXQgaXNEZXN0cm95ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0Rlc3Ryb3llZDtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSByZWFkZXIgaXMgYWxyZWFkeSBkZXN0cm95ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3F1ZXVlLmtpbGxBbmREcmFpbigpO1xuICAgIH1cbiAgICBvbkVudHJ5KGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIub24oJ2VudHJ5JywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIub25jZSgnZXJyb3InLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uRW5kKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIub25jZSgnZW5kJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBfcHVzaFRvUXVldWUoZGlyZWN0b3J5LCBiYXNlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IHsgZGlyZWN0b3J5LCBiYXNlIH07XG4gICAgICAgIHRoaXMuX3F1ZXVlLnB1c2gocXVldWVJdGVtLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF93b3JrZXIoaXRlbSwgZG9uZSkge1xuICAgICAgICB0aGlzLl9zY2FuZGlyKGl0ZW0uZGlyZWN0b3J5LCB0aGlzLl9zZXR0aW5ncy5mc1NjYW5kaXJTZXR0aW5ncywgKGVycm9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkb25lKGVycm9yLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVudHJ5KGVudHJ5LCBpdGVtLmJhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9uZShudWxsLCB1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2hhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0Rlc3Ryb3llZCB8fCAhY29tbW9uLmlzRmF0YWxFcnJvcih0aGlzLl9zZXR0aW5ncywgZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNGYXRhbEVycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH1cbiAgICBfaGFuZGxlRW50cnkoZW50cnksIGJhc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVzdHJveWVkIHx8IHRoaXMuX2lzRmF0YWxFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGJhc2UsIGVudHJ5Lm5hbWUsIHRoaXMuX3NldHRpbmdzLnBhdGhTZWdtZW50U2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbW9uLmlzQXBwbGllZEZpbHRlcih0aGlzLl9zZXR0aW5ncy5lbnRyeUZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0RW50cnkoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKSAmJiBjb21tb24uaXNBcHBsaWVkRmlsdGVyKHRoaXMuX3NldHRpbmdzLmRlZXBGaWx0ZXIsIGVudHJ5KSkge1xuICAgICAgICAgICAgdGhpcy5fcHVzaFRvUXVldWUoZnVsbHBhdGgsIGJhc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGVudHJ5LnBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9lbWl0RW50cnkoZW50cnkpIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5lbWl0KCdlbnRyeScsIGVudHJ5KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBBc3luY1JlYWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9hc3luY1wiKTtcbmNsYXNzIEFzeW5jUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKF9yb290LCBfc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcm9vdCA9IF9yb290O1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IGFzeW5jXzEuZGVmYXVsdCh0aGlzLl9yb290LCB0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UgPSBbXTtcbiAgICB9XG4gICAgcmVhZChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9yZWFkZXIub25FcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVudHJ5KChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZS5wdXNoKGVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVuZCgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCB0aGlzLl9zdG9yYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5yZWFkKCk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQXN5bmNQcm92aWRlcjtcbmZ1bmN0aW9uIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yKSB7XG4gICAgY2FsbGJhY2soZXJyb3IpO1xufVxuZnVuY3Rpb24gY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgZW50cmllcykge1xuICAgIGNhbGxiYWNrKG51bGwsIGVudHJpZXMpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL2FzeW5jXCIpO1xuY2xhc3MgU3RyZWFtUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKF9yb290LCBfc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcm9vdCA9IF9yb290O1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IGFzeW5jXzEuZGVmYXVsdCh0aGlzLl9yb290LCB0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3N0cmVhbSA9IG5ldyBzdHJlYW1fMS5SZWFkYWJsZSh7XG4gICAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICAgICAgcmVhZDogKCkgPT4geyB9LFxuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcmVhZGVyLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVhZCgpIHtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdHJlYW0uZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZWFkZXIub25FbnRyeSgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKGVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVuZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdHJlYW0ucHVzaChudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5yZWFkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU3RyZWFtUHJvdmlkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmc1NjYW5kaXIgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc2NhbmRpclwiKTtcbmNvbnN0IGNvbW1vbiA9IHJlcXVpcmUoXCIuL2NvbW1vblwiKTtcbmNvbnN0IHJlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuY2xhc3MgU3luY1JlYWRlciBleHRlbmRzIHJlYWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9zY2FuZGlyID0gZnNTY2FuZGlyLnNjYW5kaXJTeW5jO1xuICAgICAgICB0aGlzLl9zdG9yYWdlID0gW107XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICByZWFkKCkge1xuICAgICAgICB0aGlzLl9wdXNoVG9RdWV1ZSh0aGlzLl9yb290LCB0aGlzLl9zZXR0aW5ncy5iYXNlUGF0aCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZVF1ZXVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9yYWdlO1xuICAgIH1cbiAgICBfcHVzaFRvUXVldWUoZGlyZWN0b3J5LCBiYXNlKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlLmFkZCh7IGRpcmVjdG9yeSwgYmFzZSB9KTtcbiAgICB9XG4gICAgX2hhbmRsZVF1ZXVlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fcXVldWUudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZURpcmVjdG9yeShpdGVtLmRpcmVjdG9yeSwgaXRlbS5iYXNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaGFuZGxlRGlyZWN0b3J5KGRpcmVjdG9yeSwgYmFzZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMuX3NjYW5kaXIoZGlyZWN0b3J5LCB0aGlzLl9zZXR0aW5ncy5mc1NjYW5kaXJTZXR0aW5ncyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFbnRyeShlbnRyeSwgYmFzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2hhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmICghY29tbW9uLmlzRmF0YWxFcnJvcih0aGlzLl9zZXR0aW5ncywgZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIF9oYW5kbGVFbnRyeShlbnRyeSwgYmFzZSkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IGVudHJ5LnBhdGg7XG4gICAgICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudHJ5LnBhdGggPSBjb21tb24uam9pblBhdGhTZWdtZW50cyhiYXNlLCBlbnRyeS5uYW1lLCB0aGlzLl9zZXR0aW5ncy5wYXRoU2VnbWVudFNlcGFyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1vbi5pc0FwcGxpZWRGaWx0ZXIodGhpcy5fc2V0dGluZ3MuZW50cnlGaWx0ZXIsIGVudHJ5KSkge1xuICAgICAgICAgICAgdGhpcy5fcHVzaFRvU3RvcmFnZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpICYmIGNvbW1vbi5pc0FwcGxpZWRGaWx0ZXIodGhpcy5fc2V0dGluZ3MuZGVlcEZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG9RdWV1ZShmdWxscGF0aCwgYmFzZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZW50cnkucGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3B1c2hUb1N0b3JhZ2UoZW50cnkpIHtcbiAgICAgICAgdGhpcy5fc3RvcmFnZS5wdXNoKGVudHJ5KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTeW5jUmVhZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3luY18xID0gcmVxdWlyZShcIi4uL3JlYWRlcnMvc3luY1wiKTtcbmNsYXNzIFN5bmNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgc3luY18xLmRlZmF1bHQodGhpcy5fcm9vdCwgdGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICByZWFkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTeW5jUHJvdmlkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBmc1NjYW5kaXIgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc2NhbmRpclwiKTtcbmNsYXNzIFNldHRpbmdzIHtcbiAgICBjb25zdHJ1Y3Rvcihfb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcbiAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuYmFzZVBhdGgsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmNvbmN1cnJlbmN5LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICB0aGlzLmRlZXBGaWx0ZXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmRlZXBGaWx0ZXIsIG51bGwpO1xuICAgICAgICB0aGlzLmVudHJ5RmlsdGVyID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5lbnRyeUZpbHRlciwgbnVsbCk7XG4gICAgICAgIHRoaXMuZXJyb3JGaWx0ZXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmVycm9yRmlsdGVyLCBudWxsKTtcbiAgICAgICAgdGhpcy5wYXRoU2VnbWVudFNlcGFyYXRvciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMucGF0aFNlZ21lbnRTZXBhcmF0b3IsIHBhdGguc2VwKTtcbiAgICAgICAgdGhpcy5mc1NjYW5kaXJTZXR0aW5ncyA9IG5ldyBmc1NjYW5kaXIuU2V0dGluZ3Moe1xuICAgICAgICAgICAgZm9sbG93U3ltYm9saWNMaW5rczogdGhpcy5fb3B0aW9ucy5mb2xsb3dTeW1ib2xpY0xpbmtzLFxuICAgICAgICAgICAgZnM6IHRoaXMuX29wdGlvbnMuZnMsXG4gICAgICAgICAgICBwYXRoU2VnbWVudFNlcGFyYXRvcjogdGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvcixcbiAgICAgICAgICAgIHN0YXRzOiB0aGlzLl9vcHRpb25zLnN0YXRzLFxuICAgICAgICAgICAgdGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rOiB0aGlzLl9vcHRpb25zLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGlua1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldFZhbHVlKG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiAhPT0gbnVsbCAmJiBvcHRpb24gIT09IHZvaWQgMCA/IG9wdGlvbiA6IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFNldHRpbmdzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXR0aW5ncyA9IGV4cG9ydHMud2Fsa1N0cmVhbSA9IGV4cG9ydHMud2Fsa1N5bmMgPSBleHBvcnRzLndhbGsgPSB2b2lkIDA7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL2FzeW5jXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3RyZWFtXCIpO1xuY29uc3Qgc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gd2FsayhkaXJlY3RvcnksIG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjaywgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBuZXcgYXN5bmNfMS5kZWZhdWx0KGRpcmVjdG9yeSwgZ2V0U2V0dGluZ3MoKSkucmVhZChvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIG5ldyBhc3luY18xLmRlZmF1bHQoZGlyZWN0b3J5LCBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spKS5yZWFkKGNhbGxiYWNrKTtcbn1cbmV4cG9ydHMud2FsayA9IHdhbGs7XG5mdW5jdGlvbiB3YWxrU3luYyhkaXJlY3RvcnksIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgc3luY18xLmRlZmF1bHQoZGlyZWN0b3J5LCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIHByb3ZpZGVyLnJlYWQoKTtcbn1cbmV4cG9ydHMud2Fsa1N5bmMgPSB3YWxrU3luYztcbmZ1bmN0aW9uIHdhbGtTdHJlYW0oZGlyZWN0b3J5LCBvcHRpb25zT3JTZXR0aW5ncykge1xuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3MpO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IHN0cmVhbV8xLmRlZmF1bHQoZGlyZWN0b3J5LCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIHByb3ZpZGVyLnJlYWQoKTtcbn1cbmV4cG9ydHMud2Fsa1N0cmVhbSA9IHdhbGtTdHJlYW07XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNsYXNzIFJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9mc1N0YXRTZXR0aW5ncyA9IG5ldyBmc1N0YXQuU2V0dGluZ3Moe1xuICAgICAgICAgICAgZm9sbG93U3ltYm9saWNMaW5rOiB0aGlzLl9zZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzLFxuICAgICAgICAgICAgZnM6IHRoaXMuX3NldHRpbmdzLmZzLFxuICAgICAgICAgICAgdGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rOiB0aGlzLl9zZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0RnVsbEVudHJ5UGF0aChmaWxlcGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLmN3ZCwgZmlsZXBhdGgpO1xuICAgIH1cbiAgICBfbWFrZUVudHJ5KHN0YXRzLCBwYXR0ZXJuKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgbmFtZTogcGF0dGVybixcbiAgICAgICAgICAgIHBhdGg6IHBhdHRlcm4sXG4gICAgICAgICAgICBkaXJlbnQ6IHV0aWxzLmZzLmNyZWF0ZURpcmVudEZyb21TdGF0cyhwYXR0ZXJuLCBzdGF0cylcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnN0YXRzKSB7XG4gICAgICAgICAgICBlbnRyeS5zdGF0cyA9IHN0YXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gICAgX2lzRmF0YWxFcnJvcihlcnJvcikge1xuICAgICAgICByZXR1cm4gIXV0aWxzLmVycm5vLmlzRW5vZW50Q29kZUVycm9yKGVycm9yKSAmJiAhdGhpcy5fc2V0dGluZ3Muc3VwcHJlc3NFcnJvcnM7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCBmc1dhbGsgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMud2Fsa1wiKTtcbmNvbnN0IHJlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuY2xhc3MgUmVhZGVyU3RyZWFtIGV4dGVuZHMgcmVhZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3dhbGtTdHJlYW0gPSBmc1dhbGsud2Fsa1N0cmVhbTtcbiAgICAgICAgdGhpcy5fc3RhdCA9IGZzU3RhdC5zdGF0O1xuICAgIH1cbiAgICBkeW5hbWljKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dhbGtTdHJlYW0ocm9vdCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHN0YXRpYyhwYXR0ZXJucywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBmaWxlcGF0aHMgPSBwYXR0ZXJucy5tYXAodGhpcy5fZ2V0RnVsbEVudHJ5UGF0aCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBzdHJlYW1fMS5QYXNzVGhyb3VnaCh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIHN0cmVhbS5fd3JpdGUgPSAoaW5kZXgsIF9lbmMsIGRvbmUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyeShmaWxlcGF0aHNbaW5kZXhdLCBwYXR0ZXJuc1tpbmRleF0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9PSBudWxsICYmIG9wdGlvbnMuZW50cnlGaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBmaWxlcGF0aHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVwYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3RyZWFtLndyaXRlKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfVxuICAgIF9nZXRFbnRyeShmaWxlcGF0aCwgcGF0dGVybiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RhdChmaWxlcGF0aClcbiAgICAgICAgICAgIC50aGVuKChzdGF0cykgPT4gdGhpcy5fbWFrZUVudHJ5KHN0YXRzLCBwYXR0ZXJuKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVycm9yRmlsdGVyKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0U3RhdChmaWxlcGF0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RhdChmaWxlcGF0aCwgdGhpcy5fZnNTdGF0U2V0dGluZ3MsIChlcnJvciwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgPT09IG51bGwgPyByZXNvbHZlKHN0YXRzKSA6IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhZGVyU3RyZWFtO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZnNXYWxrID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLndhbGtcIik7XG5jb25zdCByZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcIi4vc3RyZWFtXCIpO1xuY2xhc3MgUmVhZGVyQXN5bmMgZXh0ZW5kcyByZWFkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fd2Fsa0FzeW5jID0gZnNXYWxrLndhbGs7XG4gICAgICAgIHRoaXMuX3JlYWRlclN0cmVhbSA9IG5ldyBzdHJlYW1fMS5kZWZhdWx0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG4gICAgZHluYW1pYyhyb290LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl93YWxrQXN5bmMocm9vdCwgb3B0aW9ucywgKGVycm9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW50cmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc3RhdGljKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fcmVhZGVyU3RyZWFtLnN0YXRpYyhwYXR0ZXJucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEFmdGVyICMyMzUsIHJlcGxhY2UgaXQgd2l0aCBhbiBhc3luY2hyb25vdXMgaXRlcmF0b3IuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKGVudHJ5KSA9PiBlbnRyaWVzLnB1c2goZW50cnkpKTtcbiAgICAgICAgICAgIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiByZXNvbHZlKGVudHJpZXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhZGVyQXN5bmM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNsYXNzIE1hdGNoZXIge1xuICAgIGNvbnN0cnVjdG9yKF9wYXR0ZXJucywgX3NldHRpbmdzLCBfbWljcm9tYXRjaE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcGF0dGVybnMgPSBfcGF0dGVybnM7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyA9IF9taWNyb21hdGNoT3B0aW9ucztcbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IFtdO1xuICAgICAgICB0aGlzLl9maWxsU3RvcmFnZSgpO1xuICAgIH1cbiAgICBfZmlsbFN0b3JhZ2UoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLl9wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLl9nZXRQYXR0ZXJuU2VnbWVudHMocGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuX3NwbGl0U2VnbWVudHNJbnRvU2VjdGlvbnMoc2VnbWVudHMpO1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogc2VjdGlvbnMubGVuZ3RoIDw9IDEsXG4gICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICBzZWdtZW50cyxcbiAgICAgICAgICAgICAgICBzZWN0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFBhdHRlcm5TZWdtZW50cyhwYXR0ZXJuKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdXRpbHMucGF0dGVybi5nZXRQYXR0ZXJuUGFydHMocGF0dGVybiwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkeW5hbWljID0gdXRpbHMucGF0dGVybi5pc0R5bmFtaWNQYXR0ZXJuKHBhcnQsIHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgICAgIGlmICghZHluYW1pYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXJ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZHluYW1pYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXJ0LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5SZTogdXRpbHMucGF0dGVybi5tYWtlUmUocGFydCwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NwbGl0U2VnbWVudHNJbnRvU2VjdGlvbnMoc2VnbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmFycmF5LnNwbGl0V2hlbihzZWdtZW50cywgKHNlZ21lbnQpID0+IHNlZ21lbnQuZHluYW1pYyAmJiB1dGlscy5wYXR0ZXJuLmhhc0dsb2JTdGFyKHNlZ21lbnQucGF0dGVybikpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IE1hdGNoZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBtYXRjaGVyXzEgPSByZXF1aXJlKFwiLi9tYXRjaGVyXCIpO1xuY2xhc3MgUGFydGlhbE1hdGNoZXIgZXh0ZW5kcyBtYXRjaGVyXzEuZGVmYXVsdCB7XG4gICAgbWF0Y2goZmlsZXBhdGgpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBmaWxlcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBsZXZlbHMgPSBwYXJ0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5fc3RvcmFnZS5maWx0ZXIoKGluZm8pID0+ICFpbmZvLmNvbXBsZXRlIHx8IGluZm8uc2VnbWVudHMubGVuZ3RoID4gbGV2ZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gcGF0dGVybi5zZWN0aW9uc1swXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW4gdGhpcyBjYXNlLCB0aGUgcGF0dGVybiBoYXMgYSBnbG9ic3RhciBhbmQgd2UgbXVzdCByZWFkIGFsbCBkaXJlY3RvcmllcyB1bmNvbmRpdGlvbmFsbHksXG4gICAgICAgICAgICAgKiBidXQgb25seSBpZiB0aGUgbGV2ZWwgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlyc3QgZ3JvdXAuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogZml4dHVyZXMve2EsYn0vKipcbiAgICAgICAgICAgICAqICBeIHRydWUvZmFsc2UgIF4gYWx3YXlzIHRydWVcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uY29tcGxldGUgJiYgbGV2ZWxzID4gc2VjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcGFydHMuZXZlcnkoKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IHBhdHRlcm4uc2VnbWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LmR5bmFtaWMgJiYgc2VnbWVudC5wYXR0ZXJuUmUudGVzdChwYXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzZWdtZW50LmR5bmFtaWMgJiYgc2VnbWVudC5wYXR0ZXJuID09PSBwYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQYXJ0aWFsTWF0Y2hlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY29uc3QgcGFydGlhbF8xID0gcmVxdWlyZShcIi4uL21hdGNoZXJzL3BhcnRpYWxcIik7XG5jbGFzcyBEZWVwRmlsdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfc2V0dGluZ3MsIF9taWNyb21hdGNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMgPSBfbWljcm9tYXRjaE9wdGlvbnM7XG4gICAgfVxuICAgIGdldEZpbHRlcihiYXNlUGF0aCwgcG9zaXRpdmUsIG5lZ2F0aXZlKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXIgPSB0aGlzLl9nZXRNYXRjaGVyKHBvc2l0aXZlKTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmVSZSA9IHRoaXMuX2dldE5lZ2F0aXZlUGF0dGVybnNSZShuZWdhdGl2ZSk7XG4gICAgICAgIHJldHVybiAoZW50cnkpID0+IHRoaXMuX2ZpbHRlcihiYXNlUGF0aCwgZW50cnksIG1hdGNoZXIsIG5lZ2F0aXZlUmUpO1xuICAgIH1cbiAgICBfZ2V0TWF0Y2hlcihwYXR0ZXJucykge1xuICAgICAgICByZXR1cm4gbmV3IHBhcnRpYWxfMS5kZWZhdWx0KHBhdHRlcm5zLCB0aGlzLl9zZXR0aW5ncywgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpO1xuICAgIH1cbiAgICBfZ2V0TmVnYXRpdmVQYXR0ZXJuc1JlKHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IGFmZmVjdERlcHRoT2ZSZWFkaW5nUGF0dGVybnMgPSBwYXR0ZXJucy5maWx0ZXIodXRpbHMucGF0dGVybi5pc0FmZmVjdERlcHRoT2ZSZWFkaW5nUGF0dGVybik7XG4gICAgICAgIHJldHVybiB1dGlscy5wYXR0ZXJuLmNvbnZlcnRQYXR0ZXJuc1RvUmUoYWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJucywgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpO1xuICAgIH1cbiAgICBfZmlsdGVyKGJhc2VQYXRoLCBlbnRyeSwgbWF0Y2hlciwgbmVnYXRpdmVSZSkge1xuICAgICAgICBpZiAodGhpcy5faXNTa2lwcGVkQnlEZWVwKGJhc2VQYXRoLCBlbnRyeS5wYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc1NraXBwZWRTeW1ib2xpY0xpbmsoZW50cnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsZXBhdGggPSB1dGlscy5wYXRoLnJlbW92ZUxlYWRpbmdEb3RTZWdtZW50KGVudHJ5LnBhdGgpO1xuICAgICAgICBpZiAodGhpcy5faXNTa2lwcGVkQnlQb3NpdGl2ZVBhdHRlcm5zKGZpbGVwYXRoLCBtYXRjaGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NraXBwZWRCeU5lZ2F0aXZlUGF0dGVybnMoZmlsZXBhdGgsIG5lZ2F0aXZlUmUpO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkQnlEZWVwKGJhc2VQYXRoLCBlbnRyeVBhdGgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF2b2lkIHVubmVjZXNzYXJ5IGRlcHRoIGNhbGN1bGF0aW9ucyB3aGVuIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLmRlZXAgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJ5TGV2ZWwoYmFzZVBhdGgsIGVudHJ5UGF0aCkgPj0gdGhpcy5fc2V0dGluZ3MuZGVlcDtcbiAgICB9XG4gICAgX2dldEVudHJ5TGV2ZWwoYmFzZVBhdGgsIGVudHJ5UGF0aCkge1xuICAgICAgICBjb25zdCBlbnRyeVBhdGhEZXB0aCA9IGVudHJ5UGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcbiAgICAgICAgaWYgKGJhc2VQYXRoID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5UGF0aERlcHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoRGVwdGggPSBiYXNlUGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGVudHJ5UGF0aERlcHRoIC0gYmFzZVBhdGhEZXB0aDtcbiAgICB9XG4gICAgX2lzU2tpcHBlZFN5bWJvbGljTGluayhlbnRyeSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3MgJiYgZW50cnkuZGlyZW50LmlzU3ltYm9saWNMaW5rKCk7XG4gICAgfVxuICAgIF9pc1NraXBwZWRCeVBvc2l0aXZlUGF0dGVybnMoZW50cnlQYXRoLCBtYXRjaGVyKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fc2V0dGluZ3MuYmFzZU5hbWVNYXRjaCAmJiAhbWF0Y2hlci5tYXRjaChlbnRyeVBhdGgpO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkQnlOZWdhdGl2ZVBhdHRlcm5zKGVudHJ5UGF0aCwgcGF0dGVybnNSZSkge1xuICAgICAgICByZXR1cm4gIXV0aWxzLnBhdHRlcm4ubWF0Y2hBbnkoZW50cnlQYXRoLCBwYXR0ZXJuc1JlKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBEZWVwRmlsdGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jbGFzcyBFbnRyeUZpbHRlciB7XG4gICAgY29uc3RydWN0b3IoX3NldHRpbmdzLCBfbWljcm9tYXRjaE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zID0gX21pY3JvbWF0Y2hPcHRpb25zO1xuICAgICAgICB0aGlzLmluZGV4ID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBnZXRGaWx0ZXIocG9zaXRpdmUsIG5lZ2F0aXZlKSB7XG4gICAgICAgIGNvbnN0IFthYnNvbHV0ZU5lZ2F0aXZlLCByZWxhdGl2ZU5lZ2F0aXZlXSA9IHV0aWxzLnBhdHRlcm4ucGFydGl0aW9uQWJzb2x1dGVBbmRSZWxhdGl2ZShuZWdhdGl2ZSk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0ge1xuICAgICAgICAgICAgcG9zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICBhbGw6IHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShwb3NpdGl2ZSwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmVnYXRpdmU6IHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZTogdXRpbHMucGF0dGVybi5jb252ZXJ0UGF0dGVybnNUb1JlKGFic29sdXRlTmVnYXRpdmUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpLCB7IGRvdDogdHJ1ZSB9KSksXG4gICAgICAgICAgICAgICAgcmVsYXRpdmU6IHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShyZWxhdGl2ZU5lZ2F0aXZlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zKSwgeyBkb3Q6IHRydWUgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoZW50cnkpID0+IHRoaXMuX2ZpbHRlcihlbnRyeSwgcGF0dGVybnMpO1xuICAgIH1cbiAgICBfZmlsdGVyKGVudHJ5LCBwYXR0ZXJucykge1xuICAgICAgICBjb25zdCBmaWxlcGF0aCA9IHV0aWxzLnBhdGgucmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQoZW50cnkucGF0aCk7XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy51bmlxdWUgJiYgdGhpcy5faXNEdXBsaWNhdGVFbnRyeShmaWxlcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb25seUZpbGVGaWx0ZXIoZW50cnkpIHx8IHRoaXMuX29ubHlEaXJlY3RvcnlGaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gdGhpcy5faXNNYXRjaFRvUGF0dGVybnNTZXQoZmlsZXBhdGgsIHBhdHRlcm5zLCBlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKSk7XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy51bmlxdWUgJiYgaXNNYXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVJbmRleFJlY29yZChmaWxlcGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZDtcbiAgICB9XG4gICAgX2lzRHVwbGljYXRlRW50cnkoZmlsZXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaGFzKGZpbGVwYXRoKTtcbiAgICB9XG4gICAgX2NyZWF0ZUluZGV4UmVjb3JkKGZpbGVwYXRoKSB7XG4gICAgICAgIHRoaXMuaW5kZXguc2V0KGZpbGVwYXRoLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBfb25seUZpbGVGaWx0ZXIoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLm9ubHlGaWxlcyAmJiAhZW50cnkuZGlyZW50LmlzRmlsZSgpO1xuICAgIH1cbiAgICBfb25seURpcmVjdG9yeUZpbHRlcihlbnRyeSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Mub25seURpcmVjdG9yaWVzICYmICFlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKTtcbiAgICB9XG4gICAgX2lzTWF0Y2hUb1BhdHRlcm5zU2V0KGZpbGVwYXRoLCBwYXR0ZXJucywgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gdGhpcy5faXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIHBhdHRlcm5zLnBvc2l0aXZlLmFsbCwgaXNEaXJlY3RvcnkpO1xuICAgICAgICBpZiAoIWlzTWF0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTWF0Y2hlZEJ5UmVsYXRpdmVOZWdhdGl2ZSA9IHRoaXMuX2lzTWF0Y2hUb1BhdHRlcm5zKGZpbGVwYXRoLCBwYXR0ZXJucy5uZWdhdGl2ZS5yZWxhdGl2ZSwgaXNEaXJlY3RvcnkpO1xuICAgICAgICBpZiAoaXNNYXRjaGVkQnlSZWxhdGl2ZU5lZ2F0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNNYXRjaGVkQnlBYnNvbHV0ZU5lZ2F0aXZlID0gdGhpcy5faXNNYXRjaFRvQWJzb2x1dGVOZWdhdGl2ZShmaWxlcGF0aCwgcGF0dGVybnMubmVnYXRpdmUuYWJzb2x1dGUsIGlzRGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKGlzTWF0Y2hlZEJ5QWJzb2x1dGVOZWdhdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfaXNNYXRjaFRvQWJzb2x1dGVOZWdhdGl2ZShmaWxlcGF0aCwgcGF0dGVybnNSZSwgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgaWYgKHBhdHRlcm5zUmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB1dGlscy5wYXRoLm1ha2VBYnNvbHV0ZSh0aGlzLl9zZXR0aW5ncy5jd2QsIGZpbGVwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTWF0Y2hUb1BhdHRlcm5zKGZ1bGxwYXRoLCBwYXR0ZXJuc1JlLCBpc0RpcmVjdG9yeSk7XG4gICAgfVxuICAgIF9pc01hdGNoVG9QYXR0ZXJucyhmaWxlcGF0aCwgcGF0dGVybnNSZSwgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgaWYgKHBhdHRlcm5zUmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJ5aW5nIHRvIG1hdGNoIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBieSBwYXR0ZXJucy5cbiAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gdXRpbHMucGF0dGVybi5tYXRjaEFueShmaWxlcGF0aCwgcGF0dGVybnNSZSk7XG4gICAgICAgIC8vIEEgcGF0dGVybiB3aXRoIGEgdHJhaWxsaW5nIHNsYXNoIGNhbiBiZSB1c2VkIGZvciBkaXJlY3RvcnkgbWF0Y2hpbmcuXG4gICAgICAgIC8vIFRvIGFwcGx5IHN1Y2ggcGF0dGVybiwgd2UgbmVlZCB0byBhZGQgYSB0cmFsbGluZyBzbGFzaCB0byB0aGUgcGF0aC5cbiAgICAgICAgaWYgKCFpc01hdGNoZWQgJiYgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5wYXR0ZXJuLm1hdGNoQW55KGZpbGVwYXRoICsgJy8nLCBwYXR0ZXJuc1JlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNNYXRjaGVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEVudHJ5RmlsdGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jbGFzcyBFcnJvckZpbHRlciB7XG4gICAgY29uc3RydWN0b3IoX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgIH1cbiAgICBnZXRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiAoZXJyb3IpID0+IHRoaXMuX2lzTm9uRmF0YWxFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIF9pc05vbkZhdGFsRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmVycm5vLmlzRW5vZW50Q29kZUVycm9yKGVycm9yKSB8fCB0aGlzLl9zZXR0aW5ncy5zdXBwcmVzc0Vycm9ycztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBFcnJvckZpbHRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY2xhc3MgRW50cnlUcmFuc2Zvcm1lciB7XG4gICAgY29uc3RydWN0b3IoX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgIH1cbiAgICBnZXRUcmFuc2Zvcm1lcigpIHtcbiAgICAgICAgcmV0dXJuIChlbnRyeSkgPT4gdGhpcy5fdHJhbnNmb3JtKGVudHJ5KTtcbiAgICB9XG4gICAgX3RyYW5zZm9ybShlbnRyeSkge1xuICAgICAgICBsZXQgZmlsZXBhdGggPSBlbnRyeS5wYXRoO1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGZpbGVwYXRoID0gdXRpbHMucGF0aC5tYWtlQWJzb2x1dGUodGhpcy5fc2V0dGluZ3MuY3dkLCBmaWxlcGF0aCk7XG4gICAgICAgICAgICBmaWxlcGF0aCA9IHV0aWxzLnBhdGgudW5peGlmeShmaWxlcGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1hcmtEaXJlY3RvcmllcyAmJiBlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgZmlsZXBhdGggKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3Mub2JqZWN0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVudHJ5KSwgeyBwYXRoOiBmaWxlcGF0aCB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBFbnRyeVRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZGVlcF8xID0gcmVxdWlyZShcIi4vZmlsdGVycy9kZWVwXCIpO1xuY29uc3QgZW50cnlfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlcnMvZW50cnlcIik7XG5jb25zdCBlcnJvcl8xID0gcmVxdWlyZShcIi4vZmlsdGVycy9lcnJvclwiKTtcbmNvbnN0IGVudHJ5XzIgPSByZXF1aXJlKFwiLi90cmFuc2Zvcm1lcnMvZW50cnlcIik7XG5jbGFzcyBQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLmVycm9yRmlsdGVyID0gbmV3IGVycm9yXzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuZW50cnlGaWx0ZXIgPSBuZXcgZW50cnlfMS5kZWZhdWx0KHRoaXMuX3NldHRpbmdzLCB0aGlzLl9nZXRNaWNyb21hdGNoT3B0aW9ucygpKTtcbiAgICAgICAgdGhpcy5kZWVwRmlsdGVyID0gbmV3IGRlZXBfMS5kZWZhdWx0KHRoaXMuX3NldHRpbmdzLCB0aGlzLl9nZXRNaWNyb21hdGNoT3B0aW9ucygpKTtcbiAgICAgICAgdGhpcy5lbnRyeVRyYW5zZm9ybWVyID0gbmV3IGVudHJ5XzIuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuICAgIF9nZXRSb290RGlyZWN0b3J5KHRhc2spIHtcbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5jd2QsIHRhc2suYmFzZSk7XG4gICAgfVxuICAgIF9nZXRSZWFkZXJPcHRpb25zKHRhc2spIHtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSB0YXNrLmJhc2UgPT09ICcuJyA/ICcnIDogdGFzay5iYXNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVBhdGgsXG4gICAgICAgICAgICBwYXRoU2VnbWVudFNlcGFyYXRvcjogJy8nLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IHRoaXMuX3NldHRpbmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgZGVlcEZpbHRlcjogdGhpcy5kZWVwRmlsdGVyLmdldEZpbHRlcihiYXNlUGF0aCwgdGFzay5wb3NpdGl2ZSwgdGFzay5uZWdhdGl2ZSksXG4gICAgICAgICAgICBlbnRyeUZpbHRlcjogdGhpcy5lbnRyeUZpbHRlci5nZXRGaWx0ZXIodGFzay5wb3NpdGl2ZSwgdGFzay5uZWdhdGl2ZSksXG4gICAgICAgICAgICBlcnJvckZpbHRlcjogdGhpcy5lcnJvckZpbHRlci5nZXRGaWx0ZXIoKSxcbiAgICAgICAgICAgIGZvbGxvd1N5bWJvbGljTGlua3M6IHRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5fc2V0dGluZ3MuZnMsXG4gICAgICAgICAgICBzdGF0czogdGhpcy5fc2V0dGluZ3Muc3RhdHMsXG4gICAgICAgICAgICB0aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbms6IHRoaXMuX3NldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdGhpcy5lbnRyeVRyYW5zZm9ybWVyLmdldFRyYW5zZm9ybWVyKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldE1pY3JvbWF0Y2hPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG90OiB0aGlzLl9zZXR0aW5ncy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMuX3NldHRpbmdzLmJhc2VOYW1lTWF0Y2gsXG4gICAgICAgICAgICBub2JyYWNlOiAhdGhpcy5fc2V0dGluZ3MuYnJhY2VFeHBhbnNpb24sXG4gICAgICAgICAgICBub2Nhc2U6ICF0aGlzLl9zZXR0aW5ncy5jYXNlU2Vuc2l0aXZlTWF0Y2gsXG4gICAgICAgICAgICBub2V4dDogIXRoaXMuX3NldHRpbmdzLmV4dGdsb2IsXG4gICAgICAgICAgICBub2dsb2JzdGFyOiAhdGhpcy5fc2V0dGluZ3MuZ2xvYnN0YXIsXG4gICAgICAgICAgICBwb3NpeDogdHJ1ZSxcbiAgICAgICAgICAgIHN0cmljdFNsYXNoZXM6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUHJvdmlkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4uL3JlYWRlcnMvYXN5bmNcIik7XG5jb25zdCBwcm92aWRlcl8xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJcIik7XG5jbGFzcyBQcm92aWRlckFzeW5jIGV4dGVuZHMgcHJvdmlkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IGFzeW5jXzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWQodGFzaykge1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fZ2V0Um9vdERpcmVjdG9yeSh0YXNrKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2dldFJlYWRlck9wdGlvbnModGFzayk7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmFwaShyb290LCB0YXNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKChlbnRyeSkgPT4gb3B0aW9ucy50cmFuc2Zvcm0oZW50cnkpKTtcbiAgICB9XG4gICAgYXBpKHJvb3QsIHRhc2ssIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRhc2suZHluYW1pYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5keW5hbWljKHJvb3QsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuc3RhdGljKHRhc2sucGF0dGVybnMsIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFByb3ZpZGVyQXN5bmM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBzdHJlYW1fMiA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL3N0cmVhbVwiKTtcbmNvbnN0IHByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlclwiKTtcbmNsYXNzIFByb3ZpZGVyU3RyZWFtIGV4dGVuZHMgcHJvdmlkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IHN0cmVhbV8yLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICByZWFkKHRhc2spIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2dldFJvb3REaXJlY3RvcnkodGFzayk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9nZXRSZWFkZXJPcHRpb25zKHRhc2spO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmFwaShyb290LCB0YXNrLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgc3RyZWFtXzEuUmVhZGFibGUoeyBvYmplY3RNb2RlOiB0cnVlLCByZWFkOiAoKSA9PiB7IH0gfSk7XG4gICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgLm9uY2UoJ2Vycm9yJywgKGVycm9yKSA9PiBkZXN0aW5hdGlvbi5lbWl0KCdlcnJvcicsIGVycm9yKSlcbiAgICAgICAgICAgIC5vbignZGF0YScsIChlbnRyeSkgPT4gZGVzdGluYXRpb24uZW1pdCgnZGF0YScsIG9wdGlvbnMudHJhbnNmb3JtKGVudHJ5KSkpXG4gICAgICAgICAgICAub25jZSgnZW5kJywgKCkgPT4gZGVzdGluYXRpb24uZW1pdCgnZW5kJykpO1xuICAgICAgICBkZXN0aW5hdGlvblxuICAgICAgICAgICAgLm9uY2UoJ2Nsb3NlJywgKCkgPT4gc291cmNlLmRlc3Ryb3koKSk7XG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9XG4gICAgYXBpKHJvb3QsIHRhc2ssIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRhc2suZHluYW1pYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5keW5hbWljKHJvb3QsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuc3RhdGljKHRhc2sucGF0dGVybnMsIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFByb3ZpZGVyU3RyZWFtO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCBmc1dhbGsgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMud2Fsa1wiKTtcbmNvbnN0IHJlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuY2xhc3MgUmVhZGVyU3luYyBleHRlbmRzIHJlYWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl93YWxrU3luYyA9IGZzV2Fsay53YWxrU3luYztcbiAgICAgICAgdGhpcy5fc3RhdFN5bmMgPSBmc1N0YXQuc3RhdFN5bmM7XG4gICAgfVxuICAgIGR5bmFtaWMocm9vdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Fsa1N5bmMocm9vdCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHN0YXRpYyhwYXR0ZXJucywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgZmlsZXBhdGggPSB0aGlzLl9nZXRGdWxsRW50cnlQYXRoKHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9nZXRFbnRyeShmaWxlcGF0aCwgcGF0dGVybiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZW50cnkgPT09IG51bGwgfHwgIW9wdGlvbnMuZW50cnlGaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cbiAgICBfZ2V0RW50cnkoZmlsZXBhdGgsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gdGhpcy5fZ2V0U3RhdChmaWxlcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUVudHJ5KHN0YXRzLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVycm9yRmlsdGVyKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFN0YXQoZmlsZXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRTeW5jKGZpbGVwYXRoLCB0aGlzLl9mc1N0YXRTZXR0aW5ncyk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUmVhZGVyU3luYztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL3N5bmNcIik7XG5jb25zdCBwcm92aWRlcl8xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJcIik7XG5jbGFzcyBQcm92aWRlclN5bmMgZXh0ZW5kcyBwcm92aWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgc3luY18xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICByZWFkKHRhc2spIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2dldFJvb3REaXJlY3RvcnkodGFzayk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9nZXRSZWFkZXJPcHRpb25zKHRhc2spO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5hcGkocm9vdCwgdGFzaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChvcHRpb25zLnRyYW5zZm9ybSk7XG4gICAgfVxuICAgIGFwaShyb290LCB0YXNrLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXNrLmR5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuZHluYW1pYyhyb290LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnN0YXRpYyh0YXNrLnBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcm92aWRlclN5bmM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfRklMRV9TWVNURU1fQURBUFRFUiA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG4vKipcbiAqIFRoZSBgb3MuY3B1c2AgbWV0aG9kIGNhbiByZXR1cm4gemVyby4gV2UgZXhwZWN0IHRoZSBudW1iZXIgb2YgY29yZXMgdG8gYmUgZ3JlYXRlciB0aGFuIHplcm8uXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi83ZmFlZGRmMjNhOThjNTM4OTZmOGI1NzRhNmU2NjU4OWU4ZmIxZWI4L2xpYi9vcy5qcyNMMTA2LUwxMDdcbiAqL1xuY29uc3QgQ1BVX0NPVU5UID0gTWF0aC5tYXgob3MuY3B1cygpLmxlbmd0aCwgMSk7XG5leHBvcnRzLkRFRkFVTFRfRklMRV9TWVNURU1fQURBUFRFUiA9IHtcbiAgICBsc3RhdDogZnMubHN0YXQsXG4gICAgbHN0YXRTeW5jOiBmcy5sc3RhdFN5bmMsXG4gICAgc3RhdDogZnMuc3RhdCxcbiAgICBzdGF0U3luYzogZnMuc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogZnMucmVhZGRpcixcbiAgICByZWFkZGlyU3luYzogZnMucmVhZGRpclN5bmNcbn07XG5jbGFzcyBTZXR0aW5ncyB7XG4gICAgY29uc3RydWN0b3IoX29wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuYmFzZU5hbWVNYXRjaCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuYmFzZU5hbWVNYXRjaCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJyYWNlRXhwYW5zaW9uID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5icmFjZUV4cGFuc2lvbiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZU1hdGNoID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5jYXNlU2Vuc2l0aXZlTWF0Y2gsIHRydWUpO1xuICAgICAgICB0aGlzLmNvbmN1cnJlbmN5ID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5jb25jdXJyZW5jeSwgQ1BVX0NPVU5UKTtcbiAgICAgICAgdGhpcy5jd2QgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmN3ZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICAgIHRoaXMuZGVlcCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZGVlcCwgSW5maW5pdHkpO1xuICAgICAgICB0aGlzLmRvdCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZG90LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZXh0Z2xvYiA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZXh0Z2xvYiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9sbG93U3ltYm9saWNMaW5rcyA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZm9sbG93U3ltYm9saWNMaW5rcywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZnMgPSB0aGlzLl9nZXRGaWxlU3lzdGVtTWV0aG9kcyh0aGlzLl9vcHRpb25zLmZzKTtcbiAgICAgICAgdGhpcy5nbG9ic3RhciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZ2xvYnN0YXIsIHRydWUpO1xuICAgICAgICB0aGlzLmlnbm9yZSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuaWdub3JlLCBbXSk7XG4gICAgICAgIHRoaXMubWFya0RpcmVjdG9yaWVzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5tYXJrRGlyZWN0b3JpZXMsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5vYmplY3RNb2RlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub25seURpcmVjdG9yaWVzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5vbmx5RGlyZWN0b3JpZXMsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5vbmx5RmlsZXMgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLm9ubHlGaWxlcywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc3RhdHMgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnN0YXRzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3VwcHJlc3NFcnJvcnMgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnN1cHByZXNzRXJyb3JzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmssIGZhbHNlKTtcbiAgICAgICAgdGhpcy51bmlxdWUgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnVuaXF1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLm9ubHlEaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgdGhpcy5vbmx5RmlsZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0cykge1xuICAgICAgICAgICAgdGhpcy5vYmplY3RNb2RlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgdGhlIGNhc3QgdG8gdGhlIGFycmF5IGluIHRoZSBuZXh0IG1ham9yICgjNDA0KS5cbiAgICAgICAgdGhpcy5pZ25vcmUgPSBbXS5jb25jYXQodGhpcy5pZ25vcmUpO1xuICAgIH1cbiAgICBfZ2V0VmFsdWUob3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG9wdGlvbjtcbiAgICB9XG4gICAgX2dldEZpbGVTeXN0ZW1NZXRob2RzKG1ldGhvZHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkRFRkFVTFRfRklMRV9TWVNURU1fQURBUFRFUiksIG1ldGhvZHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFNldHRpbmdzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdGFza01hbmFnZXIgPSByZXF1aXJlKFwiLi9tYW5hZ2Vycy90YXNrc1wiKTtcbmNvbnN0IGFzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVycy9zdHJlYW1cIik7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3luY1wiKTtcbmNvbnN0IHNldHRpbmdzXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5hc3luYyBmdW5jdGlvbiBGYXN0R2xvYihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgY29uc3Qgd29ya3MgPSBnZXRXb3Jrcyhzb3VyY2UsIGFzeW5jXzEuZGVmYXVsdCwgb3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwod29ya3MpO1xuICAgIHJldHVybiB1dGlscy5hcnJheS5mbGF0dGVuKHJlc3VsdCk7XG59XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc2xpbnQvaXNzdWVzLzYwXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG4oZnVuY3Rpb24gKEZhc3RHbG9iKSB7XG4gICAgRmFzdEdsb2IuZ2xvYiA9IEZhc3RHbG9iO1xuICAgIEZhc3RHbG9iLmdsb2JTeW5jID0gc3luYztcbiAgICBGYXN0R2xvYi5nbG9iU3RyZWFtID0gc3RyZWFtO1xuICAgIEZhc3RHbG9iLmFzeW5jID0gRmFzdEdsb2I7XG4gICAgZnVuY3Rpb24gc3luYyhzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICBjb25zdCB3b3JrcyA9IGdldFdvcmtzKHNvdXJjZSwgc3luY18xLmRlZmF1bHQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXRpbHMuYXJyYXkuZmxhdHRlbih3b3Jrcyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLnN5bmMgPSBzeW5jO1xuICAgIGZ1bmN0aW9uIHN0cmVhbShzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICBjb25zdCB3b3JrcyA9IGdldFdvcmtzKHNvdXJjZSwgc3RyZWFtXzEuZGVmYXVsdCwgb3B0aW9ucyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc3RyZWFtIHJldHVybmVkIGJ5IHRoZSBwcm92aWRlciBjYW5ub3Qgd29yayB3aXRoIGFuIGFzeW5jaHJvbm91cyBpdGVyYXRvci5cbiAgICAgICAgICogVG8gc3VwcG9ydCBhc3luY2hyb25vdXMgaXRlcmF0b3JzLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgdGFza3MsIHdlIGFsd2F5cyBtdWx0aXBsZXggc3RyZWFtcy5cbiAgICAgICAgICogVGhpcyBhZmZlY3RzIHBlcmZvcm1hbmNlICgrMjUlKS4gSSBkb24ndCBzZWUgYmVzdCBzb2x1dGlvbiByaWdodCBub3cuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gdXRpbHMuc3RyZWFtLm1lcmdlKHdvcmtzKTtcbiAgICB9XG4gICAgRmFzdEdsb2Iuc3RyZWFtID0gc3RyZWFtO1xuICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFza3Moc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSBbXS5jb25jYXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgc2V0dGluZ3NfMS5kZWZhdWx0KG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGFza01hbmFnZXIuZ2VuZXJhdGUocGF0dGVybnMsIHNldHRpbmdzKTtcbiAgICB9XG4gICAgRmFzdEdsb2IuZ2VuZXJhdGVUYXNrcyA9IGdlbmVyYXRlVGFza3M7XG4gICAgZnVuY3Rpb24gaXNEeW5hbWljUGF0dGVybihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG5ldyBzZXR0aW5nc18xLmRlZmF1bHQob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4oc291cmNlLCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLmlzRHluYW1pY1BhdHRlcm4gPSBpc0R5bmFtaWNQYXR0ZXJuO1xuICAgIGZ1bmN0aW9uIGVzY2FwZVBhdGgoc291cmNlKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhdGguZXNjYXBlKHNvdXJjZSk7XG4gICAgfVxuICAgIEZhc3RHbG9iLmVzY2FwZVBhdGggPSBlc2NhcGVQYXRoO1xuICAgIGZ1bmN0aW9uIGNvbnZlcnRQYXRoVG9QYXR0ZXJuKHNvdXJjZSkge1xuICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB1dGlscy5wYXRoLmNvbnZlcnRQYXRoVG9QYXR0ZXJuKHNvdXJjZSk7XG4gICAgfVxuICAgIEZhc3RHbG9iLmNvbnZlcnRQYXRoVG9QYXR0ZXJuID0gY29udmVydFBhdGhUb1BhdHRlcm47XG4gICAgbGV0IHBvc2l4O1xuICAgIChmdW5jdGlvbiAocG9zaXgpIHtcbiAgICAgICAgZnVuY3Rpb24gZXNjYXBlUGF0aChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5wYXRoLmVzY2FwZVBvc2l4UGF0aChzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l4LmVzY2FwZVBhdGggPSBlc2NhcGVQYXRoO1xuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0UGF0aFRvUGF0dGVybihzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5wYXRoLmNvbnZlcnRQb3NpeFBhdGhUb1BhdHRlcm4oc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBwb3NpeC5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGNvbnZlcnRQYXRoVG9QYXR0ZXJuO1xuICAgIH0pKHBvc2l4ID0gRmFzdEdsb2IucG9zaXggfHwgKEZhc3RHbG9iLnBvc2l4ID0ge30pKTtcbiAgICBsZXQgd2luMzI7XG4gICAgKGZ1bmN0aW9uICh3aW4zMikge1xuICAgICAgICBmdW5jdGlvbiBlc2NhcGVQYXRoKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnBhdGguZXNjYXBlV2luZG93c1BhdGgoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB3aW4zMi5lc2NhcGVQYXRoID0gZXNjYXBlUGF0aDtcbiAgICAgICAgZnVuY3Rpb24gY29udmVydFBhdGhUb1BhdHRlcm4oc291cmNlKSB7XG4gICAgICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5jb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm4oc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB3aW4zMi5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGNvbnZlcnRQYXRoVG9QYXR0ZXJuO1xuICAgIH0pKHdpbjMyID0gRmFzdEdsb2Iud2luMzIgfHwgKEZhc3RHbG9iLndpbjMyID0ge30pKTtcbn0pKEZhc3RHbG9iIHx8IChGYXN0R2xvYiA9IHt9KSk7XG5mdW5jdGlvbiBnZXRXb3Jrcyhzb3VyY2UsIF9Qcm92aWRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHBhdHRlcm5zID0gW10uY29uY2F0KHNvdXJjZSk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgc2V0dGluZ3NfMS5kZWZhdWx0KG9wdGlvbnMpO1xuICAgIGNvbnN0IHRhc2tzID0gdGFza01hbmFnZXIuZ2VuZXJhdGUocGF0dGVybnMsIHNldHRpbmdzKTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBfUHJvdmlkZXIoc2V0dGluZ3MpO1xuICAgIHJldHVybiB0YXNrcy5tYXAocHJvdmlkZXIucmVhZCwgcHJvdmlkZXIpO1xufVxuZnVuY3Rpb24gYXNzZXJ0UGF0dGVybnNJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IFtdLmNvbmNhdChpbnB1dCk7XG4gICAgY29uc3QgaXNWYWxpZFNvdXJjZSA9IHNvdXJjZS5ldmVyeSgoaXRlbSkgPT4gdXRpbHMuc3RyaW5nLmlzU3RyaW5nKGl0ZW0pICYmICF1dGlscy5zdHJpbmcuaXNFbXB0eShpdGVtKSk7XG4gICAgaWYgKCFpc1ZhbGlkU291cmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhdHRlcm5zIG11c3QgYmUgYSBzdHJpbmcgKG5vbiBlbXB0eSkgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gRmFzdEdsb2I7XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlYWNoQXN5bmMoYXJyLCBwYXJhbGxlbExpbWl0LCBpdGVyYXRvckZuLCBjYikge1xuICB2YXIgcGVuZGluZyA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0SW5kZXggPSBhcnIubGVuZ3RoIC0gMTtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICB2YXIgbGltaXQ7XG4gIHZhciBjYWxsYmFjaztcbiAgdmFyIGl0ZXJhdGU7XG5cbiAgaWYgKHR5cGVvZiBwYXJhbGxlbExpbWl0ID09PSAnbnVtYmVyJykge1xuICAgIGxpbWl0ID0gcGFyYWxsZWxMaW1pdDtcbiAgICBpdGVyYXRlID0gaXRlcmF0b3JGbjtcbiAgICBjYWxsYmFjayA9IGNiIHx8IGZ1bmN0aW9uIG5vb3AoKSB7fTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlID0gcGFyYWxsZWxMaW1pdDtcbiAgICBjYWxsYmFjayA9IGl0ZXJhdG9yRm4gfHwgZnVuY3Rpb24gbm9vcCgpIHt9O1xuICAgIGxpbWl0ID0gYXJyLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghYXJyLmxlbmd0aCkgeyByZXR1cm4gY2FsbGJhY2soKTsgfVxuXG4gIHZhciBpdGVyYXRvckxlbmd0aCA9IGl0ZXJhdGUubGVuZ3RoO1xuXG4gIHZhciBzaG91bGRDYWxsTmV4dEl0ZXJhdG9yID0gZnVuY3Rpb24gc2hvdWxkQ2FsbE5leHRJdGVyYXRvcigpIHtcbiAgICByZXR1cm4gKCFjYWxsZWQgJiYgKHBlbmRpbmcgPCBsaW1pdCkgJiYgKGluZGV4IDwgbGFzdEluZGV4KSk7XG4gIH07XG5cbiAgdmFyIGl0ZXJhdG9yQ2FsbGJhY2sgPSBmdW5jdGlvbiBpdGVyYXRvckNhbGxiYWNrKGVycikge1xuICAgIGlmIChjYWxsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICBwZW5kaW5nLS07XG5cbiAgICBpZiAoZXJyIHx8IChpbmRleCA9PT0gbGFzdEluZGV4ICYmICFwZW5kaW5nKSkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZENhbGxOZXh0SXRlcmF0b3IoKSkge1xuICAgICAgcHJvY2Vzc0l0ZXJhdG9yKCsraW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcHJvY2Vzc0l0ZXJhdG9yID0gZnVuY3Rpb24gcHJvY2Vzc0l0ZXJhdG9yKCkge1xuICAgIHBlbmRpbmcrKztcblxuICAgIHZhciBhcmdzID0gKGl0ZXJhdG9yTGVuZ3RoID09PSAyKSA/IFthcnJbaW5kZXhdLCBpdGVyYXRvckNhbGxiYWNrXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFthcnJbaW5kZXhdLCBpbmRleCwgaXRlcmF0b3JDYWxsYmFja107XG5cbiAgICBpdGVyYXRlLmFwcGx5KG51bGwsIGFyZ3MpO1xuXG4gICAgaWYgKHNob3VsZENhbGxOZXh0SXRlcmF0b3IoKSkge1xuICAgICAgcHJvY2Vzc0l0ZXJhdG9yKCsraW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzSXRlcmF0b3IoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZWFjaEFzeW5jID0gcmVxdWlyZSgndGlueS1lYWNoLWFzeW5jJyk7XG5cbmZ1bmN0aW9uIHJlYWRTaXplUmVjdXJzaXZlKHNlZW4sIGl0ZW0sIGlnbm9yZVJlZ0V4LCBjYWxsYmFjaykge1xuICBsZXQgY2I7XG4gIGxldCBpZ25vcmVSZWdFeHA7XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIGNiID0gaWdub3JlUmVnRXg7XG4gICAgaWdub3JlUmVnRXhwID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBjYiA9IGNhbGxiYWNrO1xuICAgIGlnbm9yZVJlZ0V4cCA9IGlnbm9yZVJlZ0V4O1xuICB9XG5cbiAgZnMubHN0YXQoaXRlbSwgZnVuY3Rpb24gbHN0YXQoZSwgc3RhdHMpIHtcbiAgICBsZXQgdG90YWwgPSAhZSA/IChzdGF0cy5zaXplIHx8IDApIDogMDtcblxuICAgIGlmIChzdGF0cykge1xuICAgICAgaWYgKHNlZW4uaGFzKHN0YXRzLmlubykpIHsgcmV0dXJuIGNiKG51bGwsIDApOyB9XG5cbiAgICAgIHNlZW4uYWRkKHN0YXRzLmlubyk7XG4gICAgfVxuXG4gICAgaWYgKCFlICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZzLnJlYWRkaXIoaXRlbSwgKGVyciwgbGlzdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7IHJldHVybiBjYihlcnIpOyB9XG5cbiAgICAgICAgZWFjaEFzeW5jKFxuICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgNTAwMCxcbiAgICAgICAgICAoZGlySXRlbSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgcmVhZFNpemVSZWN1cnNpdmUoXG4gICAgICAgICAgICAgIHNlZW4sXG4gICAgICAgICAgICAgIHBhdGguam9pbihpdGVtLCBkaXJJdGVtKSxcbiAgICAgICAgICAgICAgaWdub3JlUmVnRXhwLFxuICAgICAgICAgICAgICAoZXJyb3IsIHNpemUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7IHRvdGFsICs9IHNpemU7IH1cblxuICAgICAgICAgICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGZpbmFsRXJyKSA9PiB7XG4gICAgICAgICAgICBjYihmaW5hbEVyciwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWdub3JlUmVnRXhwICYmIGlnbm9yZVJlZ0V4cC50ZXN0KGl0ZW0pKSB7XG4gICAgICAgIHRvdGFsID0gMDtcbiAgICAgIH1cblxuICAgICAgY2IoZSwgdG90YWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKC4uLmFyZ3MpID0+IHtcbiAgYXJncy51bnNoaWZ0KG5ldyBTZXQoKSk7XG5cbiAgcmV0dXJuIHJlYWRTaXplUmVjdXJzaXZlKC4uLmFyZ3MpO1xufTtcbiIsICJjb25zdCB7IGhhc093blByb3BlcnR5IH0gPSBPYmplY3QucHJvdG90eXBlXG5cbmNvbnN0IGVuY29kZSA9IChvYmosIG9wdCA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgIG9wdCA9IHsgc2VjdGlvbjogb3B0IH1cbiAgfVxuICBvcHQuYWxpZ24gPSBvcHQuYWxpZ24gPT09IHRydWVcbiAgb3B0Lm5ld2xpbmUgPSBvcHQubmV3bGluZSA9PT0gdHJ1ZVxuICBvcHQuc29ydCA9IG9wdC5zb3J0ID09PSB0cnVlXG4gIG9wdC53aGl0ZXNwYWNlID0gb3B0LndoaXRlc3BhY2UgPT09IHRydWUgfHwgb3B0LmFsaWduID09PSB0cnVlXG4gIC8vIFRoZSBgdHlwZW9mYCBjaGVjayBpcyByZXF1aXJlZCBiZWNhdXNlIGFjY2Vzc2luZyB0aGUgYHByb2Nlc3NgIGRpcmVjdGx5IGZhaWxzIG9uIGJyb3dzZXJzLlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBvcHQucGxhdGZvcm0gPSBvcHQucGxhdGZvcm0gfHwgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnBsYXRmb3JtKVxuICBvcHQuYnJhY2tldGVkQXJyYXkgPSBvcHQuYnJhY2tldGVkQXJyYXkgIT09IGZhbHNlXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3QgZW9sID0gb3B0LnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcclxcbicgOiAnXFxuJ1xuICBjb25zdCBzZXBhcmF0b3IgPSBvcHQud2hpdGVzcGFjZSA/ICcgPSAnIDogJz0nXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cblxuICBjb25zdCBrZXlzID0gb3B0LnNvcnQgPyBPYmplY3Qua2V5cyhvYmopLnNvcnQoKSA6IE9iamVjdC5rZXlzKG9iailcblxuICBsZXQgcGFkVG9DaGFycyA9IDBcbiAgLy8gSWYgYWxpZ25pbmcgb24gdGhlIHNlcGFyYXRvciwgdGhlbiBwYWRUb0NoYXJzIGlzIGRldGVybWluZWQgYXMgZm9sbG93czpcbiAgLy8gMS4gR2V0IHRoZSBrZXlzXG4gIC8vIDIuIEV4Y2x1ZGUga2V5cyBwb2ludGluZyB0byBvYmplY3RzIHVubGVzcyB0aGUgdmFsdWUgaXMgbnVsbCBvciBhbiBhcnJheVxuICAvLyAzLiBBZGQgYFtdYCB0byBhcnJheSBrZXlzXG4gIC8vIDQuIEVuc3VyZSBub24gZW1wdHkgc2V0IG9mIGtleXNcbiAgLy8gNS4gUmVkdWNlIHRoZSBzZXQgdG8gdGhlIGxvbmdlc3QgYHNhZmVgIGtleVxuICAvLyA2LiBHZXQgdGhlIGBzYWZlYCBsZW5ndGhcbiAgaWYgKG9wdC5hbGlnbikge1xuICAgIHBhZFRvQ2hhcnMgPSBzYWZlKFxuICAgICAgKFxuICAgICAgICBrZXlzXG4gICAgICAgICAgLmZpbHRlcihrID0+IG9ialtrXSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KG9ialtrXSkgfHwgdHlwZW9mIG9ialtrXSAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgLm1hcChrID0+IEFycmF5LmlzQXJyYXkob2JqW2tdKSA/IGAke2t9W11gIDogaylcbiAgICAgIClcbiAgICAgICAgLmNvbmNhdChbJyddKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBzYWZlKGEpLmxlbmd0aCA+PSBzYWZlKGIpLmxlbmd0aCA/IGEgOiBiKVxuICAgICkubGVuZ3RoXG4gIH1cblxuICBsZXQgb3V0ID0gJydcbiAgY29uc3QgYXJyYXlTdWZmaXggPSBvcHQuYnJhY2tldGVkQXJyYXkgPyAnW10nIDogJydcblxuICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbCA9IG9ialtrXVxuICAgIGlmICh2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsKSB7XG4gICAgICAgIG91dCArPSBzYWZlKGAke2t9JHthcnJheVN1ZmZpeH1gKS5wYWRFbmQocGFkVG9DaGFycywgJyAnKSArIHNlcGFyYXRvciArIHNhZmUoaXRlbSkgKyBlb2xcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgY2hpbGRyZW4ucHVzaChrKVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gc2FmZShrKS5wYWRFbmQocGFkVG9DaGFycywgJyAnKSArIHNlcGFyYXRvciArIHNhZmUodmFsKSArIGVvbFxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHQuc2VjdGlvbiAmJiBvdXQubGVuZ3RoKSB7XG4gICAgb3V0ID0gJ1snICsgc2FmZShvcHQuc2VjdGlvbikgKyAnXScgKyAob3B0Lm5ld2xpbmUgPyBlb2wgKyBlb2wgOiBlb2wpICsgb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IGsgb2YgY2hpbGRyZW4pIHtcbiAgICBjb25zdCBuayA9IHNwbGl0U2VjdGlvbnMoaywgJy4nKS5qb2luKCdcXFxcLicpXG4gICAgY29uc3Qgc2VjdGlvbiA9IChvcHQuc2VjdGlvbiA/IG9wdC5zZWN0aW9uICsgJy4nIDogJycpICsgbmtcbiAgICBjb25zdCBjaGlsZCA9IGVuY29kZShvYmpba10sIHtcbiAgICAgIC4uLm9wdCxcbiAgICAgIHNlY3Rpb24sXG4gICAgfSlcbiAgICBpZiAob3V0Lmxlbmd0aCAmJiBjaGlsZC5sZW5ndGgpIHtcbiAgICAgIG91dCArPSBlb2xcbiAgICB9XG5cbiAgICBvdXQgKz0gY2hpbGRcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gc3BsaXRTZWN0aW9ucyAoc3RyLCBzZXBhcmF0b3IpIHtcbiAgdmFyIGxhc3RNYXRjaEluZGV4ID0gMFxuICB2YXIgbGFzdFNlcGFyYXRvckluZGV4ID0gMFxuICB2YXIgbmV4dEluZGV4ID0gMFxuICB2YXIgc2VjdGlvbnMgPSBbXVxuXG4gIGRvIHtcbiAgICBuZXh0SW5kZXggPSBzdHIuaW5kZXhPZihzZXBhcmF0b3IsIGxhc3RNYXRjaEluZGV4KVxuXG4gICAgaWYgKG5leHRJbmRleCAhPT0gLTEpIHtcbiAgICAgIGxhc3RNYXRjaEluZGV4ID0gbmV4dEluZGV4ICsgc2VwYXJhdG9yLmxlbmd0aFxuXG4gICAgICBpZiAobmV4dEluZGV4ID4gMCAmJiBzdHJbbmV4dEluZGV4IC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzZWN0aW9ucy5wdXNoKHN0ci5zbGljZShsYXN0U2VwYXJhdG9ySW5kZXgsIG5leHRJbmRleCkpXG4gICAgICBsYXN0U2VwYXJhdG9ySW5kZXggPSBuZXh0SW5kZXggKyBzZXBhcmF0b3IubGVuZ3RoXG4gICAgfVxuICB9IHdoaWxlIChuZXh0SW5kZXggIT09IC0xKVxuXG4gIHNlY3Rpb25zLnB1c2goc3RyLnNsaWNlKGxhc3RTZXBhcmF0b3JJbmRleCkpXG5cbiAgcmV0dXJuIHNlY3Rpb25zXG59XG5cbmNvbnN0IGRlY29kZSA9IChzdHIsIG9wdCA9IHt9KSA9PiB7XG4gIG9wdC5icmFja2V0ZWRBcnJheSA9IG9wdC5icmFja2V0ZWRBcnJheSAhPT0gZmFsc2VcbiAgY29uc3Qgb3V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICBsZXQgcCA9IG91dFxuICBsZXQgc2VjdGlvbiA9IG51bGxcbiAgLy8gICAgICAgICAgc2VjdGlvbiAgICAgICAgICB8a2V5ICAgICAgPSB2YWx1ZVxuICBjb25zdCByZSA9IC9eXFxbKFteXFxdXSopXFxdXFxzKiR8XihbXj1dKykoPSguKikpPyQvaVxuICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvW1xcclxcbl0rL2cpXG4gIGNvbnN0IGR1cGxpY2F0ZXMgPSB7fVxuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmICghbGluZSB8fCBsaW5lLm1hdGNoKC9eXFxzKls7I10vKSB8fCBsaW5lLm1hdGNoKC9eXFxzKiQvKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKHJlKVxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChtYXRjaFsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWN0aW9uID0gdW5zYWZlKG1hdGNoWzFdKVxuICAgICAgaWYgKHNlY3Rpb24gPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIC8vIG5vdCBhbGxvd2VkXG4gICAgICAgIC8vIGtlZXAgcGFyc2luZyB0aGUgc2VjdGlvbiwgYnV0IGRvbid0IGF0dGFjaCBpdC5cbiAgICAgICAgcCA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHAgPSBvdXRbc2VjdGlvbl0gPSBvdXRbc2VjdGlvbl0gfHwgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3Qga2V5UmF3ID0gdW5zYWZlKG1hdGNoWzJdKVxuICAgIGxldCBpc0FycmF5XG4gICAgaWYgKG9wdC5icmFja2V0ZWRBcnJheSkge1xuICAgICAgaXNBcnJheSA9IGtleVJhdy5sZW5ndGggPiAyICYmIGtleVJhdy5zbGljZSgtMikgPT09ICdbXSdcbiAgICB9IGVsc2Uge1xuICAgICAgZHVwbGljYXRlc1trZXlSYXddID0gKGR1cGxpY2F0ZXM/LltrZXlSYXddIHx8IDApICsgMVxuICAgICAgaXNBcnJheSA9IGR1cGxpY2F0ZXNba2V5UmF3XSA+IDFcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gaXNBcnJheSAmJiBrZXlSYXcuZW5kc1dpdGgoJ1tdJylcbiAgICAgID8ga2V5UmF3LnNsaWNlKDAsIC0yKSA6IGtleVJhd1xuXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlUmF3ID0gbWF0Y2hbM10gPyB1bnNhZmUobWF0Y2hbNF0pIDogdHJ1ZVxuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVSYXcgPT09ICd0cnVlJyB8fFxuICAgICAgdmFsdWVSYXcgPT09ICdmYWxzZScgfHxcbiAgICAgIHZhbHVlUmF3ID09PSAnbnVsbCcgPyBKU09OLnBhcnNlKHZhbHVlUmF3KVxuICAgICAgOiB2YWx1ZVJhd1xuXG4gICAgLy8gQ29udmVydCBrZXlzIHdpdGggJ1tdJyBzdWZmaXggdG8gYW4gYXJyYXlcbiAgICBpZiAoaXNBcnJheSkge1xuICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHAsIGtleSkpIHtcbiAgICAgICAgcFtrZXldID0gW11cbiAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocFtrZXldKSkge1xuICAgICAgICBwW2tleV0gPSBbcFtrZXldXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IHJlc2V0dGluZyBhIHByZXZpb3VzbHkgZGVmaW5lZFxuICAgIC8vIGFycmF5IGJ5IGFjY2lkZW50YWxseSBmb3JnZXR0aW5nIHRoZSBicmFja2V0c1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBba2V5XSkpIHtcbiAgICAgIHBba2V5XS5wdXNoKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwW2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIHthOnt5OjF9LFwiYS5iXCI6e3g6Mn19IC0tPiB7YTp7eToxLGI6e3g6Mn19fVxuICAvLyB1c2UgYSBmaWx0ZXIgdG8gcmV0dXJuIHRoZSBrZXlzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLlxuICBjb25zdCByZW1vdmUgPSBbXVxuICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMob3V0KSkge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvdXQsIGspIHx8XG4gICAgICB0eXBlb2Ygb3V0W2tdICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShvdXRba10pKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIHNlZSBpZiB0aGUgcGFyZW50IHNlY3Rpb24gaXMgYWxzbyBhbiBvYmplY3QuXG4gICAgLy8gaWYgc28sIGFkZCBpdCB0byB0aGF0LCBhbmQgbWFyayB0aGlzIG9uZSBmb3IgZGVsZXRpb25cbiAgICBjb25zdCBwYXJ0cyA9IHNwbGl0U2VjdGlvbnMoaywgJy4nKVxuICAgIHAgPSBvdXRcbiAgICBjb25zdCBsID0gcGFydHMucG9wKClcbiAgICBjb25zdCBubCA9IGwucmVwbGFjZSgvXFxcXFxcLi9nLCAnLicpXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAocGFydCA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChwLCBwYXJ0KSB8fCB0eXBlb2YgcFtwYXJ0XSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcFtwYXJ0XSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgIH1cbiAgICAgIHAgPSBwW3BhcnRdXG4gICAgfVxuICAgIGlmIChwID09PSBvdXQgJiYgbmwgPT09IGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcFtubF0gPSBvdXRba11cbiAgICByZW1vdmUucHVzaChrKVxuICB9XG4gIGZvciAoY29uc3QgZGVsIG9mIHJlbW92ZSkge1xuICAgIGRlbGV0ZSBvdXRbZGVsXVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG5jb25zdCBpc1F1b3RlZCA9IHZhbCA9PiB7XG4gIHJldHVybiAodmFsLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSlcbn1cblxuY29uc3Qgc2FmZSA9IHZhbCA9PiB7XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsICE9PSAnc3RyaW5nJyB8fFxuICAgIHZhbC5tYXRjaCgvWz1cXHJcXG5dLykgfHxcbiAgICB2YWwubWF0Y2goL15cXFsvKSB8fFxuICAgICh2YWwubGVuZ3RoID4gMSAmJiBpc1F1b3RlZCh2YWwpKSB8fFxuICAgIHZhbCAhPT0gdmFsLnRyaW0oKVxuICApIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsKVxuICB9XG4gIHJldHVybiB2YWwuc3BsaXQoJzsnKS5qb2luKCdcXFxcOycpLnNwbGl0KCcjJykuam9pbignXFxcXCMnKVxufVxuXG5jb25zdCB1bnNhZmUgPSB2YWwgPT4ge1xuICB2YWwgPSAodmFsIHx8ICcnKS50cmltKClcbiAgaWYgKGlzUXVvdGVkKHZhbCkpIHtcbiAgICAvLyByZW1vdmUgdGhlIHNpbmdsZSBxdW90ZXMgYmVmb3JlIGNhbGxpbmcgSlNPTi5wYXJzZVxuICAgIGlmICh2YWwuY2hhckF0KDApID09PSBcIidcIikge1xuICAgICAgdmFsID0gdmFsLnNsaWNlKDEsIC0xKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWwpXG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgZXJyb3JzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHdhbGsgdGhlIHZhbCB0byBmaW5kIHRoZSBmaXJzdCBub3QtZXNjYXBlZCA7IGNoYXJhY3RlclxuICAgIGxldCBlc2MgPSBmYWxzZVxuICAgIGxldCB1bmVzYyA9ICcnXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdmFsLmNoYXJBdChpKVxuICAgICAgaWYgKGVzYykge1xuICAgICAgICBpZiAoJ1xcXFw7IycuaW5kZXhPZihjKSAhPT0gLTEpIHtcbiAgICAgICAgICB1bmVzYyArPSBjXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5lc2MgKz0gJ1xcXFwnICsgY1xuICAgICAgICB9XG5cbiAgICAgICAgZXNjID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoJzsjJy5pbmRleE9mKGMpICE9PSAtMSkge1xuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgZXNjID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5lc2MgKz0gY1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXNjKSB7XG4gICAgICB1bmVzYyArPSAnXFxcXCdcbiAgICB9XG5cbiAgICByZXR1cm4gdW5lc2MudHJpbSgpXG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2U6IGRlY29kZSxcbiAgZGVjb2RlLFxuICBzdHJpbmdpZnk6IGVuY29kZSxcbiAgZW5jb2RlLFxuICBzYWZlLFxuICB1bnNhZmUsXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwcmVzZXJ2ZUNhbWVsQ2FzZSA9IHN0cmluZyA9PiB7XG5cdGxldCBpc0xhc3RDaGFyTG93ZXIgPSBmYWxzZTtcblx0bGV0IGlzTGFzdENoYXJVcHBlciA9IGZhbHNlO1xuXHRsZXQgaXNMYXN0TGFzdENoYXJVcHBlciA9IGZhbHNlO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyID0gc3RyaW5nW2ldO1xuXG5cdFx0aWYgKGlzTGFzdENoYXJMb3dlciAmJiAvW2EtekEtWl0vLnRlc3QoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKSA9PT0gY2hhcmFjdGVyKSB7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgaSkgKyAnLScgKyBzdHJpbmcuc2xpY2UoaSk7XG5cdFx0XHRpc0xhc3RDaGFyTG93ZXIgPSBmYWxzZTtcblx0XHRcdGlzTGFzdExhc3RDaGFyVXBwZXIgPSBpc0xhc3RDaGFyVXBwZXI7XG5cdFx0XHRpc0xhc3RDaGFyVXBwZXIgPSB0cnVlO1xuXHRcdFx0aSsrO1xuXHRcdH0gZWxzZSBpZiAoaXNMYXN0Q2hhclVwcGVyICYmIGlzTGFzdExhc3RDaGFyVXBwZXIgJiYgL1thLXpBLVpdLy50ZXN0KGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCkgPT09IGNoYXJhY3Rlcikge1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnNsaWNlKDAsIGkgLSAxKSArICctJyArIHN0cmluZy5zbGljZShpIC0gMSk7XG5cdFx0XHRpc0xhc3RMYXN0Q2hhclVwcGVyID0gaXNMYXN0Q2hhclVwcGVyO1xuXHRcdFx0aXNMYXN0Q2hhclVwcGVyID0gZmFsc2U7XG5cdFx0XHRpc0xhc3RDaGFyTG93ZXIgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpc0xhc3RDaGFyTG93ZXIgPSBjaGFyYWN0ZXIudG9Mb3dlckNhc2UoKSA9PT0gY2hhcmFjdGVyICYmIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpICE9PSBjaGFyYWN0ZXI7XG5cdFx0XHRpc0xhc3RMYXN0Q2hhclVwcGVyID0gaXNMYXN0Q2hhclVwcGVyO1xuXHRcdFx0aXNMYXN0Q2hhclVwcGVyID0gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCkgPT09IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIudG9Mb3dlckNhc2UoKSAhPT0gY2hhcmFjdGVyO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHJpbmc7XG59O1xuXG5jb25zdCBjYW1lbENhc2UgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcblx0aWYgKCEodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGlucHV0KSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgaW5wdXQgdG8gYmUgYHN0cmluZyB8IHN0cmluZ1tdYCcpO1xuXHR9XG5cblx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdHBhc2NhbENhc2U6IGZhbHNlXG5cdH0sIG9wdGlvbnMpO1xuXG5cdGNvbnN0IHBvc3RQcm9jZXNzID0geCA9PiBvcHRpb25zLnBhc2NhbENhc2UgPyB4LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgeC5zbGljZSgxKSA6IHg7XG5cblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cdFx0aW5wdXQgPSBpbnB1dC5tYXAoeCA9PiB4LnRyaW0oKSlcblx0XHRcdC5maWx0ZXIoeCA9PiB4Lmxlbmd0aClcblx0XHRcdC5qb2luKCctJyk7XG5cdH0gZWxzZSB7XG5cdFx0aW5wdXQgPSBpbnB1dC50cmltKCk7XG5cdH1cblxuXHRpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGlucHV0Lmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBvcHRpb25zLnBhc2NhbENhc2UgPyBpbnB1dC50b1VwcGVyQ2FzZSgpIDogaW5wdXQudG9Mb3dlckNhc2UoKTtcblx0fVxuXG5cdGNvbnN0IGhhc1VwcGVyQ2FzZSA9IGlucHV0ICE9PSBpbnB1dC50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmIChoYXNVcHBlckNhc2UpIHtcblx0XHRpbnB1dCA9IHByZXNlcnZlQ2FtZWxDYXNlKGlucHV0KTtcblx0fVxuXG5cdGlucHV0ID0gaW5wdXRcblx0XHQucmVwbGFjZSgvXltfLlxcLSBdKy8sICcnKVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL1tfLlxcLSBdKyhcXHd8JCkvZywgKF8sIHAxKSA9PiBwMS50b1VwcGVyQ2FzZSgpKVxuXHRcdC5yZXBsYWNlKC9cXGQrKFxcd3wkKS9nLCBtID0+IG0udG9VcHBlckNhc2UoKSk7XG5cblx0cmV0dXJuIHBvc3RQcm9jZXNzKGlucHV0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWxDYXNlO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBjYW1lbENhc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBzZXApIHtcblx0aWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcblx0fVxuXG5cdHNlcCA9IHR5cGVvZiBzZXAgPT09ICd1bmRlZmluZWQnID8gJ18nIDogc2VwO1xuXG5cdHJldHVybiBzdHJcblx0XHQucmVwbGFjZSgvKFthLXpcXGRdKShbQS1aXSkvZywgJyQxJyArIHNlcCArICckMicpXG5cdFx0LnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2EtelxcZF0rKS9nLCAnJDEnICsgc2VwICsgJyQyJylcblx0XHQudG9Mb3dlckNhc2UoKTtcbn07XG4iLCAiLy8gdGFrZSBhbiB1bi1zcGxpdCBhcmd2IHN0cmluZyBhbmQgdG9rZW5pemUgaXQuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmdTdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnU3RyaW5nKSkge1xuICAgIHJldHVybiBhcmdTdHJpbmcubWFwKGUgPT4gdHlwZW9mIGUgIT09ICdzdHJpbmcnID8gZSArICcnIDogZSlcbiAgfVxuXG4gIGFyZ1N0cmluZyA9IGFyZ1N0cmluZy50cmltKClcblxuICBsZXQgaSA9IDBcbiAgbGV0IHByZXZDID0gbnVsbFxuICBsZXQgYyA9IG51bGxcbiAgbGV0IG9wZW5pbmcgPSBudWxsXG4gIGNvbnN0IGFyZ3MgPSBbXVxuXG4gIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgcHJldkMgPSBjXG4gICAgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaWkpXG5cbiAgICAvLyBzcGxpdCBvbiBzcGFjZXMgdW5sZXNzIHdlJ3JlIGluIHF1b3Rlcy5cbiAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICBpKytcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gZG9uJ3Qgc3BsaXQgdGhlIHN0cmluZyBpZiB3ZSdyZSBpbiBtYXRjaGluZ1xuICAgIC8vIG9wZW5pbmcgb3IgY2xvc2luZyBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMuXG4gICAgaWYgKGMgPT09IG9wZW5pbmcpIHtcbiAgICAgIG9wZW5pbmcgPSBudWxsXG4gICAgfSBlbHNlIGlmICgoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgJiYgIW9wZW5pbmcpIHtcbiAgICAgIG9wZW5pbmcgPSBjXG4gICAgfVxuXG4gICAgaWYgKCFhcmdzW2ldKSBhcmdzW2ldID0gJydcbiAgICBhcmdzW2ldICs9IGNcbiAgfVxuXG4gIHJldHVybiBhcmdzXG59XG4iLCAiY29uc3QgY2FtZWxDYXNlID0gcmVxdWlyZSgnY2FtZWxjYXNlJylcbmNvbnN0IGRlY2FtZWxpemUgPSByZXF1aXJlKCdkZWNhbWVsaXplJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHRva2VuaXplQXJnU3RyaW5nID0gcmVxdWlyZSgnLi9saWIvdG9rZW5pemUtYXJnLXN0cmluZycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbmZ1bmN0aW9uIHBhcnNlIChhcmdzLCBvcHRzKSB7XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMpXG4gIC8vIGFsbG93IGEgc3RyaW5nIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCBpbiByYXRoZXJcbiAgLy8gdGhhbiBhbiBhcmd2IGFycmF5LlxuICBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJncylcblxuICAvLyBhbGlhc2VzIG1pZ2h0IGhhdmUgdHJhbnNpdGl2ZSByZWxhdGlvbnNoaXBzLCBub3JtYWxpemUgdGhpcy5cbiAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJzogdHJ1ZSxcbiAgICAnY29tYmluZS1hcnJheXMnOiBmYWxzZSxcbiAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAnZHVwbGljYXRlLWFyZ3VtZW50cy1hcnJheSc6IHRydWUsXG4gICAgJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyc6IHRydWUsXG4gICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICdoYWx0LWF0LW5vbi1vcHRpb24nOiBmYWxzZSxcbiAgICAnbmFyZ3MtZWF0cy1vcHRpb25zJzogZmFsc2UsXG4gICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICdwYXJzZS1udW1iZXJzJzogdHJ1ZSxcbiAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICdzZXQtcGxhY2Vob2xkZXIta2V5JzogZmFsc2UsXG4gICAgJ3Nob3J0LW9wdGlvbi1ncm91cHMnOiB0cnVlLFxuICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgJ3N0cmlwLWRhc2hlZCc6IGZhbHNlLFxuICAgICd1bmtub3duLW9wdGlvbnMtYXMtYXJncyc6IGZhbHNlXG4gIH0sIG9wdHMuY29uZmlndXJhdGlvbilcbiAgY29uc3QgZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMuZGVmYXVsdClcbiAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXVxuICBjb25zdCBlbnZQcmVmaXggPSBvcHRzLmVudlByZWZpeFxuICBjb25zdCBub3RGbGFnc09wdGlvbiA9IGNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXVxuICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXydcbiAgY29uc3QgbmV3QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgY29uc3QgZGVmYXVsdGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICAvLyBhbGxvdyBhIGkxOG4gaGFuZGxlciB0byBiZSBwYXNzZWQgaW4sIGRlZmF1bHQgdG8gYSBmYWtlIG9uZSAodXRpbC5mb3JtYXQpLlxuICBjb25zdCBfXyA9IG9wdHMuX18gfHwgdXRpbC5mb3JtYXRcbiAgY29uc3QgZmxhZ3MgPSB7XG4gICAgYWxpYXNlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgYm9vbHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgc3RyaW5nczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgIGNvdW50czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBub3JtYWxpemU6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBuYXJnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBjb2VyY2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAga2V5czogW11cbiAgfVxuICBjb25zdCBuZWdhdGl2ZSA9IC9eLShbMC05XSsoXFwuWzAtOV0rKT98XFwuWzAtOV0rKSQvXG4gIGNvbnN0IG5lZ2F0ZWRCb29sZWFuID0gbmV3IFJlZ0V4cCgnXi0tJyArIGNvbmZpZ3VyYXRpb25bJ25lZ2F0aW9uLXByZWZpeCddICsgJyguKyknKVxuXG4gIDtbXS5jb25jYXQob3B0cy5hcnJheSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgIGNvbnN0IGtleSA9IG9wdC5rZXkgfHwgb3B0XG5cbiAgICAvLyBhc3NpZ24gdG8gZmxhZ3NbYm9vbHN8c3RyaW5nc3xudW1iZXJzXVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBPYmplY3Qua2V5cyhvcHQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gKHtcbiAgICAgICAgYm9vbGVhbjogJ2Jvb2xzJyxcbiAgICAgICAgc3RyaW5nOiAnc3RyaW5ncycsXG4gICAgICAgIG51bWJlcjogJ251bWJlcnMnXG4gICAgICB9KVtrZXldXG4gICAgfSkuZmlsdGVyKEJvb2xlYW4pLnBvcCgpXG5cbiAgICAvLyBhc3NpZ24ga2V5IHRvIGJlIGNvZXJjZWRcbiAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgZmxhZ3NbYXNzaWdubWVudF1ba2V5XSA9IHRydWVcbiAgICB9XG5cbiAgICBmbGFncy5hcnJheXNba2V5XSA9IHRydWVcbiAgICBmbGFncy5rZXlzLnB1c2goa2V5KVxuICB9KVxuXG4gIDtbXS5jb25jYXQob3B0cy5ib29sZWFuKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZmxhZ3MuYm9vbHNba2V5XSA9IHRydWVcbiAgICBmbGFncy5rZXlzLnB1c2goa2V5KVxuICB9KVxuXG4gIDtbXS5jb25jYXQob3B0cy5zdHJpbmcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlXG4gICAgZmxhZ3Mua2V5cy5wdXNoKGtleSlcbiAgfSlcblxuICA7W10uY29uY2F0KG9wdHMubnVtYmVyKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZmxhZ3MubnVtYmVyc1trZXldID0gdHJ1ZVxuICAgIGZsYWdzLmtleXMucHVzaChrZXkpXG4gIH0pXG5cbiAgO1tdLmNvbmNhdChvcHRzLmNvdW50KS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZmxhZ3MuY291bnRzW2tleV0gPSB0cnVlXG4gICAgZmxhZ3Mua2V5cy5wdXNoKGtleSlcbiAgfSlcblxuICA7W10uY29uY2F0KG9wdHMubm9ybWFsaXplKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlXG4gICAgZmxhZ3Mua2V5cy5wdXNoKGtleSlcbiAgfSlcblxuICBPYmplY3Qua2V5cyhvcHRzLm5hcmcgfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBmbGFncy5uYXJnc1trXSA9IG9wdHMubmFyZ1trXVxuICAgIGZsYWdzLmtleXMucHVzaChrKVxuICB9KVxuXG4gIE9iamVjdC5rZXlzKG9wdHMuY29lcmNlIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgZmxhZ3MuY29lcmNpb25zW2tdID0gb3B0cy5jb2VyY2Vba11cbiAgICBmbGFncy5rZXlzLnB1c2goaylcbiAgfSlcblxuICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmNvbmZpZykgfHwgdHlwZW9mIG9wdHMuY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIDtbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWVcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIE9iamVjdC5rZXlzKG9wdHMuY29uZmlnIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBmbGFncy5jb25maWdzW2tdID0gb3B0cy5jb25maWdba11cbiAgICB9KVxuICB9XG5cbiAgLy8gY3JlYXRlIGEgbG9va3VwIHRhYmxlIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IGFsbFxuICAvLyBjb21iaW5hdGlvbnMgb2YgYWxpYXNlczoge2Y6IFsnZm9vJ10sIGZvbzogWydmJ119XG4gIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKVxuXG4gIC8vIGFwcGx5IGRlZmF1bHQgdmFsdWVzIHRvIGFsbCBhbGlhc2VzLlxuICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgIGRlZmF1bHRzW2FsaWFzXSA9IGRlZmF1bHRzW2tleV1cbiAgICB9KVxuICB9KVxuXG4gIGxldCBlcnJvciA9IG51bGxcbiAgY2hlY2tDb25maWd1cmF0aW9uKClcblxuICBsZXQgbm90RmxhZ3MgPSBbXVxuXG4gIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSlcbiAgLy8gVE9ETyhiY29lKTogZm9yIHRoZSBmaXJzdCBwYXNzIGF0IHJlbW92aW5nIG9iamVjdCBwcm90b3R5cGUgIHdlIGRpZG4ndFxuICAvLyByZW1vdmUgYWxsIHByb3RvdHlwZXMgZnJvbSBvYmplY3RzIHJldHVybmVkIGJ5IHRoaXMgQVBJLCB3ZSBtaWdodCB3YW50XG4gIC8vIHRvIGdyYWR1YWxseSBtb3ZlIHRvd2FyZHMgZG9pbmcgc28uXG4gIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV1cbiAgICBsZXQgYnJva2VuXG4gICAgbGV0IGtleVxuICAgIGxldCBsZXR0ZXJzXG4gICAgbGV0IG1cbiAgICBsZXQgbmV4dFxuICAgIGxldCB2YWx1ZVxuXG4gICAgLy8gYW55IHVua25vd24gb3B0aW9uIChleGNlcHQgZm9yIGVuZC1vZi1vcHRpb25zLCBcIi0tXCIpXG4gICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICBhcmd2Ll8ucHVzaChhcmcpXG4gICAgLy8gLS0gc2VwYXJhdGVkIGJ5ID1cbiAgICB9IGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLis9LykgfHwgKFxuICAgICAgIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LylcbiAgICApKSB7XG4gICAgICAvLyBVc2luZyBbXFxzXFxTXSBpbnN0ZWFkIG9mIC4gYmVjYXVzZSBqcyBkb2Vzbid0IHN1cHBvcnQgdGhlXG4gICAgICAvLyAnZG90YWxsJyByZWdleCBtb2RpZmllci4gU2VlOlxuICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTA2ODMwOC8xMzIxNlxuICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLylcblxuICAgICAgLy8gYXJyYXlzIGZvcm1hdCA9ICctLWY9YSBiIGMnXG4gICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pXG4gICAgICB9IGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctLWY9bW9ua2V5IHdhc2hpbmcgY2F0J1xuICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLm1hdGNoKG5lZ2F0ZWRCb29sZWFuKSAmJiBjb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10pIHtcbiAgICAgIGtleSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbilbMV1cbiAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpXG5cbiAgICAvLyAtLSBzZXBhcmF0ZWQgYnkgc3BhY2UuXG4gICAgfSBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKFxuICAgICAgIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tW14tXSsvKVxuICAgICkpIHtcbiAgICAgIGtleSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKVsxXVxuXG4gICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAvLyBhcnJheSBmb3JtYXQgPSAnLS1mb28gYSBiIGMnXG4gICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpXG4gICAgICB9IGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy0tZm9vIGEgYiBjJ1xuICAgICAgICAvLyBzaG91bGQgYmUgdHJ1dGh5IGV2ZW4gaWY6IGZsYWdzLm5hcmdzW2tleV0gPT09IDBcbiAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCFuZXh0Lm1hdGNoKC9eLS8pIHx8XG4gICAgICAgICAgbmV4dC5tYXRjaChuZWdhdGl2ZSkpICYmXG4gICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgc2V0QXJnKGtleSwgbmV4dClcbiAgICAgICAgICBpKytcbiAgICAgICAgfSBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KVxuICAgICAgICAgIGkrK1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAvLyBkb3Qtbm90YXRpb24gZmxhZyBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgIH0gZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKz0vKSkge1xuICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pXG4gICAgICBzZXRBcmcobVsxXSwgbVsyXSlcblxuICAgIC8vIGRvdC1ub3RhdGlvbiBmbGFnIHNlcGFyYXRlZCBieSBzcGFjZS5cbiAgICB9IGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLisvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdXG4gICAgICBrZXkgPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKVsxXVxuXG4gICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgc2V0QXJnKGtleSwgbmV4dClcbiAgICAgICAgaSsrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bXi1dKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJylcbiAgICAgIGJyb2tlbiA9IGZhbHNlXG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBuZXh0ID0gYXJnLnNsaWNlKGogKyAyKVxuXG4gICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpXG4gICAgICAgICAga2V5ID0gbGV0dGVyc1tqXVxuXG4gICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctZj1hIGIgYydcbiAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MsIHZhbHVlKVxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy1mPW1vbmtleSB3YXNoaW5nIGNhdCdcbiAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCB2YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicm9rZW4gPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3VycmVudCBsZXR0ZXIgaXMgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIgYW5kIG5leHQgdmFsdWUgaXMgYSBudW1iZXJcbiAgICAgICAgaWYgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJlxuICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpXG4gICAgICAgICAgYnJva2VuID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpXG4gICAgICAgICAgYnJva2VuID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIGRlZmF1bHRWYWx1ZShsZXR0ZXJzW2pdKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdXG5cbiAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgLy8gYXJyYXkgZm9ybWF0ID0gJy1mIGEgYiBjJ1xuICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpXG4gICAgICAgIH0gZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctZiBhIGIgYydcbiAgICAgICAgICAvLyBzaG91bGQgYmUgdHJ1dGh5IGV2ZW4gaWY6IGZsYWdzLm5hcmdzW2tleV0gPT09IDBcbiAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXVxuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIS9eKC18LS0pW14tXS8udGVzdChuZXh0KSB8fFxuICAgICAgICAgICAgbmV4dC5tYXRjaChuZWdhdGl2ZSkpICYmXG4gICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dClcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KVxuICAgICAgICAgICAgaSsrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVswLTldJC8pICYmXG4gICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICBjaGVja0FsbEFsaWFzZXMoYXJnLnNsaWNlKDEpLCBmbGFncy5ib29scykpIHtcbiAgICAgIC8vIHNpbmdsZS1kaWdpdCBib29sZWFuIGFsaWFzLCBlLmc6IHhhcmdzIC0wXG4gICAgICBrZXkgPSBhcmcuc2xpY2UoMSlcbiAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKVxuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICBub3RGbGFncyA9IGFyZ3Muc2xpY2UoaSArIDEpXG4gICAgICBicmVha1xuICAgIH0gZWxzZSBpZiAoY29uZmlndXJhdGlvblsnaGFsdC1hdC1ub24tb3B0aW9uJ10pIHtcbiAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJndi5fLnB1c2gobWF5YmVDb2VyY2VOdW1iZXIoJ18nLCBhcmcpKVxuICAgIH1cbiAgfVxuXG4gIC8vIG9yZGVyIG9mIHByZWNlZGVuY2U6XG4gIC8vIDEuIGNvbW1hbmQgbGluZSBhcmdcbiAgLy8gMi4gdmFsdWUgZnJvbSBlbnYgdmFyXG4gIC8vIDMuIHZhbHVlIGZyb20gY29uZmlnIGZpbGVcbiAgLy8gNC4gdmFsdWUgZnJvbSBjb25maWcgb2JqZWN0c1xuICAvLyA1LiBjb25maWd1cmVkIGRlZmF1bHQgdmFsdWVcbiAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpIC8vIHNwZWNpYWwgY2FzZTogY2hlY2sgZW52IHZhcnMgdGhhdCBwb2ludCB0byBjb25maWcgZmlsZVxuICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpXG4gIHNldENvbmZpZyhhcmd2KVxuICBzZXRDb25maWdPYmplY3RzKClcbiAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpXG4gIGFwcGx5Q29lcmNpb25zKGFyZ3YpXG4gIGlmIChjb25maWd1cmF0aW9uWydzZXQtcGxhY2Vob2xkZXIta2V5J10pIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KVxuXG4gIC8vIGZvciBhbnkgY291bnRzIGVpdGhlciBub3QgaW4gYXJncyBvciB3aXRob3V0IGFuIGV4cGxpY2l0IGRlZmF1bHQsIHNldCB0byAwXG4gIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNLZXkoYXJndiwga2V5LnNwbGl0KCcuJykpKSBzZXRBcmcoa2V5LCAwKVxuICB9KVxuXG4gIC8vICctLScgZGVmYXVsdHMgdG8gdW5kZWZpbmVkLlxuICBpZiAobm90RmxhZ3NPcHRpb24gJiYgbm90RmxhZ3MubGVuZ3RoKSBhcmd2W25vdEZsYWdzQXJndl0gPSBbXVxuICBub3RGbGFncy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpXG4gIH0pXG5cbiAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICBPYmplY3Qua2V5cyhhcmd2KS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJy0tJyAmJiBrZXkuaW5jbHVkZXMoJy0nKSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgZGVsZXRlIGFyZ3Zba2V5XVxuICAgIH0pXG4gIH1cblxuICBpZiAoY29uZmlndXJhdGlvblsnc3RyaXAtYWxpYXNlZCddKSB7XG4gICAgO1tdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXVxuICAgICAgfVxuXG4gICAgICBkZWxldGUgYXJndlthbGlhc11cbiAgICB9KVxuICB9XG5cbiAgLy8gaG93IG1hbnkgYXJndW1lbnRzIHNob3VsZCB3ZSBjb25zdW1lLCBiYXNlZFxuICAvLyBvbiB0aGUgbmFyZ3Mgb3B0aW9uP1xuICBmdW5jdGlvbiBlYXROYXJncyAoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgIGxldCBpaVxuICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKVxuICAgIC8vIE5hTiBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgZm9yIHRoZSBhcnJheSB0eXBlLCBpbmRpY2F0aW5nIHRoYXQgb25lIG9yXG4gICAgLy8gbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkLlxuICAgIHRvRWF0ID0gaXNOYU4odG9FYXQpID8gMSA6IHRvRWF0XG5cbiAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpXG4gICAgICB9XG4gICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSlcbiAgICAgIHJldHVybiBpXG4gICAgfVxuXG4gICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxXG4gICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAvLyBjbGFzc2ljIGJlaGF2aW9yLCB5YXJncyBlYXRzIHBvc2l0aW9uYWwgYW5kIGRhc2ggYXJndW1lbnRzLlxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKVxuICAgICAgfVxuICAgICAgYXZhaWxhYmxlID0gdG9FYXRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbmFyZ3Mgd2lsbCBub3QgY29uc3VtZSBmbGFnIGFyZ3VtZW50cywgZS5nLiwgLWFiYywgLS1mb28sXG4gICAgICAvLyBhbmQgdGVybWluYXRlcyB3aGVuIG9uZSBpcyBvYnNlcnZlZC5cbiAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBpZiAoIWFyZ3NbaWldLm1hdGNoKC9eLVteMC05XS8pIHx8IGFyZ3NbaWldLm1hdGNoKG5lZ2F0aXZlKSB8fCBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmdzW2lpXSkpIGF2YWlsYWJsZSsrXG4gICAgICAgIGVsc2UgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChhdmFpbGFibGUgPCB0b0VhdCkgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpXG4gICAgfVxuXG4gICAgbGV0IGNvbnN1bWVkID0gTWF0aC5taW4oYXZhaWxhYmxlLCB0b0VhdClcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiBjb25zdW1lZCA+IDApIHtcbiAgICAgIHNldEFyZyhrZXksIGFyZ0FmdGVyRXF1YWxTaWduKVxuICAgICAgY29uc3VtZWQtLVxuICAgIH1cbiAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICBzZXRBcmcoa2V5LCBhcmdzW2lpXSlcbiAgICB9XG5cbiAgICByZXR1cm4gKGkgKyBjb25zdW1lZClcbiAgfVxuXG4gIC8vIGlmIGFuIG9wdGlvbiBpcyBhbiBhcnJheSwgZWF0IGFsbCBub24taHlwaGVuYXRlZCBhcmd1bWVudHNcbiAgLy8gZm9sbG93aW5nIGl0Li4uIFlVTSFcbiAgLy8gZS5nLiwgLS1mb28gYXBwbGUgYmFuYW5hIGNhdCBiZWNvbWVzIFtcImFwcGxlXCIsIFwiYmFuYW5hXCIsIFwiY2F0XCJdXG4gIGZ1bmN0aW9uIGVhdEFycmF5IChpLCBrZXksIGFyZ3MsIGFyZ0FmdGVyRXF1YWxTaWduKSB7XG4gICAgbGV0IGFyZ3NUb1NldCA9IFtdXG4gICAgbGV0IG5leHQgPSBhcmdBZnRlckVxdWFsU2lnbiB8fCBhcmdzW2kgKyAxXVxuICAgIC8vIElmIGJvdGggYXJyYXkgYW5kIG5hcmdzIGFyZSBjb25maWd1cmVkLCBlbmZvcmNlIHRoZSBuYXJncyBjb3VudDpcbiAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpXG5cbiAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICEoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSkge1xuICAgICAgYXJnc1RvU2V0LnB1c2godHJ1ZSlcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgIChpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgL14tLy50ZXN0KG5leHQpICYmICFuZWdhdGl2ZS50ZXN0KG5leHQpICYmICFpc1Vua25vd25PcHRpb25Bc0FyZyhuZXh0KSkpIHtcbiAgICAgIC8vIGZvciBrZXlzIHdpdGhvdXQgdmFsdWUgPT0+IGFyZ3NUb1NldCByZW1haW5zIGFuIGVtcHR5IFtdXG4gICAgICAvLyBzZXQgdXNlciBkZWZhdWx0IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XVxuICAgICAgICBhcmdzVG9TZXQgPSBBcnJheS5pc0FycmF5KGRlZlZhbCkgPyBkZWZWYWwgOiBbZGVmVmFsXVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2YWx1ZSBpbiAtLW9wdGlvbj12YWx1ZSBpcyBlYXRlbiBhcyBpc1xuICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSkgYnJlYWtcbiAgICAgICAgbmV4dCA9IGFyZ3NbaWldXG4gICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSBicmVha1xuICAgICAgICBpID0gaWlcbiAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYm90aCBhcnJheSBhbmQgbmFyZ3MgYXJlIGNvbmZpZ3VyZWQsIGNyZWF0ZSBhbiBlcnJvciBpZiBsZXNzIHRoYW5cbiAgICAvLyBuYXJncyBwb3NpdGlvbmFscyB3ZXJlIGZvdW5kLiBOYU4gaGFzIHNwZWNpYWwgbWVhbmluZywgaW5kaWNhdGluZ1xuICAgIC8vIHRoYXQgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIHJlcXVpcmVkIChtb3JlIGFyZSBva2F5KS5cbiAgICBpZiAoKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA8IG5hcmdzQ291bnQpIHx8XG4gICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpXG4gICAgfVxuXG4gICAgc2V0QXJnKGtleSwgYXJnc1RvU2V0KVxuICAgIHJldHVybiBpXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBcmcgKGtleSwgdmFsKSB7XG4gICAgaWYgKC8tLy50ZXN0KGtleSkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKVxuICAgICAgfSkuam9pbignLicpXG4gICAgICBhZGROZXdBbGlhcyhrZXksIGFsaWFzKVxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKVxuICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJylcbiAgICBzZXRLZXkoYXJndiwgc3BsaXRLZXksIHZhbHVlKVxuXG4gICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZnVsbCBrZXlcbiAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0geC5zcGxpdCgnLicpXG4gICAgICAgIHNldEtleShhcmd2LCB4LCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZG90LW5vdGF0aW9uIGtleVxuICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICA7KGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSB4LnNwbGl0KCcuJylcblxuICAgICAgICAvLyBleHBhbmQgYWxpYXMgd2l0aCBuZXN0ZWQgb2JqZWN0cyBpbiBrZXlcbiAgICAgICAgY29uc3QgYSA9IFtdLmNvbmNhdChzcGxpdEtleSlcbiAgICAgICAgYS5zaGlmdCgpIC8vIG51a2UgdGhlIG9sZCBrZXkuXG4gICAgICAgIHggPSB4LmNvbmNhdChhKVxuXG4gICAgICAgIC8vIHBvcHVsYXRlIGFsaWFzIG9ubHkgaWYgaXMgbm90IGFscmVhZHkgYW4gYWxpYXMgb2YgdGhlIGZ1bGwga2V5XG4gICAgICAgIC8vIChhbHJlYWR5IHBvcHVsYXRlZCBhYm92ZSlcbiAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5pbmNsdWRlcyh4LmpvaW4oJy4nKSkpIHtcbiAgICAgICAgICBzZXRLZXkoYXJndiwgeCwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gU2V0IG5vcm1hbGl6ZSBnZXR0ZXIgYW5kIHNldHRlciB3aGVuIGtleSBpcyBpbiAnbm9ybWFsaXplJyBidXQgaXNuJ3QgYW4gYXJyYXlcbiAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgY29uc3Qga2V5cyA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pXG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0ICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHBhdGgubm9ybWFsaXplKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGROZXdBbGlhcyAoa2V5LCBhbGlhcykge1xuICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSAmJiBmbGFncy5hbGlhc2VzW2tleV0ubGVuZ3RoKSkge1xuICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXVxuICAgICAgbmV3QWxpYXNlc1thbGlhc10gPSB0cnVlXG4gICAgfVxuICAgIGlmICghKGZsYWdzLmFsaWFzZXNbYWxpYXNdICYmIGZsYWdzLmFsaWFzZXNbYWxpYXNdLmxlbmd0aCkpIHtcbiAgICAgIGFkZE5ld0FsaWFzKGFsaWFzLCBrZXkpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlIChrZXksIHZhbCkge1xuICAgIC8vIHN0cmluZ3MgbWF5IGJlIHF1b3RlZCwgY2xlYW4gdGhpcyB1cCBhcyB3ZSBhc3NpZ24gdmFsdWVzLlxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJlxuICAgICAgKHZhbFswXSA9PT0gXCInXCIgfHwgdmFsWzBdID09PSAnXCInKSAmJlxuICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdXG4gICAgKSB7XG4gICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEsIHZhbC5sZW5ndGggLSAxKVxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBwYXJzaW5nIGJvb2xlYW4gYXJndW1lbnRzIC0tZm9vPXRydWUgLS1iYXIgZmFsc2UuXG4gICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSB8fCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHZhbCA9IHZhbCA9PT0gJ3RydWUnXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICA/IHZhbC5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdikgfSlcbiAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpXG5cbiAgICAvLyBpbmNyZW1lbnQgYSBjb3VudCBnaXZlbiBhcyBhcmcgKGVpdGhlciBubyB2YWx1ZSBvciB2YWx1ZSBwYXJzZWQgYXMgYm9vbGVhbilcbiAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgdmFsdWUgPSBpbmNyZW1lbnRcbiAgICB9XG5cbiAgICAvLyBTZXQgbm9ybWFsaXplZCB2YWx1ZSB3aGVuIGtleSBpcyBpbiAnbm9ybWFsaXplJyBhbmQgaW4gJ2FycmF5cydcbiAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB2YWx1ZSA9IHZhbC5tYXAocGF0aC5ub3JtYWxpemUpXG4gICAgICBlbHNlIHZhbHVlID0gcGF0aC5ub3JtYWxpemUodmFsKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3Qgc2hvdWxkQ29lcmNlTnVtYmVyID0gaXNOdW1iZXIodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ3BhcnNlLW51bWJlcnMnXSAmJiAoXG4gICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IodmFsdWUpKVxuICAgICAgKVxuICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHZhbHVlID0gTnVtYmVyKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIHNldCBhcmdzIGZyb20gY29uZmlnLmpzb24gZmlsZSwgdGhpcyBzaG91bGQgYmVcbiAgLy8gYXBwbGllZCBsYXN0IHNvIHRoYXQgZGVmYXVsdHMgY2FuIGJlIGFwcGxpZWQuXG4gIGZ1bmN0aW9uIHNldENvbmZpZyAoYXJndikge1xuICAgIGNvbnN0IGNvbmZpZ0xvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIC8vIGV4cGFuZCBkZWZhdWx0cy9hbGlhc2VzLCBpbi1jYXNlIGFueSBoYXBwZW4gdG8gcmVmZXJlbmNlXG4gICAgLy8gdGhlIGNvbmZpZy5qc29uIGZpbGUuXG4gICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoY29uZmlnTG9va3VwLCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cylcblxuICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvbmZpZ3MpLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ0tleSkge1xuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XVxuICAgICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgY29uZmlnID0gbnVsbFxuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWdQYXRoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbGFncy5jb25maWdzW2NvbmZpZ0tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbmZpZyA9IGZsYWdzLmNvbmZpZ3NbY29uZmlnS2V5XShyZXNvbHZlZENvbmZpZ1BhdGgpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbmZpZyA9IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZ1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnID0gcmVxdWlyZShyZXNvbHZlZENvbmZpZ1BhdGgpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZylcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBpZiAoYXJndltjb25maWdLZXldKSBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIEpTT04gY29uZmlnIGZpbGU6ICVzJywgY29uZmlnUGF0aCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gc2V0IGFyZ3MgZnJvbSBjb25maWcgb2JqZWN0LlxuICAvLyBpdCByZWN1cnNpdmVseSBjaGVja3MgbmVzdGVkIG9iamVjdHMuXG4gIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdCAoY29uZmlnLCBwcmV2KSB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV1cbiAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmV2ID8gcHJldiArICcuJyArIGtleSA6IGtleVxuXG4gICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYW4gaW5uZXIgb2JqZWN0IGFuZCB3ZSBoYXZlIGRvdC1ub3RhdGlvblxuICAgICAgLy8gZW5hYmxlZCwgdHJlYXQgaW5uZXIgb2JqZWN0cyBpbiBjb25maWcgdGhlIHNhbWUgYXNcbiAgICAgIC8vIGhlYXZpbHkgbmVzdGVkIGRvdCBub3RhdGlvbnMgKGZvby5iYXIuYXBwbGUpLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IG5vdCBhbiBhcnJheSwgY2hlY2sgbmVzdGVkIG9iamVjdFxuICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzZXR0aW5nIGFyZ3VtZW50cyB2aWEgQ0xJIHRha2VzIHByZWNlZGVuY2Ugb3ZlclxuICAgICAgICAvLyB2YWx1ZXMgd2l0aGluIHRoZSBjb25maWcgZmlsZS5cbiAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICBzZXRBcmcoZnVsbEtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gc2V0IGFsbCBjb25maWcgb2JqZWN0cyBwYXNzZWQgaW4gb3B0c1xuICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzICgpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09iamVjdHMgPT09ICd1bmRlZmluZWQnKSByZXR1cm5cbiAgICBjb25maWdPYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ09iamVjdCkge1xuICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZ09iamVjdClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlFbnZWYXJzIChhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgaWYgKHR5cGVvZiBlbnZQcmVmaXggPT09ICd1bmRlZmluZWQnKSByZXR1cm5cblxuICAgIGNvbnN0IHByZWZpeCA9IHR5cGVvZiBlbnZQcmVmaXggPT09ICdzdHJpbmcnID8gZW52UHJlZml4IDogJydcbiAgICBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZm9yRWFjaChmdW5jdGlvbiAoZW52VmFyKSB7XG4gICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAvLyBnZXQgYXJyYXkgb2YgbmVzdGVkIGtleXMgYW5kIGNvbnZlcnQgdGhlbSB0byBjYW1lbCBjYXNlXG4gICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgIHNldEFyZyhrZXlzLmpvaW4oJy4nKSwgcHJvY2Vzcy5lbnZbZW52VmFyXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyAoYXJndikge1xuICAgIGxldCBjb2VyY2VcbiAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpXG4gICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIWFwcGxpZWQuaGFzKGtleSkpIHsgLy8gSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGNvZXJjZWQgdGhpcyBvcHRpb24gdmlhIG9uZSBvZiBpdHMgYWxpYXNlc1xuICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpXG4gICAgICAgIGlmICh0eXBlb2YgY29lcmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCBjb2VyY2UoYXJndltrZXldKSlcbiAgICAgICAgICAgIDsoW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KSkuZm9yRWFjaChhbGkgPT4ge1xuICAgICAgICAgICAgICBhcHBsaWVkLmFkZChhbGkpXG4gICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzIChhcmd2KSB7XG4gICAgZmxhZ3Mua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIC8vIGRvbid0IHNldCBwbGFjZWhvbGRlciBrZXlzIGZvciBkb3Qgbm90YXRpb24gb3B0aW9ucyAnZm9vLmJhcicuXG4gICAgICBpZiAofmtleS5pbmRleE9mKCcuJykpIHJldHVyblxuICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKSBhcmd2W2tleV0gPSB1bmRlZmluZWRcbiAgICB9KVxuICAgIHJldHVybiBhcmd2XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyAob2JqLCBhbGlhc2VzLCBkZWZhdWx0cywgY2FuTG9nID0gZmFsc2UpIHtcbiAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIWhhc0tleShvYmosIGtleS5zcGxpdCgnLicpKSkge1xuICAgICAgICBzZXRLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSlcbiAgICAgICAgaWYgKGNhbkxvZykgZGVmYXVsdGVkW2tleV0gPSB0cnVlXG5cbiAgICAgICAgOyhhbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSkgcmV0dXJuXG4gICAgICAgICAgc2V0S2V5KG9iaiwgeC5zcGxpdCgnLicpLCBkZWZhdWx0c1trZXldKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBoYXNLZXkgKG9iaiwga2V5cykge1xuICAgIGxldCBvID0gb2JqXG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSBrZXlzID0gW2tleXMuam9pbignLicpXVxuXG4gICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBvID0gKG9ba2V5XSB8fCB7fSlcbiAgICB9KVxuXG4gICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdXG5cbiAgICBpZiAodHlwZW9mIG8gIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgICBlbHNlIHJldHVybiBrZXkgaW4gb1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0S2V5IChvYmosIGtleXMsIHZhbHVlKSB7XG4gICAgbGV0IG8gPSBvYmpcblxuICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIGtleXMgPSBba2V5cy5qb2luKCcuJyldXG5cbiAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICAvLyBUT0RPKGJjb2UpOiBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHlhcmdzLCBzd2l0Y2ggdG9cbiAgICAgIC8vIE9iamVjdC5jcmVhdGUobnVsbCkgZm9yIGRvdCBub3RhdGlvbjpcbiAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSlcblxuICAgICAgaWYgKHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvW2tleV0gPSB7fVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG9ba2V5XSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgdGhlIGxhc3QgaXRlbSBpcyBhbiBlbXB0eSBvYmplY3QuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICBvW2tleV0ucHVzaCh7fSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvW2tleV0gPSBbb1trZXldLCB7fV1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBlbXB0eSBvYmplY3QgYXQgdGhlIGVuZCBvZiB0aGUgb1trZXldIGFycmF5LCBzbyBzZXQgbyB0byB0aGF0IG9iamVjdFxuICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbyA9IG9ba2V5XVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBUT0RPKGJjb2UpOiBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHlhcmdzLCBzd2l0Y2ggdG9cbiAgICAvLyBPYmplY3QuY3JlYXRlKG51bGwpIGZvciBkb3Qgbm90YXRpb246XG4gICAgY29uc3Qga2V5ID0gc2FuaXRpemVLZXkoa2V5c1trZXlzLmxlbmd0aCAtIDFdKVxuXG4gICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cylcbiAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J11cblxuICAgIC8vIG5hcmdzIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiBkdXBsaWNhdGVcbiAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgIGR1cGxpY2F0ZSA9IHRydWVcbiAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICBvW2tleV0gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IGluY3JlbWVudCkge1xuICAgICAgb1trZXldID0gaW5jcmVtZW50KG9ba2V5XSlcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pXG4gICAgICB9IGVsc2UgaWYgKCFkdXBsaWNhdGUgJiYgQm9vbGVhbihpc1R5cGVBcnJheSkgPT09IEJvb2xlYW4oaXNWYWx1ZUFycmF5KSkge1xuICAgICAgICBvW2tleV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb1trZXldID0gb1trZXldLmNvbmNhdChbdmFsdWVdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob1trZXldID09PSB1bmRlZmluZWQgJiYgaXNUeXBlQXJyYXkpIHtcbiAgICAgIG9ba2V5XSA9IGlzVmFsdWVBcnJheSA/IHZhbHVlIDogW3ZhbHVlXVxuICAgIH0gZWxzZSBpZiAoZHVwbGljYXRlICYmICEoXG4gICAgICBvW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKVxuICAgICkpIHtcbiAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXVxuICAgIH0gZWxzZSB7XG4gICAgICBvW2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIGV4dGVuZCB0aGUgYWxpYXNlcyBsaXN0IHdpdGggaW5mZXJyZWQgYWxpYXNlcy5cbiAgZnVuY3Rpb24gZXh0ZW5kQWxpYXNlcyAoLi4uYXJncykge1xuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGlmIHdlJ3ZlIGFscmVhZHkgYWRkZWQgYSBrZXlcbiAgICAgICAgLy8gdG8gdGhlIGFsaWFzZXMgYXJyYXksIGZvciBleGFtcGxlIGl0IG1pZ2h0XG4gICAgICAgIC8vIGV4aXN0IGluIGJvdGggJ29wdHMuZGVmYXVsdCcgYW5kICdvcHRzLmtleScuXG4gICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHJldHVyblxuXG4gICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pXG4gICAgICAgIC8vIEZvciBcIi0tb3B0aW9uLW5hbWVcIiwgYWxzbyBzZXQgYXJndi5vcHRpb25OYW1lXG4gICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5jb25jYXQoa2V5KS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjYW1lbENhc2UoeClcbiAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpXG4gICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBGb3IgXCItLW9wdGlvbk5hbWVcIiwgYWxzbyBzZXQgYXJndlsnb3B0aW9uLW5hbWUnXVxuICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJylcbiAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpXG4gICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIGZsYWdzLmFsaWFzZXNbeF0gPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldLmZpbHRlcihmdW5jdGlvbiAoeSkge1xuICAgICAgICAgICAgcmV0dXJuIHggIT09IHlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8vIHJldHVybiB0aGUgMXN0IHNldCBmbGFnIGZvciBhbnkgb2YgYSBrZXkncyBhbGlhc2VzIChvciBmYWxzZSBpZiBubyBmbGFnIHNldClcbiAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzIChrZXksIGZsYWcpIHtcbiAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKVxuICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpXG4gICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gaGFzQW55RmxhZyAoa2V5KSB7XG4gICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChPYmplY3Qua2V5cyhmbGFncykubWFwKGsgPT4gZmxhZ3Nba10pKVxuICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGZsYWcpID8gZmxhZy5pbmNsdWRlcyhrZXkpIDogZmxhZ1trZXldXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcgKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KC4uLnBhdHRlcm5zKVxuICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pXG4gICAgICByZXR1cm4gbWF0Y2ggJiYgaGFzQW55RmxhZyhtYXRjaFsxXSlcbiAgICB9KVxuICB9XG5cbiAgLy8gYmFzZWQgb24gYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIHNob3J0IGZsYWcgZ3JvdXAgcGFyc2luZyBsb2dpY1xuICBmdW5jdGlvbiBoYXNBbGxTaG9ydEZsYWdzIChhcmcpIHtcbiAgICAvLyBpZiB0aGlzIGlzIGEgbmVnYXRpdmUgbnVtYmVyLCBvciBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzaW5nbGUgaHlwaGVuLCBpdCdzIG5vdCBhIHNob3J0IGZsYWcgZ3JvdXBcbiAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlXG4gICAgbGV0IG5leHRcbiAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMilcblxuICAgICAgaWYgKCFoYXNBbnlGbGFnKGxldHRlcnNbal0pKSB7XG4gICAgICAgIGhhc0FsbEZsYWdzID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0FsbEZsYWdzXG4gIH1cblxuICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb25Bc0FyZyAoYXJnKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZylcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbiAoYXJnKSB7XG4gICAgLy8gaWdub3JlIG5lZ2F0aXZlIG51bWJlcnNcbiAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIC8vIGlmIHRoaXMgaXMgYSBzaG9ydCBvcHRpb24gZ3JvdXAgYW5kIGFsbCBvZiB0aGVtIGFyZSBjb25maWd1cmVkLCBpdCBpc24ndCB1bmtub3duXG4gICAgaWYgKGhhc0FsbFNob3J0RmxhZ3MoYXJnKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIC8vIGUuZy4gJy0tY291bnQ9MidcbiAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokL1xuICAgIC8vIGUuZy4gJy1hJyBvciAnLS1hcmcnXG4gICAgY29uc3Qgbm9ybWFsRmxhZyA9IC9eLSsoW149XSs/KSQvXG4gICAgLy8gZS5nLiAnLWEtJ1xuICAgIGNvbnN0IGZsYWdFbmRpbmdJbkh5cGhlbiA9IC9eLSsoW149XSs/KS0kL1xuICAgIC8vIGUuZy4gJy1hYmMxMjMnXG4gICAgY29uc3QgZmxhZ0VuZGluZ0luRGlnaXRzID0gL14tKyhbXj1dKz9cXGQrKSQvXG4gICAgLy8gZS5nLiAnLWEvdXNyL2xvY2FsJ1xuICAgIGNvbnN0IGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzID0gL14tKyhbXj1dKz8pXFxXKy4qJC9cbiAgICAvLyBjaGVjayB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGZsYWcgc3R5bGVzLCBpbmNsdWRpbmcgbmVnYXRlZEJvb2xlYW4sIGEgcGF0dGVybiBkZWZpbmVkIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBtZXRob2RcbiAgICByZXR1cm4gIWhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCBmbGFnV2l0aEVxdWFscywgbmVnYXRlZEJvb2xlYW4sIG5vcm1hbEZsYWcsIGZsYWdFbmRpbmdJbkh5cGhlbiwgZmxhZ0VuZGluZ0luRGlnaXRzLCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycylcbiAgfVxuXG4gIC8vIG1ha2UgYSBiZXN0IGVmZm9yIHRvIHBpY2sgYSBkZWZhdWx0IHZhbHVlXG4gIC8vIGZvciBhbiBvcHRpb24gYmFzZWQgb24gbmFtZSBhbmQgdHlwZS5cbiAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlIChrZXkpIHtcbiAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJlxuICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRzW2tleV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKVxuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVybiBhIGRlZmF1bHQgdmFsdWUsIGdpdmVuIHRoZSB0eXBlIG9mIGEgZmxhZy4sXG4gIC8vIGUuZy4sIGtleSBvZiB0eXBlICdzdHJpbmcnIHdpbGwgZGVmYXVsdCB0byAnJywgcmF0aGVyIHRoYW4gJ3RydWUnLlxuICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSAodHlwZSkge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgIGJvb2xlYW46IHRydWUsXG4gICAgICBzdHJpbmc6ICcnLFxuICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICBhcnJheTogW11cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmW3R5cGVdXG4gIH1cblxuICAvLyBnaXZlbiBhIGZsYWcsIGVuZm9yY2UgYSBkZWZhdWx0IHR5cGUuXG4gIGZ1bmN0aW9uIGd1ZXNzVHlwZSAoa2V5KSB7XG4gICAgbGV0IHR5cGUgPSAnYm9vbGVhbidcbiAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpIHR5cGUgPSAnc3RyaW5nJ1xuICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKSB0eXBlID0gJ251bWJlcidcbiAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpIHR5cGUgPSAnYm9vbGVhbidcbiAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB0eXBlID0gJ2FycmF5J1xuICAgIHJldHVybiB0eXBlXG4gIH1cblxuICBmdW5jdGlvbiBpc051bWJlciAoeCkge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgLy8gaWYgbG9hZGVkIGZyb20gY29uZmlnLCBtYXkgYWxyZWFkeSBiZSBhIG51bWJlci5cbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKSByZXR1cm4gdHJ1ZVxuICAgIC8vIGhleGFkZWNpbWFsLlxuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpIHJldHVybiB0cnVlXG4gICAgLy8gZG9uJ3QgdHJlYXQgMDEyMyBhcyBhIG51bWJlcjsgYXMgaXQgZHJvcHMgdGhlIGxlYWRpbmcgJzAnLlxuICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgeFswXSA9PT0gJzAnKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gL15bLV0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKShlWy0rXT9cXGQrKT8kLy50ZXN0KHgpXG4gIH1cblxuICBmdW5jdGlvbiBpc1VuZGVmaW5lZCAobnVtKSB7XG4gICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBjaGVjayB1c2VyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGluY29uc2lzdGVuY2llc1xuICBmdW5jdGlvbiBjaGVja0NvbmZpZ3VyYXRpb24gKCkge1xuICAgIC8vIGNvdW50IGtleXMgc2hvdWxkIG5vdCBiZSBzZXQgYXMgYXJyYXkvbmFyZ1xuICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLmFycmF5LicsIGtleSkpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGFsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIGZsYWdzLmFsaWFzZXMpLFxuICAgIG5ld0FsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIG5ld0FsaWFzZXMpLFxuICAgIGRlZmF1bHRlZDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdGVkKSxcbiAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uXG4gIH1cbn1cblxuLy8gaWYgYW55IGFsaWFzZXMgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHdlIHNob3VsZFxuLy8gbWVyZ2UgdGhlbSB0b2dldGhlci5cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzIChhbGlhc2VzKSB7XG4gIGNvbnN0IGFsaWFzQXJyYXlzID0gW11cbiAgY29uc3QgY29tYmluZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gIGxldCBjaGFuZ2UgPSB0cnVlXG5cbiAgLy8gdHVybiBhbGlhcyBsb29rdXAgaGFzaCB7a2V5OiBbJ2FsaWFzMScsICdhbGlhczInXX0gaW50b1xuICAvLyBhIHNpbXBsZSBhcnJheSBbJ2tleScsICdhbGlhczEnLCAnYWxpYXMyJ11cbiAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgYWxpYXNBcnJheXMucHVzaChcbiAgICAgIFtdLmNvbmNhdChhbGlhc2VzW2tleV0sIGtleSlcbiAgICApXG4gIH0pXG5cbiAgLy8gY29tYmluZSBhcnJheXMgdW50aWwgemVybyBjaGFuZ2VzIGFyZVxuICAvLyBtYWRlIGluIGFuIGl0ZXJhdGlvbi5cbiAgd2hpbGUgKGNoYW5nZSkge1xuICAgIGNoYW5nZSA9IGZhbHNlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0ID0gYWxpYXNBcnJheXNbaV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgYWxpYXNBcnJheXNbaV0gPSBhbGlhc0FycmF5c1tpXS5jb25jYXQoYWxpYXNBcnJheXNbaWldKVxuICAgICAgICAgIGFsaWFzQXJyYXlzLnNwbGljZShpaSwgMSlcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG1hcCBhcnJheXMgYmFjayB0byB0aGUgaGFzaC1sb29rdXAgKGRlLWR1cGUgd2hpbGVcbiAgLy8gd2UncmUgYXQgaXQpLlxuICBhbGlhc0FycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhc0FycmF5KSB7XG4gICAgYWxpYXNBcnJheSA9IGFsaWFzQXJyYXkuZmlsdGVyKGZ1bmN0aW9uICh2LCBpLCBzZWxmKSB7XG4gICAgICByZXR1cm4gc2VsZi5pbmRleE9mKHYpID09PSBpXG4gICAgfSlcbiAgICBjb21iaW5lZFthbGlhc0FycmF5LnBvcCgpXSA9IGFsaWFzQXJyYXlcbiAgfSlcblxuICByZXR1cm4gY29tYmluZWRcbn1cblxuLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhIGNvdW50IGlzIGdpdmVuIGFzIGFuIGFyZ1xuLy8gaXQgaXMgTk9UIGNhbGxlZCB0byBzZXQgYSBkZWZhdWx0IHZhbHVlXG4vLyB0aHVzIHdlIGNhbiBzdGFydCB0aGUgY291bnQgYXQgMSBpbnN0ZWFkIG9mIDBcbmZ1bmN0aW9uIGluY3JlbWVudCAob3JpZykge1xuICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxXG59XG5cbmZ1bmN0aW9uIFBhcnNlciAoYXJncywgb3B0cykge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZShhcmdzLnNsaWNlKCksIG9wdHMpXG4gIHJldHVybiByZXN1bHQuYXJndlxufVxuXG4vLyBwYXJzZSBhcmd1bWVudHMgYW5kIHJldHVybiBkZXRhaWxlZFxuLy8gbWV0YSBpbmZvcm1hdGlvbiwgYWxpYXNlcywgZXRjLlxuUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgcmV0dXJuIHBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cylcbn1cblxuLy8gVE9ETyhiY29lKTogaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB5YXJncywgc3dpdGNoIHRvXG4vLyBPYmplY3QuY3JlYXRlKG51bGwpIGZvciBkb3Qgbm90YXRpb246XG5mdW5jdGlvbiBzYW5pdGl6ZUtleSAoa2V5KSB7XG4gIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gJ19fX3Byb3RvX19fJ1xuICByZXR1cm4ga2V5XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyXG4iLCAibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBjaGVja1BhdGhFeHQgKHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHBhdGhleHQgPSBvcHRpb25zLnBhdGhFeHQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5wYXRoRXh0IDogcHJvY2Vzcy5lbnYuUEFUSEVYVFxuXG4gIGlmICghcGF0aGV4dCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwYXRoZXh0ID0gcGF0aGV4dC5zcGxpdCgnOycpXG4gIGlmIChwYXRoZXh0LmluZGV4T2YoJycpICE9PSAtMSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBwYXRoZXh0W2ldLnRvTG93ZXJDYXNlKClcbiAgICBpZiAocCAmJiBwYXRoLnN1YnN0cigtcC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IHApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIHBhdGgsIG9wdGlvbnMpIHtcbiAgaWYgKCFzdGF0LmlzU3ltYm9saWNMaW5rKCkgJiYgIXN0YXQuaXNGaWxlKCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gY2hlY2tQYXRoRXh0KHBhdGgsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGlzZXhlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uIChlciwgc3RhdCkge1xuICAgIGNiKGVyLCBlciA/IGZhbHNlIDogY2hlY2tTdGF0KHN0YXQsIHBhdGgsIG9wdGlvbnMpKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW5jIChwYXRoLCBvcHRpb25zKSB7XG4gIHJldHVybiBjaGVja1N0YXQoZnMuc3RhdFN5bmMocGF0aCksIHBhdGgsIG9wdGlvbnMpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBpc2V4ZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgZnMuc3RhdChwYXRoLCBmdW5jdGlvbiAoZXIsIHN0YXQpIHtcbiAgICBjYihlciwgZXIgPyBmYWxzZSA6IGNoZWNrU3RhdChzdGF0LCBvcHRpb25zKSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICByZXR1cm4gY2hlY2tTdGF0KGZzLnN0YXRTeW5jKHBhdGgpLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXQuaXNGaWxlKCkgJiYgY2hlY2tNb2RlKHN0YXQsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGNoZWNrTW9kZSAoc3RhdCwgb3B0aW9ucykge1xuICB2YXIgbW9kID0gc3RhdC5tb2RlXG4gIHZhciB1aWQgPSBzdGF0LnVpZFxuICB2YXIgZ2lkID0gc3RhdC5naWRcblxuICB2YXIgbXlVaWQgPSBvcHRpb25zLnVpZCAhPT0gdW5kZWZpbmVkID9cbiAgICBvcHRpb25zLnVpZCA6IHByb2Nlc3MuZ2V0dWlkICYmIHByb2Nlc3MuZ2V0dWlkKClcbiAgdmFyIG15R2lkID0gb3B0aW9ucy5naWQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5naWQgOiBwcm9jZXNzLmdldGdpZCAmJiBwcm9jZXNzLmdldGdpZCgpXG5cbiAgdmFyIHUgPSBwYXJzZUludCgnMTAwJywgOClcbiAgdmFyIGcgPSBwYXJzZUludCgnMDEwJywgOClcbiAgdmFyIG8gPSBwYXJzZUludCgnMDAxJywgOClcbiAgdmFyIHVnID0gdSB8IGdcblxuICB2YXIgcmV0ID0gKG1vZCAmIG8pIHx8XG4gICAgKG1vZCAmIGcpICYmIGdpZCA9PT0gbXlHaWQgfHxcbiAgICAobW9kICYgdSkgJiYgdWlkID09PSBteVVpZCB8fFxuICAgIChtb2QgJiB1ZykgJiYgbXlVaWQgPT09IDBcblxuICByZXR1cm4gcmV0XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIGNvcmVcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8IGdsb2JhbC5URVNUSU5HX1dJTkRPV1MpIHtcbiAgY29yZSA9IHJlcXVpcmUoJy4vd2luZG93cy5qcycpXG59IGVsc2Uge1xuICBjb3JlID0gcmVxdWlyZSgnLi9tb2RlLmpzJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxuZnVuY3Rpb24gaXNleGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgaWYgKCFjYikge1xuICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbm90IHByb3ZpZGVkJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaXNleGUocGF0aCwgb3B0aW9ucyB8fCB7fSwgZnVuY3Rpb24gKGVyLCBpcykge1xuICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICByZWplY3QoZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgY29yZShwYXRoLCBvcHRpb25zIHx8IHt9LCBmdW5jdGlvbiAoZXIsIGlzKSB7XG4gICAgLy8gaWdub3JlIEVBQ0NFUyBiZWNhdXNlIHRoYXQganVzdCBtZWFucyB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBydW4gaXRcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSAnRUFDQ0VTJyB8fCBvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIGVyID0gbnVsbFxuICAgICAgICBpcyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGNiKGVyLCBpcylcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICAvLyBteSBraW5nZG9tIGZvciBhIGZpbHRlcmVkIGNhdGNoXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvcmUuc3luYyhwYXRoLCBvcHRpb25zIHx8IHt9KVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IGVyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cbn1cbiIsICJjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8XG4gICAgcHJvY2Vzcy5lbnYuT1NUWVBFID09PSAnY3lnd2luJyB8fFxuICAgIHByb2Nlc3MuZW52Lk9TVFlQRSA9PT0gJ21zeXMnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IENPTE9OID0gaXNXaW5kb3dzID8gJzsnIDogJzonXG5jb25zdCBpc2V4ZSA9IHJlcXVpcmUoJ2lzZXhlJylcblxuY29uc3QgZ2V0Tm90Rm91bmRFcnJvciA9IChjbWQpID0+XG4gIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBub3QgZm91bmQ6ICR7Y21kfWApLCB7IGNvZGU6ICdFTk9FTlQnIH0pXG5cbmNvbnN0IGdldFBhdGhJbmZvID0gKGNtZCwgb3B0KSA9PiB7XG4gIGNvbnN0IGNvbG9uID0gb3B0LmNvbG9uIHx8IENPTE9OXG5cbiAgLy8gSWYgaXQgaGFzIGEgc2xhc2gsIHRoZW4gd2UgZG9uJ3QgYm90aGVyIHNlYXJjaGluZyB0aGUgcGF0aGVudi5cbiAgLy8ganVzdCBjaGVjayB0aGUgZmlsZSBpdHNlbGYsIGFuZCB0aGF0J3MgaXQuXG4gIGNvbnN0IHBhdGhFbnYgPSBjbWQubWF0Y2goL1xcLy8pIHx8IGlzV2luZG93cyAmJiBjbWQubWF0Y2goL1xcXFwvKSA/IFsnJ11cbiAgICA6IChcbiAgICAgIFtcbiAgICAgICAgLy8gd2luZG93cyBhbHdheXMgY2hlY2tzIHRoZSBjd2QgZmlyc3RcbiAgICAgICAgLi4uKGlzV2luZG93cyA/IFtwcm9jZXNzLmN3ZCgpXSA6IFtdKSxcbiAgICAgICAgLi4uKG9wdC5wYXRoIHx8IHByb2Nlc3MuZW52LlBBVEggfHxcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdmVyeSB1bnVzdWFsICovICcnKS5zcGxpdChjb2xvbiksXG4gICAgICBdXG4gICAgKVxuICBjb25zdCBwYXRoRXh0RXhlID0gaXNXaW5kb3dzXG4gICAgPyBvcHQucGF0aEV4dCB8fCBwcm9jZXNzLmVudi5QQVRIRVhUIHx8ICcuRVhFOy5DTUQ7LkJBVDsuQ09NJ1xuICAgIDogJydcbiAgY29uc3QgcGF0aEV4dCA9IGlzV2luZG93cyA/IHBhdGhFeHRFeGUuc3BsaXQoY29sb24pIDogWycnXVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICBpZiAoY21kLmluZGV4T2YoJy4nKSAhPT0gLTEgJiYgcGF0aEV4dFswXSAhPT0gJycpXG4gICAgICBwYXRoRXh0LnVuc2hpZnQoJycpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhFbnYsXG4gICAgcGF0aEV4dCxcbiAgICBwYXRoRXh0RXhlLFxuICB9XG59XG5cbmNvbnN0IHdoaWNoID0gKGNtZCwgb3B0LCBjYikgPT4ge1xuICBpZiAodHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0XG4gICAgb3B0ID0ge31cbiAgfVxuICBpZiAoIW9wdClcbiAgICBvcHQgPSB7fVxuXG4gIGNvbnN0IHsgcGF0aEVudiwgcGF0aEV4dCwgcGF0aEV4dEV4ZSB9ID0gZ2V0UGF0aEluZm8oY21kLCBvcHQpXG4gIGNvbnN0IGZvdW5kID0gW11cblxuICBjb25zdCBzdGVwID0gaSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGkgPT09IHBhdGhFbnYubGVuZ3RoKVxuICAgICAgcmV0dXJuIG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoID8gcmVzb2x2ZShmb3VuZClcbiAgICAgICAgOiByZWplY3QoZ2V0Tm90Rm91bmRFcnJvcihjbWQpKVxuXG4gICAgY29uc3QgcHBSYXcgPSBwYXRoRW52W2ldXG4gICAgY29uc3QgcGF0aFBhcnQgPSAvXlwiLipcIiQvLnRlc3QocHBSYXcpID8gcHBSYXcuc2xpY2UoMSwgLTEpIDogcHBSYXdcblxuICAgIGNvbnN0IHBDbWQgPSBwYXRoLmpvaW4ocGF0aFBhcnQsIGNtZClcbiAgICBjb25zdCBwID0gIXBhdGhQYXJ0ICYmIC9eXFwuW1xcXFxcXC9dLy50ZXN0KGNtZCkgPyBjbWQuc2xpY2UoMCwgMikgKyBwQ21kXG4gICAgICA6IHBDbWRcblxuICAgIHJlc29sdmUoc3ViU3RlcChwLCBpLCAwKSlcbiAgfSlcblxuICBjb25zdCBzdWJTdGVwID0gKHAsIGksIGlpKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlpID09PSBwYXRoRXh0Lmxlbmd0aClcbiAgICAgIHJldHVybiByZXNvbHZlKHN0ZXAoaSArIDEpKVxuICAgIGNvbnN0IGV4dCA9IHBhdGhFeHRbaWldXG4gICAgaXNleGUocCArIGV4dCwgeyBwYXRoRXh0OiBwYXRoRXh0RXhlIH0sIChlciwgaXMpID0+IHtcbiAgICAgIGlmICghZXIgJiYgaXMpIHtcbiAgICAgICAgaWYgKG9wdC5hbGwpXG4gICAgICAgICAgZm91bmQucHVzaChwICsgZXh0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocCArIGV4dClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKHN1YlN0ZXAocCwgaSwgaWkgKyAxKSlcbiAgICB9KVxuICB9KVxuXG4gIHJldHVybiBjYiA/IHN0ZXAoMCkudGhlbihyZXMgPT4gY2IobnVsbCwgcmVzKSwgY2IpIDogc3RlcCgwKVxufVxuXG5jb25zdCB3aGljaFN5bmMgPSAoY21kLCBvcHQpID0+IHtcbiAgb3B0ID0gb3B0IHx8IHt9XG5cbiAgY29uc3QgeyBwYXRoRW52LCBwYXRoRXh0LCBwYXRoRXh0RXhlIH0gPSBnZXRQYXRoSW5mbyhjbWQsIG9wdClcbiAgY29uc3QgZm91bmQgPSBbXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEVudi5sZW5ndGg7IGkgKyspIHtcbiAgICBjb25zdCBwcFJhdyA9IHBhdGhFbnZbaV1cbiAgICBjb25zdCBwYXRoUGFydCA9IC9eXCIuKlwiJC8udGVzdChwcFJhdykgPyBwcFJhdy5zbGljZSgxLCAtMSkgOiBwcFJhd1xuXG4gICAgY29uc3QgcENtZCA9IHBhdGguam9pbihwYXRoUGFydCwgY21kKVxuICAgIGNvbnN0IHAgPSAhcGF0aFBhcnQgJiYgL15cXC5bXFxcXFxcL10vLnRlc3QoY21kKSA/IGNtZC5zbGljZSgwLCAyKSArIHBDbWRcbiAgICAgIDogcENtZFxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXRoRXh0Lmxlbmd0aDsgaiArKykge1xuICAgICAgY29uc3QgY3VyID0gcCArIHBhdGhFeHRbal1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzID0gaXNleGUuc3luYyhjdXIsIHsgcGF0aEV4dDogcGF0aEV4dEV4ZSB9KVxuICAgICAgICBpZiAoaXMpIHtcbiAgICAgICAgICBpZiAob3B0LmFsbClcbiAgICAgICAgICAgIGZvdW5kLnB1c2goY3VyKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBjdXJcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoKVxuICAgIHJldHVybiBmb3VuZFxuXG4gIGlmIChvcHQubm90aHJvdylcbiAgICByZXR1cm4gbnVsbFxuXG4gIHRocm93IGdldE5vdEZvdW5kRXJyb3IoY21kKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdoaWNoXG53aGljaC5zeW5jID0gd2hpY2hTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoS2V5ID0gKG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52O1xuXHRjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gfHwgcHJvY2Vzcy5wbGF0Zm9ybTtcblxuXHRpZiAocGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gJ1BBVEgnO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKGVudmlyb25tZW50KS5yZXZlcnNlKCkuZmluZChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgPT09ICdQQVRIJykgfHwgJ1BhdGgnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoS2V5O1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBwYXRoS2V5O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdoaWNoID0gcmVxdWlyZSgnd2hpY2gnKTtcbmNvbnN0IGdldFBhdGhLZXkgPSByZXF1aXJlKCdwYXRoLWtleScpO1xuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZEF0dGVtcHQocGFyc2VkLCB3aXRob3V0UGF0aEV4dCkge1xuICAgIGNvbnN0IGVudiA9IHBhcnNlZC5vcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudjtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGhhc0N1c3RvbUN3ZCA9IHBhcnNlZC5vcHRpb25zLmN3ZCAhPSBudWxsO1xuICAgIC8vIFdvcmtlciB0aHJlYWRzIGRvIG5vdCBoYXZlIHByb2Nlc3MuY2hkaXIoKVxuICAgIGNvbnN0IHNob3VsZFN3aXRjaEN3ZCA9IGhhc0N1c3RvbUN3ZCAmJiBwcm9jZXNzLmNoZGlyICE9PSB1bmRlZmluZWQgJiYgIXByb2Nlc3MuY2hkaXIuZGlzYWJsZWQ7XG5cbiAgICAvLyBJZiBhIGN1c3RvbSBgY3dkYCB3YXMgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcHJvY2VzcyBjd2RcbiAgICAvLyBiZWNhdXNlIGB3aGljaGAgd2lsbCBkbyBzdGF0IGNhbGxzIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGEgY3VzdG9tIGN3ZFxuICAgIGlmIChzaG91bGRTd2l0Y2hDd2QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2Nlc3MuY2hkaXIocGFyc2VkLm9wdGlvbnMuY3dkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvKiBFbXB0eSAqL1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWQgPSB3aGljaC5zeW5jKHBhcnNlZC5jb21tYW5kLCB7XG4gICAgICAgICAgICBwYXRoOiBlbnZbZ2V0UGF0aEtleSh7IGVudiB9KV0sXG4gICAgICAgICAgICBwYXRoRXh0OiB3aXRob3V0UGF0aEV4dCA/IHBhdGguZGVsaW1pdGVyIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEVtcHR5ICovXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHNob3VsZFN3aXRjaEN3ZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5jaGRpcihjd2QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlc29sdmVkLCBlbnN1cmUgdGhhdCBhbiBhYnNvbHV0ZSBwYXRoIGlzIHJldHVybmVkXG4gICAgLy8gTm90ZSB0aGF0IHdoZW4gYSBjdXN0b20gYGN3ZGAgd2FzIHVzZWQsIHdlIG5lZWQgdG8gcmVzb2x2ZSB0byBhbiBhYnNvbHV0ZSBwYXRoIGJhc2VkIG9uIGl0XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgIHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGhhc0N1c3RvbUN3ZCA/IHBhcnNlZC5vcHRpb25zLmN3ZCA6ICcnLCByZXNvbHZlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZChwYXJzZWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCkgfHwgcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCwgdHJ1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzb2x2ZUNvbW1hbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vLyBTZWUgaHR0cDovL3d3dy5yb2J2YW5kZXJ3b3VkZS5jb20vZXNjYXBlY2hhcnMucGhwXG5jb25zdCBtZXRhQ2hhcnNSZWdFeHAgPSAvKFsoKVxcXVslIV5cImA8PiZ8OywgKj9dKS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVDb21tYW5kKGFyZykge1xuICAgIC8vIEVzY2FwZSBtZXRhIGNoYXJzXG4gICAgYXJnID0gYXJnLnJlcGxhY2UobWV0YUNoYXJzUmVnRXhwLCAnXiQxJyk7XG5cbiAgICByZXR1cm4gYXJnO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVBcmd1bWVudChhcmcsIGRvdWJsZUVzY2FwZU1ldGFDaGFycykge1xuICAgIC8vIENvbnZlcnQgdG8gc3RyaW5nXG4gICAgYXJnID0gYCR7YXJnfWA7XG5cbiAgICAvLyBBbGdvcml0aG0gYmVsb3cgaXMgYmFzZWQgb24gaHR0cHM6Ly9xbnRtLm9yZy9jbWRcbiAgICAvLyBJdCdzIHNsaWdodGx5IGFsdGVyZWQgdG8gZGlzYWJsZSBKUyBiYWNrdHJhY2tpbmcgdG8gYXZvaWQgaGFuZ2luZyBvbiBzcGVjaWFsbHkgY3JhZnRlZCBpbnB1dFxuICAgIC8vIFBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21veHlzdHVkaW8vbm9kZS1jcm9zcy1zcGF3bi9wdWxsLzE2MCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXG4gICAgLy8gU2VxdWVuY2Ugb2YgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGU6XG4gICAgLy8gZG91YmxlIHVwIGFsbCB0aGUgYmFja3NsYXNoZXMgYW5kIGVzY2FwZSB0aGUgZG91YmxlIHF1b3RlXG4gICAgYXJnID0gYXJnLnJlcGxhY2UoLyg/PShcXFxcKz8pPylcXDFcIi9nLCAnJDEkMVxcXFxcIicpO1xuXG4gICAgLy8gU2VxdWVuY2Ugb2YgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXG4gICAgLy8gKHdoaWNoIHdpbGwgYmVjb21lIGEgZG91YmxlIHF1b3RlIGxhdGVyKTpcbiAgICAvLyBkb3VibGUgdXAgYWxsIHRoZSBiYWNrc2xhc2hlc1xuICAgIGFyZyA9IGFyZy5yZXBsYWNlKC8oPz0oXFxcXCs/KT8pXFwxJC8sICckMSQxJyk7XG5cbiAgICAvLyBBbGwgb3RoZXIgYmFja3NsYXNoZXMgb2NjdXIgbGl0ZXJhbGx5XG5cbiAgICAvLyBRdW90ZSB0aGUgd2hvbGUgdGhpbmc6XG4gICAgYXJnID0gYFwiJHthcmd9XCJgO1xuXG4gICAgLy8gRXNjYXBlIG1ldGEgY2hhcnNcbiAgICBhcmcgPSBhcmcucmVwbGFjZShtZXRhQ2hhcnNSZWdFeHAsICdeJDEnKTtcblxuICAgIC8vIERvdWJsZSBlc2NhcGUgbWV0YSBjaGFycyBpZiBuZWNlc3NhcnlcbiAgICBpZiAoZG91YmxlRXNjYXBlTWV0YUNoYXJzKSB7XG4gICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG1ldGFDaGFyc1JlZ0V4cCwgJ14kMScpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmc7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbW1hbmQgPSBlc2NhcGVDb21tYW5kO1xubW9kdWxlLmV4cG9ydHMuYXJndW1lbnQgPSBlc2NhcGVBcmd1bWVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IC9eIyEoLiopLztcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzaGViYW5nUmVnZXggPSByZXF1aXJlKCdzaGViYW5nLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKHN0cmluZyA9ICcnKSA9PiB7XG5cdGNvbnN0IG1hdGNoID0gc3RyaW5nLm1hdGNoKHNoZWJhbmdSZWdleCk7XG5cblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Y29uc3QgW3BhdGgsIGFyZ3VtZW50XSA9IG1hdGNoWzBdLnJlcGxhY2UoLyMhID8vLCAnJykuc3BsaXQoJyAnKTtcblx0Y29uc3QgYmluYXJ5ID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuXG5cdGlmIChiaW5hcnkgPT09ICdlbnYnKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50O1xuXHR9XG5cblx0cmV0dXJuIGFyZ3VtZW50ID8gYCR7YmluYXJ5fSAke2FyZ3VtZW50fWAgOiBiaW5hcnk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3Qgc2hlYmFuZ0NvbW1hbmQgPSByZXF1aXJlKCdzaGViYW5nLWNvbW1hbmQnKTtcblxuZnVuY3Rpb24gcmVhZFNoZWJhbmcoY29tbWFuZCkge1xuICAgIC8vIFJlYWQgdGhlIGZpcnN0IDE1MCBieXRlcyBmcm9tIHRoZSBmaWxlXG4gICAgY29uc3Qgc2l6ZSA9IDE1MDtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2Moc2l6ZSk7XG5cbiAgICBsZXQgZmQ7XG5cbiAgICB0cnkge1xuICAgICAgICBmZCA9IGZzLm9wZW5TeW5jKGNvbW1hbmQsICdyJyk7XG4gICAgICAgIGZzLnJlYWRTeW5jKGZkLCBidWZmZXIsIDAsIHNpemUsIDApO1xuICAgICAgICBmcy5jbG9zZVN5bmMoZmQpO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogRW1wdHkgKi8gfVxuXG4gICAgLy8gQXR0ZW1wdCB0byBleHRyYWN0IHNoZWJhbmcgKG51bGwgaXMgcmV0dXJuZWQgaWYgbm90IGEgc2hlYmFuZylcbiAgICByZXR1cm4gc2hlYmFuZ0NvbW1hbmQoYnVmZmVyLnRvU3RyaW5nKCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWRTaGViYW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHJlc29sdmVDb21tYW5kID0gcmVxdWlyZSgnLi91dGlsL3Jlc29sdmVDb21tYW5kJyk7XG5jb25zdCBlc2NhcGUgPSByZXF1aXJlKCcuL3V0aWwvZXNjYXBlJyk7XG5jb25zdCByZWFkU2hlYmFuZyA9IHJlcXVpcmUoJy4vdXRpbC9yZWFkU2hlYmFuZycpO1xuXG5jb25zdCBpc1dpbiA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG5jb25zdCBpc0V4ZWN1dGFibGVSZWdFeHAgPSAvXFwuKD86Y29tfGV4ZSkkL2k7XG5jb25zdCBpc0NtZFNoaW1SZWdFeHAgPSAvbm9kZV9tb2R1bGVzW1xcXFwvXS5iaW5bXFxcXC9dW15cXFxcL10rXFwuY21kJC9pO1xuXG5mdW5jdGlvbiBkZXRlY3RTaGViYW5nKHBhcnNlZCkge1xuICAgIHBhcnNlZC5maWxlID0gcmVzb2x2ZUNvbW1hbmQocGFyc2VkKTtcblxuICAgIGNvbnN0IHNoZWJhbmcgPSBwYXJzZWQuZmlsZSAmJiByZWFkU2hlYmFuZyhwYXJzZWQuZmlsZSk7XG5cbiAgICBpZiAoc2hlYmFuZykge1xuICAgICAgICBwYXJzZWQuYXJncy51bnNoaWZ0KHBhcnNlZC5maWxlKTtcbiAgICAgICAgcGFyc2VkLmNvbW1hbmQgPSBzaGViYW5nO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlQ29tbWFuZChwYXJzZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQuZmlsZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOb25TaGVsbChwYXJzZWQpIHtcbiAgICBpZiAoIWlzV2luKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0ICYgYWRkIHN1cHBvcnQgZm9yIHNoZWJhbmdzXG4gICAgY29uc3QgY29tbWFuZEZpbGUgPSBkZXRlY3RTaGViYW5nKHBhcnNlZCk7XG5cbiAgICAvLyBXZSBkb24ndCBuZWVkIGEgc2hlbGwgaWYgdGhlIGNvbW1hbmQgZmlsZW5hbWUgaXMgYW4gZXhlY3V0YWJsZVxuICAgIGNvbnN0IG5lZWRzU2hlbGwgPSAhaXNFeGVjdXRhYmxlUmVnRXhwLnRlc3QoY29tbWFuZEZpbGUpO1xuXG4gICAgLy8gSWYgYSBzaGVsbCBpcyByZXF1aXJlZCwgdXNlIGNtZC5leGUgYW5kIHRha2UgY2FyZSBvZiBlc2NhcGluZyBldmVyeXRoaW5nIGNvcnJlY3RseVxuICAgIC8vIE5vdGUgdGhhdCBgZm9yY2VTaGVsbGAgaXMgYW4gaGlkZGVuIG9wdGlvbiB1c2VkIG9ubHkgaW4gdGVzdHNcbiAgICBpZiAocGFyc2VkLm9wdGlvbnMuZm9yY2VTaGVsbCB8fCBuZWVkc1NoZWxsKSB7XG4gICAgICAgIC8vIE5lZWQgdG8gZG91YmxlIGVzY2FwZSBtZXRhIGNoYXJzIGlmIHRoZSBjb21tYW5kIGlzIGEgY21kLXNoaW0gbG9jYXRlZCBpbiBgbm9kZV9tb2R1bGVzLy5iaW4vYFxuICAgICAgICAvLyBUaGUgY21kLXNoaW0gc2ltcGx5IGNhbGxzIGV4ZWN1dGUgdGhlIHBhY2thZ2UgYmluIGZpbGUgd2l0aCBOb2RlSlMsIHByb3h5aW5nIGFueSBhcmd1bWVudFxuICAgICAgICAvLyBCZWNhdXNlIHRoZSBlc2NhcGUgb2YgbWV0YWNoYXJzIHdpdGggXiBnZXRzIGludGVycHJldGVkIHdoZW4gdGhlIGNtZC5leGUgaXMgZmlyc3QgY2FsbGVkLFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvdWJsZSBlc2NhcGUgdGhlbVxuICAgICAgICBjb25zdCBuZWVkc0RvdWJsZUVzY2FwZU1ldGFDaGFycyA9IGlzQ21kU2hpbVJlZ0V4cC50ZXN0KGNvbW1hbmRGaWxlKTtcblxuICAgICAgICAvLyBOb3JtYWxpemUgcG9zaXggcGF0aHMgaW50byBPUyBjb21wYXRpYmxlIHBhdGhzIChlLmcuOiBmb28vYmFyIC0+IGZvb1xcYmFyKVxuICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgZmFpbCB3aXRoIEVOT0VOVCBpbiB0aG9zZSBjYXNlc1xuICAgICAgICBwYXJzZWQuY29tbWFuZCA9IHBhdGgubm9ybWFsaXplKHBhcnNlZC5jb21tYW5kKTtcblxuICAgICAgICAvLyBFc2NhcGUgY29tbWFuZCAmIGFyZ3VtZW50c1xuICAgICAgICBwYXJzZWQuY29tbWFuZCA9IGVzY2FwZS5jb21tYW5kKHBhcnNlZC5jb21tYW5kKTtcbiAgICAgICAgcGFyc2VkLmFyZ3MgPSBwYXJzZWQuYXJncy5tYXAoKGFyZykgPT4gZXNjYXBlLmFyZ3VtZW50KGFyZywgbmVlZHNEb3VibGVFc2NhcGVNZXRhQ2hhcnMpKTtcblxuICAgICAgICBjb25zdCBzaGVsbENvbW1hbmQgPSBbcGFyc2VkLmNvbW1hbmRdLmNvbmNhdChwYXJzZWQuYXJncykuam9pbignICcpO1xuXG4gICAgICAgIHBhcnNlZC5hcmdzID0gWycvZCcsICcvcycsICcvYycsIGBcIiR7c2hlbGxDb21tYW5kfVwiYF07XG4gICAgICAgIHBhcnNlZC5jb21tYW5kID0gcHJvY2Vzcy5lbnYuY29tc3BlYyB8fCAnY21kLmV4ZSc7XG4gICAgICAgIHBhcnNlZC5vcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyA9IHRydWU7IC8vIFRlbGwgbm9kZSdzIHNwYXduIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgYWxyZWFkeSBlc2NhcGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2UoY29tbWFuZCwgYXJncywgb3B0aW9ucykge1xuICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMsIHNpbWlsYXIgdG8gbm9kZWpzXG4gICAgaWYgKGFyZ3MgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZ3M7XG4gICAgICAgIGFyZ3MgPSBudWxsO1xuICAgIH1cblxuICAgIGFyZ3MgPSBhcmdzID8gYXJncy5zbGljZSgwKSA6IFtdOyAvLyBDbG9uZSBhcnJheSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgb3JpZ2luYWxcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7IC8vIENsb25lIG9iamVjdCB0byBhdm9pZCBjaGFuZ2luZyB0aGUgb3JpZ2luYWxcblxuICAgIC8vIEJ1aWxkIG91ciBwYXJzZWQgb2JqZWN0XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gRGVsZWdhdGUgZnVydGhlciBwYXJzaW5nIHRvIHNoZWxsIG9yIG5vbi1zaGVsbFxuICAgIHJldHVybiBvcHRpb25zLnNoZWxsID8gcGFyc2VkIDogcGFyc2VOb25TaGVsbChwYXJzZWQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNXaW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuXG5mdW5jdGlvbiBub3RGb3VuZEVycm9yKG9yaWdpbmFsLCBzeXNjYWxsKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGAke3N5c2NhbGx9ICR7b3JpZ2luYWwuY29tbWFuZH0gRU5PRU5UYCksIHtcbiAgICAgICAgY29kZTogJ0VOT0VOVCcsXG4gICAgICAgIGVycm5vOiAnRU5PRU5UJyxcbiAgICAgICAgc3lzY2FsbDogYCR7c3lzY2FsbH0gJHtvcmlnaW5hbC5jb21tYW5kfWAsXG4gICAgICAgIHBhdGg6IG9yaWdpbmFsLmNvbW1hbmQsXG4gICAgICAgIHNwYXduYXJnczogb3JpZ2luYWwuYXJncyxcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaG9va0NoaWxkUHJvY2VzcyhjcCwgcGFyc2VkKSB7XG4gICAgaWYgKCFpc1dpbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxFbWl0ID0gY3AuZW1pdDtcblxuICAgIGNwLmVtaXQgPSBmdW5jdGlvbiAobmFtZSwgYXJnMSkge1xuICAgICAgICAvLyBJZiBlbWl0dGluZyBcImV4aXRcIiBldmVudCBhbmQgZXhpdCBjb2RlIGlzIDEsIHdlIG5lZWQgdG8gY2hlY2sgaWZcbiAgICAgICAgLy8gdGhlIGNvbW1hbmQgZXhpc3RzIGFuZCBlbWl0IGFuIFwiZXJyb3JcIiBpbnN0ZWFkXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vSW5kaWdvVW5pdGVkL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzE2XG4gICAgICAgIGlmIChuYW1lID09PSAnZXhpdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IHZlcmlmeUVOT0VOVChhcmcxLCBwYXJzZWQpO1xuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRW1pdC5jYWxsKGNwLCAnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsRW1pdC5hcHBseShjcCwgYXJndW1lbnRzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlFTk9FTlQoc3RhdHVzLCBwYXJzZWQpIHtcbiAgICBpZiAoaXNXaW4gJiYgc3RhdHVzID09PSAxICYmICFwYXJzZWQuZmlsZSkge1xuICAgICAgICByZXR1cm4gbm90Rm91bmRFcnJvcihwYXJzZWQub3JpZ2luYWwsICdzcGF3bicpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlFTk9FTlRTeW5jKHN0YXR1cywgcGFyc2VkKSB7XG4gICAgaWYgKGlzV2luICYmIHN0YXR1cyA9PT0gMSAmJiAhcGFyc2VkLmZpbGUpIHtcbiAgICAgICAgcmV0dXJuIG5vdEZvdW5kRXJyb3IocGFyc2VkLm9yaWdpbmFsLCAnc3Bhd25TeW5jJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGhvb2tDaGlsZFByb2Nlc3MsXG4gICAgdmVyaWZ5RU5PRU5ULFxuICAgIHZlcmlmeUVOT0VOVFN5bmMsXG4gICAgbm90Rm91bmRFcnJvcixcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjcCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcbmNvbnN0IGVub2VudCA9IHJlcXVpcmUoJy4vbGliL2Vub2VudCcpO1xuXG5mdW5jdGlvbiBzcGF3bihjb21tYW5kLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgLy8gUGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gICAgLy8gU3Bhd24gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICBjb25zdCBzcGF3bmVkID0gY3Auc3Bhd24ocGFyc2VkLmNvbW1hbmQsIHBhcnNlZC5hcmdzLCBwYXJzZWQub3B0aW9ucyk7XG5cbiAgICAvLyBIb29rIGludG8gY2hpbGQgcHJvY2VzcyBcImV4aXRcIiBldmVudCB0byBlbWl0IGFuIGVycm9yIGlmIHRoZSBjb21tYW5kXG4gICAgLy8gZG9lcyBub3QgZXhpc3RzLCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9JbmRpZ29Vbml0ZWQvbm9kZS1jcm9zcy1zcGF3bi9pc3N1ZXMvMTZcbiAgICBlbm9lbnQuaG9va0NoaWxkUHJvY2VzcyhzcGF3bmVkLCBwYXJzZWQpO1xuXG4gICAgcmV0dXJuIHNwYXduZWQ7XG59XG5cbmZ1bmN0aW9uIHNwYXduU3luYyhjb21tYW5kLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgLy8gUGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gICAgLy8gU3Bhd24gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICBjb25zdCByZXN1bHQgPSBjcC5zcGF3blN5bmMocGFyc2VkLmNvbW1hbmQsIHBhcnNlZC5hcmdzLCBwYXJzZWQub3B0aW9ucyk7XG5cbiAgICAvLyBBbmFseXplIGlmIHRoZSBjb21tYW5kIGRvZXMgbm90IGV4aXN0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9JbmRpZ29Vbml0ZWQvbm9kZS1jcm9zcy1zcGF3bi9pc3N1ZXMvMTZcbiAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgZW5vZW50LnZlcmlmeUVOT0VOVFN5bmMocmVzdWx0LnN0YXR1cywgcGFyc2VkKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3Bhd247XG5tb2R1bGUuZXhwb3J0cy5zcGF3biA9IHNwYXduO1xubW9kdWxlLmV4cG9ydHMuc3luYyA9IHNwYXduU3luYztcblxubW9kdWxlLmV4cG9ydHMuX3BhcnNlID0gcGFyc2U7XG5tb2R1bGUuZXhwb3J0cy5fZW5vZW50ID0gZW5vZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBpbnB1dCA9PiB7XG5cdGNvbnN0IExGID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/ICdcXG4nIDogJ1xcbicuY2hhckNvZGVBdCgpO1xuXHRjb25zdCBDUiA9IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyAnXFxyJyA6ICdcXHInLmNoYXJDb2RlQXQoKTtcblxuXHRpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gPT09IExGKSB7XG5cdFx0aW5wdXQgPSBpbnB1dC5zbGljZSgwLCBpbnB1dC5sZW5ndGggLSAxKTtcblx0fVxuXG5cdGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSA9PT0gQ1IpIHtcblx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKDAsIGlucHV0Lmxlbmd0aCAtIDEpO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgcGF0aEtleSA9IHJlcXVpcmUoJ3BhdGgta2V5Jyk7XG5cbmNvbnN0IG5wbVJ1blBhdGggPSBvcHRpb25zID0+IHtcblx0b3B0aW9ucyA9IHtcblx0XHRjd2Q6IHByb2Nlc3MuY3dkKCksXG5cdFx0cGF0aDogcHJvY2Vzcy5lbnZbcGF0aEtleSgpXSxcblx0XHRleGVjUGF0aDogcHJvY2Vzcy5leGVjUGF0aCxcblx0XHQuLi5vcHRpb25zXG5cdH07XG5cblx0bGV0IHByZXZpb3VzO1xuXHRsZXQgY3dkUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmN3ZCk7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdHdoaWxlIChwcmV2aW91cyAhPT0gY3dkUGF0aCkge1xuXHRcdHJlc3VsdC5wdXNoKHBhdGguam9pbihjd2RQYXRoLCAnbm9kZV9tb2R1bGVzLy5iaW4nKSk7XG5cdFx0cHJldmlvdXMgPSBjd2RQYXRoO1xuXHRcdGN3ZFBhdGggPSBwYXRoLnJlc29sdmUoY3dkUGF0aCwgJy4uJyk7XG5cdH1cblxuXHQvLyBFbnN1cmUgdGhlIHJ1bm5pbmcgYG5vZGVgIGJpbmFyeSBpcyB1c2VkXG5cdGNvbnN0IGV4ZWNQYXRoRGlyID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuY3dkLCBvcHRpb25zLmV4ZWNQYXRoLCAnLi4nKTtcblx0cmVzdWx0LnB1c2goZXhlY1BhdGhEaXIpO1xuXG5cdHJldHVybiByZXN1bHQuY29uY2F0KG9wdGlvbnMucGF0aCkuam9pbihwYXRoLmRlbGltaXRlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5wbVJ1blBhdGg7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG5wbVJ1blBhdGg7XG5cbm1vZHVsZS5leHBvcnRzLmVudiA9IG9wdGlvbnMgPT4ge1xuXHRvcHRpb25zID0ge1xuXHRcdGVudjogcHJvY2Vzcy5lbnYsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IGVudiA9IHsuLi5vcHRpb25zLmVudn07XG5cdGNvbnN0IHBhdGggPSBwYXRoS2V5KHtlbnZ9KTtcblxuXHRvcHRpb25zLnBhdGggPSBlbnZbcGF0aF07XG5cdGVudltwYXRoXSA9IG1vZHVsZS5leHBvcnRzKG9wdGlvbnMpO1xuXG5cdHJldHVybiBlbnY7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbWltaWNGbiA9ICh0bywgZnJvbSkgPT4ge1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3ApKTtcblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltaWNGbjtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbWltaWNGbjtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBtaW1pY0ZuID0gcmVxdWlyZSgnbWltaWMtZm4nKTtcblxuY29uc3QgY2FsbGVkRnVuY3Rpb25zID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3Qgb25ldGltZSA9IChmdW5jdGlvbl8sIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIGZ1bmN0aW9uXyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZTtcblx0bGV0IGNhbGxDb3VudCA9IDA7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uXy5kaXNwbGF5TmFtZSB8fCBmdW5jdGlvbl8ubmFtZSB8fCAnPGFub255bW91cz4nO1xuXG5cdGNvbnN0IG9uZXRpbWUgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgKytjYWxsQ291bnQpO1xuXG5cdFx0aWYgKGNhbGxDb3VudCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBmdW5jdGlvbl8uYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdFx0XHRmdW5jdGlvbl8gPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy50aHJvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBcXGAke2Z1bmN0aW9uTmFtZX1cXGAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH07XG5cblx0bWltaWNGbihvbmV0aW1lLCBmdW5jdGlvbl8pO1xuXHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsIGNhbGxDb3VudCk7XG5cblx0cmV0dXJuIG9uZXRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZXRpbWU7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG9uZXRpbWU7XG5cbm1vZHVsZS5leHBvcnRzLmNhbGxDb3VudCA9IGZ1bmN0aW9uXyA9PiB7XG5cdGlmICghY2FsbGVkRnVuY3Rpb25zLmhhcyhmdW5jdGlvbl8pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBUaGUgZ2l2ZW4gZnVuY3Rpb24gXFxgJHtmdW5jdGlvbl8ubmFtZX1cXGAgaXMgbm90IHdyYXBwZWQgYnkgdGhlIFxcYG9uZXRpbWVcXGAgcGFja2FnZWApO1xuXHR9XG5cblx0cmV0dXJuIGNhbGxlZEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25fKTtcbn07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vLyBMaXN0IG9mIGtub3duIHByb2Nlc3Mgc2lnbmFscyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZW1cbmV4cG9ydCBjb25zdCBTSUdOQUxTID0gW1xuICB7XG4gICAgbmFtZTogJ1NJR0hVUCcsXG4gICAgbnVtYmVyOiAxLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdUZXJtaW5hbCBjbG9zZWQnLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR0lOVCcsXG4gICAgbnVtYmVyOiAyLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtQycsXG4gICAgc3RhbmRhcmQ6ICdhbnNpJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdRVUlUJyxcbiAgICBudW1iZXI6IDMsXG4gICAgYWN0aW9uOiAnY29yZScsXG4gICAgZGVzY3JpcHRpb246ICdVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtXFxcXCcsXG4gICAgc3RhbmRhcmQ6ICdwb3NpeCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHSUxMJyxcbiAgICBudW1iZXI6IDQsXG4gICAgYWN0aW9uOiAnY29yZScsXG4gICAgZGVzY3JpcHRpb246ICdJbnZhbGlkIG1hY2hpbmUgaW5zdHJ1Y3Rpb24nLFxuICAgIHN0YW5kYXJkOiAnYW5zaScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVFJBUCcsXG4gICAgbnVtYmVyOiA1LFxuICAgIGFjdGlvbjogJ2NvcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVidWdnZXIgYnJlYWtwb2ludCcsXG4gICAgc3RhbmRhcmQ6ICdwb3NpeCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHQUJSVCcsXG4gICAgbnVtYmVyOiA2LFxuICAgIGFjdGlvbjogJ2NvcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQWJvcnRlZCcsXG4gICAgc3RhbmRhcmQ6ICdhbnNpJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdJT1QnLFxuICAgIG51bWJlcjogNixcbiAgICBhY3Rpb246ICdjb3JlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Fib3J0ZWQnLFxuICAgIHN0YW5kYXJkOiAnYnNkJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdCVVMnLFxuICAgIG51bWJlcjogNyxcbiAgICBhY3Rpb246ICdjb3JlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdCdXMgZXJyb3IgZHVlIHRvIG1pc2FsaWduZWQsIG5vbi1leGlzdGluZyBhZGRyZXNzIG9yIHBhZ2luZyBlcnJvcicsXG4gICAgc3RhbmRhcmQ6ICdic2QnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR0VNVCcsXG4gICAgbnVtYmVyOiA3LFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdDb21tYW5kIHNob3VsZCBiZSBlbXVsYXRlZCBidXQgaXMgbm90IGltcGxlbWVudGVkJyxcbiAgICBzdGFuZGFyZDogJ290aGVyJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdGUEUnLFxuICAgIG51bWJlcjogOCxcbiAgICBhY3Rpb246ICdjb3JlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Zsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZXJyb3InLFxuICAgIHN0YW5kYXJkOiAnYW5zaScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHS0lMTCcsXG4gICAgbnVtYmVyOiA5LFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdGb3JjZWQgdGVybWluYXRpb24nLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICAgIGZvcmNlZDogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdVU1IxJyxcbiAgICBudW1iZXI6IDEwLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbi1zcGVjaWZpYyBzaWduYWwnLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1NFR1YnLFxuICAgIG51bWJlcjogMTEsXG4gICAgYWN0aW9uOiAnY29yZScsXG4gICAgZGVzY3JpcHRpb246ICdTZWdtZW50YXRpb24gZmF1bHQnLFxuICAgIHN0YW5kYXJkOiAnYW5zaScsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVVNSMicsXG4gICAgbnVtYmVyOiAxMixcbiAgICBhY3Rpb246ICd0ZXJtaW5hdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsJyxcbiAgICBzdGFuZGFyZDogJ3Bvc2l4JyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdQSVBFJyxcbiAgICBudW1iZXI6IDEzLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdCcm9rZW4gcGlwZSBvciBzb2NrZXQnLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR0FMUk0nLFxuICAgIG51bWJlcjogMTQsXG4gICAgYWN0aW9uOiAndGVybWluYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RpbWVvdXQgb3IgdGltZXInLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1RFUk0nLFxuICAgIG51bWJlcjogMTUsXG4gICAgYWN0aW9uOiAndGVybWluYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmF0aW9uJyxcbiAgICBzdGFuZGFyZDogJ2Fuc2knLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1NUS0ZMVCcsXG4gICAgbnVtYmVyOiAxNixcbiAgICBhY3Rpb246ICd0ZXJtaW5hdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnU3RhY2sgaXMgZW1wdHkgb3Igb3ZlcmZsb3dlZCcsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHQ0hMRCcsXG4gICAgbnVtYmVyOiAxNyxcbiAgICBhY3Rpb246ICdpZ25vcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBwYXVzZWQgb3IgdW5wYXVzZWQnLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR0NMRCcsXG4gICAgbnVtYmVyOiAxNyxcbiAgICBhY3Rpb246ICdpZ25vcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBwYXVzZWQgb3IgdW5wYXVzZWQnLFxuICAgIHN0YW5kYXJkOiAnb3RoZXInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR0NPTlQnLFxuICAgIG51bWJlcjogMTgsXG4gICAgYWN0aW9uOiAndW5wYXVzZScsXG4gICAgZGVzY3JpcHRpb246ICdVbnBhdXNlZCcsXG4gICAgc3RhbmRhcmQ6ICdwb3NpeCcsXG4gICAgZm9yY2VkOiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1NUT1AnLFxuICAgIG51bWJlcjogMTksXG4gICAgYWN0aW9uOiAncGF1c2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGF1c2VkJyxcbiAgICBzdGFuZGFyZDogJ3Bvc2l4JyxcbiAgICBmb3JjZWQ6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVFNUUCcsXG4gICAgbnVtYmVyOiAyMCxcbiAgICBhY3Rpb246ICdwYXVzZScsXG4gICAgZGVzY3JpcHRpb246ICdQYXVzZWQgdXNpbmcgQ1RSTC1aIG9yIFwic3VzcGVuZFwiJyxcbiAgICBzdGFuZGFyZDogJ3Bvc2l4JyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdUVElOJyxcbiAgICBudW1iZXI6IDIxLFxuICAgIGFjdGlvbjogJ3BhdXNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JhY2tncm91bmQgcHJvY2VzcyBjYW5ub3QgcmVhZCB0ZXJtaW5hbCBpbnB1dCcsXG4gICAgc3RhbmRhcmQ6ICdwb3NpeCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHQlJFQUsnLFxuICAgIG51bWJlcjogMjEsXG4gICAgYWN0aW9uOiAndGVybWluYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW50ZXJydXB0aW9uIHdpdGggQ1RSTC1CUkVBSycsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVFRPVScsXG4gICAgbnVtYmVyOiAyMixcbiAgICBhY3Rpb246ICdwYXVzZScsXG4gICAgZGVzY3JpcHRpb246ICdCYWNrZ3JvdW5kIHByb2Nlc3MgY2Fubm90IHdyaXRlIHRvIHRlcm1pbmFsIG91dHB1dCcsXG4gICAgc3RhbmRhcmQ6ICdwb3NpeCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVVJHJyxcbiAgICBudW1iZXI6IDIzLFxuICAgIGFjdGlvbjogJ2lnbm9yZScsXG4gICAgZGVzY3JpcHRpb246ICdTb2NrZXQgcmVjZWl2ZWQgb3V0LW9mLWJhbmQgZGF0YScsXG4gICAgc3RhbmRhcmQ6ICdic2QnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1hDUFUnLFxuICAgIG51bWJlcjogMjQsXG4gICAgYWN0aW9uOiAnY29yZScsXG4gICAgZGVzY3JpcHRpb246ICdQcm9jZXNzIHRpbWVkIG91dCcsXG4gICAgc3RhbmRhcmQ6ICdic2QnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NJR1hGU1onLFxuICAgIG51bWJlcjogMjUsXG4gICAgYWN0aW9uOiAnY29yZScsXG4gICAgZGVzY3JpcHRpb246ICdGaWxlIHRvbyBiaWcnLFxuICAgIHN0YW5kYXJkOiAnYnNkJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdWVEFMUk0nLFxuICAgIG51bWJlcjogMjYsXG4gICAgYWN0aW9uOiAndGVybWluYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RpbWVvdXQgb3IgdGltZXInLFxuICAgIHN0YW5kYXJkOiAnYnNkJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdQUk9GJyxcbiAgICBudW1iZXI6IDI3LFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdUaW1lb3V0IG9yIHRpbWVyJyxcbiAgICBzdGFuZGFyZDogJ2JzZCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHV0lOQ0gnLFxuICAgIG51bWJlcjogMjgsXG4gICAgYWN0aW9uOiAnaWdub3JlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmFsIHdpbmRvdyBzaXplIGNoYW5nZWQnLFxuICAgIHN0YW5kYXJkOiAnYnNkJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdTSUdJTycsXG4gICAgbnVtYmVyOiAyOSxcbiAgICBhY3Rpb246ICd0ZXJtaW5hdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnSS9PIGlzIGF2YWlsYWJsZScsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHUE9MTCcsXG4gICAgbnVtYmVyOiAyOSxcbiAgICBhY3Rpb246ICd0ZXJtaW5hdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnV2F0Y2hlZCBldmVudCcsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHSU5GTycsXG4gICAgbnVtYmVyOiAyOSxcbiAgICBhY3Rpb246ICdpZ25vcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBmb3IgcHJvY2VzcyBpbmZvcm1hdGlvbicsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHUFdSJyxcbiAgICBudW1iZXI6IDMwLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdEZXZpY2UgcnVubmluZyBvdXQgb2YgcG93ZXInLFxuICAgIHN0YW5kYXJkOiAnc3lzdGVtdicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHU1lTJyxcbiAgICBudW1iZXI6IDMxLFxuICAgIGFjdGlvbjogJ2NvcmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnSW52YWxpZCBzeXN0ZW0gY2FsbCcsXG4gICAgc3RhbmRhcmQ6ICdvdGhlcicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU0lHVU5VU0VEJyxcbiAgICBudW1iZXI6IDMxLFxuICAgIGFjdGlvbjogJ3Rlcm1pbmF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdJbnZhbGlkIHN5c3RlbSBjYWxsJyxcbiAgICBzdGFuZGFyZDogJ290aGVyJyxcbiAgfSxcbl1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxpbmVzICovXG4iLCAiLy8gTGlzdCBvZiByZWFsdGltZSBzaWduYWxzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlbVxuZXhwb3J0IGNvbnN0IGdldFJlYWx0aW1lU2lnbmFscyA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCBsZW5ndGggPSBTSUdSVE1BWCAtIFNJR1JUTUlOICsgMVxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCBnZXRSZWFsdGltZVNpZ25hbClcbn1cblxuY29uc3QgZ2V0UmVhbHRpbWVTaWduYWwgPSBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBgU0lHUlQke2luZGV4ICsgMX1gLFxuICAgIG51bWJlcjogU0lHUlRNSU4gKyBpbmRleCxcbiAgICBhY3Rpb246ICd0ZXJtaW5hdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsIChyZWFsdGltZSknLFxuICAgIHN0YW5kYXJkOiAncG9zaXgnLFxuICB9XG59XG5cbmNvbnN0IFNJR1JUTUlOID0gMzRcbmV4cG9ydCBjb25zdCBTSUdSVE1BWCA9IDY0XG4iLCAiaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnb3MnXG5cbmltcG9ydCB7IFNJR05BTFMgfSBmcm9tICcuL2NvcmUuanMnXG5pbXBvcnQgeyBnZXRSZWFsdGltZVNpZ25hbHMgfSBmcm9tICcuL3JlYWx0aW1lLmpzJ1xuXG4vLyBSZXRyaWV2ZSBsaXN0IG9mIGtub3cgc2lnbmFscyAoaW5jbHVkaW5nIHJlYWx0aW1lKSB3aXRoIGluZm9ybWF0aW9uIGFib3V0XG4vLyB0aGVtXG5leHBvcnQgY29uc3QgZ2V0U2lnbmFscyA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCByZWFsdGltZVNpZ25hbHMgPSBnZXRSZWFsdGltZVNpZ25hbHMoKVxuICBjb25zdCBzaWduYWxzID0gWy4uLlNJR05BTFMsIC4uLnJlYWx0aW1lU2lnbmFsc10ubWFwKG5vcm1hbGl6ZVNpZ25hbClcbiAgcmV0dXJuIHNpZ25hbHNcbn1cblxuLy8gTm9ybWFsaXplIHNpZ25hbDpcbi8vICAtIGBudW1iZXJgOiBzaWduYWwgbnVtYmVycyBhcmUgT1Mtc3BlY2lmaWMuIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50IGJ5XG4vLyAgICBgb3MuY29uc3RhbnRzLnNpZ25hbHNgLiBIb3dldmVyIHdlIHByb3ZpZGUgYSBkZWZhdWx0IGBudW1iZXJgIHNpbmNlIHNvbWVcbi8vICAgICBzaWduYWxzIGFyZSBub3QgZGVmaW5lZCBmb3Igc29tZSBPUy5cbi8vICAtIGBmb3JjZWRgOiBzZXQgZGVmYXVsdCB0byBgZmFsc2VgXG4vLyAgLSBgc3VwcG9ydGVkYDogc2V0IHZhbHVlXG5jb25zdCBub3JtYWxpemVTaWduYWwgPSBmdW5jdGlvbih7XG4gIG5hbWUsXG4gIG51bWJlcjogZGVmYXVsdE51bWJlcixcbiAgZGVzY3JpcHRpb24sXG4gIGFjdGlvbixcbiAgZm9yY2VkID0gZmFsc2UsXG4gIHN0YW5kYXJkLFxufSkge1xuICBjb25zdCB7XG4gICAgc2lnbmFsczogeyBbbmFtZV06IGNvbnN0YW50U2lnbmFsIH0sXG4gIH0gPSBjb25zdGFudHNcbiAgY29uc3Qgc3VwcG9ydGVkID0gY29uc3RhbnRTaWduYWwgIT09IHVuZGVmaW5lZFxuICBjb25zdCBudW1iZXIgPSBzdXBwb3J0ZWQgPyBjb25zdGFudFNpZ25hbCA6IGRlZmF1bHROdW1iZXJcbiAgcmV0dXJuIHsgbmFtZSwgbnVtYmVyLCBkZXNjcmlwdGlvbiwgc3VwcG9ydGVkLCBhY3Rpb24sIGZvcmNlZCwgc3RhbmRhcmQgfVxufVxuIiwgImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ29zJ1xuXG5pbXBvcnQgeyBnZXRTaWduYWxzIH0gZnJvbSAnLi9zaWduYWxzLmpzJ1xuaW1wb3J0IHsgU0lHUlRNQVggfSBmcm9tICcuL3JlYWx0aW1lLmpzJ1xuXG4vLyBSZXRyaWV2ZSBgc2lnbmFsc0J5TmFtZWAsIGFuIG9iamVjdCBtYXBwaW5nIHNpZ25hbCBuYW1lIHRvIHNpZ25hbCBwcm9wZXJ0aWVzLlxuLy8gV2UgbWFrZSBzdXJlIHRoZSBvYmplY3QgaXMgc29ydGVkIGJ5IGBudW1iZXJgLlxuY29uc3QgZ2V0U2lnbmFsc0J5TmFtZSA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCBzaWduYWxzID0gZ2V0U2lnbmFscygpXG4gIHJldHVybiBzaWduYWxzLnJlZHVjZShnZXRTaWduYWxCeU5hbWUsIHt9KVxufVxuXG5jb25zdCBnZXRTaWduYWxCeU5hbWUgPSBmdW5jdGlvbihcbiAgc2lnbmFsQnlOYW1lTWVtbyxcbiAgeyBuYW1lLCBudW1iZXIsIGRlc2NyaXB0aW9uLCBzdXBwb3J0ZWQsIGFjdGlvbiwgZm9yY2VkLCBzdGFuZGFyZCB9LFxuKSB7XG4gIHJldHVybiB7XG4gICAgLi4uc2lnbmFsQnlOYW1lTWVtbyxcbiAgICBbbmFtZV06IHsgbmFtZSwgbnVtYmVyLCBkZXNjcmlwdGlvbiwgc3VwcG9ydGVkLCBhY3Rpb24sIGZvcmNlZCwgc3RhbmRhcmQgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2lnbmFsc0J5TmFtZSA9IGdldFNpZ25hbHNCeU5hbWUoKVxuXG4vLyBSZXRyaWV2ZSBgc2lnbmFsc0J5TnVtYmVyYCwgYW4gb2JqZWN0IG1hcHBpbmcgc2lnbmFsIG51bWJlciB0byBzaWduYWxcbi8vIHByb3BlcnRpZXMuXG4vLyBXZSBtYWtlIHN1cmUgdGhlIG9iamVjdCBpcyBzb3J0ZWQgYnkgYG51bWJlcmAuXG5jb25zdCBnZXRTaWduYWxzQnlOdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgY29uc3Qgc2lnbmFscyA9IGdldFNpZ25hbHMoKVxuICBjb25zdCBsZW5ndGggPSBTSUdSVE1BWCArIDFcbiAgY29uc3Qgc2lnbmFsc0EgPSBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sICh2YWx1ZSwgbnVtYmVyKSA9PlxuICAgIGdldFNpZ25hbEJ5TnVtYmVyKG51bWJlciwgc2lnbmFscyksXG4gIClcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnNpZ25hbHNBKVxufVxuXG5jb25zdCBnZXRTaWduYWxCeU51bWJlciA9IGZ1bmN0aW9uKG51bWJlciwgc2lnbmFscykge1xuICBjb25zdCBzaWduYWwgPSBmaW5kU2lnbmFsQnlOdW1iZXIobnVtYmVyLCBzaWduYWxzKVxuXG4gIGlmIChzaWduYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc3VwcG9ydGVkLCBhY3Rpb24sIGZvcmNlZCwgc3RhbmRhcmQgfSA9IHNpZ25hbFxuICByZXR1cm4ge1xuICAgIFtudW1iZXJdOiB7XG4gICAgICBuYW1lLFxuICAgICAgbnVtYmVyLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdXBwb3J0ZWQsXG4gICAgICBhY3Rpb24sXG4gICAgICBmb3JjZWQsXG4gICAgICBzdGFuZGFyZCxcbiAgICB9LFxuICB9XG59XG5cbi8vIFNldmVyYWwgc2lnbmFscyBtaWdodCBlbmQgdXAgc2hhcmluZyB0aGUgc2FtZSBudW1iZXIgYmVjYXVzZSBvZiBPUy1zcGVjaWZpY1xuLy8gbnVtYmVycywgaW4gd2hpY2ggY2FzZSB0aG9zZSBwcmV2YWlsLlxuY29uc3QgZmluZFNpZ25hbEJ5TnVtYmVyID0gZnVuY3Rpb24obnVtYmVyLCBzaWduYWxzKSB7XG4gIGNvbnN0IHNpZ25hbCA9IHNpZ25hbHMuZmluZCgoeyBuYW1lIH0pID0+IGNvbnN0YW50cy5zaWduYWxzW25hbWVdID09PSBudW1iZXIpXG5cbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNpZ25hbFxuICB9XG5cbiAgcmV0dXJuIHNpZ25hbHMuZmluZChzaWduYWxBID0+IHNpZ25hbEEubnVtYmVyID09PSBudW1iZXIpXG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzQnlOdW1iZXIgPSBnZXRTaWduYWxzQnlOdW1iZXIoKVxuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtzaWduYWxzQnlOYW1lfSA9IHJlcXVpcmUoJ2h1bWFuLXNpZ25hbHMnKTtcblxuY29uc3QgZ2V0RXJyb3JQcmVmaXggPSAoe3RpbWVkT3V0LCB0aW1lb3V0LCBlcnJvckNvZGUsIHNpZ25hbCwgc2lnbmFsRGVzY3JpcHRpb24sIGV4aXRDb2RlLCBpc0NhbmNlbGVkfSkgPT4ge1xuXHRpZiAodGltZWRPdXQpIHtcblx0XHRyZXR1cm4gYHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9IG1pbGxpc2Vjb25kc2A7XG5cdH1cblxuXHRpZiAoaXNDYW5jZWxlZCkge1xuXHRcdHJldHVybiAnd2FzIGNhbmNlbGVkJztcblx0fVxuXG5cdGlmIChlcnJvckNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgZmFpbGVkIHdpdGggJHtlcnJvckNvZGV9YDtcblx0fVxuXG5cdGlmIChzaWduYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgd2FzIGtpbGxlZCB3aXRoICR7c2lnbmFsfSAoJHtzaWduYWxEZXNjcmlwdGlvbn0pYDtcblx0fVxuXG5cdGlmIChleGl0Q29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX1gO1xuXHR9XG5cblx0cmV0dXJuICdmYWlsZWQnO1xufTtcblxuY29uc3QgbWFrZUVycm9yID0gKHtcblx0c3Rkb3V0LFxuXHRzdGRlcnIsXG5cdGFsbCxcblx0ZXJyb3IsXG5cdHNpZ25hbCxcblx0ZXhpdENvZGUsXG5cdGNvbW1hbmQsXG5cdGVzY2FwZWRDb21tYW5kLFxuXHR0aW1lZE91dCxcblx0aXNDYW5jZWxlZCxcblx0a2lsbGVkLFxuXHRwYXJzZWQ6IHtvcHRpb25zOiB7dGltZW91dH19XG59KSA9PiB7XG5cdC8vIGBzaWduYWxgIGFuZCBgZXhpdENvZGVgIGVtaXR0ZWQgb24gYHNwYXduZWQub24oJ2V4aXQnKWAgZXZlbnQgY2FuIGJlIGBudWxsYC5cblx0Ly8gV2Ugbm9ybWFsaXplIHRoZW0gdG8gYHVuZGVmaW5lZGBcblx0ZXhpdENvZGUgPSBleGl0Q29kZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGV4aXRDb2RlO1xuXHRzaWduYWwgPSBzaWduYWwgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzaWduYWw7XG5cdGNvbnN0IHNpZ25hbERlc2NyaXB0aW9uID0gc2lnbmFsID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzaWduYWxzQnlOYW1lW3NpZ25hbF0uZGVzY3JpcHRpb247XG5cblx0Y29uc3QgZXJyb3JDb2RlID0gZXJyb3IgJiYgZXJyb3IuY29kZTtcblxuXHRjb25zdCBwcmVmaXggPSBnZXRFcnJvclByZWZpeCh7dGltZWRPdXQsIHRpbWVvdXQsIGVycm9yQ29kZSwgc2lnbmFsLCBzaWduYWxEZXNjcmlwdGlvbiwgZXhpdENvZGUsIGlzQ2FuY2VsZWR9KTtcblx0Y29uc3QgZXhlY2FNZXNzYWdlID0gYENvbW1hbmQgJHtwcmVmaXh9OiAke2NvbW1hbmR9YDtcblx0Y29uc3QgaXNFcnJvciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnJvcikgPT09ICdbb2JqZWN0IEVycm9yXSc7XG5cdGNvbnN0IHNob3J0TWVzc2FnZSA9IGlzRXJyb3IgPyBgJHtleGVjYU1lc3NhZ2V9XFxuJHtlcnJvci5tZXNzYWdlfWAgOiBleGVjYU1lc3NhZ2U7XG5cdGNvbnN0IG1lc3NhZ2UgPSBbc2hvcnRNZXNzYWdlLCBzdGRlcnIsIHN0ZG91dF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXG5cdGlmIChpc0Vycm9yKSB7XG5cdFx0ZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcblx0XHRlcnJvci5tZXNzYWdlID0gbWVzc2FnZTtcblx0fSBlbHNlIHtcblx0XHRlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0fVxuXG5cdGVycm9yLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTtcblx0ZXJyb3IuY29tbWFuZCA9IGNvbW1hbmQ7XG5cdGVycm9yLmVzY2FwZWRDb21tYW5kID0gZXNjYXBlZENvbW1hbmQ7XG5cdGVycm9yLmV4aXRDb2RlID0gZXhpdENvZGU7XG5cdGVycm9yLnNpZ25hbCA9IHNpZ25hbDtcblx0ZXJyb3Iuc2lnbmFsRGVzY3JpcHRpb24gPSBzaWduYWxEZXNjcmlwdGlvbjtcblx0ZXJyb3Iuc3Rkb3V0ID0gc3Rkb3V0O1xuXHRlcnJvci5zdGRlcnIgPSBzdGRlcnI7XG5cblx0aWYgKGFsbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZXJyb3IuYWxsID0gYWxsO1xuXHR9XG5cblx0aWYgKCdidWZmZXJlZERhdGEnIGluIGVycm9yKSB7XG5cdFx0ZGVsZXRlIGVycm9yLmJ1ZmZlcmVkRGF0YTtcblx0fVxuXG5cdGVycm9yLmZhaWxlZCA9IHRydWU7XG5cdGVycm9yLnRpbWVkT3V0ID0gQm9vbGVhbih0aW1lZE91dCk7XG5cdGVycm9yLmlzQ2FuY2VsZWQgPSBpc0NhbmNlbGVkO1xuXHRlcnJvci5raWxsZWQgPSBraWxsZWQgJiYgIXRpbWVkT3V0O1xuXG5cdHJldHVybiBlcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWFrZUVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFsaWFzZXMgPSBbJ3N0ZGluJywgJ3N0ZG91dCcsICdzdGRlcnInXTtcblxuY29uc3QgaGFzQWxpYXMgPSBvcHRpb25zID0+IGFsaWFzZXMuc29tZShhbGlhcyA9PiBvcHRpb25zW2FsaWFzXSAhPT0gdW5kZWZpbmVkKTtcblxuY29uc3Qgbm9ybWFsaXplU3RkaW8gPSBvcHRpb25zID0+IHtcblx0aWYgKCFvcHRpb25zKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qge3N0ZGlvfSA9IG9wdGlvbnM7XG5cblx0aWYgKHN0ZGlvID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gYWxpYXNlcy5tYXAoYWxpYXMgPT4gb3B0aW9uc1thbGlhc10pO1xuXHR9XG5cblx0aWYgKGhhc0FsaWFzKG9wdGlvbnMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBJdCdzIG5vdCBwb3NzaWJsZSB0byBwcm92aWRlIFxcYHN0ZGlvXFxgIGluIGNvbWJpbmF0aW9uIHdpdGggb25lIG9mICR7YWxpYXNlcy5tYXAoYWxpYXMgPT4gYFxcYCR7YWxpYXN9XFxgYCkuam9pbignLCAnKX1gKTtcblx0fVxuXG5cdGlmICh0eXBlb2Ygc3RkaW8gPT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHN0ZGlvO1xuXHR9XG5cblx0aWYgKCFBcnJheS5pc0FycmF5KHN0ZGlvKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYHN0ZGlvXFxgIHRvIGJlIG9mIHR5cGUgXFxgc3RyaW5nXFxgIG9yIFxcYEFycmF5XFxgLCBnb3QgXFxgJHt0eXBlb2Ygc3RkaW99XFxgYCk7XG5cdH1cblxuXHRjb25zdCBsZW5ndGggPSBNYXRoLm1heChzdGRpby5sZW5ndGgsIGFsaWFzZXMubGVuZ3RoKTtcblx0cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aH0sICh2YWx1ZSwgaW5kZXgpID0+IHN0ZGlvW2luZGV4XSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vcm1hbGl6ZVN0ZGlvO1xuXG4vLyBgaXBjYCBpcyBwdXNoZWQgdW5sZXNzIGl0IGlzIGFscmVhZHkgcHJlc2VudFxubW9kdWxlLmV4cG9ydHMubm9kZSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBzdGRpbyA9IG5vcm1hbGl6ZVN0ZGlvKG9wdGlvbnMpO1xuXG5cdGlmIChzdGRpbyA9PT0gJ2lwYycpIHtcblx0XHRyZXR1cm4gJ2lwYyc7XG5cdH1cblxuXHRpZiAoc3RkaW8gPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygc3RkaW8gPT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIFtzdGRpbywgc3RkaW8sIHN0ZGlvLCAnaXBjJ107XG5cdH1cblxuXHRpZiAoc3RkaW8uaW5jbHVkZXMoJ2lwYycpKSB7XG5cdFx0cmV0dXJuIHN0ZGlvO1xuXHR9XG5cblx0cmV0dXJuIFsuLi5zdGRpbywgJ2lwYyddO1xufTtcbiIsICIvLyBUaGlzIGlzIG5vdCB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzaWduYWxzLlxuLy9cbi8vIEl0IElTLCBob3dldmVyLCB0aGUgc2V0IG9mIGFsbCBzaWduYWxzIHRoYXQgdHJpZ2dlclxuLy8gYW4gZXhpdCBvbiBlaXRoZXIgTGludXggb3IgQlNEIHN5c3RlbXMuICBMaW51eCBpcyBhXG4vLyBzdXBlcnNldCBvZiB0aGUgc2lnbmFsIG5hbWVzIHN1cHBvcnRlZCBvbiBCU0QsIGFuZFxuLy8gdGhlIHVua25vd24gc2lnbmFscyBqdXN0IGZhaWwgdG8gcmVnaXN0ZXIsIHNvIHdlIGNhblxuLy8gY2F0Y2ggdGhhdCBlYXNpbHkgZW5vdWdoLlxuLy9cbi8vIERvbid0IGJvdGhlciB3aXRoIFNJR0tJTEwuICBJdCdzIHVuY2F0Y2hhYmxlLCB3aGljaFxuLy8gbWVhbnMgdGhhdCB3ZSBjYW4ndCBmaXJlIGFueSBjYWxsYmFja3MgYW55d2F5LlxuLy9cbi8vIElmIGEgdXNlciBkb2VzIGhhcHBlbiB0byByZWdpc3RlciBhIGhhbmRsZXIgb24gYSBub24tXG4vLyBmYXRhbCBzaWduYWwgbGlrZSBTSUdXSU5DSCBvciBzb21ldGhpbmcsIGFuZCB0aGVuXG4vLyBleGl0LCBpdCdsbCBlbmQgdXAgZmlyaW5nIGBwcm9jZXNzLmVtaXQoJ2V4aXQnKWAsIHNvXG4vLyB0aGUgaGFuZGxlciB3aWxsIGJlIGZpcmVkIGFueXdheS5cbi8vXG4vLyBTSUdCVVMsIFNJR0ZQRSwgU0lHU0VHViBhbmQgU0lHSUxMLCB3aGVuIG5vdCByYWlzZWRcbi8vIGFydGlmaWNpYWxseSwgaW5oZXJlbnRseSBsZWF2ZSB0aGUgcHJvY2VzcyBpbiBhXG4vLyBzdGF0ZSBmcm9tIHdoaWNoIGl0IGlzIG5vdCBzYWZlIHRvIHRyeSBhbmQgZW50ZXIgSlNcbi8vIGxpc3RlbmVycy5cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnU0lHQUJSVCcsXG4gICdTSUdBTFJNJyxcbiAgJ1NJR0hVUCcsXG4gICdTSUdJTlQnLFxuICAnU0lHVEVSTSdcbl1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHVlRBTFJNJyxcbiAgICAnU0lHWENQVScsXG4gICAgJ1NJR1hGU1onLFxuICAgICdTSUdVU1IyJyxcbiAgICAnU0lHVFJBUCcsXG4gICAgJ1NJR1NZUycsXG4gICAgJ1NJR1FVSVQnLFxuICAgICdTSUdJT1QnXG4gICAgLy8gc2hvdWxkIGRldGVjdCBwcm9maWxlciBhbmQgZW5hYmxlL2Rpc2FibGUgYWNjb3JkaW5nbHkuXG4gICAgLy8gc2VlICMyMVxuICAgIC8vICdTSUdQUk9GJ1xuICApXG59XG5cbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gIG1vZHVsZS5leHBvcnRzLnB1c2goXG4gICAgJ1NJR0lPJyxcbiAgICAnU0lHUE9MTCcsXG4gICAgJ1NJR1BXUicsXG4gICAgJ1NJR1NUS0ZMVCcsXG4gICAgJ1NJR1VOVVNFRCdcbiAgKVxufVxuIiwgIi8vIE5vdGU6IHNpbmNlIG55YyB1c2VzIHRoaXMgbW9kdWxlIHRvIG91dHB1dCBjb3ZlcmFnZSwgYW55IGxpbmVzXG4vLyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0IHN5bmMgZmxvdyBvZiBueWMncyBvdXRwdXRDb3ZlcmFnZSBhcmVcbi8vIGlnbm9yZWQsIHNpbmNlIHdlIGNhbiBuZXZlciBnZXQgY292ZXJhZ2UgZm9yIHRoZW0uXG4vLyBncmFiIGEgcmVmZXJlbmNlIHRvIG5vZGUncyByZWFsIHByb2Nlc3Mgb2JqZWN0IHJpZ2h0IGF3YXlcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3NcblxuY29uc3QgcHJvY2Vzc09rID0gZnVuY3Rpb24gKHByb2Nlc3MpIHtcbiAgcmV0dXJuIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVtaXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZWFsbHlFeGl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MubGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mua2lsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBpZCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBzb21lIGtpbmQgb2Ygbm9uLW5vZGUgZW52aXJvbm1lbnQsIGp1c3Qgbm8tb3Bcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFwcm9jZXNzT2socHJvY2VzcykpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gIH1cbn0gZWxzZSB7XG4gIHZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICB2YXIgc2lnbmFscyA9IHJlcXVpcmUoJy4vc2lnbmFscy5qcycpXG4gIHZhciBpc1dpbiA9IC9ed2luL2kudGVzdChwcm9jZXNzLnBsYXRmb3JtKVxuXG4gIHZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIEVFICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgRUUgPSBFRS5FdmVudEVtaXR0ZXJcbiAgfVxuXG4gIHZhciBlbWl0dGVyXG4gIGlmIChwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fKSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX19cbiAgfSBlbHNlIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXyA9IG5ldyBFRSgpXG4gICAgZW1pdHRlci5jb3VudCA9IDBcbiAgICBlbWl0dGVyLmVtaXR0ZWQgPSB7fVxuICB9XG5cbiAgLy8gQmVjYXVzZSB0aGlzIGVtaXR0ZXIgaXMgYSBnbG9iYWwsIHdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIGFcbiAgLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgZmFpbGVkIHRvIGVuYWJsZSBpbmZpbml0ZSBsaXN0ZW5lcnMuXG4gIC8vIEkga25vdyB3aGF0IHlvdSdyZSBhYm91dCB0byBzYXkuICBCdXQgbGl0ZXJhbGx5IGV2ZXJ5dGhpbmcgYWJvdXRcbiAgLy8gc2lnbmFsLWV4aXQgaXMgYSBjb21wcm9taXNlIHdpdGggZXZpbC4gIEdldCB1c2VkIHRvIGl0LlxuICBpZiAoIWVtaXR0ZXIuaW5maW5pdGUpIHtcbiAgICBlbWl0dGVyLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICBlbWl0dGVyLmluZmluaXRlID0gdHJ1ZVxuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2IsIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIGZvciBleGl0IGhhbmRsZXInKVxuXG4gICAgaWYgKGxvYWRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvYWQoKVxuICAgIH1cblxuICAgIHZhciBldiA9ICdleGl0J1xuICAgIGlmIChvcHRzICYmIG9wdHMuYWx3YXlzTGFzdCkge1xuICAgICAgZXYgPSAnYWZ0ZXJleGl0J1xuICAgIH1cblxuICAgIHZhciByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGV2LCBjYilcbiAgICAgIGlmIChlbWl0dGVyLmxpc3RlbmVycygnZXhpdCcpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIGVtaXR0ZXIubGlzdGVuZXJzKCdhZnRlcmV4aXQnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgIH1cbiAgICB9XG4gICAgZW1pdHRlci5vbihldiwgY2IpXG5cbiAgICByZXR1cm4gcmVtb3ZlXG4gIH1cblxuICB2YXIgdW5sb2FkID0gZnVuY3Rpb24gdW5sb2FkICgpIHtcbiAgICBpZiAoIWxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IGZhbHNlXG5cbiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgfSlcbiAgICBwcm9jZXNzLmVtaXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdFxuICAgIGVtaXR0ZXIuY291bnQgLT0gMVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLnVubG9hZCA9IHVubG9hZFxuXG4gIHZhciBlbWl0ID0gZnVuY3Rpb24gZW1pdCAoZXZlbnQsIGNvZGUsIHNpZ25hbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdHRlci5lbWl0dGVkW2V2ZW50XSA9IHRydWVcbiAgICBlbWl0dGVyLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbClcbiAgfVxuXG4gIC8vIHsgPHNpZ25hbD46IDxsaXN0ZW5lciBmbj4sIC4uLiB9XG4gIHZhciBzaWdMaXN0ZW5lcnMgPSB7fVxuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgIHNpZ0xpc3RlbmVyc1tzaWddID0gZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgbGlzdGVuZXJzLCBhbiBleGl0IGlzIGNvbWluZyFcbiAgICAgIC8vIFNpbXBsZXN0IHdheTogcmVtb3ZlIHVzIGFuZCB0aGVuIHJlLXNlbmQgdGhlIHNpZ25hbC5cbiAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHdpbGwga2lsbCB0aGUgcHJvY2Vzcywgc28gd2UgY2FuXG4gICAgICAvLyBzYWZlbHkgZW1pdCBub3cuXG4gICAgICB2YXIgbGlzdGVuZXJzID0gcHJvY2Vzcy5saXN0ZW5lcnMoc2lnKVxuICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IGVtaXR0ZXIuY291bnQpIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgICAgZW1pdCgnZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNXaW4gJiYgc2lnID09PSAnU0lHSFVQJykge1xuICAgICAgICAgIC8vIFwiU0lHSFVQXCIgdGhyb3dzIGFuIGBFTk9TWVNgIGVycm9yIG9uIFdpbmRvd3MsXG4gICAgICAgICAgLy8gc28gdXNlIGEgc3VwcG9ydGVkIHNpZ25hbCBpbnN0ZWFkXG4gICAgICAgICAgc2lnID0gJ1NJR0lOVCdcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2lnbmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2lnbmFsc1xuICB9XG5cbiAgdmFyIGxvYWRlZCA9IGZhbHNlXG5cbiAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkICgpIHtcbiAgICBpZiAobG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gdHJ1ZVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9uU2lnbmFsRXhpdCdzIHRoYXQgYXJlIGluIHBsYXkuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgc28gdGhhdCB3ZSBjYW4gY291bnQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mXG4gICAgLy8gbGlzdGVuZXJzIG9uIHNpZ25hbHMsIGFuZCBkb24ndCB3YWl0IGZvciB0aGUgb3RoZXIgb25lIHRvXG4gICAgLy8gaGFuZGxlIGl0IGluc3RlYWQgb2YgdXMuXG4gICAgZW1pdHRlci5jb3VudCArPSAxXG5cbiAgICBzaWduYWxzID0gc2lnbmFscy5maWx0ZXIoZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHByb2Nlc3MuZW1pdCA9IHByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gcHJvY2Vzc1JlYWxseUV4aXRcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZFxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0ID0gcHJvY2Vzcy5yZWFsbHlFeGl0XG4gIHZhciBwcm9jZXNzUmVhbGx5RXhpdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZWFsbHlFeGl0IChjb2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gMFxuICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQuY2FsbChwcm9jZXNzLCBwcm9jZXNzLmV4aXRDb2RlKVxuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc0VtaXQgPSBwcm9jZXNzLmVtaXRcbiAgdmFyIHByb2Nlc3NFbWl0ID0gZnVuY3Rpb24gcHJvY2Vzc0VtaXQgKGV2LCBhcmcpIHtcbiAgICBpZiAoZXYgPT09ICdleGl0JyAmJiBwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhcmdcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IG9uRXhpdCA9IHJlcXVpcmUoJ3NpZ25hbC1leGl0Jyk7XG5cbmNvbnN0IERFRkFVTFRfRk9SQ0VfS0lMTF9USU1FT1VUID0gMTAwMCAqIDU7XG5cbi8vIE1vbmtleS1wYXRjaGVzIGBjaGlsZFByb2Nlc3Mua2lsbCgpYCB0byBhZGQgYGZvcmNlS2lsbEFmdGVyVGltZW91dGAgYmVoYXZpb3JcbmNvbnN0IHNwYXduZWRLaWxsID0gKGtpbGwsIHNpZ25hbCA9ICdTSUdURVJNJywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGNvbnN0IGtpbGxSZXN1bHQgPSBraWxsKHNpZ25hbCk7XG5cdHNldEtpbGxUaW1lb3V0KGtpbGwsIHNpZ25hbCwgb3B0aW9ucywga2lsbFJlc3VsdCk7XG5cdHJldHVybiBraWxsUmVzdWx0O1xufTtcblxuY29uc3Qgc2V0S2lsbFRpbWVvdXQgPSAoa2lsbCwgc2lnbmFsLCBvcHRpb25zLCBraWxsUmVzdWx0KSA9PiB7XG5cdGlmICghc2hvdWxkRm9yY2VLaWxsKHNpZ25hbCwgb3B0aW9ucywga2lsbFJlc3VsdCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB0aW1lb3V0ID0gZ2V0Rm9yY2VLaWxsQWZ0ZXJUaW1lb3V0KG9wdGlvbnMpO1xuXHRjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0a2lsbCgnU0lHS0lMTCcpO1xuXHR9LCB0aW1lb3V0KTtcblxuXHQvLyBHdWFyZGVkIGJlY2F1c2UgdGhlcmUncyBubyBgLnVucmVmKClgIHdoZW4gYGV4ZWNhYCBpcyB1c2VkIGluIHRoZSByZW5kZXJlclxuXHQvLyBwcm9jZXNzIGluIEVsZWN0cm9uLiBUaGlzIGNhbm5vdCBiZSB0ZXN0ZWQgc2luY2Ugd2UgZG9uJ3QgcnVuIHRlc3RzIGluXG5cdC8vIEVsZWN0cm9uLlxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuXHRpZiAodC51bnJlZikge1xuXHRcdHQudW5yZWYoKTtcblx0fVxufTtcblxuY29uc3Qgc2hvdWxkRm9yY2VLaWxsID0gKHNpZ25hbCwge2ZvcmNlS2lsbEFmdGVyVGltZW91dH0sIGtpbGxSZXN1bHQpID0+IHtcblx0cmV0dXJuIGlzU2lndGVybShzaWduYWwpICYmIGZvcmNlS2lsbEFmdGVyVGltZW91dCAhPT0gZmFsc2UgJiYga2lsbFJlc3VsdDtcbn07XG5cbmNvbnN0IGlzU2lndGVybSA9IHNpZ25hbCA9PiB7XG5cdHJldHVybiBzaWduYWwgPT09IG9zLmNvbnN0YW50cy5zaWduYWxzLlNJR1RFUk0gfHxcblx0XHQodHlwZW9mIHNpZ25hbCA9PT0gJ3N0cmluZycgJiYgc2lnbmFsLnRvVXBwZXJDYXNlKCkgPT09ICdTSUdURVJNJyk7XG59O1xuXG5jb25zdCBnZXRGb3JjZUtpbGxBZnRlclRpbWVvdXQgPSAoe2ZvcmNlS2lsbEFmdGVyVGltZW91dCA9IHRydWV9KSA9PiB7XG5cdGlmIChmb3JjZUtpbGxBZnRlclRpbWVvdXQgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gREVGQVVMVF9GT1JDRV9LSUxMX1RJTUVPVVQ7XG5cdH1cblxuXHRpZiAoIU51bWJlci5pc0Zpbml0ZShmb3JjZUtpbGxBZnRlclRpbWVvdXQpIHx8IGZvcmNlS2lsbEFmdGVyVGltZW91dCA8IDApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0aGUgXFxgZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0XFxgIG9wdGlvbiB0byBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3QgXFxgJHtmb3JjZUtpbGxBZnRlclRpbWVvdXR9XFxgICgke3R5cGVvZiBmb3JjZUtpbGxBZnRlclRpbWVvdXR9KWApO1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlS2lsbEFmdGVyVGltZW91dDtcbn07XG5cbi8vIGBjaGlsZFByb2Nlc3MuY2FuY2VsKClgXG5jb25zdCBzcGF3bmVkQ2FuY2VsID0gKHNwYXduZWQsIGNvbnRleHQpID0+IHtcblx0Y29uc3Qga2lsbFJlc3VsdCA9IHNwYXduZWQua2lsbCgpO1xuXG5cdGlmIChraWxsUmVzdWx0KSB7XG5cdFx0Y29udGV4dC5pc0NhbmNlbGVkID0gdHJ1ZTtcblx0fVxufTtcblxuY29uc3QgdGltZW91dEtpbGwgPSAoc3Bhd25lZCwgc2lnbmFsLCByZWplY3QpID0+IHtcblx0c3Bhd25lZC5raWxsKHNpZ25hbCk7XG5cdHJlamVjdChPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGltZWQgb3V0JyksIHt0aW1lZE91dDogdHJ1ZSwgc2lnbmFsfSkpO1xufTtcblxuLy8gYHRpbWVvdXRgIG9wdGlvbiBoYW5kbGluZ1xuY29uc3Qgc2V0dXBUaW1lb3V0ID0gKHNwYXduZWQsIHt0aW1lb3V0LCBraWxsU2lnbmFsID0gJ1NJR1RFUk0nfSwgc3Bhd25lZFByb21pc2UpID0+IHtcblx0aWYgKHRpbWVvdXQgPT09IDAgfHwgdGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHNwYXduZWRQcm9taXNlO1xuXHR9XG5cblx0bGV0IHRpbWVvdXRJZDtcblx0Y29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0dGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aW1lb3V0S2lsbChzcGF3bmVkLCBraWxsU2lnbmFsLCByZWplY3QpO1xuXHRcdH0sIHRpbWVvdXQpO1xuXHR9KTtcblxuXHRjb25zdCBzYWZlU3Bhd25lZFByb21pc2UgPSBzcGF3bmVkUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dElkKTtcblx0fSk7XG5cblx0cmV0dXJuIFByb21pc2UucmFjZShbdGltZW91dFByb21pc2UsIHNhZmVTcGF3bmVkUHJvbWlzZV0pO1xufTtcblxuY29uc3QgdmFsaWRhdGVUaW1lb3V0ID0gKHt0aW1lb3V0fSkgPT4ge1xuXHRpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXQpIHx8IHRpbWVvdXQgPCAwKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHRoZSBcXGB0aW1lb3V0XFxgIG9wdGlvbiB0byBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3QgXFxgJHt0aW1lb3V0fVxcYCAoJHt0eXBlb2YgdGltZW91dH0pYCk7XG5cdH1cbn07XG5cbi8vIGBjbGVhbnVwYCBvcHRpb24gaGFuZGxpbmdcbmNvbnN0IHNldEV4aXRIYW5kbGVyID0gYXN5bmMgKHNwYXduZWQsIHtjbGVhbnVwLCBkZXRhY2hlZH0sIHRpbWVkUHJvbWlzZSkgPT4ge1xuXHRpZiAoIWNsZWFudXAgfHwgZGV0YWNoZWQpIHtcblx0XHRyZXR1cm4gdGltZWRQcm9taXNlO1xuXHR9XG5cblx0Y29uc3QgcmVtb3ZlRXhpdEhhbmRsZXIgPSBvbkV4aXQoKCkgPT4ge1xuXHRcdHNwYXduZWQua2lsbCgpO1xuXHR9KTtcblxuXHRyZXR1cm4gdGltZWRQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdHJlbW92ZUV4aXRIYW5kbGVyKCk7XG5cdH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHNwYXduZWRLaWxsLFxuXHRzcGF3bmVkQ2FuY2VsLFxuXHRzZXR1cFRpbWVvdXQsXG5cdHZhbGlkYXRlVGltZW91dCxcblx0c2V0RXhpdEhhbmRsZXJcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtQYXNzVGhyb3VnaDogUGFzc1Rocm91Z2hTdHJlYW19ID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gb3B0aW9ucyA9PiB7XG5cdG9wdGlvbnMgPSB7Li4ub3B0aW9uc307XG5cblx0Y29uc3Qge2FycmF5fSA9IG9wdGlvbnM7XG5cdGxldCB7ZW5jb2Rpbmd9ID0gb3B0aW9ucztcblx0Y29uc3QgaXNCdWZmZXIgPSBlbmNvZGluZyA9PT0gJ2J1ZmZlcic7XG5cdGxldCBvYmplY3RNb2RlID0gZmFsc2U7XG5cblx0aWYgKGFycmF5KSB7XG5cdFx0b2JqZWN0TW9kZSA9ICEoZW5jb2RpbmcgfHwgaXNCdWZmZXIpO1xuXHR9IGVsc2Uge1xuXHRcdGVuY29kaW5nID0gZW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXHR9XG5cblx0aWYgKGlzQnVmZmVyKSB7XG5cdFx0ZW5jb2RpbmcgPSBudWxsO1xuXHR9XG5cblx0Y29uc3Qgc3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoU3RyZWFtKHtvYmplY3RNb2RlfSk7XG5cblx0aWYgKGVuY29kaW5nKSB7XG5cdFx0c3RyZWFtLnNldEVuY29kaW5nKGVuY29kaW5nKTtcblx0fVxuXG5cdGxldCBsZW5ndGggPSAwO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblxuXHRzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiB7XG5cdFx0Y2h1bmtzLnB1c2goY2h1bmspO1xuXG5cdFx0aWYgKG9iamVjdE1vZGUpIHtcblx0XHRcdGxlbmd0aCA9IGNodW5rcy5sZW5ndGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG5cdFx0fVxuXHR9KTtcblxuXHRzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSA9ICgpID0+IHtcblx0XHRpZiAoYXJyYXkpIHtcblx0XHRcdHJldHVybiBjaHVua3M7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQnVmZmVyID8gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCkgOiBjaHVua3Muam9pbignJyk7XG5cdH07XG5cblx0c3RyZWFtLmdldEJ1ZmZlcmVkTGVuZ3RoID0gKCkgPT4gbGVuZ3RoO1xuXG5cdHJldHVybiBzdHJlYW07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtjb25zdGFudHM6IEJ1ZmZlckNvbnN0YW50c30gPSByZXF1aXJlKCdidWZmZXInKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3Qge3Byb21pc2lmeX0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBidWZmZXJTdHJlYW0gPSByZXF1aXJlKCcuL2J1ZmZlci1zdHJlYW0nKTtcblxuY29uc3Qgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZCA9IHByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuXG5jbGFzcyBNYXhCdWZmZXJFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ21heEJ1ZmZlciBleGNlZWRlZCcpO1xuXHRcdHRoaXMubmFtZSA9ICdNYXhCdWZmZXJFcnJvcic7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RyZWFtKGlucHV0U3RyZWFtLCBvcHRpb25zKSB7XG5cdGlmICghaW5wdXRTdHJlYW0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3RyZWFtJyk7XG5cdH1cblxuXHRvcHRpb25zID0ge1xuXHRcdG1heEJ1ZmZlcjogSW5maW5pdHksXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IHttYXhCdWZmZXJ9ID0gb3B0aW9ucztcblx0Y29uc3Qgc3RyZWFtID0gYnVmZmVyU3RyZWFtKG9wdGlvbnMpO1xuXG5cdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCByZWplY3RQcm9taXNlID0gZXJyb3IgPT4ge1xuXHRcdFx0Ly8gRG9uJ3QgcmV0cmlldmUgYW4gb3ZlcnNpemVkIGJ1ZmZlci5cblx0XHRcdGlmIChlcnJvciAmJiBzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA8PSBCdWZmZXJDb25zdGFudHMuTUFYX0xFTkdUSCkge1xuXHRcdFx0XHRlcnJvci5idWZmZXJlZERhdGEgPSBzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdH07XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZChpbnB1dFN0cmVhbSwgc3RyZWFtKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0UHJvbWlzZShlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblxuXHRcdHN0cmVhbS5vbignZGF0YScsICgpID0+IHtcblx0XHRcdGlmIChzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA+IG1heEJ1ZmZlcikge1xuXHRcdFx0XHRyZWplY3RQcm9taXNlKG5ldyBNYXhCdWZmZXJFcnJvcigpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHN0cmVhbS5nZXRCdWZmZXJlZFZhbHVlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3RyZWFtO1xubW9kdWxlLmV4cG9ydHMuYnVmZmVyID0gKHN0cmVhbSwgb3B0aW9ucykgPT4gZ2V0U3RyZWFtKHN0cmVhbSwgey4uLm9wdGlvbnMsIGVuY29kaW5nOiAnYnVmZmVyJ30pO1xubW9kdWxlLmV4cG9ydHMuYXJyYXkgPSAoc3RyZWFtLCBvcHRpb25zKSA9PiBnZXRTdHJlYW0oc3RyZWFtLCB7Li4ub3B0aW9ucywgYXJyYXk6IHRydWV9KTtcbm1vZHVsZS5leHBvcnRzLk1heEJ1ZmZlckVycm9yID0gTWF4QnVmZmVyRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLypzdHJlYW1zLi4uKi8pIHtcbiAgdmFyIHNvdXJjZXMgPSBbXVxuICB2YXIgb3V0cHV0ICA9IG5ldyBQYXNzVGhyb3VnaCh7b2JqZWN0TW9kZTogdHJ1ZX0pXG5cbiAgb3V0cHV0LnNldE1heExpc3RlbmVycygwKVxuXG4gIG91dHB1dC5hZGQgPSBhZGRcbiAgb3V0cHV0LmlzRW1wdHkgPSBpc0VtcHR5XG5cbiAgb3V0cHV0Lm9uKCd1bnBpcGUnLCByZW1vdmUpXG5cbiAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5mb3JFYWNoKGFkZClcblxuICByZXR1cm4gb3V0cHV0XG5cbiAgZnVuY3Rpb24gYWRkIChzb3VyY2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBzb3VyY2UuZm9yRWFjaChhZGQpXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgIHNvdXJjZS5vbmNlKCdlbmQnLCByZW1vdmUuYmluZChudWxsLCBzb3VyY2UpKVxuICAgIHNvdXJjZS5vbmNlKCdlcnJvcicsIG91dHB1dC5lbWl0LmJpbmQob3V0cHV0LCAnZXJyb3InKSlcbiAgICBzb3VyY2UucGlwZShvdXRwdXQsIHtlbmQ6IGZhbHNlfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubGVuZ3RoID09IDA7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUgKHNvdXJjZSkge1xuICAgIHNvdXJjZXMgPSBzb3VyY2VzLmZpbHRlcihmdW5jdGlvbiAoaXQpIHsgcmV0dXJuIGl0ICE9PSBzb3VyY2UgfSlcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoICYmIG91dHB1dC5yZWFkYWJsZSkgeyBvdXRwdXQuZW5kKCkgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbmNvbnN0IGdldFN0cmVhbSA9IHJlcXVpcmUoJ2dldC1zdHJlYW0nKTtcbmNvbnN0IG1lcmdlU3RyZWFtID0gcmVxdWlyZSgnbWVyZ2Utc3RyZWFtJyk7XG5cbi8vIGBpbnB1dGAgb3B0aW9uXG5jb25zdCBoYW5kbGVJbnB1dCA9IChzcGF3bmVkLCBpbnB1dCkgPT4ge1xuXHQvLyBDaGVja2luZyBmb3Igc3RkaW4gaXMgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yNjg1MlxuXHQvLyBAdG9kbyByZW1vdmUgYHx8IHNwYXduZWQuc3RkaW4gPT09IHVuZGVmaW5lZGAgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIE5vZGUuanMgPD0xMi4yLjBcblx0aWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgc3Bhd25lZC5zdGRpbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGlzU3RyZWFtKGlucHV0KSkge1xuXHRcdGlucHV0LnBpcGUoc3Bhd25lZC5zdGRpbik7XG5cdH0gZWxzZSB7XG5cdFx0c3Bhd25lZC5zdGRpbi5lbmQoaW5wdXQpO1xuXHR9XG59O1xuXG4vLyBgYWxsYCBpbnRlcmxlYXZlcyBgc3Rkb3V0YCBhbmQgYHN0ZGVycmBcbmNvbnN0IG1ha2VBbGxTdHJlYW0gPSAoc3Bhd25lZCwge2FsbH0pID0+IHtcblx0aWYgKCFhbGwgfHwgKCFzcGF3bmVkLnN0ZG91dCAmJiAhc3Bhd25lZC5zdGRlcnIpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgbWl4ZWQgPSBtZXJnZVN0cmVhbSgpO1xuXG5cdGlmIChzcGF3bmVkLnN0ZG91dCkge1xuXHRcdG1peGVkLmFkZChzcGF3bmVkLnN0ZG91dCk7XG5cdH1cblxuXHRpZiAoc3Bhd25lZC5zdGRlcnIpIHtcblx0XHRtaXhlZC5hZGQoc3Bhd25lZC5zdGRlcnIpO1xuXHR9XG5cblx0cmV0dXJuIG1peGVkO1xufTtcblxuLy8gT24gZmFpbHVyZSwgYHJlc3VsdC5zdGRvdXR8c3RkZXJyfGFsbGAgc2hvdWxkIGNvbnRhaW4gdGhlIGN1cnJlbnRseSBidWZmZXJlZCBzdHJlYW1cbmNvbnN0IGdldEJ1ZmZlcmVkRGF0YSA9IGFzeW5jIChzdHJlYW0sIHN0cmVhbVByb21pc2UpID0+IHtcblx0aWYgKCFzdHJlYW0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzdHJlYW0uZGVzdHJveSgpO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIGF3YWl0IHN0cmVhbVByb21pc2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIGVycm9yLmJ1ZmZlcmVkRGF0YTtcblx0fVxufTtcblxuY29uc3QgZ2V0U3RyZWFtUHJvbWlzZSA9IChzdHJlYW0sIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9KSA9PiB7XG5cdGlmICghc3RyZWFtIHx8ICFidWZmZXIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZW5jb2RpbmcpIHtcblx0XHRyZXR1cm4gZ2V0U3RyZWFtKHN0cmVhbSwge2VuY29kaW5nLCBtYXhCdWZmZXJ9KTtcblx0fVxuXG5cdHJldHVybiBnZXRTdHJlYW0uYnVmZmVyKHN0cmVhbSwge21heEJ1ZmZlcn0pO1xufTtcblxuLy8gUmV0cmlldmUgcmVzdWx0IG9mIGNoaWxkIHByb2Nlc3M6IGV4aXQgY29kZSwgc2lnbmFsLCBlcnJvciwgc3RyZWFtcyAoc3Rkb3V0L3N0ZGVyci9hbGwpXG5jb25zdCBnZXRTcGF3bmVkUmVzdWx0ID0gYXN5bmMgKHtzdGRvdXQsIHN0ZGVyciwgYWxsfSwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0sIHByb2Nlc3NEb25lKSA9PiB7XG5cdGNvbnN0IHN0ZG91dFByb21pc2UgPSBnZXRTdHJlYW1Qcm9taXNlKHN0ZG91dCwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0pO1xuXHRjb25zdCBzdGRlcnJQcm9taXNlID0gZ2V0U3RyZWFtUHJvbWlzZShzdGRlcnIsIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9KTtcblx0Y29uc3QgYWxsUHJvbWlzZSA9IGdldFN0cmVhbVByb21pc2UoYWxsLCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyOiBtYXhCdWZmZXIgKiAyfSk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoW3Byb2Nlc3NEb25lLCBzdGRvdXRQcm9taXNlLCBzdGRlcnJQcm9taXNlLCBhbGxQcm9taXNlXSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHtlcnJvciwgc2lnbmFsOiBlcnJvci5zaWduYWwsIHRpbWVkT3V0OiBlcnJvci50aW1lZE91dH0sXG5cdFx0XHRnZXRCdWZmZXJlZERhdGEoc3Rkb3V0LCBzdGRvdXRQcm9taXNlKSxcblx0XHRcdGdldEJ1ZmZlcmVkRGF0YShzdGRlcnIsIHN0ZGVyclByb21pc2UpLFxuXHRcdFx0Z2V0QnVmZmVyZWREYXRhKGFsbCwgYWxsUHJvbWlzZSlcblx0XHRdKTtcblx0fVxufTtcblxuY29uc3QgdmFsaWRhdGVJbnB1dFN5bmMgPSAoe2lucHV0fSkgPT4ge1xuXHRpZiAoaXNTdHJlYW0oaW5wdXQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBpbnB1dGAgb3B0aW9uIGNhbm5vdCBiZSBhIHN0cmVhbSBpbiBzeW5jIG1vZGUnKTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGhhbmRsZUlucHV0LFxuXHRtYWtlQWxsU3RyZWFtLFxuXHRnZXRTcGF3bmVkUmVzdWx0LFxuXHR2YWxpZGF0ZUlucHV0U3luY1xufTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IChhc3luYyAoKSA9PiB7fSkoKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IFsndGhlbicsICdjYXRjaCcsICdmaW5hbGx5J10ubWFwKHByb3BlcnR5ID0+IFtcblx0cHJvcGVydHksXG5cdFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVByb21pc2VQcm90b3R5cGUsIHByb3BlcnR5KVxuXSk7XG5cbi8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBtaXhpbiBvZiBgY2hpbGRQcm9jZXNzYCBhbmQgYFByb21pc2VgXG5jb25zdCBtZXJnZVByb21pc2UgPSAoc3Bhd25lZCwgcHJvbWlzZSkgPT4ge1xuXHRmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZGVzY3JpcHRvcl0gb2YgZGVzY3JpcHRvcnMpIHtcblx0XHQvLyBTdGFydGluZyB0aGUgbWFpbiBgcHJvbWlzZWAgaXMgZGVmZXJyZWQgdG8gYXZvaWQgY29uc3VtaW5nIHN0cmVhbXNcblx0XHRjb25zdCB2YWx1ZSA9IHR5cGVvZiBwcm9taXNlID09PSAnZnVuY3Rpb24nID9cblx0XHRcdCguLi5hcmdzKSA9PiBSZWZsZWN0LmFwcGx5KGRlc2NyaXB0b3IudmFsdWUsIHByb21pc2UoKSwgYXJncykgOlxuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZS5iaW5kKHByb21pc2UpO1xuXG5cdFx0UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShzcGF3bmVkLCBwcm9wZXJ0eSwgey4uLmRlc2NyaXB0b3IsIHZhbHVlfSk7XG5cdH1cblxuXHRyZXR1cm4gc3Bhd25lZDtcbn07XG5cbi8vIFVzZSBwcm9taXNlcyBpbnN0ZWFkIG9mIGBjaGlsZF9wcm9jZXNzYCBldmVudHNcbmNvbnN0IGdldFNwYXduZWRQcm9taXNlID0gc3Bhd25lZCA9PiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0c3Bhd25lZC5vbignZXhpdCcsIChleGl0Q29kZSwgc2lnbmFsKSA9PiB7XG5cdFx0XHRyZXNvbHZlKHtleGl0Q29kZSwgc2lnbmFsfSk7XG5cdFx0fSk7XG5cblx0XHRzcGF3bmVkLm9uKCdlcnJvcicsIGVycm9yID0+IHtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0fSk7XG5cblx0XHRpZiAoc3Bhd25lZC5zdGRpbikge1xuXHRcdFx0c3Bhd25lZC5zdGRpbi5vbignZXJyb3InLCBlcnJvciA9PiB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdG1lcmdlUHJvbWlzZSxcblx0Z2V0U3Bhd25lZFByb21pc2Vcbn07XG5cbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBub3JtYWxpemVBcmdzID0gKGZpbGUsIGFyZ3MgPSBbXSkgPT4ge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0XHRyZXR1cm4gW2ZpbGVdO1xuXHR9XG5cblx0cmV0dXJuIFtmaWxlLCAuLi5hcmdzXTtcbn07XG5cbmNvbnN0IE5PX0VTQ0FQRV9SRUdFWFAgPSAvXltcXHcuLV0rJC87XG5jb25zdCBET1VCTEVfUVVPVEVTX1JFR0VYUCA9IC9cIi9nO1xuXG5jb25zdCBlc2NhcGVBcmcgPSBhcmcgPT4ge1xuXHRpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycgfHwgTk9fRVNDQVBFX1JFR0VYUC50ZXN0KGFyZykpIHtcblx0XHRyZXR1cm4gYXJnO1xuXHR9XG5cblx0cmV0dXJuIGBcIiR7YXJnLnJlcGxhY2UoRE9VQkxFX1FVT1RFU19SRUdFWFAsICdcXFxcXCInKX1cImA7XG59O1xuXG5jb25zdCBqb2luQ29tbWFuZCA9IChmaWxlLCBhcmdzKSA9PiB7XG5cdHJldHVybiBub3JtYWxpemVBcmdzKGZpbGUsIGFyZ3MpLmpvaW4oJyAnKTtcbn07XG5cbmNvbnN0IGdldEVzY2FwZWRDb21tYW5kID0gKGZpbGUsIGFyZ3MpID0+IHtcblx0cmV0dXJuIG5vcm1hbGl6ZUFyZ3MoZmlsZSwgYXJncykubWFwKGFyZyA9PiBlc2NhcGVBcmcoYXJnKSkuam9pbignICcpO1xufTtcblxuY29uc3QgU1BBQ0VTX1JFR0VYUCA9IC8gKy9nO1xuXG4vLyBIYW5kbGUgYGV4ZWNhLmNvbW1hbmQoKWBcbmNvbnN0IHBhcnNlQ29tbWFuZCA9IGNvbW1hbmQgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSBbXTtcblx0Zm9yIChjb25zdCB0b2tlbiBvZiBjb21tYW5kLnRyaW0oKS5zcGxpdChTUEFDRVNfUkVHRVhQKSkge1xuXHRcdC8vIEFsbG93IHNwYWNlcyB0byBiZSBlc2NhcGVkIGJ5IGEgYmFja3NsYXNoIGlmIG5vdCBtZWFudCBhcyBhIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZXZpb3VzVG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uZW5kc1dpdGgoJ1xcXFwnKSkge1xuXHRcdFx0Ly8gTWVyZ2UgcHJldmlvdXMgdG9rZW4gd2l0aCBjdXJyZW50IG9uZVxuXHRcdFx0dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IGAke3ByZXZpb3VzVG9rZW4uc2xpY2UoMCwgLTEpfSAke3Rva2VufWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG9rZW5zO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGpvaW5Db21tYW5kLFxuXHRnZXRFc2NhcGVkQ29tbWFuZCxcblx0cGFyc2VDb21tYW5kXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBjcm9zc1NwYXduID0gcmVxdWlyZSgnY3Jvc3Mtc3Bhd24nKTtcbmNvbnN0IHN0cmlwRmluYWxOZXdsaW5lID0gcmVxdWlyZSgnc3RyaXAtZmluYWwtbmV3bGluZScpO1xuY29uc3QgbnBtUnVuUGF0aCA9IHJlcXVpcmUoJ25wbS1ydW4tcGF0aCcpO1xuY29uc3Qgb25ldGltZSA9IHJlcXVpcmUoJ29uZXRpbWUnKTtcbmNvbnN0IG1ha2VFcnJvciA9IHJlcXVpcmUoJy4vbGliL2Vycm9yJyk7XG5jb25zdCBub3JtYWxpemVTdGRpbyA9IHJlcXVpcmUoJy4vbGliL3N0ZGlvJyk7XG5jb25zdCB7c3Bhd25lZEtpbGwsIHNwYXduZWRDYW5jZWwsIHNldHVwVGltZW91dCwgdmFsaWRhdGVUaW1lb3V0LCBzZXRFeGl0SGFuZGxlcn0gPSByZXF1aXJlKCcuL2xpYi9raWxsJyk7XG5jb25zdCB7aGFuZGxlSW5wdXQsIGdldFNwYXduZWRSZXN1bHQsIG1ha2VBbGxTdHJlYW0sIHZhbGlkYXRlSW5wdXRTeW5jfSA9IHJlcXVpcmUoJy4vbGliL3N0cmVhbScpO1xuY29uc3Qge21lcmdlUHJvbWlzZSwgZ2V0U3Bhd25lZFByb21pc2V9ID0gcmVxdWlyZSgnLi9saWIvcHJvbWlzZScpO1xuY29uc3Qge2pvaW5Db21tYW5kLCBwYXJzZUNvbW1hbmQsIGdldEVzY2FwZWRDb21tYW5kfSA9IHJlcXVpcmUoJy4vbGliL2NvbW1hbmQnKTtcblxuY29uc3QgREVGQVVMVF9NQVhfQlVGRkVSID0gMTAwMCAqIDEwMDAgKiAxMDA7XG5cbmNvbnN0IGdldEVudiA9ICh7ZW52OiBlbnZPcHRpb24sIGV4dGVuZEVudiwgcHJlZmVyTG9jYWwsIGxvY2FsRGlyLCBleGVjUGF0aH0pID0+IHtcblx0Y29uc3QgZW52ID0gZXh0ZW5kRW52ID8gey4uLnByb2Nlc3MuZW52LCAuLi5lbnZPcHRpb259IDogZW52T3B0aW9uO1xuXG5cdGlmIChwcmVmZXJMb2NhbCkge1xuXHRcdHJldHVybiBucG1SdW5QYXRoLmVudih7ZW52LCBjd2Q6IGxvY2FsRGlyLCBleGVjUGF0aH0pO1xuXHR9XG5cblx0cmV0dXJuIGVudjtcbn07XG5cbmNvbnN0IGhhbmRsZUFyZ3VtZW50cyA9IChmaWxlLCBhcmdzLCBvcHRpb25zID0ge30pID0+IHtcblx0Y29uc3QgcGFyc2VkID0gY3Jvc3NTcGF3bi5fcGFyc2UoZmlsZSwgYXJncywgb3B0aW9ucyk7XG5cdGZpbGUgPSBwYXJzZWQuY29tbWFuZDtcblx0YXJncyA9IHBhcnNlZC5hcmdzO1xuXHRvcHRpb25zID0gcGFyc2VkLm9wdGlvbnM7XG5cblx0b3B0aW9ucyA9IHtcblx0XHRtYXhCdWZmZXI6IERFRkFVTFRfTUFYX0JVRkZFUixcblx0XHRidWZmZXI6IHRydWUsXG5cdFx0c3RyaXBGaW5hbE5ld2xpbmU6IHRydWUsXG5cdFx0ZXh0ZW5kRW52OiB0cnVlLFxuXHRcdHByZWZlckxvY2FsOiBmYWxzZSxcblx0XHRsb2NhbERpcjogb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcblx0XHRleGVjUGF0aDogcHJvY2Vzcy5leGVjUGF0aCxcblx0XHRlbmNvZGluZzogJ3V0ZjgnLFxuXHRcdHJlamVjdDogdHJ1ZSxcblx0XHRjbGVhbnVwOiB0cnVlLFxuXHRcdGFsbDogZmFsc2UsXG5cdFx0d2luZG93c0hpZGU6IHRydWUsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdG9wdGlvbnMuZW52ID0gZ2V0RW52KG9wdGlvbnMpO1xuXG5cdG9wdGlvbnMuc3RkaW8gPSBub3JtYWxpemVTdGRpbyhvcHRpb25zKTtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBwYXRoLmJhc2VuYW1lKGZpbGUsICcuZXhlJykgPT09ICdjbWQnKSB7XG5cdFx0Ly8gIzExNlxuXHRcdGFyZ3MudW5zaGlmdCgnL3EnKTtcblx0fVxuXG5cdHJldHVybiB7ZmlsZSwgYXJncywgb3B0aW9ucywgcGFyc2VkfTtcbn07XG5cbmNvbnN0IGhhbmRsZU91dHB1dCA9IChvcHRpb25zLCB2YWx1ZSwgZXJyb3IpID0+IHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcblx0XHQvLyBXaGVuIGBleGVjYS5zeW5jKClgIGVycm9ycywgd2Ugbm9ybWFsaXplIGl0IHRvICcnIHRvIG1pbWljIGBleGVjYSgpYFxuXHRcdHJldHVybiBlcnJvciA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJyc7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zdHJpcEZpbmFsTmV3bGluZSkge1xuXHRcdHJldHVybiBzdHJpcEZpbmFsTmV3bGluZSh2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBleGVjYSA9IChmaWxlLCBhcmdzLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IGhhbmRsZUFyZ3VtZW50cyhmaWxlLCBhcmdzLCBvcHRpb25zKTtcblx0Y29uc3QgY29tbWFuZCA9IGpvaW5Db21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRjb25zdCBlc2NhcGVkQ29tbWFuZCA9IGdldEVzY2FwZWRDb21tYW5kKGZpbGUsIGFyZ3MpO1xuXG5cdHZhbGlkYXRlVGltZW91dChwYXJzZWQub3B0aW9ucyk7XG5cblx0bGV0IHNwYXduZWQ7XG5cdHRyeSB7XG5cdFx0c3Bhd25lZCA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwYXJzZWQuZmlsZSwgcGFyc2VkLmFyZ3MsIHBhcnNlZC5vcHRpb25zKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBFbnN1cmUgdGhlIHJldHVybmVkIGVycm9yIGlzIGFsd2F5cyBib3RoIGEgcHJvbWlzZSBhbmQgYSBjaGlsZCBwcm9jZXNzXG5cdFx0Y29uc3QgZHVtbXlTcGF3bmVkID0gbmV3IGNoaWxkUHJvY2Vzcy5DaGlsZFByb2Nlc3MoKTtcblx0XHRjb25zdCBlcnJvclByb21pc2UgPSBQcm9taXNlLnJlamVjdChtYWtlRXJyb3Ioe1xuXHRcdFx0ZXJyb3IsXG5cdFx0XHRzdGRvdXQ6ICcnLFxuXHRcdFx0c3RkZXJyOiAnJyxcblx0XHRcdGFsbDogJycsXG5cdFx0XHRjb21tYW5kLFxuXHRcdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0XHRwYXJzZWQsXG5cdFx0XHR0aW1lZE91dDogZmFsc2UsXG5cdFx0XHRpc0NhbmNlbGVkOiBmYWxzZSxcblx0XHRcdGtpbGxlZDogZmFsc2Vcblx0XHR9KSk7XG5cdFx0cmV0dXJuIG1lcmdlUHJvbWlzZShkdW1teVNwYXduZWQsIGVycm9yUHJvbWlzZSk7XG5cdH1cblxuXHRjb25zdCBzcGF3bmVkUHJvbWlzZSA9IGdldFNwYXduZWRQcm9taXNlKHNwYXduZWQpO1xuXHRjb25zdCB0aW1lZFByb21pc2UgPSBzZXR1cFRpbWVvdXQoc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMsIHNwYXduZWRQcm9taXNlKTtcblx0Y29uc3QgcHJvY2Vzc0RvbmUgPSBzZXRFeGl0SGFuZGxlcihzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgdGltZWRQcm9taXNlKTtcblxuXHRjb25zdCBjb250ZXh0ID0ge2lzQ2FuY2VsZWQ6IGZhbHNlfTtcblxuXHRzcGF3bmVkLmtpbGwgPSBzcGF3bmVkS2lsbC5iaW5kKG51bGwsIHNwYXduZWQua2lsbC5iaW5kKHNwYXduZWQpKTtcblx0c3Bhd25lZC5jYW5jZWwgPSBzcGF3bmVkQ2FuY2VsLmJpbmQobnVsbCwgc3Bhd25lZCwgY29udGV4dCk7XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZSA9IGFzeW5jICgpID0+IHtcblx0XHRjb25zdCBbe2Vycm9yLCBleGl0Q29kZSwgc2lnbmFsLCB0aW1lZE91dH0sIHN0ZG91dFJlc3VsdCwgc3RkZXJyUmVzdWx0LCBhbGxSZXN1bHRdID0gYXdhaXQgZ2V0U3Bhd25lZFJlc3VsdChzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgcHJvY2Vzc0RvbmUpO1xuXHRcdGNvbnN0IHN0ZG91dCA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgc3Rkb3V0UmVzdWx0KTtcblx0XHRjb25zdCBzdGRlcnIgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHN0ZGVyclJlc3VsdCk7XG5cdFx0Y29uc3QgYWxsID0gaGFuZGxlT3V0cHV0KHBhcnNlZC5vcHRpb25zLCBhbGxSZXN1bHQpO1xuXG5cdFx0aWYgKGVycm9yIHx8IGV4aXRDb2RlICE9PSAwIHx8IHNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcmV0dXJuZWRFcnJvciA9IG1ha2VFcnJvcih7XG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRleGl0Q29kZSxcblx0XHRcdFx0c2lnbmFsLFxuXHRcdFx0XHRzdGRvdXQsXG5cdFx0XHRcdHN0ZGVycixcblx0XHRcdFx0YWxsLFxuXHRcdFx0XHRjb21tYW5kLFxuXHRcdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdFx0cGFyc2VkLFxuXHRcdFx0XHR0aW1lZE91dCxcblx0XHRcdFx0aXNDYW5jZWxlZDogY29udGV4dC5pc0NhbmNlbGVkLFxuXHRcdFx0XHRraWxsZWQ6IHNwYXduZWQua2lsbGVkXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFwYXJzZWQub3B0aW9ucy5yZWplY3QpIHtcblx0XHRcdFx0cmV0dXJuIHJldHVybmVkRXJyb3I7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IHJldHVybmVkRXJyb3I7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdGV4aXRDb2RlOiAwLFxuXHRcdFx0c3Rkb3V0LFxuXHRcdFx0c3RkZXJyLFxuXHRcdFx0YWxsLFxuXHRcdFx0ZmFpbGVkOiBmYWxzZSxcblx0XHRcdHRpbWVkT3V0OiBmYWxzZSxcblx0XHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdFx0a2lsbGVkOiBmYWxzZVxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZU9uY2UgPSBvbmV0aW1lKGhhbmRsZVByb21pc2UpO1xuXG5cdGhhbmRsZUlucHV0KHNwYXduZWQsIHBhcnNlZC5vcHRpb25zLmlucHV0KTtcblxuXHRzcGF3bmVkLmFsbCA9IG1ha2VBbGxTdHJlYW0oc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMpO1xuXG5cdHJldHVybiBtZXJnZVByb21pc2Uoc3Bhd25lZCwgaGFuZGxlUHJvbWlzZU9uY2UpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleGVjYTtcblxubW9kdWxlLmV4cG9ydHMuc3luYyA9IChmaWxlLCBhcmdzLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IGhhbmRsZUFyZ3VtZW50cyhmaWxlLCBhcmdzLCBvcHRpb25zKTtcblx0Y29uc3QgY29tbWFuZCA9IGpvaW5Db21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRjb25zdCBlc2NhcGVkQ29tbWFuZCA9IGdldEVzY2FwZWRDb21tYW5kKGZpbGUsIGFyZ3MpO1xuXG5cdHZhbGlkYXRlSW5wdXRTeW5jKHBhcnNlZC5vcHRpb25zKTtcblxuXHRsZXQgcmVzdWx0O1xuXHR0cnkge1xuXHRcdHJlc3VsdCA9IGNoaWxkUHJvY2Vzcy5zcGF3blN5bmMocGFyc2VkLmZpbGUsIHBhcnNlZC5hcmdzLCBwYXJzZWQub3B0aW9ucyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0dGhyb3cgbWFrZUVycm9yKHtcblx0XHRcdGVycm9yLFxuXHRcdFx0c3Rkb3V0OiAnJyxcblx0XHRcdHN0ZGVycjogJycsXG5cdFx0XHRhbGw6ICcnLFxuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdFx0cGFyc2VkLFxuXHRcdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzdGRvdXQgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHJlc3VsdC5zdGRvdXQsIHJlc3VsdC5lcnJvcik7XG5cdGNvbnN0IHN0ZGVyciA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgcmVzdWx0LnN0ZGVyciwgcmVzdWx0LmVycm9yKTtcblxuXHRpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5zdGF0dXMgIT09IDAgfHwgcmVzdWx0LnNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IGVycm9yID0gbWFrZUVycm9yKHtcblx0XHRcdHN0ZG91dCxcblx0XHRcdHN0ZGVycixcblx0XHRcdGVycm9yOiByZXN1bHQuZXJyb3IsXG5cdFx0XHRzaWduYWw6IHJlc3VsdC5zaWduYWwsXG5cdFx0XHRleGl0Q29kZTogcmVzdWx0LnN0YXR1cyxcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdHBhcnNlZCxcblx0XHRcdHRpbWVkT3V0OiByZXN1bHQuZXJyb3IgJiYgcmVzdWx0LmVycm9yLmNvZGUgPT09ICdFVElNRURPVVQnLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IHJlc3VsdC5zaWduYWwgIT09IG51bGxcblx0XHR9KTtcblxuXHRcdGlmICghcGFyc2VkLm9wdGlvbnMucmVqZWN0KSB7XG5cdFx0XHRyZXR1cm4gZXJyb3I7XG5cdFx0fVxuXG5cdFx0dGhyb3cgZXJyb3I7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGNvbW1hbmQsXG5cdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0ZXhpdENvZGU6IDAsXG5cdFx0c3Rkb3V0LFxuXHRcdHN0ZGVycixcblx0XHRmYWlsZWQ6IGZhbHNlLFxuXHRcdHRpbWVkT3V0OiBmYWxzZSxcblx0XHRpc0NhbmNlbGVkOiBmYWxzZSxcblx0XHRraWxsZWQ6IGZhbHNlXG5cdH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jb21tYW5kID0gKGNvbW1hbmQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gcGFyc2VDb21tYW5kKGNvbW1hbmQpO1xuXHRyZXR1cm4gZXhlY2EoZmlsZSwgYXJncywgb3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jb21tYW5kU3luYyA9IChjb21tYW5kLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IFtmaWxlLCAuLi5hcmdzXSA9IHBhcnNlQ29tbWFuZChjb21tYW5kKTtcblx0cmV0dXJuIGV4ZWNhLnN5bmMoZmlsZSwgYXJncywgb3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5ub2RlID0gKHNjcmlwdFBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAoYXJncyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcblx0XHRvcHRpb25zID0gYXJncztcblx0XHRhcmdzID0gW107XG5cdH1cblxuXHRjb25zdCBzdGRpbyA9IG5vcm1hbGl6ZVN0ZGlvLm5vZGUob3B0aW9ucyk7XG5cdGNvbnN0IGRlZmF1bHRFeGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3YuZmlsdGVyKGFyZyA9PiAhYXJnLnN0YXJ0c1dpdGgoJy0taW5zcGVjdCcpKTtcblxuXHRjb25zdCB7XG5cdFx0bm9kZVBhdGggPSBwcm9jZXNzLmV4ZWNQYXRoLFxuXHRcdG5vZGVPcHRpb25zID0gZGVmYXVsdEV4ZWNBcmd2XG5cdH0gPSBvcHRpb25zO1xuXG5cdHJldHVybiBleGVjYShcblx0XHRub2RlUGF0aCxcblx0XHRbXG5cdFx0XHQuLi5ub2RlT3B0aW9ucyxcblx0XHRcdHNjcmlwdFBhdGgsXG5cdFx0XHQuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSlcblx0XHRdLFxuXHRcdHtcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRzdGRpbjogdW5kZWZpbmVkLFxuXHRcdFx0c3Rkb3V0OiB1bmRlZmluZWQsXG5cdFx0XHRzdGRlcnI6IHVuZGVmaW5lZCxcblx0XHRcdHN0ZGlvLFxuXHRcdFx0c2hlbGw6IGZhbHNlXG5cdFx0fVxuXHQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAocHJvbWlzZSwgb25GaW5hbGx5KSA9PiB7XG5cdG9uRmluYWxseSA9IG9uRmluYWxseSB8fCAoKCkgPT4ge30pO1xuXG5cdHJldHVybiBwcm9taXNlLnRoZW4oXG5cdFx0dmFsID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuXHRcdFx0cmVzb2x2ZShvbkZpbmFsbHkoKSk7XG5cdFx0fSkudGhlbigoKSA9PiB2YWwpLFxuXHRcdGVyciA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcblx0XHRcdHJlc29sdmUob25GaW5hbGx5KCkpO1xuXHRcdH0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH0pXG5cdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcEZpbmFsbHkgPSByZXF1aXJlKCdwLWZpbmFsbHknKTtcblxuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdH1cbn1cblxuY29uc3QgcFRpbWVvdXQgPSAocHJvbWlzZSwgbWlsbGlzZWNvbmRzLCBmYWxsYmFjaykgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicgfHwgbWlsbGlzZWNvbmRzIDwgMCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGBtaWxsaXNlY29uZHNgIHRvIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cdH1cblxuXHRpZiAobWlsbGlzZWNvbmRzID09PSBJbmZpbml0eSkge1xuXHRcdHJlc29sdmUocHJvbWlzZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbGxiYWNrKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZmFsbGJhY2sgPT09ICdzdHJpbmcnID8gZmFsbGJhY2sgOiBgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHttaWxsaXNlY29uZHN9IG1pbGxpc2Vjb25kc2A7XG5cdFx0Y29uc3QgdGltZW91dEVycm9yID0gZmFsbGJhY2sgaW5zdGFuY2VvZiBFcnJvciA/IGZhbGxiYWNrIDogbmV3IFRpbWVvdXRFcnJvcihtZXNzYWdlKTtcblxuXHRcdGlmICh0eXBlb2YgcHJvbWlzZS5jYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHByb21pc2UuY2FuY2VsKCk7XG5cdFx0fVxuXG5cdFx0cmVqZWN0KHRpbWVvdXRFcnJvcik7XG5cdH0sIG1pbGxpc2Vjb25kcyk7XG5cblx0Ly8gVE9ETzogVXNlIG5hdGl2ZSBgZmluYWxseWAga2V5d29yZCB3aGVuIHRhcmdldGluZyBOb2RlLmpzIDEwXG5cdHBGaW5hbGx5KFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG5cdFx0cHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCksXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR9XG5cdCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwVGltZW91dDtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gcFRpbWVvdXQ7XG5cbm1vZHVsZS5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIFBvcnQgb2YgbG93ZXJfYm91bmQgZnJvbSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2xvd2VyX2JvdW5kXG4vLyBVc2VkIHRvIGNvbXB1dGUgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgcXVldWUgc29ydGVkIGFmdGVyIGluc2VydGlvblxuZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBjb3VudCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSAoY291bnQgLyAyKSB8IDA7XG4gICAgICAgIGxldCBpdCA9IGZpcnN0ICsgc3RlcDtcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaXRdLCB2YWx1ZSkgPD0gMCkge1xuICAgICAgICAgICAgZmlyc3QgPSArK2l0O1xuICAgICAgICAgICAgY291bnQgLT0gc3RlcCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0O1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gbG93ZXJCb3VuZDtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxvd2VyX2JvdW5kXzEgPSByZXF1aXJlKFwiLi9sb3dlci1ib3VuZFwiKTtcbmNsYXNzIFByaW9yaXR5UXVldWUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgIH1cbiAgICBlbnF1ZXVlKHJ1biwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IHByaW9yaXR5OiAwIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICAgICAgcHJpb3JpdHk6IG9wdGlvbnMucHJpb3JpdHksXG4gICAgICAgICAgICBydW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAmJiB0aGlzLl9xdWV1ZVt0aGlzLnNpemUgLSAxXS5wcmlvcml0eSA+PSBvcHRpb25zLnByaW9yaXR5KSB7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbG93ZXJfYm91bmRfMS5kZWZhdWx0KHRoaXMuX3F1ZXVlLCBlbGVtZW50LCAoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpO1xuICAgICAgICB0aGlzLl9xdWV1ZS5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBkZXF1ZXVlKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS5ydW47XG4gICAgfVxuICAgIGZpbHRlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZS5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQucHJpb3JpdHkgPT09IG9wdGlvbnMucHJpb3JpdHkpLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5ydW4pO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcmlvcml0eVF1ZXVlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7XG5jb25zdCBwX3RpbWVvdXRfMSA9IHJlcXVpcmUoXCJwLXRpbWVvdXRcIik7XG5jb25zdCBwcmlvcml0eV9xdWV1ZV8xID0gcmVxdWlyZShcIi4vcHJpb3JpdHktcXVldWVcIik7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5jb25zdCBlbXB0eSA9ICgpID0+IHsgfTtcbmNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBwX3RpbWVvdXRfMS5UaW1lb3V0RXJyb3IoKTtcbi8qKlxuUHJvbWlzZSBxdWV1ZSB3aXRoIGNvbmN1cnJlbmN5IGNvbnRyb2wuXG4qL1xuY2xhc3MgUFF1ZXVlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX2ludGVydmFsRW5kID0gMDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5ID0gZW1wdHk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVJZGxlID0gZW1wdHk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50OiBmYWxzZSwgaW50ZXJ2YWxDYXA6IEluZmluaXR5LCBpbnRlcnZhbDogMCwgY29uY3VycmVuY3k6IEluZmluaXR5LCBhdXRvU3RhcnQ6IHRydWUsIHF1ZXVlQ2xhc3M6IHByaW9yaXR5X3F1ZXVlXzEuZGVmYXVsdCB9LCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCEodHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXAgPT09ICdudW1iZXInICYmIG9wdGlvbnMuaW50ZXJ2YWxDYXAgPj0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGludGVydmFsQ2FwXFxgIHRvIGJlIGEgbnVtYmVyIGZyb20gMSBhbmQgdXAsIGdvdCBcXGAkeyhfYiA9IChfYSA9IG9wdGlvbnMuaW50ZXJ2YWxDYXApID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXB9KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmludGVydmFsID09PSB1bmRlZmluZWQgfHwgIShOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5pbnRlcnZhbCkgJiYgb3B0aW9ucy5pbnRlcnZhbCA+PSAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxcXGAgdG8gYmUgYSBmaW5pdGUgbnVtYmVyID49IDAsIGdvdCBcXGAkeyhfZCA9IChfYyA9IG9wdGlvbnMuaW50ZXJ2YWwpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWx9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPSBvcHRpb25zLmNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgICAgIHRoaXMuX2lzSW50ZXJ2YWxJZ25vcmVkID0gb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gSW5maW5pdHkgfHwgb3B0aW9ucy5pbnRlcnZhbCA9PT0gMDtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWxDYXAgPSBvcHRpb25zLmludGVydmFsQ2FwO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gbmV3IG9wdGlvbnMucXVldWVDbGFzcygpO1xuICAgICAgICB0aGlzLl9xdWV1ZUNsYXNzID0gb3B0aW9ucy5xdWV1ZUNsYXNzO1xuICAgICAgICB0aGlzLmNvbmN1cnJlbmN5ID0gb3B0aW9ucy5jb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgdGhpcy5fdGhyb3dPblRpbWVvdXQgPSBvcHRpb25zLnRocm93T25UaW1lb3V0ID09PSB0cnVlO1xuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IG9wdGlvbnMuYXV0b1N0YXJ0ID09PSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IF9kb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLl9pbnRlcnZhbENvdW50IDwgdGhpcy5faW50ZXJ2YWxDYXA7XG4gICAgfVxuICAgIGdldCBfZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQ291bnQgPCB0aGlzLl9jb25jdXJyZW5jeTtcbiAgICB9XG4gICAgX25leHQoKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDb3VudC0tO1xuICAgICAgICB0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB0aGlzLmVtaXQoJ25leHQnKTtcbiAgICB9XG4gICAgX3Jlc29sdmVQcm9taXNlcygpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5KCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVFbXB0eSA9IGVtcHR5O1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlSWRsZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUlkbGUgPSBlbXB0eTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaWRsZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9vblJlc3VtZUludGVydmFsKCkge1xuICAgICAgICB0aGlzLl9vbkludGVydmFsKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCk7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX2lzSW50ZXJ2YWxQYXVzZWQoKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcnZhbElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5faW50ZXJ2YWxFbmQgLSBub3c7XG4gICAgICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQWN0IGFzIHRoZSBpbnRlcnZhbCB3YXMgZG9uZVxuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzdW1lIGl0IGhlcmUgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc3VtZWQgb24gbGluZSAxNjBcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnZhbENvdW50ID0gKHRoaXMuX2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQpID8gdGhpcy5fcGVuZGluZ0NvdW50IDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFjdCBhcyB0aGUgaW50ZXJ2YWwgaXMgcGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVzdW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIF90cnlUb1N0YXJ0QW5vdGhlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGUgaW50ZXJ2YWwgKFwicGF1c2VcIilcbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuIHJlZG8gaXQgbGF0ZXIgKFwicmVzdW1lXCIpXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVByb21pc2VzKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pc1BhdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgY2FuSW5pdGlhbGl6ZUludGVydmFsID0gIXRoaXMuX2lzSW50ZXJ2YWxQYXVzZWQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIgJiYgdGhpcy5fZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLl9xdWV1ZS5kZXF1ZXVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGpvYigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Jbml0aWFsaXplSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBfaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLl9pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25JbnRlcnZhbCgpO1xuICAgICAgICB9LCB0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuX2ludGVydmFsRW5kID0gRGF0ZS5ub3coKSArIHRoaXMuX2ludGVydmFsO1xuICAgIH1cbiAgICBfb25JbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVydmFsQ291bnQgPT09IDAgJiYgdGhpcy5fcGVuZGluZ0NvdW50ID09PSAwICYmIHRoaXMuX2ludGVydmFsSWQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ludGVydmFsQ291bnQgPSB0aGlzLl9jYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50ID8gdGhpcy5fcGVuZGluZ0NvdW50IDogMDtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEV4ZWN1dGVzIGFsbCBxdWV1ZWQgZnVuY3Rpb25zIHVudGlsIGl0IHJlYWNoZXMgdGhlIGxpbWl0LlxuICAgICovXG4gICAgX3Byb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgICAgIHdoaWxlICh0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpKSB7IH1cbiAgICB9XG4gICAgZ2V0IGNvbmN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uY3VycmVuY3k7XG4gICAgfVxuICAgIHNldCBjb25jdXJyZW5jeShuZXdDb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbmV3Q29uY3VycmVuY3kgPT09ICdudW1iZXInICYmIG5ld0NvbmN1cnJlbmN5ID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjb25jdXJyZW5jeVxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtuZXdDb25jdXJyZW5jeX1cXGAgKCR7dHlwZW9mIG5ld0NvbmN1cnJlbmN5fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25jdXJyZW5jeSA9IG5ld0NvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLl9wcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQWRkcyBhIHN5bmMgb3IgYXN5bmMgdGFzayB0byB0aGUgcXVldWUuIEFsd2F5cyByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICAqL1xuICAgIGFzeW5jIGFkZChmbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NvdW50Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWxDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9ICh0aGlzLl90aW1lb3V0ID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQpID8gZm4oKSA6IHBfdGltZW91dF8xLmRlZmF1bHQoUHJvbWlzZS5yZXNvbHZlKGZuKCkpLCAob3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQgPyB0aGlzLl90aW1lb3V0IDogb3B0aW9ucy50aW1lb3V0KSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyb3dPblRpbWVvdXQgPT09IHVuZGVmaW5lZCA/IHRoaXMuX3Rocm93T25UaW1lb3V0IDogb3B0aW9ucy50aHJvd09uVGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXdhaXQgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX25leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5lbnF1ZXVlKHJ1biwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdhZGQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFNhbWUgYXMgYC5hZGQoKWAsIGJ1dCBhY2NlcHRzIGFuIGFycmF5IG9mIHN5bmMgb3IgYXN5bmMgZnVuY3Rpb25zLlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZnVuY3Rpb25zIGFyZSByZXNvbHZlZC5cbiAgICAqL1xuICAgIGFzeW5jIGFkZEFsbChmdW5jdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZ1bmN0aW9ucy5tYXAoYXN5bmMgKGZ1bmN0aW9uXykgPT4gdGhpcy5hZGQoZnVuY3Rpb25fLCBvcHRpb25zKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICBTdGFydCAob3IgcmVzdW1lKSBleGVjdXRpbmcgZW5xdWV1ZWQgdGFza3Mgd2l0aGluIGNvbmN1cnJlbmN5IGxpbWl0LiBObyBuZWVkIHRvIGNhbGwgdGhpcyBpZiBxdWV1ZSBpcyBub3QgcGF1c2VkICh2aWEgYG9wdGlvbnMuYXV0b1N0YXJ0ID0gZmFsc2VgIG9yIGJ5IGAucGF1c2UoKWAgbWV0aG9kLilcbiAgICAqL1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFB1dCBxdWV1ZSBleGVjdXRpb24gb24gaG9sZC5cbiAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIENsZWFyIHRoZSBxdWV1ZS5cbiAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IG5ldyB0aGlzLl9xdWV1ZUNsYXNzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIENhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFVzZWZ1bCBpZiB5b3UgZm9yIGV4YW1wbGUgYWRkIGFkZGl0aW9uYWwgaXRlbXMgYXQgYSBsYXRlciB0aW1lLlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIHRoZSBxdWV1ZSBiZWNvbWVzIGVtcHR5LlxuICAgICovXG4gICAgYXN5bmMgb25FbXB0eSgpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5XG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZXNvbHZlID0gdGhpcy5fcmVzb2x2ZUVtcHR5O1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgZGlmZmVyZW5jZSB3aXRoIGAub25FbXB0eWAgaXMgdGhhdCBgLm9uSWRsZWAgZ3VhcmFudGVlcyB0aGF0IGFsbCB3b3JrIGZyb20gdGhlIHF1ZXVlIGhhcyBmaW5pc2hlZC4gYC5vbkVtcHR5YCBtZXJlbHkgc2lnbmFscyB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYnV0IGl0IGNvdWxkIG1lYW4gdGhhdCBzb21lIHByb21pc2VzIGhhdmVuJ3QgY29tcGxldGVkIHlldC5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eSwgYW5kIGFsbCBwcm9taXNlcyBoYXZlIGNvbXBsZXRlZDsgYHF1ZXVlLnNpemUgPT09IDAgJiYgcXVldWUucGVuZGluZyA9PT0gMGAuXG4gICAgKi9cbiAgICBhc3luYyBvbklkbGUoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIG5vbmUgcGVuZGluZyBhbmQgaWYgbm90aGluZyBlbHNlIGlzIHF1ZXVlZFxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NvdW50ID09PSAwICYmIHRoaXMuX3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1Jlc29sdmUgPSB0aGlzLl9yZXNvbHZlSWRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVJZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZS5cbiAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVldWUuc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2l6ZSBvZiB0aGUgcXVldWUsIGZpbHRlcmVkIGJ5IHRoZSBnaXZlbiBvcHRpb25zLlxuXG4gICAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJlbWFpbmluZyBpbiB0aGUgcXVldWUgd2l0aCBhIHNwZWNpZmljIHByaW9yaXR5IGxldmVsLlxuICAgICovXG4gICAgc2l6ZUJ5KG9wdGlvbnMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tZm4tcmVmZXJlbmNlLWluLWl0ZXJhdG9yXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZS5maWx0ZXIob3B0aW9ucykubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICBOdW1iZXIgb2YgcGVuZGluZyBwcm9taXNlcy5cbiAgICAqL1xuICAgIGdldCBwZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxuICAgICovXG4gICAgZ2V0IGlzUGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNQYXVzZWQ7XG4gICAgfVxuICAgIGdldCB0aW1lb3V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZW91dDtcbiAgICB9XG4gICAgLyoqXG4gICAgU2V0IHRoZSB0aW1lb3V0IGZvciBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAqL1xuICAgIHNldCB0aW1lb3V0KG1pbGxpc2Vjb25kcykge1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gbWlsbGlzZWNvbmRzO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFBRdWV1ZTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB0cy9uby10aGlzLWFsaWFzICovXG5pbXBvcnQgeyBzZGtDb21tYW5kcyB9IGZyb20gJ0BjbGktY29uZmlnJztcbmltcG9ydCB7IElOVk9LRURfRlJPTV9FTlZfVkFSX05BTUUgfSBmcm9tICdAY29uZmlnJztcbmltcG9ydCB7IGdldEluc3RhbGxhdGlvblNjcmlwdCwgaXNTdGFja3RhcGVJbnN0YWxsZWRPblN5c3RlbSB9IGZyb20gJ0BzaGFyZWQvdXRpbHMvYmluLWV4ZWN1dGFibGUnO1xuaW1wb3J0IHsgaXNGaWxlQWNjZXNzaWJsZSB9IGZyb20gJ0BzaGFyZWQvdXRpbHMvZnMtdXRpbHMnO1xuaW1wb3J0IHsgdHJhbnNmb3JtVG9DbGlBcmdzIH0gZnJvbSAnQHV0aWxzL2NsaSc7XG5pbXBvcnQgeyBjYW1lbENhc2UgfSBmcm9tICdjaGFuZ2UtY2FzZSc7XG5pbXBvcnQgZXhlY2EgZnJvbSAnZXhlY2EnO1xuaW1wb3J0IFBRdWV1ZSBmcm9tICdwLXF1ZXVlJztcblxudHlwZSBTdGFja3RhcGVDbGllbnRPcHRpb25zID0ge1xuICByZWdpb24/OiBBV1NSZWdpb247XG4gIHN0YWdlPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBwcmludFByb2dyZXNzPzogYm9vbGVhbjtcbiAgZXhlY3V0YWJsZVBhdGg/OiBzdHJpbmc7XG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBlbnY/OiB7IFtlbnZWYXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgb25FdmVudD86ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufTtcblxuY29uc3QgZ2V0RXhlY3V0YWJsZSA9ICh7IHByZXNldEV4ZWN1dGFibGVQYXRoIH06IHsgcHJlc2V0RXhlY3V0YWJsZVBhdGg/OiBzdHJpbmcgfSkgPT4ge1xuICBpZiAocHJlc2V0RXhlY3V0YWJsZVBhdGgpIHtcbiAgICBpZiAoIWlzRmlsZUFjY2Vzc2libGUocHJlc2V0RXhlY3V0YWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByZS1jb25maWd1cmVkIHN0YWNrdGFwZSBleGVjdXRhYmxlIHBhdGggJHtwcmVzZXRFeGVjdXRhYmxlUGF0aH0gaXMgbm90IGFjY2Vzc2libGUuYCk7XG4gICAgfVxuICAgIHJldHVybiBwcmVzZXRFeGVjdXRhYmxlUGF0aDtcbiAgfVxuICBpZiAoIWlzU3RhY2t0YXBlSW5zdGFsbGVkT25TeXN0ZW0oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2t0YXBlIGlzIG5vdCBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS5cXG5UbyBpbnN0YWxsIGl0LCBydW46XFxuJHtnZXRJbnN0YWxsYXRpb25TY3JpcHQoKX1gKTtcbiAgfVxuICByZXR1cm4gJ3N0YWNrdGFwZSc7XG59O1xuXG5leHBvcnQgY2xhc3MgU3RhY2t0YXBlIHtcbiAgI2dsb2JhbEFyZ3M6IHsgcmVnaW9uPzogQVdTUmVnaW9uOyBzdGFnZT86IHN0cmluZzsgcHJvZmlsZT86IHN0cmluZyB9O1xuICAjZ2xvYmFsUHJpbnRQcm9ncmVzcyA9IGZhbHNlO1xuICAjZ2xvYmFsRW52OiB7IFtlbnZWYXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgI2dsb2JhbE9uRXZlbnQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuICAjZXhlY3V0YWJsZTogc3RyaW5nO1xuICAjcHJvbWlzZVF1ZXVlOiBQUXVldWU7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFN0YWNrdGFwZUNsaWVudE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBTdGFja3RhcGUgY29uc3RydWN0b3IuJyk7XG4gICAgICBlcnIubmFtZSA9ICdDT05GSUdfRVJST1InO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBwcmludFByb2dyZXNzOiBwcmVzZXRQcmludFByb2dyZXNzLFxuICAgICAgb25FdmVudDogZ2xvYmFsT25FdmVudCxcbiAgICAgIGV4ZWN1dGFibGVQYXRoLFxuICAgICAgY29uY3VycmVuY3ksXG4gICAgICBlbnYsXG4gICAgICAuLi5nbG9iYWxBcmdzXG4gICAgfSA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy4jZ2xvYmFsUHJpbnRQcm9ncmVzcyA9IHByZXNldFByaW50UHJvZ3Jlc3M7XG4gICAgdGhpcy4jZ2xvYmFsQXJncyA9IGdsb2JhbEFyZ3MgfHwge307XG4gICAgdGhpcy4jZ2xvYmFsT25FdmVudCA9IGdsb2JhbE9uRXZlbnQ7XG4gICAgdGhpcy4jZ2xvYmFsRW52ID0gZW52IHx8IHt9O1xuICAgIHRoaXMuI2V4ZWN1dGFibGUgPSBnZXRFeGVjdXRhYmxlKHsgcHJlc2V0RXhlY3V0YWJsZVBhdGg6IGV4ZWN1dGFibGVQYXRoIH0pO1xuICAgIHRoaXMuI3Byb21pc2VRdWV1ZSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogY29uY3VycmVuY3kgfHwgMSB9KTtcbiAgICBzZGtDb21tYW5kcy5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICB0aGlzW2NhbWVsQ2FzZShjb21tYW5kLnJlcGxhY2VBbGwoJzonLCAnLScpKV0gPSB0aGlzLiNnZXRDb21tYW5kKGNvbW1hbmQpO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldENvbW1hbmQgPSAoY29tbWFuZDogU3RhY2t0YXBlQ29tbWFuZCkgPT4ge1xuICAgIHJldHVybiAoeyBvbkV2ZW50LCBwcmludFByb2dyZXNzLCAuLi5hcmdzIH0gPSB7fSBhcyBhbnkpOiBQcm9taXNlPFN0YWNrdGFwZUNvbW1hbmRSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdFcnJvciBleGVjdXRpbmcgY29tbWFuZCcpO1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gc2VsZi4jcHJvbWlzZVF1ZXVlLmFkZChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjb25zdCB7IGNvbmZpZywgLi4ucmVzdEFyZ3MgfSA9IGFyZ3M7XG4gICAgICAgICAgLy8gVHJhbnNmb3JtIGNvbmZpZyB3aXRoIHJlc291cmNlIGluc3RhbmNlcyB0byBwbGFpbiBjb25maWdcbiAgICAgICAgICBjb25zdCBjaGlsZFByb2Nlc3MgPSBleGVjYShcbiAgICAgICAgICAgIHNlbGYuI2V4ZWN1dGFibGUsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgIC4uLnRyYW5zZm9ybVRvQ2xpQXJncyh7IC4uLnNlbGYuI2dsb2JhbEFyZ3MsIC4uLnJlc3RBcmdzIH0pLFxuICAgICAgICAgICAgICAuLi4oY29uZmlnID8gWyctLWNvbmZpZycsIEpTT04uc3RyaW5naWZ5KGNvbmZpZyldIDogW10pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uOiAnanNvbicsXG4gICAgICAgICAgICAgIHN0ZGluOiAnaXBjJyxcbiAgICAgICAgICAgICAgZW52OiB7IFtJTlZPS0VEX0ZST01fRU5WX1ZBUl9OQU1FXTogJ3NkaycsIC4uLnNlbGYuI2dsb2JhbEVudiB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjaGlsZFByb2Nlc3Mub24oJ21lc3NhZ2UnLCAobWVzc2FnZTogU3RhY2t0YXBlTG9nKSA9PiB7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnRVJST1InKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JUeXBlLCBtZXNzYWdlOiBtc2cgfSA9IG1lc3NhZ2UuZGF0YTtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGAke2Vycm9yVHlwZX06ICR7bXNnfWA7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ0ZJTklTSCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobWVzc2FnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdNRVNTQUdFJykge1xuICAgICAgICAgICAgICBpZiAoc2VsZi4jZ2xvYmFsUHJpbnRQcm9ncmVzcyB8fCBwcmludFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBbJHttZXNzYWdlLmRhdGEucHJpbnRUeXBlfV0gJHttZXNzYWdlLmRhdGEubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvbkV2ZW50Rm4gPSBvbkV2ZW50IHx8IHNlbGYuI2dsb2JhbE9uRXZlbnQ7XG4gICAgICAgICAgICAgIGlmIChvbkV2ZW50Rm4pIHtcbiAgICAgICAgICAgICAgICBvbkV2ZW50Rm4obWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgUmVhZGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IGpzb241IGZyb20gJ2pzb241JztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgbWljcm9tYXRjaCBmcm9tICdtaWNyb21hdGNoJztcblxuY29uc3QgcmVhZEpzb24gPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICByZXR1cm4ganNvbjUucGFyc2UoY29udGVudHMpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZSA9IChvYmo6IGFueSkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIb21lRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICBjb25zdCBob21lID0gZW52LkhPTUUgfHwgZW52LlVTRVJQUk9GSUxFIHx8IChlbnYuSE9NRVBBVEggPyAoZW52LkhPTUVEUklWRSB8fCAnQzovJykgKyBlbnYuSE9NRVBBVEggOiBudWxsKTtcbiAgaWYgKGhvbWUpIHtcbiAgICByZXR1cm4gaG9tZTtcbiAgfVxuICBpZiAodHlwZW9mIGhvbWVkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaG9tZWRpcigpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNOb25OdWxsT2JqZWN0ID0gKG9iajogYW55KSA9PiB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG59O1xuXG5leHBvcnQgY29uc3Qgd2FpdCA9IChtczogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVycm9yID0gKHtcbiAgbWVzc2FnZSxcbiAgdHlwZSxcbiAgZGF0YSxcbiAgaGludCxcbiAgc3RhY2ssXG4gIGNvZGVcbn06IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0eXBlOiBFcnJvclR5cGU7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGhpbnQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgZGF0YT86IGFueTtcbiAgc3RhY2s/OiBFcnJvclsnc3RhY2snXTtcbn0pID0+IHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSkgYXMgU3RhY2t0YXBlRXJyb3I7XG4gIGlmIChzdGFjaykge1xuICAgIGVycm9yLnN0YWNrID0gc3RhY2s7XG4gIH1cbiAgZXJyb3IuaGludCA9IGhpbnQ7XG4gIGVycm9yLmRhdGEgPSBkYXRhO1xuICBlcnJvci50eXBlID0gdHlwZTtcbiAgZXJyb3IuY29kZSA9IGNvZGUgfHwgbnVsbDtcbiAgZXJyb3IuaXNFeHBlY3RlZCA9IHR5cGUgIT09ICdVTkVYUEVDVEVEJztcbiAgZXJyb3IuaXNOZXdBcHByb2FjaEVycm9yID0gdHJ1ZTtcbiAgcmV0dXJuIGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ01hdGNoZXNHbG9iID0gKHRlc3RlZFN0cmluZzogc3RyaW5nLCBnbG9iUGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBtaWNyb21hdGNoLmlzTWF0Y2godGVzdGVkU3RyaW5nLCBnbG9iUGF0dGVybiwgeyB3aW5kb3dzOiB0cnVlIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNvcnRPYmplY3RLZXlzID0gKG9iaikgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuc29ydCgpKTtcblxuZXhwb3J0IGNvbnN0IHJhaXNlRXJyb3IgPSAocHJvcHM6IEFyZ3NUeXBlPHR5cGVvZiBnZXRFcnJvcj5bMF0pOiBuZXZlciA9PiB7XG4gIHRocm93IGdldEVycm9yKHByb3BzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzcGxpdFN0cmluZ0ludG9MaW5lcyA9ICh0ZXh0OiBzdHJpbmcsIGxpbmVNYXhMZW5ndGg6IG51bWJlciwgd2hpdGVzcGFjZUxvb2t1cCA9IDQwKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICBTdHJpbmcucmF3YFxccyooPzooXFxTeyR7bGluZU1heExlbmd0aH19KXwoW1xcc1xcU117JHtsaW5lTWF4TGVuZ3RoIC0gd2hpdGVzcGFjZUxvb2t1cH0sJHtsaW5lTWF4TGVuZ3RofX0pKD8hXFxTKSlgLFxuICAgICdnJ1xuICApO1xuICBjb25zdCByZXBsYWNlZExpbmVzID0gdGV4dFxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBsZXQgcmVwbGFjZWRMaW5lID0gbGluZS5yZXBsYWNlKHJlZ2V4LCAoXywgeCwgeSkgPT4gKHggPyBgJHt4fVxcbmAgOiBgJHt5fVxcbmApKTtcbiAgICAgIHJlcGxhY2VkTGluZSA9IHJlcGxhY2VkTGluZS5lbmRzV2l0aCgnXFxuJykgPyByZXBsYWNlZExpbmUuc2xpY2UoMCwgLTEpIDogcmVwbGFjZWRMaW5lO1xuICAgICAgcmV0dXJuIHJlcGxhY2VkTGluZS5zcGxpdCgnXFxuJyk7XG4gICAgfSlcbiAgICAuZmxhdCgpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpO1xuICByZXR1cm4gcmVwbGFjZWRMaW5lcztcbn07XG5cbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlUHJlZml4TXVsdGlsaW5lVGV4dCA9ICh0ZXh0OiBzdHJpbmcsIHBhZGRpbmc6IG51bWJlciwgc2tpcEZpcnN0TGluZSA9IGZhbHNlKSA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgc2tpcEZpcnN0TGluZSkge1xuICAgICAgICByZXR1cm4gbGluZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJHsnICcucmVwZWF0KHBhZGRpbmcpfSR7bGluZX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFyZVN0cmluZ0FycmF5c0NvbnRlbnRzRXF1YWwgPSAoYXJyMTogc3RyaW5nW10sIGFycjI6IHN0cmluZ1tdKSA9PiB7XG4gIGlmIChhcnIxPy5sZW5ndGggIT09IGFycjI/Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhcnIxLnNvcnQoKTtcbiAgYXJyMi5zb3J0KCk7XG4gIGZvciAoY29uc3QgW2luZGV4LCBlbGVtZW50XSBvZiBhcnIxLmVudHJpZXMoKSkge1xuICAgIGlmIChlbGVtZW50ICE9PSBhcnIyW2luZGV4XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0pzb24gPSAoaXRlbTogYW55KSA9PiB7XG4gIGNvbnN0IHN0cmluZ2lmaWVkSXRlbSA9IHR5cGVvZiBpdGVtICE9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGl0ZW0pIDogaXRlbTtcbiAgbGV0IHBhcnNlZEl0ZW06IGFueTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRJdGVtID0gSlNPTi5wYXJzZShzdHJpbmdpZmllZEl0ZW0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcnNlZEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NtYWxsQWxwaGFudW1lcmljRGFzaENhc2UgPSAoc3RyOiBzdHJpbmcpID0+IC9eW2EtejAtOS1dKyQvLnRlc3Qoc3RyKTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRKc29uID0gKGl0ZW06IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgSlNPTi5wYXJzZShpdGVtKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemUgPSAoaXRlbTogYW55KSA9PiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcblxuZXhwb3J0IGNvbnN0IGdldFVuaXF1ZUR1cGxpY2F0ZXMgPSAoYXJyYXk6IGFueVtdKTogYW55W10gPT4ge1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgIT09IGluZGV4KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0R1cGxpY2F0ZXMgPSAoYXJyYXk6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBhcnJheS5sZW5ndGggIT09IG5ldyBTZXQoYXJyYXkpLnNpemU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0FsbE5vZGVzID0gYXN5bmMgKFxuICBub2RlOiBhbnksXG4gIHByb2Nlc3NGdW5jdGlvbjogKC4uLmFyZ3M6IGFueSkgPT4gYW55LFxuICB7IHByb2Nlc3NOb25QcmltaXRpdmVWYWx1ZXMgfTogeyBwcm9jZXNzTm9uUHJpbWl0aXZlVmFsdWVzOiBib29sZWFuIH0gPSB7IHByb2Nlc3NOb25QcmltaXRpdmVWYWx1ZXM6IGZhbHNlIH1cbikgPT4ge1xuICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9jZXNzRnVuY3Rpb24obm9kZSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBpZiAocHJvY2Vzc05vblByaW1pdGl2ZVZhbHVlcykge1xuICAgICAgcHJvY2Vzc0Z1bmN0aW9uKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBub2RlLm1hcCgobm9kZVZhbHVlKSA9PiBwcm9jZXNzQWxsTm9kZXMobm9kZVZhbHVlLCBwcm9jZXNzRnVuY3Rpb24sIHsgcHJvY2Vzc05vblByaW1pdGl2ZVZhbHVlcyB9KSlcbiAgICApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBpZiAocHJvY2Vzc05vblByaW1pdGl2ZVZhbHVlcykge1xuICAgICAgcHJvY2Vzc0Z1bmN0aW9uKG5vZGUpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKG5vZGUpLm1hcChhc3luYyAoW3Byb3AsIG5vZGVWYWx1ZV0pID0+IHtcbiAgICAgICAgcmVzW3Byb3BdID0gYXdhaXQgcHJvY2Vzc0FsbE5vZGVzKG5vZGVWYWx1ZSwgcHJvY2Vzc0Z1bmN0aW9uLCB7IHByb2Nlc3NOb25QcmltaXRpdmVWYWx1ZXMgfSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICByZXR1cm4gcHJvY2Vzc0Z1bmN0aW9uKG5vZGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NBbGxOb2Rlc1N5bmMgPSAobm9kZTogYW55LCBwcm9jZXNzRnVuY3Rpb246ICguLi5hcmdzOiBhbnkpID0+IGFueSkgPT4ge1xuICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9jZXNzRnVuY3Rpb24obm9kZSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5tYXAoKG5vZGVWYWx1ZSkgPT4gcHJvY2Vzc0FsbE5vZGVzU3luYyhub2RlVmFsdWUsIHByb2Nlc3NGdW5jdGlvbikpO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhub2RlKS5mb3JFYWNoKChbcHJvcCwgbm9kZVZhbHVlXSkgPT4ge1xuICAgICAgcmVzW3Byb3BdID0gcHJvY2Vzc0FsbE5vZGVzU3luYyhub2RlVmFsdWUsIHByb2Nlc3NGdW5jdGlvbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHJldHVybiBwcm9jZXNzRnVuY3Rpb24obm9kZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUHJvcGVydGllc0Zyb21PYmplY3QgPSAob2JqOiBhbnksIHByb3BOYW1lczogc3RyaW5nW10pOiBhbnkgPT4ge1xuICBpZiAob2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAocHJvcE5hbWVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlbW92ZVByb3BlcnRpZXNGcm9tT2JqZWN0KG9ialtrZXldLCBwcm9wTmFtZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGNvbnN0IG9yZGVyUHJvcGVydGllc09mT2JqZWN0QWNjb3JkaW5nVG9LZXlzID0gPFQ+KFxuICB1bm9yZGVyZWQ6IFJlY29yZDxzdHJpbmcsIFQ+LFxuICBjb21wYXJlRm4/OiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG51bWJlclxuKTogUmVjb3JkPHN0cmluZywgVD4gPT4ge1xuICByZXR1cm4gT2JqZWN0LmtleXModW5vcmRlcmVkKVxuICAgIC5zb3J0KGNvbXBhcmVGbilcbiAgICAucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSB1bm9yZGVyZWRba2V5XTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlVG9NYXhpbWFsRXh0ZW50ID0gKFxuICBvYmplY3RUb1RyYXZlcnNlOiBhbnksXG4gIHBhdGhUb1Byb3A6IHN0cmluZ1xuKTogeyByZXN1bHRWYWx1ZTogYW55OyB2YWxpZFBhdGg6IHN0cmluZzsgcmVzdFBhdGg6IHN0cmluZyB9ID0+IHtcbiAgY29uc3QgcmVzdFBhdGggPSBwYXRoVG9Qcm9wLnNwbGl0KCcuJyk7XG4gIGlmICghcmVzdFBhdGgubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdFZhbHVlOiBvYmplY3RUb1RyYXZlcnNlLFxuICAgICAgdmFsaWRQYXRoOiAnJyxcbiAgICAgIHJlc3RQYXRoOiAnJ1xuICAgIH07XG4gIH1cbiAgbGV0IHZhbHVlID0gZ2V0KG9iamVjdFRvVHJhdmVyc2UsIHJlc3RQYXRoWzBdKTtcbiAgbGV0IHZhbGlkUGF0aCA9IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgcmVzdFBhdGguc2hpZnQoKTtcblxuICB3aGlsZSAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiByZXN0UGF0aC5sZW5ndGgpIHtcbiAgICBjb25zdCBwb3RlbnRpYWxWYWx1ZSA9IGdldChvYmplY3RUb1RyYXZlcnNlLCBgJHt2YWxpZFBhdGh9LiR7cmVzdFBhdGhbMF19YCk7XG4gICAgaWYgKHBvdGVudGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YWx1ZSA9IHBvdGVudGlhbFZhbHVlO1xuICAgIHZhbGlkUGF0aCA9IGAke3ZhbGlkUGF0aH0uJHtyZXN0UGF0aC5zaGlmdCgpfWA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlc3VsdFZhbHVlOiB2YWx1ZSxcbiAgICB2YWxpZFBhdGgsXG4gICAgcmVzdFBhdGg6IHJlc3RQYXRoLmpvaW4oJy4nKVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlcGxhY2VBbGwgPSBmdW5jdGlvbiAocmVwbGFjZVRoaXM6IHN0cmluZywgd2l0aFRoaXM6IHN0cmluZywgaW5UaGlzOiBzdHJpbmcpIHtcbiAgaWYgKHdpdGhUaGlzKSB7XG4gICAgd2l0aFRoaXMgPSB3aXRoVGhpcy5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKTtcbiAgfVxuICByZXR1cm4gaW5UaGlzLnJlcGxhY2UobmV3IFJlZ0V4cChyZXBsYWNlVGhpcy5yZXBsYWNlKC8oWy8sIVxcXFxeJHt9W1xcXSgpLiorP3w8PlxcLSZdKS9nLCAnXFxcXCQmJyksICdnJyksIHdpdGhUaGlzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FscGhhbnVtZXJpYyA9IChzdHI6IHN0cmluZykgPT4gL15bYS16MC05XSskL2kudGVzdChzdHIpO1xuXG5leHBvcnQgY29uc3QgZGVmaW5lZFZhbHVlT3IgPSAodmFsOiBhbnksIGRlZmF1bHRWYWx1ZTogYW55KSA9PiAodmFsICE9PSB1bmRlZmluZWQgPyB2YWwgOiBkZWZhdWx0VmFsdWUpO1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0NvbmN1cnJlbnRseSA9IChqb2JzOiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPGFueT4pW10sIGNvbmN1cnJlbmN5TGltaXQ6IG51bWJlcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBpc0Vycm9yZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVzb2x2ZWRQcm9taXNlcyA9IDA7XG4gICAgbGV0IGxhc3RTdGFydGVkSW5kZXggPSAwO1xuICAgIGxldCBjdXJyZW50bHlSdW5uaW5nID0gMDtcbiAgICBjb25zdCBwcm9jZXNzSm9iID0gKGpvYikgPT4ge1xuICAgICAgY3VycmVudGx5UnVubmluZysrO1xuICAgICAgbGFzdFN0YXJ0ZWRJbmRleCsrO1xuICAgICAgY29uc3QgcmVzdWx0ID0gam9iKCk7XG4gICAgICBQcm9taXNlLnJlc29sdmUocmVzdWx0KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZWRQcm9taXNlcysrO1xuICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmctLTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWlzRXJyb3JlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc0Vycm9yZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dDtcbiAgICBjb25zdCBjaGVja0pvYnMgPSAoKSA9PiB7XG4gICAgICBpZiAocmVzb2x2ZWRQcm9taXNlcyA9PT0gam9icy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBsZXQgc2hvdWxkQ2hlY2tOZXh0Sm9iID0gdHJ1ZTtcbiAgICAgIHdoaWxlIChzaG91bGRDaGVja05leHRKb2IpIHtcbiAgICAgICAgY29uc3QgbmV3Sm9iID0gam9ic1tsYXN0U3RhcnRlZEluZGV4XTtcbiAgICAgICAgaWYgKG5ld0pvYiAmJiBjdXJyZW50bHlSdW5uaW5nIDwgY29uY3VycmVuY3lMaW1pdCkge1xuICAgICAgICAgIHByb2Nlc3NKb2IobmV3Sm9iKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG91bGRDaGVja05leHRKb2IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY2hlY2tKb2JzKCk7XG4gICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChjaGVja0pvYnMsIDUpO1xuICB9KTtcbn07XG5cbmNvbnN0IHN0cmVhbVRvQnVmZmVyID0gKHN0cmVhbTogUmVhZGFibGUpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSkpO1xuICAgIHN0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdHJlYW1Ub1N0cmluZyA9IGFzeW5jIChzdHJlYW06IFJlYWRhYmxlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgcmV0dXJuIHN0cmVhbVRvQnVmZmVyKHN0cmVhbSkudGhlbigoYnVmZmVyKSA9PiBidWZmZXIudG9TdHJpbmcoJ3V0Zi04JykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvQ2lkciA9ICh7IGNpZHJPcklwIH06IHsgY2lkck9ySXA6IHN0cmluZyB9KSA9PiB7XG4gIGlmIChjaWRyT3JJcC5pbmNsdWRlcygnLycpKSB7XG4gICAgcmV0dXJuIGNpZHJPcklwO1xuICB9XG4gIHJldHVybiBgJHtjaWRyT3JJcH0vMzJgO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJ5dGVTaXplID0gKHNpemU6IG51bWJlciwgdW5pdDogJ01CJyB8ICdLQicsIGRlY2ltYWxzID0gMikgPT4ge1xuICBsZXQgcmVzOiBudW1iZXI7XG4gIGlmICh1bml0ID09PSAnTUInKSB7XG4gICAgcmVzID0gc2l6ZSAvIDEwMjQgLyAxMDI0O1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHNpemUgLyAxMDI0O1xuICB9XG4gIHJldHVybiBOdW1iZXIocmVzLnRvRml4ZWQoZGVjaW1hbHMpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0eUZyb21PYmplY3RPck51bGwgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb2JqW3Byb3BdO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhcGl0YWxpemVGaXJzdExldHRlciA9IChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG5cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0aWVzID0gKG9iajogYW55KSA9PiB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhIU9iamVjdC5rZXlzKG9iaikubGVuZ3RoO1xufTtcblxuLy8gQG5vdGUgdGhpcyBpcyBhIFwiZm9ya2VkXCIgdmVyc2lvbiBvZiAncGVuZCcgbnBtIHBhY2thZ2UgdXNlIGluIHMzU3luY1xuZXhwb3J0IGNsYXNzIFBlbmQge1xuICBwZW5kaW5nOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xuICBsaXN0ZW5lcnM6IGFueVtdO1xuICB3YWl0aW5nOiBhbnlbXTtcbiAgZXJyb3IgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHsgbWF4IH06IHsgbWF4PzogbnVtYmVyIH0gPSB7fSkge1xuICAgIHRoaXMucGVuZGluZyA9IDA7XG4gICAgdGhpcy5tYXggPSBtYXggfHwgSW5maW5pdHk7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLndhaXRpbmcgPSBbXTtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgfVxuXG4gIGdvID0gKGZuKSA9PiB7XG4gICAgaWYgKHRoaXMucGVuZGluZyA8IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLnBlbmRHbyhmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2FpdGluZy5wdXNoKGZuKTtcbiAgICB9XG4gIH07XG5cbiAgd2FpdCA9IChjYikgPT4ge1xuICAgIGlmICh0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIGNiKHRoaXMuZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNiKTtcbiAgICB9XG4gIH07XG5cbiAgaG9sZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wZW5kSG9sZCgpO1xuICB9O1xuXG4gIHBlbmRIb2xkID0gKCkgPT4ge1xuICAgIHRoaXMucGVuZGluZyArPSAxO1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbkNiID0gKGVycikgPT4ge1xuICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIGNhbGxlZCB0d2ljZScpO1xuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLmVycm9yIHx8IGVycjtcbiAgICAgIHRoaXMucGVuZGluZyAtPSAxO1xuICAgICAgaWYgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwICYmIHRoaXMucGVuZGluZyA8IHRoaXMubWF4KSB7XG4gICAgICAgIHRoaXMucGVuZEdvKHRoaXMud2FpdGluZy5zaGlmdCgpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChjYkxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNiTGlzdGVuZXIgPSAobGlzdGVuZXIpID0+IHtcbiAgICAgIGxpc3RlbmVyKHRoaXMuZXJyb3IpO1xuICAgIH07XG5cbiAgICByZXR1cm4gb25DYjtcbiAgfTtcblxuICBwZW5kR28gPSAoZm4pID0+IHtcbiAgICBmbih0aGlzLnBlbmRIb2xkKCkpO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZVNpbmNlUHJvY2Vzc1N0YXJ0ID0gKCkgPT4ge1xuICByZXR1cm4gTWF0aC5yb3VuZChwcm9jZXNzLnVwdGltZSgpICogMTAwMCk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxCdWlsZFRzQ29uZmlnUGF0aCA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3RzY29uZmlnLmpzb24nKTtcblxuZXhwb3J0IGNvbnN0IGJ1aWx0aW5Nb2R1bGVzID0gW1xuICAnYXNzZXJ0JyxcbiAgJ2FzeW5jX2hvb2tzJyxcbiAgJ2J1ZmZlcicsXG4gICdjaGlsZF9wcm9jZXNzJyxcbiAgJ2NsdXN0ZXInLFxuICAnY29uc29sZScsXG4gICdjb25zdGFudHMnLFxuICAnY3J5cHRvJyxcbiAgJ2RncmFtJyxcbiAgJ2RucycsXG4gICdkb21haW4nLFxuICAnZXZlbnRzJyxcbiAgJ2ZzJyxcbiAgJ2h0dHAnLFxuICAnaHR0cDInLFxuICAnaHR0cHMnLFxuICAnaW5zcGVjdG9yJyxcbiAgJ21vZHVsZScsXG4gICduZXQnLFxuICAnb3MnLFxuICAncGF0aCcsXG4gICdwZXJmX2hvb2tzJyxcbiAgJ3Byb2Nlc3MnLFxuICAncHVueWNvZGUnLFxuICAncXVlcnlzdHJpbmcnLFxuICAncmVhZGxpbmUnLFxuICAncmVwbCcsXG4gICdzdHJlYW0nLFxuICAnc3RyaW5nX2RlY29kZXInLFxuICAndGltZXJzJyxcbiAgJ3RscycsXG4gICd0cmFjZV9ldmVudHMnLFxuICAndHR5JyxcbiAgJ3VybCcsXG4gICd1dGlsJyxcbiAgJ3Y4JyxcbiAgJ3ZtJyxcbiAgJ3dhc2knLFxuICAnd29ya2VyX3RocmVhZHMnLFxuICAnemxpYidcbl07XG5cbmV4cG9ydCBjb25zdCBnZXRUc2NvbmZpZ0FsaWFzZXMgPSBhc3luYyAodHNjb25maWdQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdHNjb25maWcgPSBhd2FpdCByZWFkSnNvbih0c2NvbmZpZ1BhdGgpO1xuICBjb25zdCBwYXRocyA9IHRzY29uZmlnPy5jb21waWxlck9wdGlvbnM/LnBhdGhzIHx8IHt9O1xuICBjb25zdCByZXM6IHsgW2FsaWFzOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBPYmplY3Qua2V5cyhwYXRocykuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0ucmVwbGFjZSgnLyonLCAnJyk7XG4gICAgY29uc3QgdmFsdWUgPSByZXNvbHZlUGF0aChwcm9jZXNzLmN3ZCgpLCBwYXRoc1tpdGVtXVswXS5yZXBsYWNlKCcvKicsICcnKS5yZXBsYWNlKCcqJywgJycpKTtcbiAgICByZXNba2V5XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBseUFsbCA9IChmdW5jdGlvbnNBcnJheTogKCguLi5hcmdzOiBhbnkpID0+IGFueSlbXSwgdmFsdWU6IGFueSkgPT4ge1xuICBsZXQgcmVzID0gdmFsdWU7XG4gIGZvciAoY29uc3QgZm4gb2YgZnVuY3Rpb25zQXJyYXkpIHtcbiAgICByZXMgPSBmbihyZXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRHVwbGljYXRlcyA9IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIsIGFycjogYW55W10pID0+IGFyci5pbmRleE9mKGl0ZW0pID09PSBpbmRleDtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0QW5kTGFzdEl0ZW0gPSA8VD4oYXJyOiBUW10pID0+IHtcbiAgcmV0dXJuIHsgZmlyc3Q6IGFyclswXSB8fCBudWxsLCBsYXN0OiBhcnJbYXJyLmxlbmd0aCAtIDFdIHx8IG51bGwgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBncm91cEJ5ID0gPFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+KGxpc3Q6IFRbXSwgZ2V0S2V5OiAoaXRlbTogVCkgPT4gSykgPT5cbiAgbGlzdC5yZWR1Y2UoXG4gICAgKHByZXZpb3VzLCBjdXJyZW50SXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRLZXkoY3VycmVudEl0ZW0pO1xuICAgICAgaWYgKCFwcmV2aW91c1tncm91cF0pIHtcbiAgICAgICAgcHJldmlvdXNbZ3JvdXBdID0gW107XG4gICAgICB9XG4gICAgICBwcmV2aW91c1tncm91cF0ucHVzaChjdXJyZW50SXRlbSk7XG4gICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfSxcbiAgICB7fSBhcyBSZWNvcmQ8SywgVFtdPlxuICApO1xuXG5leHBvcnQgY29uc3QgY2h1bmtBcnJheSA9IDxUPihhcnI6IFRbXSwgY2h1bmtTaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhbGw6IFRbXVtdLCBvbmU6IFQsIGkpID0+IHtcbiAgICBjb25zdCBjaCA9IE1hdGguZmxvb3IoaSAvIGNodW5rU2l6ZSk7XG5cbiAgICBhbGxbY2hdID0gYWxsW2NoXSB8fCBbXTtcbiAgICBhbGxbY2hdLnB1c2gob25lKTtcbiAgICByZXR1cm4gYWxsO1xuICB9LCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmFuZG9tTnVtYmVyRnJvbUludGVydmFsID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyT2ZFdmVyeVdvcmQgPSAoc2VudGVuY2U6IHN0cmluZywgd29yZFNlcGFyYXRvcjogc3RyaW5nID0gJy4nKSA9PiB7XG4gIHJldHVybiBzZW50ZW5jZS5zcGxpdCh3b3JkU2VwYXJhdG9yKS5tYXAobG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIpLmpvaW4od29yZFNlcGFyYXRvcik7XG59O1xuXG5leHBvcnQgY29uc3QgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXJPZk9iamVjdEtleXMgPSAodmFsOiBhbnksIHNraXBLZXlGdW5jdGlvbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbik6IGFueSA9PiB7XG4gIGlmICh2YWwgPT0gbnVsbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiB2YWwubWFwKCh2KSA9PiBsb3dlckNhc2VGaXJzdENoYXJhY3Rlck9mT2JqZWN0S2V5cyh2LCBza2lwS2V5RnVuY3Rpb24pKTtcbiAgfVxuICBjb25zdCByZXQ6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHtcbiAgICByZXRbc2tpcEtleUZ1bmN0aW9uICYmIHNraXBLZXlGdW5jdGlvbihrKSA/IGsgOiBsb3dlckNhc2VGaXJzdENoYXJhY3RlcihrKV0gPSBsb3dlckNhc2VGaXJzdENoYXJhY3Rlck9mT2JqZWN0S2V5cyhcbiAgICAgIHYsXG4gICAgICBza2lwS2V5RnVuY3Rpb25cbiAgICApO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5jb25zdCBsb3dlckNhc2VGaXJzdENoYXJhY3RlciA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBzdHIubGVuZ3RoID4gMCA/IGAke3N0clswXS50b0xvd2VyQ2FzZSgpfSR7c3RyLnNsaWNlKDEpfWAgOiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQ29sb3JpbmdGcm9tU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICBzdHIucmVwbGFjZSgvW1xcdTAwMUJcXHUwMDlCXVtbKCkjOz9dKig/OlxcZHsxLDR9KD86O1xcZHswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csICcnKTtcblxuZXhwb3J0IGNvbnN0IGNodW5rU3RyaW5nID0gKHN0cjogc3RyaW5nLCBjaHVua1NpemU6IG51bWJlcik6IHN0cmluZ1tdID0+IHtcbiAgLy8gVmFsaWRhdGUgY2h1bmtTaXplIHRvIGVuc3VyZSBpdCdzIHBvc2l0aXZlXG4gIGlmIChjaHVua1NpemUgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaHVuayBzaXplIG11c3QgYmUgYXQgbGVhc3QgMScpO1xuICB9XG5cbiAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjogTWF0Y2ggdXAgdG8gYGNodW5rU2l6ZWAgY2hhcmFjdGVycyBnbG9iYWxseSBhY3Jvc3MgdGhlIHN0cmluZ1xuICBjb25zdCByZWdleFBhdHRlcm4gPSBuZXcgUmVnRXhwKGAuezEsJHtjaHVua1NpemV9fWAsICdnJyk7XG5cbiAgLy8gVXNlIHRoZSByZWdleCB0byBzcGxpdCB0aGUgc3RyaW5nIGludG8gY2h1bmtzIGFuZCByZXR1cm4gdGhlIHJlc3VsdFxuICByZXR1cm4gc3RyLm1hdGNoKHJlZ2V4UGF0dGVybikgfHwgW107IC8vIEluIGNhc2Ugb2Ygbm8gbWF0Y2hlcywgcmV0dXJuIGFuIGVtcHR5IGFycmF5XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0dGxlQWxsQmVmb3JlVGhyb3dpbmcgPSBhc3luYyAocHJvbWlzZXM6IFByb21pc2U8YW55PltdKSA9PiB7XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlcykgPT4ge1xuICAgIGlmIChyZXMuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICB0aHJvdyByZXMucmVhc29uO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLnZhbHVlO1xuICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgZmlsdGVyRHVwbGljYXRlcyB9IGZyb20gJ0BzaGFyZWQvdXRpbHMvbWlzYyc7XG5cbmV4cG9ydCBjb25zdCBjbGlDb21tYW5kcyA9IFtcbiAgJ2RlcGxveScsXG4gICdkZXYnLFxuICAnY29kZWJ1aWxkOmRlcGxveScsXG4gICdkZXBsb3ltZW50LXNjcmlwdDpydW4nLFxuICAnZGVsZXRlJyxcbiAgJ3JvbGxiYWNrJyxcbiAgJ2luaXQnLFxuICAnbG9ncycsXG4gICdzdGFjazppbmZvJyxcbiAgJ3N0YWNrOmxpc3QnLFxuICAnYXdzLXByb2ZpbGU6Y3JlYXRlJyxcbiAgJ2F3cy1wcm9maWxlOnVwZGF0ZScsXG4gICdhd3MtcHJvZmlsZTpkZWxldGUnLFxuICAnYXdzLXByb2ZpbGU6bGlzdCcsXG4gICdzZWNyZXQ6Y3JlYXRlJyxcbiAgJ3NlY3JldDpnZXQnLFxuICAnc2VjcmV0OmRlbGV0ZScsXG4gICdkb21haW46YWRkJyxcbiAgJ2NvbXBpbGUtdGVtcGxhdGUnLFxuICAncGFja2FnZS13b3JrbG9hZHMnLFxuICAncHJldmlldy1jaGFuZ2VzJyxcbiAgJ2NmLW1vZHVsZTp1cGRhdGUnLFxuICAnYnVja2V0OnN5bmMnLFxuICAnYmFzdGlvbjpzZXNzaW9uJyxcbiAgJ2Jhc3Rpb246dHVubmVsJyxcbiAgJ2NvbnRhaW5lcjpzZXNzaW9uJyxcbiAgJ2RlZmF1bHRzOmNvbmZpZ3VyZScsXG4gICdkZWZhdWx0czpsaXN0JyxcbiAgJ3NjcmlwdDpydW4nLFxuICAndmVyc2lvbicsXG4gICdoZWxwJyxcbiAgJ2xvZ2luJyxcbiAgJ2xvZ291dCcsXG4gICdwYXJhbTpnZXQnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3Qgc2RrQ29tbWFuZHMgPSBbXG4gICdkZXBsb3knLFxuICAnZGV2JyxcbiAgJ2NvZGVidWlsZDpkZXBsb3knLFxuICAnZGVwbG95bWVudC1zY3JpcHQ6cnVuJyxcbiAgJ2RlbGV0ZScsXG4gICdyb2xsYmFjaycsXG4gICdsb2dzJyxcbiAgJ3N0YWNrOmluZm8nLFxuICAnc3RhY2s6bGlzdCcsXG4gICdhd3MtcHJvZmlsZTpjcmVhdGUnLFxuICAnYXdzLXByb2ZpbGU6dXBkYXRlJyxcbiAgJ2F3cy1wcm9maWxlOmRlbGV0ZScsXG4gICdhd3MtcHJvZmlsZTpsaXN0JyxcbiAgJ2NvbXBpbGUtdGVtcGxhdGUnLFxuICAncGFja2FnZS13b3JrbG9hZHMnLFxuICAncHJldmlldy1jaGFuZ2VzJyxcbiAgJ3NjcmlwdDpydW4nLFxuICAnYnVja2V0OnN5bmMnLFxuICAndmVyc2lvbicsXG4gICdwYXJhbTpnZXQnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgYWxsQ29tbWFuZHMgPSBjbGlDb21tYW5kcy5jb25jYXQoc2RrQ29tbWFuZHMpLmZpbHRlcihmaWx0ZXJEdXBsaWNhdGVzKTtcblxuY29uc3QgdW5pdmVyc2FsQ2xpQXJnczogU3RhY2t0YXBlQ2xpQXJnW10gPSBbJ3Byb2ZpbGUnLCAnbG9nRm9ybWF0JywgJ2xvZ0xldmVsJywgJ2hlbHAnLCAnYXdzQWNjb3VudCddO1xuY29uc3QgdW5pdmVyc2FsU2RrQXJnczogU3RhY2t0YXBlU2RrQXJnW10gPSBbJ3Byb2ZpbGUnLCAnYXdzQWNjb3VudCddO1xuY29uc3QgYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFjayA9IFsnc3RhZ2UnLCAncmVnaW9uJywgJ3Byb2plY3ROYW1lJ10gYXMgY29uc3Q7XG5jb25zdCBjbGlBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHM6IFN0YWNrdGFwZUFyZ1tdID0gWydjb25maWdQYXRoJywgJ2N1cnJlbnRXb3JraW5nRGlyZWN0b3J5JywgJ3RlbXBsYXRlSWQnXTtcbmNvbnN0IHNka0FyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kczogU3RhY2t0YXBlU2RrQXJnW10gPSBbXG4gICdjb25maWdQYXRoJyxcbiAgJ2N1cnJlbnRXb3JraW5nRGlyZWN0b3J5JyxcbiAgJ2NvbmZpZycsXG4gICd0ZW1wbGF0ZUlkJ1xuXTtcblxuZXhwb3J0IGNvbnN0IGNvbW1hbmRzV2l0aERpc2FibGVkQW5ub3VuY2VtZW50czogU3RhY2t0YXBlQ29tbWFuZFtdID0gWydkZXYnLCAndmVyc2lvbiddO1xuXG5leHBvcnQgY29uc3QgY29tbWFuZHNOb3RSZXF1aXJpbmdBcGlLZXkgPSBbJ2xvZ2luJywgJ2xvZ291dCcsICd2ZXJzaW9uJywgJ2hlbHAnLCAnZGVmYXVsdHM6bGlzdCcsICdkZWZhdWx0czpjb25maWd1cmUnXTtcblxuZXhwb3J0IGNvbnN0IGFsbG93ZWRDbGlBcmdzOiB7IFtfY29tbWFuZCBpbiBTdGFja3RhcGVDbGlDb21tYW5kXTogU3RhY2t0YXBlQ2xpQXJnW10gfSA9IHtcbiAgZGVwbG95OiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnZGlzYWJsZURyaWZ0RGV0ZWN0aW9uJyxcbiAgICAncHJlc2VydmVUZW1wRmlsZXMnLFxuICAgICdkb2NrZXJBcmdzJyxcbiAgICAnbm9DYWNoZScsXG4gICAgJ2Rpc2FibGVEb2NrZXJSZW1vdGVDYWNoZScsXG4gICAgJ2Rpc2FibGVBdXRvUm9sbGJhY2snLFxuICAgICdhdXRvQ29uZmlybU9wZXJhdGlvbicsXG4gICAgJ3Nob3dTZW5zaXRpdmVWYWx1ZXMnLFxuICAgICdob3RTd2FwJ1xuICBdLFxuICAnY29kZWJ1aWxkOmRlcGxveSc6IFtcbiAgICAuLi51bml2ZXJzYWxDbGlBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uY2xpQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdkaXNhYmxlRHJpZnREZXRlY3Rpb24nLFxuICAgICdwcmVzZXJ2ZVRlbXBGaWxlcycsXG4gICAgJ2RvY2tlckFyZ3MnLFxuICAgICdub0NhY2hlJyxcbiAgICAnZGlzYWJsZURvY2tlclJlbW90ZUNhY2hlJyxcbiAgICAnZGlzYWJsZUF1dG9Sb2xsYmFjaycsXG4gICAgJ2F1dG9Db25maXJtT3BlcmF0aW9uJyxcbiAgICAnc2hvd1NlbnNpdGl2ZVZhbHVlcycsXG4gICAgJ2hvdFN3YXAnXG4gIF0sXG4gIGRldjogW1xuICAgIC4uLnVuaXZlcnNhbENsaUFyZ3MsXG4gICAgLi4uYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFjayxcbiAgICAuLi5jbGlBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHMsXG4gICAgJ3dhdGNoJyxcbiAgICAnY29udGFpbmVyJyxcbiAgICAnZGlzYWJsZUVtdWxhdGlvbicsXG4gICAgJ3Jlc291cmNlTmFtZScsXG4gICAgJ3ByZXNlcnZlVGVtcEZpbGVzJyxcbiAgICAnZG9ja2VyQXJncydcbiAgXSxcbiAgJ2RlcGxveW1lbnQtc2NyaXB0OnJ1bic6IFtcbiAgICAuLi51bml2ZXJzYWxDbGlBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uY2xpQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdyZXNvdXJjZU5hbWUnXG4gIF0sXG4gICdwYWNrYWdlLXdvcmtsb2Fkcyc6IFsuLi51bml2ZXJzYWxDbGlBcmdzLCAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLCAuLi5jbGlBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHNdLFxuICBkZWxldGU6IFtcbiAgICAuLi51bml2ZXJzYWxDbGlBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uY2xpQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdhdXRvQ29uZmlybU9wZXJhdGlvbidcbiAgXSxcbiAgJ2NvbXBpbGUtdGVtcGxhdGUnOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnb3V0RmlsZScsXG4gICAgJ3ByZXNlcnZlVGVtcEZpbGVzJ1xuICBdLFxuICAnc3RhY2s6aW5mbyc6IFtcbiAgICAuLi51bml2ZXJzYWxDbGlBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgJ2NvbmZpZ1BhdGgnLFxuICAgICdkZXRhaWxlZCcsXG4gICAgJ291dEZpbGUnLFxuICAgICdvdXRGb3JtYXQnLFxuICAgICdzaG93U2Vuc2l0aXZlVmFsdWVzJ1xuICBdLFxuICAncGFyYW06Z2V0JzogWy4uLnVuaXZlcnNhbENsaUFyZ3MsIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssICdjb25maWdQYXRoJywgJ3Jlc291cmNlTmFtZScsICdwYXJhbU5hbWUnXSxcbiAgJ3N0YWNrOmxpc3QnOiBbLi4udW5pdmVyc2FsQ2xpQXJncywgLi4uYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFja10sXG4gIGhlbHA6IFsnY29tbWFuZCddLFxuICB2ZXJzaW9uOiBbXSxcbiAgJ2RvbWFpbjphZGQnOiBbLi4udW5pdmVyc2FsQ2xpQXJncywgJ3Byb2ZpbGUnLCAncmVnaW9uJ10sXG4gIC8vICdkb21haW46YnV5JzogWy4uLnVuaXZlcnNhbENsaUFyZ3MsICdwcm9maWxlJywgJ3JlZ2lvbiddLFxuICAnY2YtbW9kdWxlOnVwZGF0ZSc6IFsuLi51bml2ZXJzYWxDbGlBcmdzLCAncHJvZmlsZScsICdyZWdpb24nXSxcbiAgJ3NlY3JldDpjcmVhdGUnOiBbLi4udW5pdmVyc2FsQ2xpQXJncywgJ3Byb2ZpbGUnLCAncmVnaW9uJ10sXG4gICdzZWNyZXQ6ZGVsZXRlJzogWy4uLnVuaXZlcnNhbENsaUFyZ3MsICdwcm9maWxlJywgJ3JlZ2lvbiddLFxuICAnc2VjcmV0OmdldCc6IFsuLi51bml2ZXJzYWxDbGlBcmdzLCAncHJvZmlsZScsICdyZWdpb24nXSxcbiAgJ2F3cy1wcm9maWxlOmNyZWF0ZSc6IFsnbG9nTGV2ZWwnLCAnbG9nRm9ybWF0J10sXG4gICdhd3MtcHJvZmlsZTp1cGRhdGUnOiBbJ2xvZ0xldmVsJywgJ2xvZ0Zvcm1hdCddLFxuICAnYXdzLXByb2ZpbGU6ZGVsZXRlJzogWydsb2dMZXZlbCcsICdsb2dGb3JtYXQnXSxcbiAgJ2F3cy1wcm9maWxlOmxpc3QnOiBbJ2xvZ0xldmVsJywgJ2xvZ0Zvcm1hdCddLFxuICByb2xsYmFjazogWy4uLnVuaXZlcnNhbENsaUFyZ3MsIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kc10sXG4gICdwcmV2aWV3LWNoYW5nZXMnOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAncHJlc2VydmVUZW1wRmlsZXMnXG4gIF0sXG4gIGxvZ3M6IFtcbiAgICAuLi51bml2ZXJzYWxDbGlBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uY2xpQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdyZXNvdXJjZU5hbWUnLFxuICAgICdzdGFydFRpbWUnLFxuICAgICdmaWx0ZXInLFxuICAgICdyYXcnXG4gIF0sXG4gIGluaXQ6IFsnbG9nTGV2ZWwnLCAnbG9nRm9ybWF0JywgJ3N0YXJ0ZXJJZCcsICdwcm9qZWN0RGlyZWN0b3J5JywgJ3RlbXBsYXRlSWQnLCAnaW5pdGlhbGl6ZVByb2plY3RUbycsICdjb25maWdGb3JtYXQnXSxcbiAgJ2J1Y2tldDpzeW5jJzogW1xuICAgICdsb2dGb3JtYXQnLFxuICAgICdsb2dMZXZlbCcsXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnYnVja2V0SWQnLFxuICAgICdzb3VyY2VQYXRoJyxcbiAgICAnaW52YWxpZGF0ZUNkbkNhY2hlJyxcbiAgICAnaGVhZGVyc1ByZXNldCcsXG4gICAgJ3Jlc291cmNlTmFtZScsXG4gICAgJ2F3c0FjY291bnQnXG4gIF0sXG4gICdiYXN0aW9uOnNlc3Npb24nOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnYmFzdGlvblJlc291cmNlJ1xuICBdLFxuICAnYmFzdGlvbjp0dW5uZWwnOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnYmFzdGlvblJlc291cmNlJyxcbiAgICAncmVzb3VyY2VOYW1lJyxcbiAgICAnbG9jYWxUdW5uZWxpbmdQb3J0J1xuICBdLFxuICAnY29udGFpbmVyOnNlc3Npb24nOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAncmVzb3VyY2VOYW1lJyxcbiAgICAnY29udGFpbmVyJyxcbiAgICAnY29tbWFuZCdcbiAgXSxcbiAgJ3NjcmlwdDpydW4nOiBbXG4gICAgLi4udW5pdmVyc2FsQ2xpQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnZW52JyxcbiAgICAnc2NyaXB0TmFtZScsXG4gICAgJ2Fzc3VtZVJvbGVPZlJlc291cmNlJ1xuICBdLFxuICAnZGVmYXVsdHM6Y29uZmlndXJlJzogW10sXG4gICdkZWZhdWx0czpsaXN0JzogW10sXG4gIGxvZ2luOiBbLi4udW5pdmVyc2FsQ2xpQXJncywgJ2FwaUtleSddLFxuICBsb2dvdXQ6IFsuLi51bml2ZXJzYWxDbGlBcmdzLCAnYXBpS2V5J11cbn07XG5cbmV4cG9ydCBjb25zdCByZXF1aXJlZENsaUFyZ3M6IHsgW19jb21tYW5kIGluIFN0YWNrdGFwZUNsaUNvbW1hbmRdOiBTdGFja3RhcGVDbGlBcmdbXSB9ID0ge1xuICBkZXBsb3k6IFsnc3RhZ2UnLCAncmVnaW9uJ10sXG4gICdjb2RlYnVpbGQ6ZGVwbG95JzogWydzdGFnZScsICdyZWdpb24nXSxcbiAgZGV2OiBbJ3Jlc291cmNlTmFtZScsICdyZWdpb24nLCAnc3RhZ2UnXSxcbiAgZGVsZXRlOiBbJ3JlZ2lvbiddLFxuICAnc3RhY2s6aW5mbyc6IFsncmVnaW9uJ10sXG4gICdwYXJhbTpnZXQnOiBbJ3JlZ2lvbicsICdyZXNvdXJjZU5hbWUnLCAncGFyYW1OYW1lJ10sXG4gICdzdGFjazpsaXN0JzogWydyZWdpb24nXSxcbiAgaGVscDogW10sXG4gIHZlcnNpb246IFtdLFxuICAnZGVwbG95bWVudC1zY3JpcHQ6cnVuJzogWydzdGFnZScsICdyZWdpb24nLCAncmVzb3VyY2VOYW1lJ10sXG4gICdhd3MtcHJvZmlsZTpjcmVhdGUnOiBbXSxcbiAgJ2F3cy1wcm9maWxlOmRlbGV0ZSc6IFtdLFxuICAnYXdzLXByb2ZpbGU6dXBkYXRlJzogW10sXG4gICdhd3MtcHJvZmlsZTpsaXN0JzogW10sXG4gICdkb21haW46YWRkJzogWydyZWdpb24nXSxcbiAgLy8gJ2RvbWFpbjpidXknOiBbXSxcbiAgJ2NmLW1vZHVsZTp1cGRhdGUnOiBbJ3JlZ2lvbiddLFxuICAnc2VjcmV0OmNyZWF0ZSc6IFsncmVnaW9uJ10sXG4gICdzZWNyZXQ6Z2V0JzogWydyZWdpb24nXSxcbiAgJ3NlY3JldDpkZWxldGUnOiBbJ3JlZ2lvbiddLFxuICAnY29tcGlsZS10ZW1wbGF0ZSc6IFsnc3RhZ2UnLCAncmVnaW9uJ10sXG4gIHJvbGxiYWNrOiBbJ3JlZ2lvbiddLFxuICAncGFja2FnZS13b3JrbG9hZHMnOiBbJ3N0YWdlJywgJ3JlZ2lvbiddLFxuICAncHJldmlldy1jaGFuZ2VzJzogWydzdGFnZScsICdyZWdpb24nXSxcbiAgbG9nczogWydzdGFnZScsICdyZWdpb24nLCAncmVzb3VyY2VOYW1lJ10sXG4gIGluaXQ6IFtdLFxuICAnYnVja2V0OnN5bmMnOiBbJ3JlZ2lvbiddLFxuICAnYmFzdGlvbjpzZXNzaW9uJzogWydyZWdpb24nLCAnc3RhZ2UnXSxcbiAgJ2Jhc3Rpb246dHVubmVsJzogWydyZWdpb24nLCAnc3RhZ2UnLCAncmVzb3VyY2VOYW1lJ10sXG4gICdjb250YWluZXI6c2Vzc2lvbic6IFsncmVnaW9uJywgJ3N0YWdlJywgJ3Jlc291cmNlTmFtZSddLFxuICAnc2NyaXB0OnJ1bic6IFsnc2NyaXB0TmFtZScsICdzdGFnZSddLFxuICAnZGVmYXVsdHM6Y29uZmlndXJlJzogW10sXG4gICdkZWZhdWx0czpsaXN0JzogW10sXG4gIGxvZ2luOiBbXSxcbiAgbG9nb3V0OiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IGFsbG93ZWRTZGtBcmdzOiB7IFtfY29tbWFuZCBpbiBTdGFja3RhcGVTZGtDb21tYW5kXTogU3RhY2t0YXBlU2RrQXJnW10gfSA9IHtcbiAgZGVwbG95OiBbXG4gICAgLi4udW5pdmVyc2FsU2RrQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLnNka0FyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnZGlzYWJsZURyaWZ0RGV0ZWN0aW9uJyxcbiAgICAncHJlc2VydmVUZW1wRmlsZXMnLFxuICAgICdkb2NrZXJBcmdzJyxcbiAgICAnbm9DYWNoZScsXG4gICAgJ2Rpc2FibGVEb2NrZXJSZW1vdGVDYWNoZScsXG4gICAgJ2Rpc2FibGVBdXRvUm9sbGJhY2snLFxuICAgICdob3RTd2FwJ1xuICBdLFxuICAnY29kZWJ1aWxkOmRlcGxveSc6IFtcbiAgICAuLi51bml2ZXJzYWxTZGtBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uc2RrQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdkaXNhYmxlRHJpZnREZXRlY3Rpb24nLFxuICAgICdwcmVzZXJ2ZVRlbXBGaWxlcycsXG4gICAgJ2RvY2tlckFyZ3MnLFxuICAgICdub0NhY2hlJyxcbiAgICAnZGlzYWJsZURvY2tlclJlbW90ZUNhY2hlJyxcbiAgICAnZGlzYWJsZUF1dG9Sb2xsYmFjaycsXG4gICAgJ2hvdFN3YXAnXG4gIF0sXG4gIGRldjogW1xuICAgIC4uLnVuaXZlcnNhbFNka0FyZ3MsXG4gICAgLi4uYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFjayxcbiAgICAuLi5jbGlBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHMsXG4gICAgJ3dhdGNoJyxcbiAgICAnY29udGFpbmVyJyxcbiAgICAnZGlzYWJsZUVtdWxhdGlvbicsXG4gICAgJ3Jlc291cmNlTmFtZScsXG4gICAgJ3ByZXNlcnZlVGVtcEZpbGVzJyxcbiAgICAnZG9ja2VyQXJncydcbiAgXSxcbiAgJ2RlcGxveW1lbnQtc2NyaXB0OnJ1bic6IFtcbiAgICAuLi51bml2ZXJzYWxTZGtBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgLi4uc2RrQXJnc0ZvckNvbmZpZ0RlcGVuZGVudENvbW1hbmRzLFxuICAgICdyZXNvdXJjZU5hbWUnXG4gIF0sXG4gICdwYWNrYWdlLXdvcmtsb2Fkcyc6IFsuLi51bml2ZXJzYWxTZGtBcmdzLCAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLCAuLi5zZGtBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHNdLFxuICBkZWxldGU6IFsuLi51bml2ZXJzYWxTZGtBcmdzLCAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLCAuLi5zZGtBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHNdLFxuICAnc3RhY2s6aW5mbyc6IFtcbiAgICAuLi51bml2ZXJzYWxTZGtBcmdzLFxuICAgIC4uLmFyZ3NGb3JDb21tYW5kc1dvcmtpbmdXaXRoU3RhY2ssXG4gICAgJ2NvbmZpZ1BhdGgnLFxuICAgICdkZXRhaWxlZCcsXG4gICAgJ291dEZpbGUnLFxuICAgICdvdXRGb3JtYXQnXG4gIF0sXG4gICdwYXJhbTpnZXQnOiBbLi4udW5pdmVyc2FsU2RrQXJncywgLi4uYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFjaywgJ2NvbmZpZ1BhdGgnLCAncmVzb3VyY2VOYW1lJywgJ3BhcmFtTmFtZSddLFxuICAnc3RhY2s6bGlzdCc6IFsuLi51bml2ZXJzYWxTZGtBcmdzLCAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrXSxcbiAgJ2NvbXBpbGUtdGVtcGxhdGUnOiBbXG4gICAgLi4udW5pdmVyc2FsU2RrQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLnNka0FyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnb3V0RmlsZScsXG4gICAgJ3ByZXNlcnZlVGVtcEZpbGVzJ1xuICBdLFxuICB2ZXJzaW9uOiBbXSxcbiAgJ2F3cy1wcm9maWxlOmNyZWF0ZSc6IFtdLFxuICAnYXdzLXByb2ZpbGU6dXBkYXRlJzogW10sXG4gICdhd3MtcHJvZmlsZTpkZWxldGUnOiBbXSxcbiAgJ2F3cy1wcm9maWxlOmxpc3QnOiBbXSxcbiAgcm9sbGJhY2s6IFsuLi51bml2ZXJzYWxTZGtBcmdzLCAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLCAuLi5zZGtBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHNdLFxuICAncHJldmlldy1jaGFuZ2VzJzogW1xuICAgIC4uLnVuaXZlcnNhbFNka0FyZ3MsXG4gICAgLi4uYXJnc0ZvckNvbW1hbmRzV29ya2luZ1dpdGhTdGFjayxcbiAgICAuLi5zZGtBcmdzRm9yQ29uZmlnRGVwZW5kZW50Q29tbWFuZHMsXG4gICAgJ3ByZXNlcnZlVGVtcEZpbGVzJ1xuICBdLFxuICBsb2dzOiBbXG4gICAgLi4udW5pdmVyc2FsU2RrQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLnNka0FyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAncmVzb3VyY2VOYW1lJyxcbiAgICAnc3RhcnRUaW1lJyxcbiAgICAnZmlsdGVyJyxcbiAgICAncmF3J1xuICBdLFxuICAnYnVja2V0OnN5bmMnOiBbXG4gICAgLi4udW5pdmVyc2FsU2RrQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLnNka0FyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnYnVja2V0SWQnLFxuICAgICdzb3VyY2VQYXRoJyxcbiAgICAnaW52YWxpZGF0ZUNkbkNhY2hlJyxcbiAgICAnaGVhZGVyc1ByZXNldCcsXG4gICAgJ3Jlc291cmNlTmFtZSdcbiAgXSxcbiAgJ3NjcmlwdDpydW4nOiBbXG4gICAgLi4udW5pdmVyc2FsU2RrQXJncyxcbiAgICAuLi5hcmdzRm9yQ29tbWFuZHNXb3JraW5nV2l0aFN0YWNrLFxuICAgIC4uLmNsaUFyZ3NGb3JDb25maWdEZXBlbmRlbnRDb21tYW5kcyxcbiAgICAnZW52JyxcbiAgICAnc2NyaXB0TmFtZSdcbiAgXVxufTtcblxuZXhwb3J0IGNvbnN0IHJlcXVpcmVkU2RrQXJnczogeyBbX2NvbW1hbmQgaW4gU3RhY2t0YXBlU2RrQ29tbWFuZF06IFN0YWNrdGFwZVNka0FyZ1tdIH0gPSB7XG4gIGRlcGxveTogW10sXG4gICdjb2RlYnVpbGQ6ZGVwbG95JzogW10sXG4gIGRldjogWydyZXNvdXJjZU5hbWUnLCAncmVnaW9uJywgJ3N0YWdlJ10sXG4gIGRlbGV0ZTogW10sXG4gICdkZXBsb3ltZW50LXNjcmlwdDpydW4nOiBbJ3Jlc291cmNlTmFtZSddLFxuICAnc3RhY2s6aW5mbyc6IFtdLFxuICAncGFyYW06Z2V0JzogWydyZXNvdXJjZU5hbWUnLCAncGFyYW1OYW1lJ10sXG4gICdzdGFjazpsaXN0JzogW10sXG4gIHZlcnNpb246IFtdLFxuICAnYXdzLXByb2ZpbGU6Y3JlYXRlJzogW10sXG4gICdhd3MtcHJvZmlsZTpkZWxldGUnOiBbXSxcbiAgJ2F3cy1wcm9maWxlOnVwZGF0ZSc6IFtdLFxuICAnYXdzLXByb2ZpbGU6bGlzdCc6IFtdLFxuICAnY29tcGlsZS10ZW1wbGF0ZSc6IFtdLFxuICByb2xsYmFjazogW10sXG4gICdwYWNrYWdlLXdvcmtsb2Fkcyc6IFtdLFxuICAncHJldmlldy1jaGFuZ2VzJzogW10sXG4gIGxvZ3M6IFsncmVzb3VyY2VOYW1lJ10sXG4gICdzY3JpcHQ6cnVuJzogWydzY3JpcHROYW1lJywgJ3N0YWdlJ10sXG4gICdidWNrZXQ6c3luYyc6IFtdXG59O1xuXG5leHBvcnQgY29uc3QgY2xpQXJnc0FsaWFzZXM6IHsgW19jbGlBcmcgaW4gU3RhY2t0YXBlQ2xpQXJnIHwgU3RhY2t0YXBlU2RrQXJnXTogc3RyaW5nIH0gPSB7XG4gIGV2ZW50OiAnZScsXG4gIGpzb25FdmVudDogJ2plJyxcbiAgc3RhZ2U6ICdzJyxcbiAgY29uZmlnUGF0aDogJ2NwJyxcbiAgcHJvZmlsZTogJ3AnLFxuICBkaXNhYmxlRHJpZnREZXRlY3Rpb246ICdkZGQnLFxuICBwcmVzZXJ2ZVRlbXBGaWxlczogJ3B0ZicsXG4gIHJlZ2lvbjogJ3InLFxuICByZXNvdXJjZU5hbWU6ICdybicsXG4gIHdhdGNoOiAndycsXG4gIGNvbW1hbmQ6ICdjbWQnLFxuICBkaXNhYmxlRW11bGF0aW9uOiAnZGUnLFxuICBwb3J0TWFwcGluZzogJ3BtJyxcbiAgbG9nRm9ybWF0OiAnbGYnLFxuICBsb2dMZXZlbDogJ2xsJyxcbiAgZmlsdGVyOiAnZicsXG4gIHN0YXJ0VGltZTogJ3N0JyxcbiAgcmF3OiAncncnLFxuICBkb2NrZXJBcmdzOiAnZGEnLFxuICBzb3VyY2VQYXRoOiAnc3AnLFxuICBidWNrZXRJZDogJ2JpJyxcbiAgY3VycmVudFdvcmtpbmdEaXJlY3Rvcnk6ICdjd2QnLFxuICBub0NhY2hlOiAnbmMnLFxuICBlbnY6ICdlbnYnLFxuICBkZXRhaWxlZDogJ2QnLFxuICBvdXRGaWxlOiAnb3V0JyxcbiAgb3V0Rm9ybWF0OiAnb2YnLFxuICBjb25maWc6ICdjZmcnLFxuICBwYXNzd29yZDogJ3B3JyxcbiAgdXNlcm5hbWU6ICd1bicsXG4gIGRpc2FibGVBdXRvUm9sbGJhY2s6ICdkYXInLFxuICBhdXRvQ29uZmlybU9wZXJhdGlvbjogJ2FjbycsXG4gIHNob3dTZW5zaXRpdmVWYWx1ZXM6ICdzc3YnLFxuICBmdWxsSGlzdG9yeTogJ2ZoJyxcbiAgaGVscDogJ2gnLFxuICBjb250YWluZXI6ICdjbnQnLFxuICBpbnZhbGlkYXRlQ2RuQ2FjaGU6ICdpY2MnLFxuICBoZWFkZXJzUHJlc2V0OiAnaHAnLFxuICBzY3JpcHROYW1lOiAnc2NuJyxcbiAgbmV3VmVyc2lvbjogJ252JyxcbiAgcHJvamVjdERpcmVjdG9yeTogJ3BkJyxcbiAgaG90U3dhcDogJ2hzJyxcbiAgYXBpS2V5OiAnYWsnLFxuICBhd3NBY2NvdW50OiAnYWEnLFxuICBpbml0aWFsaXplUHJvamVjdFRvOiAnaXB0JyxcbiAgcGFyYW1OYW1lOiAncG4nLFxuICB0ZW1wbGF0ZUlkOiAndGknLFxuICBiYXN0aW9uUmVzb3VyY2U6ICdicicsXG4gIHByb2plY3ROYW1lOiAncHJqJyxcbiAgc3RhcnRlcklkOiAnc2lkJyxcbiAgYXNzdW1lUm9sZU9mUmVzb3VyY2U6ICdhcm9yJyxcbiAgY29uZmlnRm9ybWF0OiAnY2YnLFxuICBsb2NhbFR1bm5lbGluZ1BvcnQ6ICdsdHAnLFxuICBkaXNhYmxlRG9ja2VyUmVtb3RlQ2FjaGU6ICdkcmMnXG59O1xuIiwgImV4cG9ydCBjb25zdCBJU19ERVYgPSBwcm9jZXNzLmVudi5TVFBfREVWX01PREUgPT09ICd0cnVlJztcblxuZXhwb3J0IGNvbnN0IFZBTElEX0NPTkZJR19QQVRIUyA9IFsnc3RhY2t0YXBlLnlhbWwnLCAnc3RhY2t0YXBlLnltbCcsICdzdGFja3RhcGUuanMnLCAnc3RhY2t0YXBlLnRzJ107XG5leHBvcnQgY29uc3QgQU5OT1VOQ0VNRU5UU19FTkRQT0lOVCA9ICdodHRwczovL2Fubm91bmNlbWVudHMuc3RhY2t0YXBlLWRldi5jb20nO1xuZXhwb3J0IGNvbnN0IFNFTlRSWV9EU04gPSAnaHR0cHM6Ly85M2VkMGIzMGI5Yjc0M2JjYmVmNTc0NTI2NmU4YTMwYkBzZW50cnkuaW8vMjExOTA4OCc7XG5leHBvcnQgY29uc3QgU0NIRU1BU19CVUNLRVRfTkFNRSA9XG4gIHByb2Nlc3MuZW52LlNDSEVNQVNfQlVDS0VUX05BTUUgfHwgJ2ludGVybmFsLXNlcnZpY2VzLXByb2R1Y3Rpb24tc2NoZW1hc2J1Y2tldC1lYjZmY2ExOSc7XG5leHBvcnQgY29uc3QgQUlfRE9DU19CVUNLRVRfTkFNRSA9IHByb2Nlc3MuZW52LkFJX0RPQ1NfQlVDS0VUX05BTUUgfHwgJ2NvbnNvbGUtYXBwLWRldi1tY3Bkb2NzYnVja2V0LTc0M2E3MzInO1xuZXhwb3J0IGNvbnN0IElOU1RBTExfU0NSSVBUU19CVUNLRVRfTkFNRSA9XG4gIHByb2Nlc3MuZW52LklOU1RBTExfU0NSSVBUU19CVUNLRVRfTkFNRSB8fCAnaW50ZXJuYWwtc2VydmljZXMtcHJvZHVjdGlvbi1pbnN0YWxsc2NyaXB0c2J1Y2tldC1lYjZmY2ExOSc7XG5leHBvcnQgY29uc3QgSU5TVEFMTF9TQ1JJUFRTX1BSRVZJRVdfQlVDS0VUX05BTUUgPVxuICBwcm9jZXNzLmVudi5JTlNUQUxMX1NDUklQVFNfUFJFVklFV19CVUNLRVRfTkFNRSB8fCAnaW50ZXJuYWwtc2VydmljZXMtcHJvZHVjdGlvbi1pbnN0YWxsc2NyaXB0c2J1Y2tldHByZXZpZXctN2I3YTQxJztcblxuZXhwb3J0IGNvbnN0IFNUQUNLVEFQRV9UUlBDX0FQSV9FTkRQT0lOVCA9XG4gIHByb2Nlc3MuZW52LlNUUF9DVVNUT01fVFJQQ19BUElfRU5EUE9JTlQgfHwgKElTX0RFViA/ICdodHRwczovL2Rldi1hcGkuc3RhY2t0YXBlLmNvbScgOiAnaHR0cHM6Ly9hcGkuc3RhY2t0YXBlLmNvbScpO1xuXG5leHBvcnQgY29uc3QgTUlYUEFORUxfVE9LRU4gPSAnNWY0YWQwYjYwNjEwYzliMDM5ODUyOGM3N2U1NDU5ZGEnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFSVEVSX1BST0pFQ1RfVEFSR0VUX0RJUkVDVE9SWSA9ICdzdGFja3RhcGUtcHJvamVjdCc7XG5cbmV4cG9ydCBjb25zdCBJU19URUxFTUVUUllfRElTQUJMRUQgPSBwcm9jZXNzLmVudi5TVFBfRElTQUJMRV9URUxFTUVUUlkgPT09ICcxJztcbmV4cG9ydCBjb25zdCBwb3NzaWJseVN1cHBvcnRlZExhbmdFeHRlbnNpb25zID0gW1xuICAnanMnLFxuICAndHMnLFxuICAnbWpzJyxcbiAgJ210cycsXG4gICdweScsXG4gICdqYXZhJyxcbiAgJ3JiJyxcbiAgJ2dvJyxcbiAgJ2NzJyxcbiAgJ2pzeCcsXG4gICd0c3gnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgTk9ERV9SVU5USU1FX1ZFUlNJT05TX1dJVEhfU0tJUFBFRF9TREtfVjNfUEFDS0FHSU5HID0gWzI0LCAyMiwgMjAsIDE4XTtcblxuZXhwb3J0IGNvbnN0IGxhbWJkYVJ1bnRpbWVzRm9yRmlsZUV4dGVuc2lvbjoge1xuICBbX2V4dCBpbiAodHlwZW9mIHBvc3NpYmx5U3VwcG9ydGVkTGFuZ0V4dGVuc2lvbnMpW251bWJlcl1dOiBzdHJpbmdbXTtcbn0gPSB7XG4gIGpzOiBbJ25vZGVqczI0LngnLCAnbm9kZWpzMjIueCcsICdub2RlanMyMC54JywgJ25vZGVqczE4LngnXSxcbiAgdHM6IFsnbm9kZWpzMjQueCcsICdub2RlanMyMi54JywgJ25vZGVqczIwLngnLCAnbm9kZWpzMTgueCddLFxuICBtanM6IFsnbm9kZWpzMjQueCcsICdub2RlanMyMi54JywgJ25vZGVqczIwLngnLCAnbm9kZWpzMTgueCddLFxuICBtdHM6IFsnbm9kZWpzMjQueCcsICdub2RlanMyMi54JywgJ25vZGVqczIwLngnLCAnbm9kZWpzMTgueCddLFxuICBqc3g6IFsnbm9kZWpzMjQueCcsICdub2RlanMyMi54JywgJ25vZGVqczIwLngnLCAnbm9kZWpzMTgueCddLFxuICB0c3g6IFsnbm9kZWpzMjQueCcsICdub2RlanMyMi54JywgJ25vZGVqczIwLngnLCAnbm9kZWpzMTgueCddLFxuICBweTogWydweXRob24zLjEzJywgJ3B5dGhvbjMuMTInLCAncHl0aG9uMy4xMScsICdweXRob24zLjEwJ10sXG4gIGphdmE6IFsnamF2YTIxJywgJ2phdmExNycsICdqYXZhMTEnXSxcbiAgcmI6IFsncnVieTMuMyddLFxuICBnbzogWydwcm92aWRlZC5hbDInLCAncHJvdmlkZWQuYWwyMDIzJ10sXG4gIGNzOiBbJ2RvdG5ldDgnLCAnZG90bmV0NiddXG59O1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZFdvcmtsb2FkRXh0ZW5zaW9uczogKHR5cGVvZiBwb3NzaWJseVN1cHBvcnRlZExhbmdFeHRlbnNpb25zKVtudW1iZXJdW10gPSBbXG4gICdqcycsXG4gICd0cycsXG4gICdtanMnLFxuICAnanN4JyxcbiAgJ3RzeCcsXG4gICdweScsXG4gICdqYXZhJyxcbiAgJ2dvJ1xuXTtcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRBd3NDZGtDb25zdHJ1Y3RFeHRlbnNpb25zOiAodHlwZW9mIHBvc3NpYmx5U3VwcG9ydGVkTGFuZ0V4dGVuc2lvbnMpW251bWJlcl1bXSA9IFsnanMnLCAndHMnXTtcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRDb2RlQ29uZmlnTGFuZ3VhZ2VzOiAodHlwZW9mIHBvc3NpYmx5U3VwcG9ydGVkTGFuZ0V4dGVuc2lvbnMpW251bWJlcl1bXSA9IFsnanMnLCAndHMnLCAncHknXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0xPVURGT1JNQVRJT05fUkVHSVNUUllfQlVDS0VUX05BTUUgPSAnc3RhY2t0YXBlLWluZnJhc3RydWN0dXJlLW1vZHVsZXMnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0xPVURGT1JNQVRJT05fUkVHSVNUUllfQlVDS0VUX1JFR0lPTiA9ICdldS13ZXN0LTEnIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9LRUVQX1BSRVZJT1VTX0RFUExPWU1FTlRfQVJUSUZBQ1RTX0NPVU5UID0gMjU7XG5cbmV4cG9ydCBjb25zdCBNT05JVE9SSU5HX0ZSRVFVRU5DWV9TRUNPTkRTID0gMy41O1xuZXhwb3J0IGNvbnN0IFNFTlRSWV9DQVBUVVJFX0VYQ0VQVElPTl9XQUlUX1RJTUVfTVMgPSAxNTAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9QQVJBTExFTF9BUlRJRkFDVF9VUExPQURTID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhJTVVNX1BBUkFMTEVMX0JVQ0tFVF9TWU5DUyA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09OVEFJTkVSX05PREVfVkVSU0lPTiA9IDI0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFNQkRBX05PREVfVkVSU0lPTiA9IDI0O1xuXG4vLyBAdG9kb1xuZXhwb3J0IGNvbnN0IGxpbmtzTWFwID0ge1xuICBkb2NzQ2xpOiAnaHR0cHM6Ly9kb2NzLnN0YWNrdGFwZS5jb20vY2xpL3VzaW5nLWNsaS8nLFxuICBwcmljaW5nUGFnZTogJ2h0dHBzOi8vc3RhY2t0YXBlLmNvbSNwcmljaW5nJyxcbiAgZG9jczogJ2h0dHBzOi8vZG9jcy5zdGFja3RhcGUuY29tJyxcbiAgamF2YVdvcmtsb2FkSXNzdWU6ICdodHRwczovL2dpdGh1Yi5jb20vc3RhY2t0YXBlL3N0YWNrdGFwZS9pc3N1ZXMvNScsXG4gIHB5dGhvbldvcmtsb2FkSXNzdWU6ICdodHRwczovL2dpdGh1Yi5jb20vc3RhY2t0YXBlL3N0YWNrdGFwZS9pc3N1ZXMvNCcsXG4gIGNzaGFycFdvcmtsb2FkSXNzdWU6ICdodHRwczovL2dpdGh1Yi5jb20vc3RhY2t0YXBlL3N0YWNrdGFwZS9pc3N1ZXMvMycsXG4gIHJ1YnlXb3JrbG9hZElzc3VlOiAnaHR0cHM6Ly9naXRodWIuY29tL3N0YWNrdGFwZS9zdGFja3RhcGUvaXNzdWVzLzInLFxuICBnb1dvcmtsb2FkSXNzdWU6ICdodHRwczovL2dpdGh1Yi5jb20vc3RhY2t0YXBlL3N0YWNrdGFwZS9pc3N1ZXMvMScsXG4gIG5ld0lzc3VlOiAnaHR0cHM6Ly9naXRodWIuY29tL3N0YWNrdGFwZS9zdGFja3RhcGUvaXNzdWVzL25ldycsXG4gIHByZXJlcXVpc2l0ZXM6ICdodHRwczovL2RvY3Muc3RhY2t0YXBlLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvc2V0dXAtc3RhY2t0YXBlLycsXG4gIHNpZ25VcDogJ2h0dHBzOi8vY29uc29sZS5zdGFja3RhcGUuY29tL3NpZ24tdXAnLFxuICBjb25zb2xlOiAnaHR0cHM6Ly9jb25zb2xlLnN0YWNrdGFwZS5jb20vJyxcbiAgYXBpS2V5czogJ2h0dHBzOi8vY29uc29sZS5zdGFja3RhcGUuY29tL2FwaS1rZXlzJyxcbiAgY29ubmVjdGVkQXdzQWNjb3VudHM6ICdodHRwczovL2NvbnNvbGUuc3RhY2t0YXBlLmNvbS9hd3MtYWNjb3VudHMnLFxuICBzdWJzY3JpcHRpb246ICdodHRwczovL2NvbnNvbGUuc3RhY2t0YXBlLmNvbS9zdWJzY3JpcHRpb24tcGxhbnMnXG59O1xuXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0FXU19SRUdJT05TID0gW1xuICAndXMtZWFzdC0yJyxcbiAgJ3VzLWVhc3QtMScsXG4gICd1cy13ZXN0LTEnLFxuICAndXMtd2VzdC0yJyxcbiAgJ2FwLWVhc3QtMScsXG4gICdhcC1zb3V0aC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0zJyxcbiAgJ2FwLW5vcnRoZWFzdC0yJyxcbiAgJ2FwLXNvdXRoZWFzdC0xJyxcbiAgJ2FwLXNvdXRoZWFzdC0yJyxcbiAgJ2FwLW5vcnRoZWFzdC0xJyxcbiAgJ2NhLWNlbnRyYWwtMScsXG4gICdldS1jZW50cmFsLTEnLFxuICAnZXUtd2VzdC0xJyxcbiAgJ2V1LXdlc3QtMicsXG4gICdldS13ZXN0LTMnLFxuICAnZXUtbm9ydGgtMScsXG4gICdtZS1zb3V0aC0xJyxcbiAgJ3NhLWVhc3QtMScsXG4gICdhZi1zb3V0aC0xJyxcbiAgJ2V1LXNvdXRoLTEnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdExvZ1JldGVudGlvbkRheXMgPSB7XG4gIGh0dHBBcGlHYXRld2F5OiAzMCxcbiAgYmF0Y2hKb2I6IDkwLFxuICBjb250YWluZXJXb3JrbG9hZDogOTAsXG4gIGxhbWJkYUZ1bmN0aW9uOiA5MCxcbiAgcmVkaXNDbHVzdGVyOiAzMCxcbiAgcmVsYXRpb25hbERhdGFiYXNlOiA5MFxufTtcblxuZXhwb3J0IGNvbnN0IFJFU09VUkNFX0RFRkFVTFRTOiB7IFtfcmVzb3VyY2VUeXBlIGluIFN0cFJlc291cmNlVHlwZV06IFBhcnRpYWw8U3RwUmVzb3VyY2U+IH0gPSB7XG4gICdiYXRjaC1qb2InOiB7XG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICBtZW1vcnk6IDEwMjRcbiAgICB9XG4gIH0sXG4gICd3ZWItc2VydmljZSc6IHtcbiAgICBzY2FsaW5nOiB7XG4gICAgICBzY2FsaW5nUG9saWN5OiB7XG4gICAgICAgIGtlZXBBdmdDcHVVdGlsaXphdGlvblVuZGVyOiA4MCxcbiAgICAgICAga2VlcEF2Z01lbW9yeVV0aWxpemF0aW9uVW5kZXI6IDgwXG4gICAgICB9LFxuICAgICAgbWluSW5zdGFuY2VzOiAxLFxuICAgICAgbWF4SW5zdGFuY2VzOiAxXG4gICAgfVxuICB9LFxuICAncHJpdmF0ZS1zZXJ2aWNlJzoge1xuICAgIHNjYWxpbmc6IHtcbiAgICAgIHNjYWxpbmdQb2xpY3k6IHtcbiAgICAgICAga2VlcEF2Z0NwdVV0aWxpemF0aW9uVW5kZXI6IDgwLFxuICAgICAgICBrZWVwQXZnTWVtb3J5VXRpbGl6YXRpb25VbmRlcjogODBcbiAgICAgIH0sXG4gICAgICBtaW5JbnN0YW5jZXM6IDEsXG4gICAgICBtYXhJbnN0YW5jZXM6IDFcbiAgICB9XG4gIH0sXG4gICd3b3JrZXItc2VydmljZSc6IHtcbiAgICBzY2FsaW5nOiB7XG4gICAgICBzY2FsaW5nUG9saWN5OiB7XG4gICAgICAgIGtlZXBBdmdDcHVVdGlsaXphdGlvblVuZGVyOiA4MCxcbiAgICAgICAga2VlcEF2Z01lbW9yeVV0aWxpemF0aW9uVW5kZXI6IDgwXG4gICAgICB9LFxuICAgICAgbWluSW5zdGFuY2VzOiAxLFxuICAgICAgbWF4SW5zdGFuY2VzOiAxXG4gICAgfVxuICB9LFxuICAnbXVsdGktY29udGFpbmVyLXdvcmtsb2FkJzoge1xuICAgIHNjYWxpbmc6IHtcbiAgICAgIHNjYWxpbmdQb2xpY3k6IHtcbiAgICAgICAga2VlcEF2Z0NwdVV0aWxpemF0aW9uVW5kZXI6IDgwLFxuICAgICAgICBrZWVwQXZnTWVtb3J5VXRpbGl6YXRpb25VbmRlcjogODBcbiAgICAgIH0sXG4gICAgICBtaW5JbnN0YW5jZXM6IDEsXG4gICAgICBtYXhJbnN0YW5jZXM6IDFcbiAgICB9XG4gIH0sXG4gIGZ1bmN0aW9uOiB7XG4gICAgbWVtb3J5OiAxMDI0LFxuICAgIHRpbWVvdXQ6IDIwXG4gIH0sXG4gICdlZGdlLWxhbWJkYS1mdW5jdGlvbic6IHtcbiAgICBtZW1vcnk6IDEyOCxcbiAgICB0aW1lb3V0OiAzXG4gIH0sXG4gICdhcHBsaWNhdGlvbi1sb2FkLWJhbGFuY2VyJzoge30sXG4gICdjdXN0b20tcmVzb3VyY2UtaW5zdGFuY2UnOiB7fSxcbiAgJ2N1c3RvbS1yZXNvdXJjZS1kZWZpbml0aW9uJzoge30sXG4gICdldmVudC1idXMnOiB7fSxcbiAgJ2h0dHAtYXBpLWdhdGV3YXknOiB7fSxcbiAgJ21vbmdvLWRiLWF0bGFzLWNsdXN0ZXInOiB7fSxcbiAgJ3JlbGF0aW9uYWwtZGF0YWJhc2UnOiB7fSxcbiAgJ3N0YXRlLW1hY2hpbmUnOiB7fSxcbiAgJ3VzZXItYXV0aC1wb29sJzoge30sXG4gICdkeW5hbW8tZGItdGFibGUnOiB7fSxcbiAgJ3JlZGlzLWNsdXN0ZXInOiB7fSxcbiAgJ2RlcGxveW1lbnQtc2NyaXB0Jzoge30sXG4gICd1cHN0YXNoLXJlZGlzJzoge30sXG4gIGJ1Y2tldDoge30sXG4gICdob3N0aW5nLWJ1Y2tldCc6IHt9LFxuICAnYXdzLWNkay1jb25zdHJ1Y3QnOiB7fSxcbiAgJ3Nucy10b3BpYyc6IHt9LFxuICAnc3FzLXF1ZXVlJzoge30sXG4gICd3ZWItYXBwLWZpcmV3YWxsJzoge30sXG4gIGJhc3Rpb246IHtcbiAgICBpbnN0YW5jZVNpemU6ICd0My5taWNybydcbiAgfSxcbiAgJ25leHRqcy13ZWInOiB7fSxcbiAgJ29wZW4tc2VhcmNoLWRvbWFpbic6IHt9LFxuICAnZWZzLWZpbGVzeXN0ZW0nOiB7fSxcbiAgJ25ldHdvcmstbG9hZC1iYWxhbmNlcic6IHt9XG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhYmxlR2xvYmFsRGVmYXVsdENsaUFyZ3MgPSB7XG4gIHJlZ2lvbjogeyBkZXNjcmlwdGlvbjogJ0FXUyByZWdpb24nLCBkZWZhdWx0OiBudWxsLCBpc1NlbnNpdGl2ZTogZmFsc2UgfSxcbiAgcHJvZmlsZTogeyBkZXNjcmlwdGlvbjogJ0FXUyBwcm9maWxlJywgZGVmYXVsdDogJ2RlZmF1bHQnLCBpc1NlbnNpdGl2ZTogZmFsc2UgfSxcbiAgc3RhZ2U6IHsgZGVzY3JpcHRpb246ICdTdGFnZScsIGRlZmF1bHQ6IG51bGwsIGlzU2Vuc2l0aXZlOiBmYWxzZSB9LFxuICBwcm9qZWN0TmFtZTogeyBkZXNjcmlwdGlvbjogJ1Byb2plY3QgbmFtZScsIGRlZmF1bHQ6IG51bGwsIGlzU2Vuc2l0aXZlOiBmYWxzZSB9LFxuICBhd3NBY2NvdW50OiB7IGRlc2NyaXB0aW9uOiAnQVdTIEFjY291bnQgbmFtZScsIGRlZmF1bHQ6IG51bGwsIGlzU2Vuc2l0aXZlOiBmYWxzZSB9XG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhYmxlR2xvYmFsRGVmYXVsdE90aGVyUHJvcHMgPSB7XG4gIGFwaUtleTogeyBkZXNjcmlwdGlvbjogJ1N0YWNrdGFwZSBBUEkgS2V5JywgZGVmYXVsdDogbnVsbCwgaXNTZW5zaXRpdmU6IHRydWUgfSxcbiAgZXhlY3V0YWJsZVB5dGhvbjogeyBkZXNjcmlwdGlvbjogJ1B5dGhvbiBleGVjdXRhYmxlJywgZGVmYXVsdDogJ3B5dGhvbicsIGlzU2Vuc2l0aXZlOiBmYWxzZSB9LFxuICBleGVjdXRhYmxlSmF2YXNjcmlwdDogeyBkZXNjcmlwdGlvbjogJ05vZGUuanMgZXhlY3V0YWJsZScsIGRlZmF1bHQ6ICdub2RlJywgaXNTZW5zaXRpdmU6IGZhbHNlIH1cbiAgLy8geyBuYW1lOiAnbG9nTGV2ZWwnLCBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgbG9nIGxldmVsJywgZGVmYXVsdDogJ2luZm8nIH0sXG4gIC8vIHsgbmFtZTogJ2xvZ1R5cGUnLCBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgbG9nIHR5cGUnLCBkZWZhdWx0OiAnZmFuY3knIH1cbn07XG5cbmV4cG9ydCBjb25zdCBJTklUSUFMX0NGX1RFTVBMQVRFX0ZJTEVfTkFNRSA9ICdpbml0aWFsLXRlbXBsYXRlLnltbCc7XG5leHBvcnQgY29uc3QgQ0ZfVEVNUExBVEVfRklMRV9OQU1FX1dJVEhPVVRfRVhUID0gJ2NmLXRlbXBsYXRlJztcbmV4cG9ydCBjb25zdCBTVFBfVEVNUExBVEVfRklMRV9OQU1FX1dJVEhPVVRfRVhUID0gJ3N0cC10ZW1wbGF0ZSc7XG5leHBvcnQgY29uc3QgQ0ZfVEVNUExBVEVfRklMRV9OQU1FID0gYCR7Q0ZfVEVNUExBVEVfRklMRV9OQU1FX1dJVEhPVVRfRVhUfS55bWxgO1xuZXhwb3J0IGNvbnN0IFNUUF9URU1QTEFURV9GSUxFX05BTUUgPSBgJHtTVFBfVEVNUExBVEVfRklMRV9OQU1FX1dJVEhPVVRfRVhUfS55bWxgO1xuZXhwb3J0IGNvbnN0IElERU5USUZJRVJfRk9SX01JU1NJTkdfT1VUUFVUID0gJzw8bWlzc2luZ19vdXRwdXQ+Pic7XG5cbmV4cG9ydCBjb25zdCBJTlZPS0VEX0ZST01fRU5WX1ZBUl9OQU1FID0gJ19TVFBfSU5WT0tFRF9GUk9NJztcblxuZXhwb3J0IGNvbnN0IEhFTFBFUl9MQU1CREFfTkFNRVMgPSBbXG4gICdiYXRjaEpvYlRyaWdnZXJMYW1iZGEnLFxuICAnc3RhY2t0YXBlU2VydmljZUxhbWJkYScsXG4gICdjZG5PcmlnaW5SZXF1ZXN0TGFtYmRhJyxcbiAgJ2Nkbk9yaWdpblJlc3BvbnNlTGFtYmRhJ1xuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9DRl9JTkZSQVNUUlVDVFVSRV9NT0RVTEVTOiB7XG4gIFtfaW5mcmFzdHJ1Y3R1cmVNb2R1bGVUeXBlIGluIFN0cENmSW5mcmFzdHJ1Y3R1cmVNb2R1bGVUeXBlXTogQ2ZJbmZyYXN0cnVjdHVyZU1vZHVsZURhdGE7XG59ID0ge1xuICAvLyBXQVJOSU5HOiBiZWZvcmUgZWRpdGluZyBhbnl0aGluZyBpbiB0aGlzIHNlY3Rpb24gcGxlYXNlIHJlYWQgaW5mbyBhYm91dCBDZkluZnJhc3RydWN0dXJlTW9kdWxlRGF0YSBpbnRlcmZhY2VcbiAgYXRsYXNNb25nbzoge1xuICAgIHR5cGU6ICdhdGxhc01vbmdvJyxcbiAgICBwcml2YXRlVHlwZXNNYWpvclZlcnNpb25Vc2VkOiAnVjEnLFxuICAgIHByaXZhdGVUeXBlc01pbmltYWxSZXF1aXJlZFN1YnZlcnNpb246ICcwMDAwMDEwJyxcbiAgICBwcml2YXRlVHlwZXNTcGVjczoge1xuICAgICAgJ01vbmdvREI6OlN0cEF0bGFzVjE6OlByb2plY3QnOiB7XG4gICAgICAgIHBhY2thZ2VQcmVmaXg6ICdtb25nb2RiLXN0cGF0bGFzdjEtcHJvamVjdCdcbiAgICAgIH0sXG4gICAgICAnTW9uZ29EQjo6U3RwQXRsYXNWMTo6TmV0d29ya1BlZXJpbmcnOiB7XG4gICAgICAgIHBhY2thZ2VQcmVmaXg6ICdtb25nb2RiLXN0cGF0bGFzdjEtbmV0d29ya3BlZXJpbmcnXG4gICAgICB9LFxuICAgICAgJ01vbmdvREI6OlN0cEF0bGFzVjE6Ok5ldHdvcmtDb250YWluZXInOiB7XG4gICAgICAgIHBhY2thZ2VQcmVmaXg6ICdtb25nb2RiLXN0cGF0bGFzdjEtbmV0d29ya2NvbnRhaW5lcidcbiAgICAgIH0sXG4gICAgICAnTW9uZ29EQjo6U3RwQXRsYXNWMTo6UHJvamVjdElwQWNjZXNzTGlzdCc6IHtcbiAgICAgICAgcGFja2FnZVByZWZpeDogJ21vbmdvZGItc3RwYXRsYXN2MS1wcm9qZWN0aXBhY2Nlc3NsaXN0J1xuICAgICAgfSxcbiAgICAgICdNb25nb0RCOjpTdHBBdGxhc1YxOjpFbmNyeXB0aW9uQXRSZXN0Jzoge1xuICAgICAgICBwYWNrYWdlUHJlZml4OiAnbW9uZ29kYi1zdHBhdGxhc3YxLWVuY3J5cHRpb25hdHJlc3QnXG4gICAgICB9LFxuICAgICAgJ01vbmdvREI6OlN0cEF0bGFzVjE6OkRhdGFiYXNlVXNlcic6IHtcbiAgICAgICAgcGFja2FnZVByZWZpeDogJ21vbmdvZGItc3RwYXRsYXN2MS1kYXRhYmFzZXVzZXInXG4gICAgICB9LFxuICAgICAgJ01vbmdvREI6OlN0cEF0bGFzVjE6OkNsdXN0ZXInOiB7XG4gICAgICAgIHBhY2thZ2VQcmVmaXg6ICdtb25nb2RiLXN0cGF0bGFzdjEtY2x1c3RlcidcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHVwc3Rhc2hSZWRpczoge1xuICAgIHR5cGU6ICd1cHN0YXNoUmVkaXMnLFxuICAgIHByaXZhdGVUeXBlc01ham9yVmVyc2lvblVzZWQ6ICdWMScsXG4gICAgcHJpdmF0ZVR5cGVzTWluaW1hbFJlcXVpcmVkU3VidmVyc2lvbjogJzAwMDAwMTQnLFxuICAgIHByaXZhdGVUeXBlc1NwZWNzOiB7XG4gICAgICAnVXBzdGFzaDo6RGF0YWJhc2VzVjE6OkRhdGFiYXNlJzoge1xuICAgICAgICBwYWNrYWdlUHJlZml4OiAndXBzdGFzaC1kYXRhYmFzZXN2MS1kYXRhYmFzZSdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVjc0JsdWVHcmVlbjoge1xuICAgIHR5cGU6ICdlY3NCbHVlR3JlZW4nLFxuICAgIHByaXZhdGVUeXBlc01ham9yVmVyc2lvblVzZWQ6ICdWMScsXG4gICAgcHJpdmF0ZVR5cGVzTWluaW1hbFJlcXVpcmVkU3VidmVyc2lvbjogJzAwMDAwMDgnLFxuICAgIHByaXZhdGVUeXBlc1NwZWNzOiB7XG4gICAgICAnU3RhY2t0YXBlOjpFQ1NCbHVlR3JlZW5WMTo6U2VydmljZSc6IHtcbiAgICAgICAgcGFja2FnZVByZWZpeDogJ3N0YWNrdGFwZS1lY3NibHVlZ3JlZW52MS1zZXJ2aWNlJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFBSSU5UX0xPR1NfSU5URVJWQUwgPSAxMDAwO1xuXG5leHBvcnQgY29uc3QgSEVMUEVSX0xBTUJEQVM6IEhlbHBlckxhbWJkYU5hbWVbXSA9IFtcbiAgJ2JhdGNoSm9iVHJpZ2dlckxhbWJkYScsXG4gICdjZG5PcmlnaW5SZXF1ZXN0TGFtYmRhJyxcbiAgJ2Nkbk9yaWdpblJlc3BvbnNlTGFtYmRhJyxcbiAgJ3N0YWNrdGFwZVNlcnZpY2VMYW1iZGEnXG5dO1xuXG5leHBvcnQgY29uc3QgUkVDT1JERURfU1RBQ0tUQVBFX0NPTU1BTkRTOiBTdGFja3RhcGVSZWNvcmRlZENvbW1hbmRbXSA9IFtcbiAgJ2RlcGxveScsXG4gICdjb2RlYnVpbGQ6ZGVwbG95JyxcbiAgJ2RlbGV0ZScsXG4gICdkZXBsb3ltZW50LXNjcmlwdDpydW4nLFxuICAnYnVja2V0OnN5bmMnLFxuICAnc2NyaXB0OnJ1bicsXG4gICdyb2xsYmFjaydcbl07XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmc0V4dHJhIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgaXNXaW5kb3dzID0gL153aW4vaS50ZXN0KHByb2Nlc3MucGxhdGZvcm0pO1xuXG4vKipcbiAqIFNvbWV0aW1lcywgcGVvcGxlIHdhbnQgdG8gbG9vayBmb3IgbG9jYWwgZXhlY3V0YWJsZSBmaWxlc1xuICogd2hpY2ggYXJlIHNwZWNpZmllZCB3aXRoIGVpdGhlciByZWxhdGl2ZSBvciBhYnNvbHV0ZSBmaWxlIHBhdGguXG4gKi9cbmNvbnN0IGlzRmlsZXBhdGggPSAoY21kOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gY21kLmluY2x1ZGVzKHBhdGguc2VwKSA/IHBhdGgucmVzb2x2ZShjbWQpIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBJbiBXaW5kb3dzIE9TLCB0aGVyZSBhcmUgYWxpYXNlcyB0byBleGVjdXRhYmxlIGZpbGVzLCBsaWtlIFwiLnNoXCIsIFwiLmJhc2hcIiBvciBcIi5weVwiLlxuICovXG5jb25zdCBnZXRBcHBsaWNhYmxlRXh0ZW5zaW9ucyA9ICgpOiBzdHJpbmdbXSA9PiB7XG4gIHJldHVybiBpc1dpbmRvd3MgPyAocHJvY2Vzcy5lbnYuUEFUSEVYVCB8fCAnJykuc3BsaXQocGF0aC5kZWxpbWl0ZXIpIDogWycnXTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgaWYgdGhlIGdpdmVuIGZpbGUgaXMgZXhlY3V0YWJsZSBvciBub3QsIHJlZ2FyZGluZyBcIlBBVEhFWFRcIiB0byBiZSBhcHBsaWVkLlxuICogUmVzb2x2ZXMgdGhlIGFic29sdXRlIGZpbGUgcGF0aCBqdXN0IGNoZWNrZWQsIG9yIHVuZGVmaW5lZC5cbiAqL1xuY29uc3QgaXNFeGVjdXRhYmxlID0gKGFic29sdXRlUGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGdldEFwcGxpY2FibGVFeHRlbnNpb25zKClcbiAgICAubWFwKChleHQpID0+IHtcbiAgICAgIGNvbnN0IHAgPSBhYnNvbHV0ZVBhdGgudG9Mb2NhbGVMb3dlckNhc2UoKS5lbmRzV2l0aChleHQudG9Mb2NhbGVMb3dlckNhc2UoKSkgPyBhYnNvbHV0ZVBhdGggOiBhYnNvbHV0ZVBhdGggKyBleHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmc0V4dHJhLmFjY2Vzc1N5bmMocCk7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbilbMF07XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGV4ZWN1dGFibGUgZmlsZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBuYW1lIHdpdGggdGhlIHRhcmdldCBjb21tYW5kLlxuICovXG5jb25zdCBmaW5kRXhlY3V0YWJsZVVuZGVyRGlyID0gKGNtZDogc3RyaW5nLCBkaXI6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgbGV0IGZpbGVzID0gW107XG4gIHRyeSB7XG4gICAgZmlsZXMgPSBmc0V4dHJhLnJlYWRkaXJTeW5jKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gZmlsZXMuZmlsdGVyKChmKSA9PiBwYXRoLmJhc2VuYW1lKGYpLnNwbGl0KCcuJylbMF0gPT09IGNtZCk7XG4gIHJldHVybiBtYXRjaGVzLm1hcCgoZikgPT4gaXNFeGVjdXRhYmxlKHBhdGguam9pbihkaXIsIGYpKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9uIHdoaWNoIHRoZSB0YXJnZXQgY29tbWFuZCBzaG91bGQgYmUgbG9va2VkIGZvci5cbiAqL1xuY29uc3QgZ2V0RGlyc1RvV2Fsa1Rocm91Z2ggPSAoYWRkaXRpb25hbFBhdGhzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBlbnZOYW1lID0gaXNXaW5kb3dzID8gJ1BhdGgnIDogJ1BBVEgnO1xuICByZXR1cm4gKHByb2Nlc3MuZW52W2Vudk5hbWVdIHx8ICcnKS5zcGxpdChwYXRoLmRlbGltaXRlcikuY29uY2F0KGFkZGl0aW9uYWxQYXRocyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYXN5bmMgcHJvbWlzZSB3aXRoIGFic29sdXRlIGZpbGUgcGF0aCBvZiBnaXZlbiBjb21tYW5kLFxuICogYW5kIHJlc29sdmVzIHdpdGggdW5kZWZpbmVkIGlmIHRoZSBjb21tYW5kIG5vdCBmb3VuZC5cbiAqIFJlc29sdmVzIGFic29sdXRlIGZpbGUgcGF0aCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrRXhlY3V0YWJsZUluUGF0aCA9IChjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkaXJQYXRoID0gaXNGaWxlcGF0aChjb21tYW5kKTtcbiAgaWYgKGRpclBhdGgpIHtcbiAgICByZXR1cm4gaXNFeGVjdXRhYmxlKGRpclBhdGgpO1xuICB9XG4gIGNvbnN0IGRpcnMgPSBnZXREaXJzVG9XYWxrVGhyb3VnaChbXSk7XG4gIGNvbnN0IG1hdGNoZWQgPSBkaXJzLm1hcCgoZGlyKSA9PiBmaW5kRXhlY3V0YWJsZVVuZGVyRGlyKGNvbW1hbmQsIGRpcikpO1xuICByZXR1cm4gbWF0Y2hlZC5mbGF0KCkuZmlsdGVyKEJvb2xlYW4pWzBdO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU3RhY2t0YXBlSW5zdGFsbGVkT25TeXN0ZW0gPSAoKSA9PiB7XG4gIGNvbnN0IGV4ZWNQYXRoID0gY2hlY2tFeGVjdXRhYmxlSW5QYXRoKCdzdGFja3RhcGUnKTtcbiAgcmV0dXJuIEJvb2xlYW4oZXhlY1BhdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsYXRmb3JtID0gKCk6IFN1cHBvcnRlZFBsYXRmb3JtID0+IHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gJ3dpbic7XG4gIH1cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICByZXR1cm4gJ2xpbnV4JztcbiAgfVxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSAneDY0Jykge1xuICAgICAgcmV0dXJuICdtYWNvcyc7XG4gICAgfVxuICAgIHJldHVybiAnbWFjb3MtYXJtJztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBsYXRmb3JtOiAke3Byb2Nlc3MucGxhdGZvcm19LCBhcmNoOiAke3Byb2Nlc3MuYXJjaH0uYCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5zdGFsbGF0aW9uU2NyaXB0ID0gKCkgPT4ge1xuICBjb25zdCBpbnN0YWxsYXRpb25TY3JpcHRzOiB7IFtfcGxhdGZvcm0gaW4gU3VwcG9ydGVkUGxhdGZvcm1dOiBzdHJpbmcgfSA9IHtcbiAgICB3aW46ICdpd3IgaHR0cHM6Ly9pbnN0YWxscy5zdGFja3RhcGUuY29tL3dpbmRvd3MucHMxIC11c2ViIHwgaWV4JyxcbiAgICBsaW51eDogJ2N1cmwgLUwgaHR0cHM6Ly9pbnN0YWxscy5zdGFja3RhcGUuY29tL2xpbnV4LnNoIHwgc2gnLFxuICAgICdsaW51eC1hcm0nOiAnY3VybCAtTCBodHRwczovL2luc3RhbGxzLnN0YWNrdGFwZS5jb20vbGludXgtYXJtLnNoIHwgc2gnLFxuICAgIGFscGluZTogJ2N1cmwgLUwgaHR0cHM6Ly9pbnN0YWxscy5zdGFja3RhcGUuY29tL2FscGluZS5zaCB8IHNoJyxcbiAgICBtYWNvczogJ2N1cmwgLUwgaHR0cHM6Ly9pbnN0YWxscy5zdGFja3RhcGUuY29tL21hY29zLnNoIHwgc2gnLFxuICAgICdtYWNvcy1hcm0nOiAnY3VybCAtTCBodHRwczovL2luc3RhbGxzLnN0YWNrdGFwZS5jb20vbWFjb3MtYXJtLnNoIHwgc2gnXG4gIH07XG4gIHJldHVybiBpbnN0YWxsYXRpb25TY3JpcHRzW2dldFBsYXRmb3JtKCldO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7IEJpbmFyeVRvVGV4dEVuY29kaW5nIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBpc0Fic29sdXRlLCBqb2luLCBzZXAgYXMgcGF0aFNlcGFyYXRvciwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0QWxsRmlsZVBhdGhzIH0gZnJvbSAnY3VwLXJlYWRkaXInO1xuaW1wb3J0IGZhc3RHbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgZnNFeHRyYSwgeyBjcmVhdGVSZWFkU3RyZWFtLCBleGlzdHNTeW5jLCBvdXRwdXRGaWxlLCByZW1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2V0Rm9sZGVyU2l6ZUNiIGZyb20gJ2dldC1mb2xkZXItc2l6ZSc7XG5pbXBvcnQgeyBlbmNvZGUsIHBhcnNlIGFzIHBhcnNlSW5pIH0gZnJvbSAnaW5pJztcbmltcG9ydCB7IGdldEJ5dGVTaXplIH0gZnJvbSAnLi9taXNjJztcblxuY29uc3QgeyByZWFkRmlsZSwgc3RhdCwgcmVhZGRpclN5bmMsIGxzdGF0U3luYyB9ID0gZnNFeHRyYTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb24gPSAoZmlsZVBhdGg6IHN0cmluZyk6IFN1cHBvcnRlZEZpbGVFeHQgPT4ge1xuICBjb25zdCBleHQgPSBleHRuYW1lKGZpbGVQYXRoKS5zbGljZSgxLCBmaWxlUGF0aC5sZW5ndGgpO1xuICByZXR1cm4gZXh0LnNwbGl0KCc6JylbMF0gYXMgU3VwcG9ydGVkRmlsZUV4dDtcbn07XG5cbmNvbnN0IGdldEZpbGVQYXRoV2l0aG91dEV4dGVuc2lvbiA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBmaWxlUGF0aC5zbGljZSgwLCBmaWxlUGF0aC5sYXN0SW5kZXhPZignLicpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCYXNlTmFtZSA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBiYXNlbmFtZShmaWxlUGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmluZ0ZvbGRlck5hbWUgPSAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCB1bml4UGF0aERpcm5hbWUgPSBkaXJuYW1lKHRyYW5zZm9ybVRvVW5peFBhdGgoZmlsZVBhdGgpKTtcbiAgY29uc3QgZm9sZGVyTmFtZSA9IHVuaXhQYXRoRGlybmFtZS5zbGljZSh1bml4UGF0aERpcm5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEsIHVuaXhQYXRoRGlybmFtZS5sZW5ndGgpO1xuICByZXR1cm4gZm9sZGVyTmFtZSA9PT0gJ2phdmEnID8gJycgOiBmb2xkZXJOYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEphdmFQYWNrYWdlTmFtZSA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVuaXhQYXRoRGlybmFtZSA9IGdldEZpbGVQYXRoV2l0aG91dEV4dGVuc2lvbih0cmFuc2Zvcm1Ub1VuaXhQYXRoKGZpbGVQYXRoKSk7XG4gIHJldHVybiB1bml4UGF0aERpcm5hbWVcbiAgICAuc2xpY2UodW5peFBhdGhEaXJuYW1lLmxhc3RJbmRleE9mKCcvc3JjL21haW4vamF2YScpICsgMTUsIHVuaXhQYXRoRGlybmFtZS5sZW5ndGgpXG4gICAgLnJlcGxhY2VBbGwoJy8nLCAnLicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJhc2VOYW1lID0gZ2V0QmFzZU5hbWUoZmlsZVBhdGgpO1xuICByZXR1cm4gYmFzZU5hbWUuc2xpY2UoMCwgYmFzZU5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9sZGVyID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIGRpcm5hbWUoZmlsZVBhdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb250ZW50ID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcsIGVuY29kaW5nID0gJ3V0ZjgnKSA9PiB7XG4gIGlmICghaXNBYnNvbHV0ZShmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGVwYXRoICR7ZmlsZVBhdGh9IG11c3QgYmUgYWJzb2x1dGUuYCk7XG4gIH1cbiAgcmV0dXJuIHJlYWRGaWxlKGZpbGVQYXRoLCB7IGVuY29kaW5nOiBlbmNvZGluZyBhcyBCdWZmZXJFbmNvZGluZyB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgZmlsZSBhdCAke2ZpbGVQYXRofWApO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbmlGaWxlQ29udGVudCA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBnZXRGaWxlQ29udGVudChmaWxlUGF0aCk7XG4gIHJldHVybiBjb250ZW50ID8gcGFyc2VJbmkoY29udGVudCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkanVzdEluaUZpbGVDb250ZW50ID0gYXN5bmMgKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBhZGp1c3RGbjogKHBhcnNlZENvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFJlY29yZDxzdHJpbmcsIGFueT5cbikgPT4ge1xuICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSBhd2FpdCBnZXRJbmlGaWxlQ29udGVudChmaWxlUGF0aCk7XG4gIHJldHVybiBvdXRwdXRGaWxlKGZpbGVQYXRoLCBlbmNvZGUoYWRqdXN0Rm4ob3JpZ2luYWxDb250ZW50IHx8IHt9KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtaWNSZXF1aXJlID0gKHsgY2FjaGUgPSB0cnVlLCBmaWxlUGF0aCB9OiB7IGZpbGVQYXRoOiBzdHJpbmc7IGNhY2hlPzogYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IGludGVycG9sYWJsZUZpbGVQYXRoID0gdHJhbnNmb3JtVG9Vbml4UGF0aChmaWxlUGF0aCk7XG4gIGlmICghY2FjaGUpIHtcbiAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtyZXF1aXJlLnJlc29sdmUoaW50ZXJwb2xhYmxlRmlsZVBhdGgpXTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHMvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIHJldHVybiByZXF1aXJlKGludGVycG9sYWJsZUZpbGVQYXRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljUmVxdWlyZUxpYnJhcnlGcm9tVXNlck5vZGVNb2R1bGVzID0gKHtcbiAgbGlicmFyeU5hbWUsXG4gIHNlYXJjaEZyb21cbn06IHtcbiAgbGlicmFyeU5hbWU6IHN0cmluZztcbiAgc2VhcmNoRnJvbTogc3RyaW5nO1xufSkgPT4ge1xuICBjb25zdCBsaWJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKGxpYnJhcnlOYW1lLCB7IHBhdGhzOiBbc2VhcmNoRnJvbV0gfSk7XG4gIHJldHVybiBkeW5hbWljUmVxdWlyZSh7IGZpbGVQYXRoOiBsaWJQYXRoIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpckV4aXN0cyA9IChkaXJlY3Rvcnk6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBsc3RhdFN5bmMoZGlyZWN0b3J5KS5pc0RpcmVjdG9yeSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZpbGVBY2Nlc3NpYmxlID0gKGFic29sdXRlRmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBsc3RhdFN5bmMoYWJzb2x1dGVGaWxlUGF0aCkuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRGlyQWNjZXNzaWJsZSA9IChhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbHN0YXRTeW5jKGFic29sdXRlRmlsZVBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvVW5peFBhdGggPSAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICByZXR1cm4gZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1hdGNoaW5nRmlsZXNCeUdsb2IgPSBhc3luYyAoeyBnbG9iUGF0dGVybiwgY3dkIH06IHsgZ2xvYlBhdHRlcm46IHN0cmluZyB8IHN0cmluZ1tdOyBjd2Q6IHN0cmluZyB9KSA9PiB7XG4gIHJldHVybiBmYXN0R2xvYihnbG9iUGF0dGVybiwgeyBkb3Q6IHRydWUsIGN3ZCB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlSGFzaCA9IGFzeW5jIChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgYWxnb3JpdGhtID0gJ3NoYTEnLFxuICBlbmNvZGluZyA9ICdoZXgnIGFzIEJpbmFyeVRvVGV4dEVuY29kaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChhbGdvcml0aG0pO1xuICBjb25zdCBzdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuayBhcyBhbnkpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gc3RyZWFtIGZpbGUgYXQgJHtmaWxlUGF0aH1gKSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGhhc2guZGlnZXN0KGVuY29kaW5nKSk7XG4gICAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsRmlsZXNJbkRpciA9IGFzeW5jIChkaXJQYXRoOiBzdHJpbmcsIHJlbGF0aXZlT3V0cHV0ID0gdHJ1ZSkgPT4ge1xuICBjb25zdCByZXM6IHN0cmluZ1tdID0gYXdhaXQgZ2V0QWxsRmlsZVBhdGhzKGRpclBhdGgpO1xuICBjb25zdCBkaXJQYXRoV2l0aG91dFRyYWlsaW5nU2xhc2ggPSBkaXJQYXRoLmVuZHNXaXRoKCcvJykgfHwgZGlyUGF0aC5lbmRzV2l0aCgnXFxcXCcpID8gZGlyUGF0aC5zbGljZSgwLCAtMSkgOiBkaXJQYXRoO1xuICBpZiAocmVsYXRpdmVPdXRwdXQpIHtcbiAgICByZXR1cm4gcmVzLm1hcCgoZmlsZVBhdGgpID0+IGZpbGVQYXRoLnNsaWNlKGRpclBhdGhXaXRob3V0VHJhaWxpbmdTbGFzaC5sZW5ndGggKyAxKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIYXNoRnJvbU11bHRpcGxlRmlsZXMgPSBhc3luYyAoZmlsZXM6IHN0cmluZ1tdKSA9PiB7XG4gIC8vIGNvbnN0IG1hdGNoaW5nRmlsZXMgPSBhd2FpdCBmYXN0R2xvYihnbG9iUGF0dGVybiwgeyBkb3Q6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKGZpbGVzLm1hcCgoZmlsZVBhdGgpID0+IGdldEZpbGVDb250ZW50KGZpbGVQYXRoKSkpO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMScpO1xuICBmaWxlQ29udGVudHMuZm9yRWFjaCgoYykgPT4ge1xuICAgIGlmIChjKSB7XG4gICAgICBoYXNoLnVwZGF0ZShjKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGFzaDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGb2xkZXJTaXplID0gKGZvbGRlclBhdGg6IHN0cmluZywgdW5pdDogJ01CJyB8ICdLQicsIGRlY2ltYWxzID0gMik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZ2V0Rm9sZGVyU2l6ZUNiKGZvbGRlclBhdGgsIChlcnI6IEVycm9yLCBzaXplKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgbGV0IHJlczogbnVtYmVyO1xuICAgICAgaWYgKHVuaXQgPT09ICdNQicpIHtcbiAgICAgICAgcmVzID0gc2l6ZSAvIDEwMjQgLyAxMDI0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzID0gc2l6ZSAvIDEwMjQ7XG4gICAgICB9XG4gICAgICByZXNvbHZlKE51bWJlcihyZXMudG9GaXhlZChkZWNpbWFscykpKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZVNpemUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgdW5pdDogJ01CJyB8ICdLQicsIGRlY2ltYWxzID0gMik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHsgc2l6ZSB9ID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gIHJldHVybiBnZXRCeXRlU2l6ZShzaXplLCB1bml0LCBkZWNpbWFscyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFJlbGF0aXZlVG8gPSAoZmlsZVBhdGg6IHN0cmluZywgcmVsYXRpdmVUbzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkQXJyYXk6IHN0cmluZ1tdID0gcmVsYXRpdmVUby5zcGxpdChwYXRoU2VwYXJhdG9yKTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZpbGVQYXRoLnNwbGl0KHBhdGhTZXBhcmF0b3IpKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoY2xlYW5GaWxlTmFtZTogc3RyaW5nLCBmaWxlTmFtZVBhcnQpID0+XG4gICAgICAgIGZpbGVOYW1lUGFydFsxXSAhPT0gY3dkQXJyYXlbZmlsZU5hbWVQYXJ0WzBdXVxuICAgICAgICAgID8gKGNsZWFuRmlsZU5hbWUgKz0gcGF0aFNlcGFyYXRvciArIGZpbGVOYW1lUGFydFsxXSlcbiAgICAgICAgICA6IGNsZWFuRmlsZU5hbWUsXG4gICAgICAnJ1xuICAgIClcbiAgICAuc3Vic3RyaW5nKDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlbGF0aXZlUGF0aCA9IChpdGVtUGF0aDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpdGVtUGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RFeGlzdGluZ1BhdGggPSAocGF0aHM6IHN0cmluZ1tdKSA9PiB7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIGlmIChleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVEaXJlY3RvcnlDb250ZW50ID0gYXN5bmMgKGRpclBhdGg6IHN0cmluZykgPT4ge1xuICByZXR1cm4gcmVhZGRpclN5bmMoZGlyUGF0aCkubWFwKChlbnRyeSkgPT4gcmVtb3ZlKGpvaW4oZGlyUGF0aCwgZW50cnkpKSk7XG59O1xuIiwgIi8vIFJlZ2V4cHMgaW52b2x2ZWQgd2l0aCBzcGxpdHRpbmcgd29yZHMgaW4gdmFyaW91cyBjYXNlIGZvcm1hdHMuXG5jb25zdCBTUExJVF9MT1dFUl9VUFBFUl9SRSA9IC8oW1xccHtMbH1cXGRdKShcXHB7THV9KS9ndTtcbmNvbnN0IFNQTElUX1VQUEVSX1VQUEVSX1JFID0gLyhcXHB7THV9KShbXFxwe0x1fV1bXFxwe0xsfV0pL2d1O1xuXG4vLyBVc2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW5pdGlhbCBzcGxpdCByZXN1bHQgYW5kIHNlcGFyYXRlIG51bWJlcnMuXG5jb25zdCBTUExJVF9TRVBBUkFURV9OVU1CRVJfUkUgPSAvKFxcZClcXHB7TGx9fChcXHB7TH0pXFxkL3U7XG5cbi8vIFJlZ2V4cCBpbnZvbHZlZCB3aXRoIHN0cmlwcGluZyBub24td29yZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHJlc3VsdC5cbmNvbnN0IERFRkFVTFRfU1RSSVBfUkVHRVhQID0gL1teXFxwe0x9XFxkXSsvZ2l1O1xuXG4vLyBUaGUgcmVwbGFjZW1lbnQgdmFsdWUgZm9yIHNwbGl0cy5cbmNvbnN0IFNQTElUX1JFUExBQ0VfVkFMVUUgPSBcIiQxXFwwJDJcIjtcblxuLy8gVGhlIGRlZmF1bHQgY2hhcmFjdGVycyB0byBrZWVwIGFmdGVyIHRyYW5zZm9ybWluZyBjYXNlLlxuY29uc3QgREVGQVVMVF9QUkVGSVhfU1VGRklYX0NIQVJBQ1RFUlMgPSBcIlwiO1xuXG4vKipcbiAqIFN1cHBvcnRlZCBsb2NhbGUgdmFsdWVzLiBVc2UgYGZhbHNlYCB0byBpZ25vcmUgbG9jYWxlLlxuICogRGVmYXVsdHMgdG8gYHVuZGVmaW5lZGAsIHdoaWNoIHVzZXMgdGhlIGhvc3QgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCB0eXBlIExvY2FsZSA9IHN0cmluZ1tdIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogT3B0aW9ucyB1c2VkIGZvciBjb252ZXJ0aW5nIHN0cmluZ3MgdG8gcGFzY2FsL2NhbWVsIGNhc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzY2FsQ2FzZU9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zIHtcbiAgbWVyZ2VBbWJpZ3VvdXNDaGFyYWN0ZXJzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHVzZWQgZm9yIGNvbnZlcnRpbmcgc3RyaW5ncyB0byBhbnkgY2FzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgbG9jYWxlPzogTG9jYWxlO1xuICBzcGxpdD86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmdbXTtcbiAgLyoqIEBkZXByZWNhdGVkIFBhc3MgYHNwbGl0OiBzcGxpdFNlcGFyYXRlTnVtYmVyc2AgaW5zdGVhZC4gKi9cbiAgc2VwYXJhdGVOdW1iZXJzPzogYm9vbGVhbjtcbiAgZGVsaW1pdGVyPzogc3RyaW5nO1xuICBwcmVmaXhDaGFyYWN0ZXJzPzogc3RyaW5nO1xuICBzdWZmaXhDaGFyYWN0ZXJzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNwbGl0IGFueSBjYXNlZCBpbnB1dCBzdHJpbmdzIGludG8gYW4gYXJyYXkgb2Ygd29yZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdCh2YWx1ZTogc3RyaW5nKSB7XG4gIGxldCByZXN1bHQgPSB2YWx1ZS50cmltKCk7XG5cbiAgcmVzdWx0ID0gcmVzdWx0XG4gICAgLnJlcGxhY2UoU1BMSVRfTE9XRVJfVVBQRVJfUkUsIFNQTElUX1JFUExBQ0VfVkFMVUUpXG4gICAgLnJlcGxhY2UoU1BMSVRfVVBQRVJfVVBQRVJfUkUsIFNQTElUX1JFUExBQ0VfVkFMVUUpO1xuXG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKERFRkFVTFRfU1RSSVBfUkVHRVhQLCBcIlxcMFwiKTtcblxuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gcmVzdWx0Lmxlbmd0aDtcblxuICAvLyBUcmltIHRoZSBkZWxpbWl0ZXIgZnJvbSBhcm91bmQgdGhlIG91dHB1dCBzdHJpbmcuXG4gIHdoaWxlIChyZXN1bHQuY2hhckF0KHN0YXJ0KSA9PT0gXCJcXDBcIikgc3RhcnQrKztcbiAgaWYgKHN0YXJ0ID09PSBlbmQpIHJldHVybiBbXTtcbiAgd2hpbGUgKHJlc3VsdC5jaGFyQXQoZW5kIC0gMSkgPT09IFwiXFwwXCIpIGVuZC0tO1xuXG4gIHJldHVybiByZXN1bHQuc2xpY2Uoc3RhcnQsIGVuZCkuc3BsaXQoL1xcMC9nKTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgaW5wdXQgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygd29yZHMsIHNlcGFyYXRpbmcgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U2VwYXJhdGVOdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3Qgd29yZHMgPSBzcGxpdCh2YWx1ZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB3b3JkID0gd29yZHNbaV07XG4gICAgY29uc3QgbWF0Y2ggPSBTUExJVF9TRVBBUkFURV9OVU1CRVJfUkUuZXhlYyh3b3JkKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IG1hdGNoLmluZGV4ICsgKG1hdGNoWzFdID8/IG1hdGNoWzJdKS5sZW5ndGg7XG4gICAgICB3b3Jkcy5zcGxpY2UoaSwgMSwgd29yZC5zbGljZSgwLCBvZmZzZXQpLCB3b3JkLnNsaWNlKG9mZnNldCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd29yZHM7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBzcGFjZSBzZXBhcmF0ZWQgbG93ZXIgY2FzZSAoYGZvbyBiYXJgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vQ2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBbcHJlZml4LCB3b3Jkcywgc3VmZml4XSA9IHNwbGl0UHJlZml4U3VmZml4KGlucHV0LCBvcHRpb25zKTtcbiAgcmV0dXJuIChcbiAgICBwcmVmaXggK1xuICAgIHdvcmRzLm1hcChsb3dlckZhY3Rvcnkob3B0aW9ucz8ubG9jYWxlKSkuam9pbihvcHRpb25zPy5kZWxpbWl0ZXIgPz8gXCIgXCIpICtcbiAgICBzdWZmaXhcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGNhbWVsIGNhc2UgKGBmb29CYXJgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogUGFzY2FsQ2FzZU9wdGlvbnMpIHtcbiAgY29uc3QgW3ByZWZpeCwgd29yZHMsIHN1ZmZpeF0gPSBzcGxpdFByZWZpeFN1ZmZpeChpbnB1dCwgb3B0aW9ucyk7XG4gIGNvbnN0IGxvd2VyID0gbG93ZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIGNvbnN0IHVwcGVyID0gdXBwZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IG9wdGlvbnM/Lm1lcmdlQW1iaWd1b3VzQ2hhcmFjdGVyc1xuICAgID8gY2FwaXRhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KGxvd2VyLCB1cHBlcilcbiAgICA6IHBhc2NhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KGxvd2VyLCB1cHBlcik7XG4gIHJldHVybiAoXG4gICAgcHJlZml4ICtcbiAgICB3b3Jkc1xuICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gbG93ZXIod29yZCk7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0od29yZCwgaW5kZXgpO1xuICAgICAgfSlcbiAgICAgIC5qb2luKG9wdGlvbnM/LmRlbGltaXRlciA/PyBcIlwiKSArXG4gICAgc3VmZml4XG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBwYXNjYWwgY2FzZSAoYEZvb0JhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzY2FsQ2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogUGFzY2FsQ2FzZU9wdGlvbnMpIHtcbiAgY29uc3QgW3ByZWZpeCwgd29yZHMsIHN1ZmZpeF0gPSBzcGxpdFByZWZpeFN1ZmZpeChpbnB1dCwgb3B0aW9ucyk7XG4gIGNvbnN0IGxvd2VyID0gbG93ZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIGNvbnN0IHVwcGVyID0gdXBwZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IG9wdGlvbnM/Lm1lcmdlQW1iaWd1b3VzQ2hhcmFjdGVyc1xuICAgID8gY2FwaXRhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KGxvd2VyLCB1cHBlcilcbiAgICA6IHBhc2NhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KGxvd2VyLCB1cHBlcik7XG4gIHJldHVybiBwcmVmaXggKyB3b3Jkcy5tYXAodHJhbnNmb3JtKS5qb2luKG9wdGlvbnM/LmRlbGltaXRlciA/PyBcIlwiKSArIHN1ZmZpeDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIHBhc2NhbCBzbmFrZSBjYXNlIChgRm9vX0JhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzY2FsU25ha2VDYXNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiBjYXBpdGFsQ2FzZShpbnB1dCwgeyBkZWxpbWl0ZXI6IFwiX1wiLCAuLi5vcHRpb25zIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgdG8gY2FwaXRhbCBjYXNlIChgRm9vIEJhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbENhc2UoaW5wdXQ6IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgY29uc3QgW3ByZWZpeCwgd29yZHMsIHN1ZmZpeF0gPSBzcGxpdFByZWZpeFN1ZmZpeChpbnB1dCwgb3B0aW9ucyk7XG4gIGNvbnN0IGxvd2VyID0gbG93ZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIGNvbnN0IHVwcGVyID0gdXBwZXJGYWN0b3J5KG9wdGlvbnM/LmxvY2FsZSk7XG4gIHJldHVybiAoXG4gICAgcHJlZml4ICtcbiAgICB3b3Jkc1xuICAgICAgLm1hcChjYXBpdGFsQ2FzZVRyYW5zZm9ybUZhY3RvcnkobG93ZXIsIHVwcGVyKSlcbiAgICAgIC5qb2luKG9wdGlvbnM/LmRlbGltaXRlciA/PyBcIiBcIikgK1xuICAgIHN1ZmZpeFxuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgdG8gY29uc3RhbnQgY2FzZSAoYEZPT19CQVJgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50Q2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBbcHJlZml4LCB3b3Jkcywgc3VmZml4XSA9IHNwbGl0UHJlZml4U3VmZml4KGlucHV0LCBvcHRpb25zKTtcbiAgcmV0dXJuIChcbiAgICBwcmVmaXggK1xuICAgIHdvcmRzLm1hcCh1cHBlckZhY3Rvcnkob3B0aW9ucz8ubG9jYWxlKSkuam9pbihvcHRpb25zPy5kZWxpbWl0ZXIgPz8gXCJfXCIpICtcbiAgICBzdWZmaXhcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGRvdCBjYXNlIChgZm9vLmJhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZG90Q2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucykge1xuICByZXR1cm4gbm9DYXNlKGlucHV0LCB7IGRlbGltaXRlcjogXCIuXCIsIC4uLm9wdGlvbnMgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBrZWJhYiBjYXNlIChgZm9vLWJhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJDYXNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiBub0Nhc2UoaW5wdXQsIHsgZGVsaW1pdGVyOiBcIi1cIiwgLi4ub3B0aW9ucyB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIHBhdGggY2FzZSAoYGZvby9iYXJgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhDYXNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiBub0Nhc2UoaW5wdXQsIHsgZGVsaW1pdGVyOiBcIi9cIiwgLi4ub3B0aW9ucyB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIHBhdGggY2FzZSAoYEZvbyBiYXJgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbnRlbmNlQ2FzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucykge1xuICBjb25zdCBbcHJlZml4LCB3b3Jkcywgc3VmZml4XSA9IHNwbGl0UHJlZml4U3VmZml4KGlucHV0LCBvcHRpb25zKTtcbiAgY29uc3QgbG93ZXIgPSBsb3dlckZhY3Rvcnkob3B0aW9ucz8ubG9jYWxlKTtcbiAgY29uc3QgdXBwZXIgPSB1cHBlckZhY3Rvcnkob3B0aW9ucz8ubG9jYWxlKTtcbiAgY29uc3QgdHJhbnNmb3JtID0gY2FwaXRhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KGxvd2VyLCB1cHBlcik7XG4gIHJldHVybiAoXG4gICAgcHJlZml4ICtcbiAgICB3b3Jkc1xuICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gdHJhbnNmb3JtKHdvcmQpO1xuICAgICAgICByZXR1cm4gbG93ZXIod29yZCk7XG4gICAgICB9KVxuICAgICAgLmpvaW4ob3B0aW9ucz8uZGVsaW1pdGVyID8/IFwiIFwiKSArXG4gICAgc3VmZml4XG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBzbmFrZSBjYXNlIChgZm9vX2JhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc25ha2VDYXNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiBub0Nhc2UoaW5wdXQsIHsgZGVsaW1pdGVyOiBcIl9cIiwgLi4ub3B0aW9ucyB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGhlYWRlciBjYXNlIChgRm9vLUJhcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5DYXNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gIHJldHVybiBjYXBpdGFsQ2FzZShpbnB1dCwgeyBkZWxpbWl0ZXI6IFwiLVwiLCAuLi5vcHRpb25zIH0pO1xufVxuXG5mdW5jdGlvbiBsb3dlckZhY3RvcnkobG9jYWxlOiBMb2NhbGUpOiAoaW5wdXQ6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIGxvY2FsZSA9PT0gZmFsc2VcbiAgICA/IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC50b0xvd2VyQ2FzZSgpXG4gICAgOiAoaW5wdXQ6IHN0cmluZykgPT4gaW5wdXQudG9Mb2NhbGVMb3dlckNhc2UobG9jYWxlKTtcbn1cblxuZnVuY3Rpb24gdXBwZXJGYWN0b3J5KGxvY2FsZTogTG9jYWxlKTogKGlucHV0OiBzdHJpbmcpID0+IHN0cmluZyB7XG4gIHJldHVybiBsb2NhbGUgPT09IGZhbHNlXG4gICAgPyAoaW5wdXQ6IHN0cmluZykgPT4gaW5wdXQudG9VcHBlckNhc2UoKVxuICAgIDogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0LnRvTG9jYWxlVXBwZXJDYXNlKGxvY2FsZSk7XG59XG5cbmZ1bmN0aW9uIGNhcGl0YWxDYXNlVHJhbnNmb3JtRmFjdG9yeShcbiAgbG93ZXI6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmcsXG4gIHVwcGVyOiAoaW5wdXQ6IHN0cmluZykgPT4gc3RyaW5nLFxuKSB7XG4gIHJldHVybiAod29yZDogc3RyaW5nKSA9PiBgJHt1cHBlcih3b3JkWzBdKX0ke2xvd2VyKHdvcmQuc2xpY2UoMSkpfWA7XG59XG5cbmZ1bmN0aW9uIHBhc2NhbENhc2VUcmFuc2Zvcm1GYWN0b3J5KFxuICBsb3dlcjogKGlucHV0OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgdXBwZXI6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuICh3b3JkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjaGFyMCA9IHdvcmRbMF07XG4gICAgY29uc3QgaW5pdGlhbCA9XG4gICAgICBpbmRleCA+IDAgJiYgY2hhcjAgPj0gXCIwXCIgJiYgY2hhcjAgPD0gXCI5XCIgPyBcIl9cIiArIGNoYXIwIDogdXBwZXIoY2hhcjApO1xuICAgIHJldHVybiBpbml0aWFsICsgbG93ZXIod29yZC5zbGljZSgxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0UHJlZml4U3VmZml4KFxuICBpbnB1dDogc3RyaW5nLFxuICBvcHRpb25zOiBPcHRpb25zID0ge30sXG4pOiBbc3RyaW5nLCBzdHJpbmdbXSwgc3RyaW5nXSB7XG4gIGNvbnN0IHNwbGl0Rm4gPVxuICAgIG9wdGlvbnMuc3BsaXQgPz8gKG9wdGlvbnMuc2VwYXJhdGVOdW1iZXJzID8gc3BsaXRTZXBhcmF0ZU51bWJlcnMgOiBzcGxpdCk7XG4gIGNvbnN0IHByZWZpeENoYXJhY3RlcnMgPVxuICAgIG9wdGlvbnMucHJlZml4Q2hhcmFjdGVycyA/PyBERUZBVUxUX1BSRUZJWF9TVUZGSVhfQ0hBUkFDVEVSUztcbiAgY29uc3Qgc3VmZml4Q2hhcmFjdGVycyA9XG4gICAgb3B0aW9ucy5zdWZmaXhDaGFyYWN0ZXJzID8/IERFRkFVTFRfUFJFRklYX1NVRkZJWF9DSEFSQUNURVJTO1xuICBsZXQgcHJlZml4SW5kZXggPSAwO1xuICBsZXQgc3VmZml4SW5kZXggPSBpbnB1dC5sZW5ndGg7XG5cbiAgd2hpbGUgKHByZWZpeEluZGV4IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hhciA9IGlucHV0LmNoYXJBdChwcmVmaXhJbmRleCk7XG4gICAgaWYgKCFwcmVmaXhDaGFyYWN0ZXJzLmluY2x1ZGVzKGNoYXIpKSBicmVhaztcbiAgICBwcmVmaXhJbmRleCsrO1xuICB9XG5cbiAgd2hpbGUgKHN1ZmZpeEluZGV4ID4gcHJlZml4SW5kZXgpIHtcbiAgICBjb25zdCBpbmRleCA9IHN1ZmZpeEluZGV4IC0gMTtcbiAgICBjb25zdCBjaGFyID0gaW5wdXQuY2hhckF0KGluZGV4KTtcbiAgICBpZiAoIXN1ZmZpeENoYXJhY3RlcnMuaW5jbHVkZXMoY2hhcikpIGJyZWFrO1xuICAgIHN1ZmZpeEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGlucHV0LnNsaWNlKDAsIHByZWZpeEluZGV4KSxcbiAgICBzcGxpdEZuKGlucHV0LnNsaWNlKHByZWZpeEluZGV4LCBzdWZmaXhJbmRleCkpLFxuICAgIGlucHV0LnNsaWNlKHN1ZmZpeEluZGV4KSxcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBjbGlBcmdzQWxpYXNlcyB9IGZyb20gJ0BjbGktY29uZmlnJztcbmltcG9ydCB7IGNhbWVsQ2FzZSB9IGZyb20gJ2NoYW5nZS1jYXNlJztcbmltcG9ydCB5YXJnc1BhcnNlciBmcm9tICd5YXJncy1wYXJzZXInO1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9DbGlBcmdzID0gKGFyZ3M6IFN0YWNrdGFwZUFyZ3MpID0+IHtcbiAgY29uc3QgcmVzID0gW107XG4gIGZvciAoY29uc3QgYXJnTmFtZSBpbiBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ05hbWVdID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChhcmdzW2FyZ05hbWVdID09PSB0cnVlKSB7XG4gICAgICAgIHJlcy5wdXNoKGAtLSR7YXJnTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnB1c2goYC0tJHthcmdOYW1lfWApO1xuICAgICAgcmVzLnB1c2goYXJnc1thcmdOYW1lXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdCBwYXJzZUFkZGl0aW9uYWxBcmdzID0gKGFkZGl0aW9uYWxBcmdzUmF3OiBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGFyc2VkQXJnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4gPSB7fTtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoaSA8IGFkZGl0aW9uYWxBcmdzUmF3Lmxlbmd0aCkge1xuICAgIGNvbnN0IGN1cnJlbnRBcmcgPSBhZGRpdGlvbmFsQXJnc1Jhd1tpXTtcbiAgICBpZiAoY3VycmVudEFyZy5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICBjb25zdCBrZXkgPSBjdXJyZW50QXJnLnN1YnN0cmluZygyKTtcbiAgICAgIGNvbnN0IG5leHRBcmcgPSBhZGRpdGlvbmFsQXJnc1Jhd1tpICsgMV07XG4gICAgICBpZiAoaSArIDEgPCBhZGRpdGlvbmFsQXJnc1Jhdy5sZW5ndGggJiYgIW5leHRBcmcuc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICBwYXJzZWRBcmdzW2tleV0gPSBuZXh0QXJnO1xuICAgICAgICBpICs9IDI7IC8vIENvbnN1bWVkIGtleSBhbmQgdmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZEFyZ3Nba2V5XSA9IHRydWU7IC8vIEJvb2xlYW4gZmxhZ1xuICAgICAgICBpICs9IDE7IC8vIENvbnN1bWVkIGtleSBvbmx5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGFyZ3VtZW50cyBhcmUgd2VsbC1mb3JtZWQsXG4gICAgICAvLyBidXQgd2UgY2FuIGNob29zZSB0byBpZ25vcmUsIGVycm9yLCBvciBoYW5kbGUgdGhlbSBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpZiBuZWVkZWQuXG4gICAgICAvLyBGb3Igbm93LCB3ZSdsbCBpZ25vcmUgYXJndW1lbnRzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCAnLS0nLlxuICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBJZ25vcmluZyBhZGRpdGlvbmFsIGFyZ3VtZW50IHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCAnLS0nOiAke2N1cnJlbnRBcmd9YCk7XG4gICAgICBpICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJzZWRBcmdzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENsaUlucHV0ID0gKCk6IHtcbiAgY29tbWFuZHM6IFN0YWNrdGFwZUNvbW1hbmRbXTtcbiAgb3B0aW9uczogU3RhY2t0YXBlQ2xpQXJncztcbiAgYWRkaXRpb25hbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcbn0gPT4ge1xuICBjb25zdCBhbGxBcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBkb3VibGVEYXNoSW5kZXggPSBhbGxBcmdzLmluZGV4T2YoJy0tJyk7XG5cbiAgbGV0IHByaW1hcnlBcmdzOiBzdHJpbmdbXTtcbiAgbGV0IGFkZGl0aW9uYWxBcmdzUmF3OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkb3VibGVEYXNoSW5kZXggPT09IC0xKSB7XG4gICAgcHJpbWFyeUFyZ3MgPSBhbGxBcmdzO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlBcmdzID0gYWxsQXJncy5zbGljZSgwLCBkb3VibGVEYXNoSW5kZXgpO1xuICAgIGFkZGl0aW9uYWxBcmdzUmF3ID0gYWxsQXJncy5zbGljZShkb3VibGVEYXNoSW5kZXggKyAxKTtcbiAgfVxuXG4gIGNvbnN0IHsgXzogcmF3Q29tbWFuZHMsIC4uLnJhd0FyZ3MgfSA9IHlhcmdzUGFyc2VyKFxuICAgIHByaW1hcnlBcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgICBpZiAoWyctaCcsICctLWgnLCAnLWhlbHAnXS5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHJldHVybiAnLS1oZWxwJztcbiAgICAgIH1cbiAgICAgIGlmIChhcmcgPT09ICctdmVyc2lvbicpIHtcbiAgICAgICAgcmV0dXJuICctLXZlcnNpb24nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IHJhd0NvbW1hbmRzIGFzIHN0cmluZ1tdO1xuICBjb25zdCBvcHRpb25zOiB7IFthcmdOYW1lOiBzdHJpbmddOiBhbnkgfSA9IHJhd0FyZ3M7XG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW29wdE5hbWUsIHZhbHVlXSkgPT4ge1xuICAgIGlmICghY2xpQXJnc0FsaWFzZXNbb3B0TmFtZV0pIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRBcmcgaW4gY2xpQXJnc0FsaWFzZXMpIHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSBjbGlBcmdzQWxpYXNlc1t2YWxpZEFyZ107XG4gICAgICAgIGlmIChhbGlhcyA9PT0gb3B0TmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zW2FsaWFzXTtcbiAgICAgICAgICBvcHRpb25zW3ZhbGlkQXJnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMuaGVscCkge1xuICAgIHJldHVybiB7IGNvbW1hbmRzOiBbJ2hlbHAnXSwgb3B0aW9uczogY29tbWFuZHMubGVuZ3RoID8geyBjb21tYW5kOiBjb21tYW5kc1swXSB9IDoge30gfTtcbiAgfVxuICBpZiAob3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudikge1xuICAgIHJldHVybiB7IGNvbW1hbmRzOiBbJ3ZlcnNpb24nXSwgb3B0aW9uczoge30gfTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWxBcmdzID0gcGFyc2VBZGRpdGlvbmFsQXJncyhhZGRpdGlvbmFsQXJnc1Jhdyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kczogY29tbWFuZHMgYXMgU3RhY2t0YXBlQ29tbWFuZFtdLFxuICAgIG9wdGlvbnMsXG4gICAgYWRkaXRpb25hbEFyZ3M6IE9iamVjdC5rZXlzKHBhcnNlZEFkZGl0aW9uYWxBcmdzKS5sZW5ndGggPiAwID8gcGFyc2VkQWRkaXRpb25hbEFyZ3MgOiB7fVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbW1hbmRGb3JDdXJyZW50RW52aXJvbm1lbnQgPSAoY29tbWFuZDogU3RhY2t0YXBlQ29tbWFuZCwgaW52b2tlZEZyb206IEludm9rZWRGcm9tKSA9PiB7XG4gIGlmIChpbnZva2VkRnJvbSA9PT0gJ2NsaScpIHtcbiAgICByZXR1cm4gY29tbWFuZDtcbiAgfVxuICByZXR1cm4gY2FtZWxDYXNlKGNvbW1hbmQucmVwbGFjZUFsbCgnOicsICctJykpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsdUNBQUFBLFVBQUE7QUFBQTtBQUVBLElBQUFBLFNBQVEsZUFBZSxTQUFVLElBQUk7QUFDbkMsYUFBTyxPQUFPLGVBQWUsWUFBYSxNQUFNO0FBQzlDLFlBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLE1BQU0sV0FBWSxJQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUEsYUFDL0Q7QUFDSCxpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsaUJBQUssS0FBSyxDQUFDLEtBQUssUUFBUyxPQUFPLE9BQVEsT0FBTyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7QUFDbEUsZUFBRyxNQUFNLE1BQU0sSUFBSTtBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixHQUFHLFFBQVEsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0I7QUFFQSxJQUFBQSxTQUFRLGNBQWMsU0FBVSxJQUFJO0FBQ2xDLGFBQU8sT0FBTyxlQUFlLFlBQWEsTUFBTTtBQUM5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O1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFDRTtRQUNGQyxVQUFVO01BTlo7TUFRQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO1FBQ1ZDLFFBQVE7TUFOVjtNQVFBO1FBQ0VMLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtRQUNWQyxRQUFRO01BTlY7TUFRQTtRQUNFTCxNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7UUFDVkMsUUFBUTtNQU5WO01BUUE7UUFDRUwsTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7TUFMWjtNQU9BO1FBQ0VKLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGFBQWE7UUFDYkMsVUFBVTtNQUxaO01BT0E7UUFDRUosTUFBTTtRQUNOQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsYUFBYTtRQUNiQyxVQUFVO01BTFo7TUFPQTtRQUNFSixNQUFNO1FBQ05DLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxhQUFhO1FBQ2JDLFVBQVU7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QU8sS0FBSztBQUFBLFlBQ3JCO0FBQ0EsZ0JBQUksUUFBUSxTQUFTLFVBQVU7QUFDN0IscUJBQU8sUUFBUSxRQUFRLElBQUk7QUFBQSxZQUM3QjtBQUNBLGdCQUFJLFFBQVEsU0FBUyxXQUFXO0FBQzlCLGtCQUFJQSxNQUFLLHdCQUF3QixlQUFlO0FBQzlDLHdCQUFRLEtBQUssSUFBSSxRQUFRLEtBQUssU0FBUyxLQUFLLFFBQVEsS0FBSyxPQUFPLEVBQUU7QUFBQSxjQUNwRTtBQUNBLG9CQUFNLFlBQVksV0FBV0EsTUFBSztBQUNsQyxrQkFBSSxXQUFXO0FBQ2IsMEJBQVUsT0FBTztBQUFBLGNBQ25CO0FBQUEsWUFDRjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsR0FuQ21CLGlCQW1DbEI7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixHQTNDYztBQTRDaEI7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAiZXJyMiIsICJlciIsICJlcjIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInF1ZXVlIiwgImZzIiwgImNyZWF0ZVJlYWRTdHJlYW0iLCAicmVhZEZpbGUiLCAicGF0aCIsICJvcHRpb25zIiwgImNiIiwgImRhdGEiLCAic3JjIiwgImRlc3QiLCAiZmxhZ3MiLCAiZ28kcmVhZGRpciIsICJtb2RlIiwgImV4cG9ydHMiLCAiYnVmZmVyIiwgImJ1ZmZlcnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgInN0YXQiLCAiZGVzdFN0YXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJzdGF0IiwgInJlcXVpcmVfY29weSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZW1vdmUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgInJlbW92ZSIsICJlbXB0eURpciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleGlzdHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWxzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlYWRGaWxlIiwgInJlcXVpcmVfanNvbmZpbGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJvdXRwdXRGaWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHB1dEZpbGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJyZW1vdmUiLCAic3RhdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9tb3ZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleSIsICJ0b2tlbiIsICJjIiwgImJ1ZmZlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ2YWx1ZSIsICJyZXF1aXJlX2xpYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJNYXAiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTWFwIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldCIsICJwYXRoIiwgInJlcXVpcmVfdXRpbHMiLCAiZXhwb3J0cyIsICJub2RlIiwgInJlcXVpcmVfc3RyaW5naWZ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3BhcnNlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImluZGV4IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAicmVxdWlyZV91dGlscyIsICJleHBvcnRzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9wYXJzZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvcHRzIiwgInZhbHVlIiwgInJlc3QiLCAic291cmNlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAic3RhdGUiLCAicmVxdWlyZV9waWNvbWF0Y2giLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWljcm9tYXRjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImRpciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicmVxdWlyZV9mcyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgInBhdGgiLCAibWljcm9tYXRjaCIsICJwYXR0ZXJuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJyZXF1aXJlX3V0aWxzIiwgImV4cG9ydHMiLCAicGF0aCIsICJleHBvcnRzIiwgInJlcXVpcmVfYXN5bmMiLCAiZXhwb3J0cyIsICJwYXRoIiwgInN0YXQiLCAiZXhwb3J0cyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9mcyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJzdGF0IiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicXVldWVNaWNyb3Rhc2siLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJyZXF1aXJlX2ZzIiwgImV4cG9ydHMiLCAicmVxdWlyZV91dGlscyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicmVxdWlyZV9hc3luYyIsICJleHBvcnRzIiwgInBhdGgiLCAicmVxdWlyZV9zeW5jIiwgImV4cG9ydHMiLCAicmVxdWlyZV9mcyIsICJleHBvcnRzIiwgInJlcXVpcmVfc2V0dGluZ3MiLCAiZXhwb3J0cyIsICJwYXRoIiwgInJlcXVpcmVfb3V0IiwgImV4cG9ydHMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJyZXF1aXJlX2NvbW1vbiIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicmVxdWlyZV9hc3luYyIsICJleHBvcnRzIiwgInJlcXVpcmVfYXN5bmMiLCAiZXhwb3J0cyIsICJyZXF1aXJlX3N0cmVhbSIsICJleHBvcnRzIiwgInJlcXVpcmVfc3luYyIsICJleHBvcnRzIiwgInJlcXVpcmVfc3luYyIsICJleHBvcnRzIiwgInJlcXVpcmVfc2V0dGluZ3MiLCAiZXhwb3J0cyIsICJwYXRoIiwgInJlcXVpcmVfb3V0IiwgImV4cG9ydHMiLCAicmVxdWlyZV9yZWFkZXIiLCAiZXhwb3J0cyIsICJwYXRoIiwgInJlcXVpcmVfc3RyZWFtIiwgImV4cG9ydHMiLCAicmVxdWlyZV9hc3luYyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJyZXF1aXJlX2VudHJ5IiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJwYXRoIiwgInJlcXVpcmVfYXN5bmMiLCAiZXhwb3J0cyIsICJyZXF1aXJlX3N0cmVhbSIsICJleHBvcnRzIiwgInJlcXVpcmVfc3luYyIsICJleHBvcnRzIiwgInJlcXVpcmVfc3luYyIsICJleHBvcnRzIiwgInJlcXVpcmVfc2V0dGluZ3MiLCAiZXhwb3J0cyIsICJyZXF1aXJlX291dCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJGYXN0R2xvYiIsICJwb3NpeCIsICJlc2NhcGVQYXRoIiwgImNvbnZlcnRQYXRoVG9QYXR0ZXJuIiwgIndpbjMyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNob3VsZENhbGxOZXh0SXRlcmF0b3IiLCAiaXRlcmF0b3JDYWxsYmFjayIsICJwcm9jZXNzSXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlbmNvZGUiLCAicmVtb3ZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNhbWVsQ2FzZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjYW1lbENhc2UiLCAicGF0aCIsICJrZXkiLCAiYXJncyIsICJ2YWx1ZSIsICJhcmd2IiwgImFsaWFzZXMiLCAiZGVmYXVsdHMiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgInN0YXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJzdGF0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNXaW5kb3dzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfcGFyc2UiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm9uZXRpbWUiLCAiU0lHTkFMUyIsICJuYW1lIiwgIm51bWJlciIsICJhY3Rpb24iLCAiZGVzY3JpcHRpb24iLCAic3RhbmRhcmQiLCAiZm9yY2VkIiwgImV4cG9ydHMiLCAiZ2V0UmVhbHRpbWVTaWduYWxzIiwgImxlbmd0aCIsICJTSUdSVE1BWCIsICJTSUdSVE1JTiIsICJBcnJheSIsICJmcm9tIiwgImdldFJlYWx0aW1lU2lnbmFsIiwgImV4cG9ydHMiLCAidmFsdWUiLCAiaW5kZXgiLCAibmFtZSIsICJudW1iZXIiLCAiYWN0aW9uIiwgImRlc2NyaXB0aW9uIiwgInN0YW5kYXJkIiwgImdldFNpZ25hbHMiLCAicmVhbHRpbWVTaWduYWxzIiwgInNpZ25hbHMiLCAiU0lHTkFMUyIsICJtYXAiLCAibm9ybWFsaXplU2lnbmFsIiwgImV4cG9ydHMiLCAibmFtZSIsICJudW1iZXIiLCAiZGVmYXVsdE51bWJlciIsICJkZXNjcmlwdGlvbiIsICJhY3Rpb24iLCAiZm9yY2VkIiwgInN0YW5kYXJkIiwgImNvbnN0YW50U2lnbmFsIiwgImNvbnN0YW50cyIsICJzdXBwb3J0ZWQiLCAidW5kZWZpbmVkIiwgImdldFNpZ25hbHNCeU5hbWUiLCAic2lnbmFscyIsICJyZWR1Y2UiLCAiZ2V0U2lnbmFsQnlOYW1lIiwgInNpZ25hbEJ5TmFtZU1lbW8iLCAibmFtZSIsICJudW1iZXIiLCAiZGVzY3JpcHRpb24iLCAic3VwcG9ydGVkIiwgImFjdGlvbiIsICJmb3JjZWQiLCAic3RhbmRhcmQiLCAic2lnbmFsc0J5TmFtZSIsICJleHBvcnRzIiwgImdldFNpZ25hbHNCeU51bWJlciIsICJsZW5ndGgiLCAiU0lHUlRNQVgiLCAic2lnbmFsc0EiLCAiQXJyYXkiLCAiZnJvbSIsICJ2YWx1ZSIsICJnZXRTaWduYWxCeU51bWJlciIsICJPYmplY3QiLCAiYXNzaWduIiwgInNpZ25hbCIsICJmaW5kU2lnbmFsQnlOdW1iZXIiLCAidW5kZWZpbmVkIiwgImZpbmQiLCAiY29uc3RhbnRzIiwgInNpZ25hbEEiLCAic2lnbmFsc0J5TnVtYmVyIiwgInJlcXVpcmVfZXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zaWduYWxzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInByb2Nlc3MiLCAicmVtb3ZlIiwgInVubG9hZCIsICJlbWl0IiwgImxvYWQiLCAicHJvY2Vzc1JlYWxseUV4aXQiLCAicHJvY2Vzc0VtaXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic3RyZWFtIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlbW92ZSIsICJyZXF1aXJlX3N0cmVhbSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4ZWNhIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIlBRdWV1ZSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInBhdGgiLCAiZnNFeHRyYSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnNFeHRyYSIsICJQUXVldWUiLCAic2VsZiIsICJleGVjYSJdCn0K
|