@willbooster/agent-skills 1.20.2 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -3
- package/package.json +4 -8
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as a}from"node:fs";import{mkdir as i,readFile as o,stat as u,readdir as c}from"node:fs/promises";import{dirname as s,join as l,relative as f,sep as p}from"node:path";import{minimatch as d,braceExpand as h}from"minimatch";import{stdin as m,stderr as v}from"node:process";import{setTimeout as y}from"node:timers/promises";import{stripVTControlCharacters as w}from"node:util";import{stringify as g}from"yaml";import{fileURLToPath as b}from"node:url";function k(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function x(n){var e,t,r,a=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new S(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function S(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return S=function(n){this.s=n,this.n=n.next},S.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new S(n)}function j(n,e,t,r,a,i,o){try{var u=n[i](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,a)}function I(n){return function(){var e=this,t=arguments;return new Promise(function(r,a){var i=n.apply(e,t);function o(n){j(i,r,a,o,u,"next",n)}function u(n){j(i,r,a,o,u,"throw",n)}o(void 0)})}}function O(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=D(n))||e&&n&&"number"==typeof n.length){t&&(n=t);var r=0,a=function(){};return{s:a,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,i=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw i}}}}function
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as a}from"node:fs";import{mkdir as i,readFile as o,stat as u,readdir as c}from"node:fs/promises";import{dirname as s,join as l,relative as f,sep as p}from"node:path";import{minimatch as d,braceExpand as h}from"minimatch";import{stdin as m,stderr as v}from"node:process";import{setTimeout as y}from"node:timers/promises";import{stripVTControlCharacters as w}from"node:util";import{stringify as g}from"yaml";import{fileURLToPath as b}from"node:url";function k(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function x(n){var e,t,r,a=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new S(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function S(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return S=function(n){this.s=n,this.n=n.next},S.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new S(n)}function j(n,e,t,r,a,i,o){try{var u=n[i](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,a)}function I(n){return function(){var e=this,t=arguments;return new Promise(function(r,a){var i=n.apply(e,t);function o(n){j(i,r,a,o,u,"next",n)}function u(n){j(i,r,a,o,u,"throw",n)}o(void 0)})}}function O(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=D(n))||e&&n&&"number"==typeof n.length){t&&(n=t);var r=0,a=function(){};return{s:a,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,i=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw i}}}}function R(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function C(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function A(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?C(Object(t),!0).forEach(function(e){R(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):C(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function $(){
|
|
3
3
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
-
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return $(s,"_invoke",function(t,r,a){var i,u,c,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,u=0))}if(a||t>1)return o;throw f=!0,r}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):($(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,$(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,$(f,"constructor",s),$(s,"constructor",c),c.displayName="GeneratorFunction",$(s,a,"GeneratorFunction"),$(f),$(f,a,"Generator"),$(f,r,function(){return this}),$(f,"toString",function(){return"[object Generator]"}),(P=function(){return{w:i,m:p}})()}function $(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}$=function(n,e,t,r){function i(e,t){$(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},$(n,e,t,r)}function q(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function E(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,a,i,o,u=[],c=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=i.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(n,e)||D(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(n){return function(n){if(Array.isArray(n))return k(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||D(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(n){"@babel/helpers - typeof";return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},T(n)}function D(n,e){if(n){if("string"==typeof n)return k(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?k(n,e):void 0}}var L=["SIGINT","SIGTERM","SIGHUP"],_=new Set,G=!1;function M(n,e){return U.apply(this,arguments)}function U(){return U=I(P().m(function n(e,r){var a,i,o,u,c,s,l,f,p,d,h;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),i=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=H(i,r.timeoutMs),u=Q(r.waitMessage,r.waitIntervalSeconds),n.n=1,Y(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([J(i.stdout,function(n){return c.write(n)}),J(i.stderr,function(n){return c.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=E(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(F("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),U.apply(this,arguments)}function F(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function H(n,e){void 0===e&&(e=36e5);var t,r=!1;_.add(n),function(){if(G)return;G=!0;var n,e=O(L);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=O(_);try{for(t.s();!(n=t.n()).done;){W(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,W(n,"SIGTERM"),(t=setTimeout(function(){return W(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),_.delete(n)},timedOut:function(){return r},timeoutMs:e}}function W(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function J(n,e){return B.apply(this,arguments)}function B(){return(B=I(P().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,c=x(e);case 3:return n.n=4,c.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!i||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Q(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,a=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(a),t("\n")}}function Y(n){return z.apply(this,arguments)}function z(){return z=I(P().m(function n(e){var t,r,o;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=I(P().m(function n(){return P().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,i(s(e),{recursive:!0});case 3:return(r=a(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=I(P().m(function n(){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,o=n.v,t(o),n.a(2,{write:function(){},close:function(){var n=I(P().m(function n(){return P().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),z.apply(this,arguments)}var K="There is no concern.",Z=["codex","claude","gemini"],V=new RegExp("\\b".concat("there is no concern","\\b"),"i"),X={allAgentsLabel:"agents"};function nn(n,e){return en.apply(this,arguments)}function en(){return(en=I(P().m(function n(e,t){var r,a,i,o;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=X),n.n=1,e;case 1:return r=n.v,a=Q(un(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(Z.map(I(P().m(function n(e){var a,i,o,u,c;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(e,r,{waitMessage:!1});case 1:return u=n.v,c=u.trim(),n.a(2,null!=(a=null==(i=(o=t).mapOutput)?void 0:i.call(o,e,c))?a:"## ".concat(on(e),"\n\n").concat(c))}},n)}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.length>0?o.join("\n\n"):K);case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function tn(n,e,t){return rn.apply(this,arguments)}function rn(){return(rn=I(P().m(function n(e,t,r){var a,i,o,u;return P().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=M,o=an,u=e,n.n=1,t;case 1:return n.a(2,i(o(u,n.v),{logFilePath:cn(e),waitMessage:null!=(a=r.waitMessage)?a:un(on(e))}))}},n)}))).apply(this,arguments)}function an(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function on(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function un(n){return"Waiting for ".concat(n," to finish.")}function cn(n){return"logs/".concat(n,"-").concat((e=new Date,t=E([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(sn),5),r=t[0],a=t[1],i=t[2],o=t[3],u=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(u)),".log");var e,t,r,a,i,o,u}function sn(n){return n.toString().padStart(2,"0")}var ln=["dependencies","devDependencies","peerDependencies","optionalDependencies"],fn=new Set([".git","node_modules"]),pn=["bun","update","--latest"];function dn(n){return hn.apply(this,arguments)}function hn(){return(hn=I(P().m(function n(e){var t,r,a,i,o;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,mn(e);case 1:return t=n.v,n.n=2,Ln(e,t);case 2:return n.n=3,Fn(e,"root");case 3:r=O(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,Fn(l(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function mn(n){return vn.apply(this,arguments)}function vn(){return(vn=I(P().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=yn,n.n=1,Gn(e);case 1:return t=h(n.v),n.n=2,wn(e,t);case 2:r=n.v,a=new Set,i=new Set,o=O(t),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=7;break}return c=u.value,s=c.startsWith("!"),n.n=5,$n(e,r,s?c.slice(1):c);case 5:l=n.v,f=O(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,N(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function yn(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function wn(n,e){return gn.apply(this,arguments)}function gn(){return(gn=I(P().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d,h;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=bn(t),i=O(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return u=o.value,c=u.maxDepth,s=u.root,n.n=3,On(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=O,n.n=5,Cn(e,s,c);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,N(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function bn(n){var e,t=new Map,r=O(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=kn(a);i<o.length;i++){var u=o[i];t.set(u.root,t.has(u.root)?xn(t.get(u.root),u.maxDepth):u.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return N(t.entries()).map(function(n){var e=E(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return N(e.entries()).some(function(e){var t,r,a=E(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function kn(n){return h(En(n)).map(function(n){return{maxDepth:In(n),root:Sn(n)}})}function xn(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function Sn(n){var e,t=[],r=O(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||jn(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function jn(n){return/[*?[\]{}()!+]/.test(n)}function In(n){if(!n.split("/").includes("**"))return Pn(n)}function On(n,e){return An.apply(this,arguments)}function An(){return(An=I(P().m(function n(e,t){var r;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Cn(n,e,t){return Rn.apply(this,arguments)}function Rn(){return(Rn=I(P().m(function n(e,t,r){var a,i,o,u,s,f,d,h,m,v;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&Pn(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,c(l(e,t),{withFileTypes:!0});case 2:i=n.v,o=O(i),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=9;break}if((s=u.value).isDirectory()&&!fn.has(s.name)){n.n=5;break}return n.a(3,8);case 5:if(f=l(t,s.name).split(p).join("/"),!(void 0!==r&&Pn(f)>r)){n.n=6;break}return n.a(3,8);case 6:return d=a.push,h=a,m=N,n.n=7,Cn(e,f,r);case 7:d.apply.call(d,h,m(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,v=n.v,o.e(v);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function Pn(n){return"."===n?0:n.split("/").length}function $n(n,e,t){return qn.apply(this,arguments)}function qn(){return(qn=I(P().m(function n(e,t,r){var a,i,o,u,c,s,l;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:a=Nn(En(r)),i=[],o=O(t),n.p=1,o.s();case 2:if((u=o.n()).done){n.n=6;break}if(c=u.value,!(s=a(c))){n.n=4;break}return n.n=3,Tn(e,c);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(c);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function En(n){var e=function(n){var e=n.split(p).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function Nn(n){return function(e){return d(e,n,{dot:!0})}}function Tn(n,e){return Dn.apply(this,arguments)}function Dn(){return(Dn=I(P().m(function n(e,t){var r;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Ln(n,e){return _n.apply(this,arguments)}function _n(){return(_n=I(P().m(function n(e,t){var r,a,i,o,u,c,s,f;return P().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(N(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,Gn("."===o?e:l(e,o));case 2:u=n.v,c=O(Un(u));try{for(c.s();!(s=c.n()).done;)f=s.value,r.push("".concat("."===o?"root":o,": ").concat(f))}catch(n){c.e(n)}finally{c.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Gn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=I(P().m(function n(e){var t,r,a;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=l(e,"package.json"),n.p=1,r=JSON,n.n=2,o(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function Un(n){var e,t=[],r=O(ln);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var u=E(o[i],2),c=u[0];u[1].startsWith("catalog:")&&t.push(c)}}}catch(n){r.e(n)}finally{r.f()}return t}function Fn(n,e){return Hn.apply(this,arguments)}function Hn(){return(Hn=I(P().m(function n(e,t){return P().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,Wn(pn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Wn(n,e){return Jn.apply(this,arguments)}function Jn(){return(Jn=I(P().m(function n(e,r){var a;return P().w(function(n){for(;;)switch(n.n){case 0:return a=t(e[0],e.slice(1),{cwd:r,stdio:"inherit"}),n.n=1,new Promise(function(n,t){a.once("error",t),a.once("close",function(a){0!==a?t(new Error("Command failed in ".concat(f(process.cwd(),r)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var Bn={blockQuote:"literal",lineWidth:0};function Qn(n){v.write("".concat(n,"\n"))}function Yn(n,e){void 0===e&&(e=1),v.write("".concat(n,"\n")),process.exit(e)}function zn(){return Kn.apply(this,arguments)}function Kn(){return(Kn=I(P().m(function n(){return P().w(function(n){for(;;)switch(n.n){case 0:if(!m.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,J(m);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Zn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=I(P().m(function n(e){var t;return P().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,zn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:Yn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Xn(n,e){return ne.apply(this,arguments)}function ne(){return ne=I(P().m(function n(e,r){var a,i,o,u,c;return P().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),i=null!=(a=r.allowedExitCodes)?a:[],o=P().m(function n(){var a,o,u,s,l,f,p,d,h,m,v;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=H(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([J(o.stdout),J(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=E(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}u=F(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:he(e,m,v)&&c<3?s=!0:u=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return Qn("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,y(1e3*c);case 7:return n.a(2,0);case 8:u&&Yn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(q(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:Yn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),ne.apply(this,arguments)}function ee(n,e){return te.apply(this,arguments)}function te(){return(te=I(P().m(function n(e,t){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn(["gh"].concat(N(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function re(n,e,t){return ae.apply(this,arguments)}function ae(){return(ae=I(P().m(function n(e,t,r){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn(["gh"].concat(N(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ie(){return oe.apply(this,arguments)}function oe(){return(oe=I(P().m(function n(){var e,t,r,a,i,o;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=E(r,2),i=a[0],o=a[1],i&&o||Yn("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function ue(){return ce.apply(this,arguments)}function ce(){return(ce=I(P().m(function n(){var e;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function se(n,e){return le.apply(this,arguments)}function le(){return(le=I(P().m(function n(e,t){var r,a,i,o,u,c,s,l,f;return P().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=E(i[a],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,ee(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),Yn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function fe(n){return g(n,Bn)}function pe(n){return structuredClone(n)}function de(n,e){var t,a,i,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(a=u.status)?a:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(o=u.stderr)?o:"")}}function he(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var me=/\btest\b/i,ve=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],ye=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,we=0===de(["rtk","--version"]).exitCode,ge=function(){};function be(n){return ke.apply(this,arguments)}function ke(){return(ke=I(P().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,y;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,re(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((y=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw y;case 5:l={},f=O(c);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function xe(n,e,t,r){return Se.apply(this,arguments)}function Se(){return(Se=I(P().m(function n(e,t,r,a){var i,o,u,c,s,l,f,p;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Ee),void 0===r&&(r=be),void 0===a&&(a=function(n){return v.write(n)}),i=0,n.n=1,r(e);case 1:o=n.v,u=ge,n.p=2;case 3:if(c=je(o),s=Ie(c),l=E(s,2),f=l[0],p=l[1],!(Object.keys(f).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[o,i,!1]);case 4:if(!(i>=100)){n.n=5;break}return n.a(2,[o,i,!0]);case 5:return 1===(i+=1)&&(u=Q("Waiting for test-related workflows to finish.",36,a)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function je(n){var e,t={},r=O(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=E(n,2),t=e[0],r=function(n){var e,t=new Map,r=O(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=Re(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var u,c=[],s=O(t.values());try{for(s.s();!(u=s.n()).done;){var l=u.value;0!==c.length?Le(l)>Le(c)&&(c=l):c=l}}catch(n){s.e(n)}finally{s.f()}return c}(e[1]),a=r[0];a||Yn("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,u=r;o<u.length;o++){var c=u[o];$e(c)>$e(i)&&(i=c)}return[t,{classification:Pe(r),check:i,checks:r}]}))}function Ie(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=E(a[r],2),o=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return qe(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Oe(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Ae(n){return Ce.apply(this,arguments)}function Ce(){return(Ce=I(P().m(function n(e){var t,r;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,re(["run","view",e,"--json",ve.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return v.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Re(n){var e=Oe(n);return e?"run:".concat(e):"unknown_run"}function Pe(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function $e(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function qe(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&me.test(n)})}function Ee(n){return Ne.apply(this,arguments)}function Ne(){return(Ne=I(P().m(function n(e){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,y(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Te(){return De.apply(this,arguments)}function De(){return(De=I(P().m(function n(){var e,t,r,a,i,o,u,c,s,l,f,p;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue();case 1:return e=n.v,Qn("Fetching latest CI results..."),n.n=2,xe(e);case 2:if(t=n.v,r=E(t,3),a=r[0],i=r[1],o=r[2],u=je(a),c=Ie(u),s=E(c,2),l=s[0],f=s[1],p={summary:pe(a.summary),waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(I(P().m(function n(e){var t,r,a,i,o,u,c;return P().w(function(n){for(;;)switch(n.n){case 0:return t=E(e,2),r=t[0],a=t[1],n.n=1,_e(r,a);case 1:return i=n.v,o=R,u=R({},i),c=Fe,n.n=2,Me(a.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:fe(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=E(n,2);return _e(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:fe(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Le(n){var e,t="",r=O(n);try{for(r.s();!(e=r.n()).done;){var a=$e(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function _e(n,e){return Ge.apply(this,arguments)}function Ge(){return(Ge=I(P().m(function n(e,t){var r,a,i,o;return P().w(function(n){for(;;)switch(n.n){case 0:return a=Oe(t.check),n.n=1,Ae(a);case 1:return i=n.v,o=Be(i,Je(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Je(t.check.name),job_url:Je(null==o?void 0:o.url),failed_step:Qe(o),run_id:a,run_url:null!=(r=Je(null==i?void 0:i.url))?r:Je(t.check.link),branch:Je(null==i?void 0:i.headBranch),sha:Je(null==i?void 0:i.headSha),conclusion:Je(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function Me(n){return Ue.apply(this,arguments)}function Ue(){return(Ue=I(P().m(function n(e){var t;return P().w(function(n){for(;;)switch(n.n){case 0:if(t=Oe(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,re(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Fe(n){return{failed_log:He(n)}}function He(n){var e=We(w(n));if(!we)return e;var t=de(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?We(t.output):e}function We(n){return n.split("\n").map(function(n){return n.replace(ye,"")}).join("\n").trim()}function Je(n){return"string"==typeof n&&n.length>0?n:void 0}function Be(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Qe(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function Ye(){return ze.apply(this,arguments)}function ze(){return(ze=I(P().m(function n(){var e,t;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ve();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Ke();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Ke(){return Ze.apply(this,arguments)}function Ze(){return(Ze=I(P().m(function n(){var e;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,et(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function Ve(){return Xe.apply(this,arguments)}function Xe(){return(Xe=I(P().m(function n(){var e,t,r;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,M(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!nt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function nt(n){return/no pull requests? found for branch/i.test(String(n))}function et(n,e){if(n.length>0)return n;throw new Error(e)}function tt(n){return pt(n,"issue")}function rt(n){return pt(n,"pull request")}function at(n){return it.apply(this,arguments)}function it(){return(it=I(P().m(function n(e){var t,r,a,i,o;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,dt(a,i,tt(e));case 2:return o=n.v,Qn("Fetched issue #".concat(o.number," messages.")),n.a(2,fe({issue:o}))}},n)}))).apply(this,arguments)}function ot(n){return ut.apply(this,arguments)}function ut(){return(ut=I(P().m(function n(e){var t,r,a;return P().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,ue();case 1:a=n.v,n.n=3;break;case 2:a=rt(e);case 3:return t=a,n.n=4,lt(t);case 4:return r=n.v,Qn("Fetched pull request #".concat(r.number," messages.")),n.a(2,fe({pull_request:r}))}},n)}))).apply(this,arguments)}function ct(){return st.apply(this,arguments)}function st(){return(st=I(P().m(function n(){var e,t,r;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,re(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!nt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,lt(t);case 3:return r=n.v,n.a(2,fe({pull_request:r}))}},n)}))).apply(this,arguments)}function lt(n){return ft.apply(this,arguments)}function ft(){return(ft=I(P().m(function n(e){var t,r,a,i;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,mt(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pt(n,e){var t=String(n).trim();if(0===t.length&&Yn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];Yn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function dt(n,e,t){return ht.apply(this,arguments)}function ht(){return(ht=I(P().m(function n(e,t,r){var a,i;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,jt({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return a=n.v,n.n=2,xt({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ot});case 2:return i=n.v,n.a(2,R(R({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function mt(n,e,t){return vt.apply(this,arguments)}function vt(){return(vt=I(P().m(function n(e,t,r){var a,i,o,u,c;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,jt({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return a=n.v,n.n=2,Promise.all([wt(e,t,r),bt(e,t,r)]);case 2:return i=n.v,o=E(i,2),u=o[0],c=o[1],n.a(2,R(R({},a),{},{messages:[].concat(N(u),N(c)).toSorted(yt)}))}},n)}))).apply(this,arguments)}function yt(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function wt(n,e,t){return gt.apply(this,arguments)}function gt(){return(gt=I(P().m(function n(e,t,r){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,xt({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ot});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function bt(n,e,t){return kt.apply(this,arguments)}function kt(){return(kt=I(P().m(function n(e,t,r){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,xt({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:At});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function xt(n){return St.apply(this,arguments)}function St(){return(St=I(P().m(function n(e){var t,r,a,i,o;return P().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,se(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,N(i.nodes.map(e.mapNode).filter(Ct))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function jt(n){return It.apply(this,arguments)}function It(){return(It=I(P().m(function n(e){var t,r,a,i,o;return P().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,se(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||Yn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function Ot(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function At(n){var e,t,r,a,i;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function Ct(n){return"string"==typeof n.body&&n.body.length>0}function Rt(n){return Pt.apply(this,arguments)}function Pt(){return(Pt=I(P().m(function n(e){var t,r,a,i,o,u,c,s,l,f;return P().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,Xn(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,ee(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return u=n.v,c=u.trim(),o||Yn("Error: could not determine current branch"),c||Yn("Error: could not determine default branch"),o===c&&Yn("Error: current branch is the default branch (".concat(c,")")),s=["pr","create","--base",c,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),Qn("Creating pull request..."),n.n=3,ee(s,r);case 3:return l=fe,f=JSON,n.n=4,ee(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function $t(n){return qt.apply(this,arguments)}function qt(){return(qt=I(P().m(function n(e){var t,r,a;return P().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,ue();case 1:return a=n.v,Qn("Updating pull request #".concat(a,"...")),n.n=2,Et(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Et(n,e,t){return Nt.apply(this,arguments)}function Nt(){return(Nt=I(P().m(function n(e,t,r){var a,i;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["pr","edit",e].concat(N(t)),r);case 1:return a=fe,i=JSON,n.n=2,ee(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}var Tt=["author"];function Dt(){return Lt.apply(this,arguments)}function Lt(){return(Lt=I(P().m(function n(){var e,t,r,a,i,o,u,c;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn("Error: JSON input is required on stdin");case 1:for(e=n.v,t=zt(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=E(i[a],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function _t(n,e,t,r,a){return Gt.apply(this,arguments)}function Gt(){return(Gt=I(P().m(function n(e,t,r,a,i){var o,u,c,s,l,f,p,d,h;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,se(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(u=s.data)||null==(u=u.repository)||null==(u=u.pullRequest)?void 0:u.reviewThreads)||Yn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=O(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(c=l.pageInfo.endCursor)?c:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function Mt(n,e,t){return Ut.apply(this,arguments)}function Ut(){return(Ut=I(P().m(function n(e,t,r){var a;return P().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,_t("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Ft(n,e,t){return Ht.apply(this,arguments)}function Ht(){return(Ht=I(P().m(function n(e,t,r){var a;return P().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,_t("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,I(P().m(function n(e){var t,r,i,o,u,c,s,l;return P().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(Yt),i=e.comments.pageInfo,o=null!=(t=i.endCursor)?t:void 0;case 2:if(!i.hasNextPage){n.n=4;break}return n.n=3,se("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:s=n.v,(l=null==(u=s.data)||null==(u=u.node)?void 0:u.comments)||Yn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,N(l.nodes.map(Yt))),i=l.pageInfo,o=null!=(c=i.endCursor)?c:void 0,n.n=2;break;case 4:a.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 5:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Wt(){return Jt.apply(this,arguments)}function Jt(){return(Jt=I(P().m(function n(){var e,t,r,a,i,o,u;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return e=n.v,t=E(e,2),r=t[0],a=t[1],n.n=2,ue();case 2:return i=n.v,Qn("Fetching unresolved review threads..."),o=fe,n.n=3,Ft(r,a,i);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Bt(n){return Qt.apply(this,arguments)}function Qt(){return(Qt=I(P().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,y,w,g,b,k;return P().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,ue();case 2:return o=n.v,g=Set,n.n=3,Mt(a,i,o);case 3:b=n.v,u=new g(b),Qn("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=O(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=E(f.value,2),h=d[0],m=E(d[1],2),v=m[0],y=m[1],Qn("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,se("\n mutation ($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $threadId, body: $body }) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: { threadId: $threadId }) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:y});case 7:w=n.v,null!=(p=w.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):Qn("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return Qn("Done."),n.a(2,fe({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Yt(n){var e,t=n.author;return R(R({},function(n,e){if(null==n)return{};var t,r,a=function(n,e){if(null==n)return{};var t={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;t[r]=n[r]}return t}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(r=0;r<i.length;r++)t=i[r],-1===e.indexOf(t)&&{}.propertyIsEnumerable.call(n,t)&&(a[t]=n[t])}return a}(n,Tt)),{},{author:"string"==typeof t?t:null!=(e=null==t?void 0:t.login)?e:void 0})}function zt(n){try{var e=JSON.parse(n);return function(n){if("object"!==T(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==T(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Yn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Yn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Kt(n){return Zt.apply(this,arguments)}function Zt(){return(Zt=I(P().m(function n(e){var t;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,at(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function Vt(n){return"git merge-base ".concat(Xt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(Xt(n)," HEAD")}function Xt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function nr(){return er.apply(this,arguments)}function er(){return(er=I(P().m(function n(){var e,t,r;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ye();case 1:return e=n.v,t=Vt(e),n.n=2,ct();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Clean up any temporary files created during the experiment.\n4. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(K,"`\n\n").concat(tr(r),"\n").trim())}},n)}))).apply(this,arguments)}function tr(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function rr(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function ar(){return ir.apply(this,arguments)}function ir(){return(ir=I(P().m(function n(){var e,t,r;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ye();case 1:return e=n.v,t=Vt(e),n.n=2,ct();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"branch",' against its base branch using `git diff "$(').concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}function or(){return ur.apply(this,arguments)}function ur(){return(ur=I(P().m(function n(){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(["bunx","skills@latest","add",b(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var cr=new n;function sr(n){var t=cr.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(I(P().m(function e(){var t,r,a,i,o,u,c,s,l,f=arguments;return P().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=E(r,2),o=i[0],u=i[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function lr(n,e,t){var r=cr.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(I(P().m(function n(e){var r;return P().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(I(P().m(function n(){var e;return P().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}cr.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),cr.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(I(P().m(function n(){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,or();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),cr.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action(I(P().m(function n(){return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn();case 1:return n.a(2)}},n)}))),sr({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?nn(nr(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return V.test(n)}(e))return"## ".concat(on(n),"\n\n").concat(e)}}):tn(n,nr())}}),lr("review-codex","Run Codex review against the current branch",function(){return tn("codex",nr())}),lr("review-claude","Run Claude Code review against the current branch",function(){return tn("claude",nr())}),lr("review-gemini","Run Gemini CLI review against the current branch",function(){return tn("gemini",nr())}),sr({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?nn(Kt(tt(e)),{allAgentsLabel:"planning agents"}):tn(n,Kt(tt(e)))}}),lr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("codex",Kt(tt(n)))}}),lr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("claude",Kt(tt(n)))}}),lr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("gemini",Kt(tt(n)))}}),cr.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(I(P().m(function n(e,t,r,a){var i;return P().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,tn(a.agent,rr(e,t,r));case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),sr({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return tn(n,ar())}}),lr("simplify-codex","Run Codex PR simplification against the current branch",function(){return tn("codex",ar())}),lr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return tn("claude",ar())}),lr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return tn("gemini",ar())}),cr.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(I(P().m(function n(e){var t,r;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,zn();case 1:return t=n.v,n.n=2,Rt({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),cr.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(I(P().m(function n(e){var t,r;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,$t({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),cr.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(I(P().m(function n(){var e;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),cr.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(I(P().m(function n(e){var t;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,at(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),cr.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(I(P().m(function n(e){var t;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ot(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),cr.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(I(P().m(function n(){var e;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Wt();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),cr.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(I(P().m(function n(){var e,t;return P().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dt();case 1:return e=n.v,n.n=2,Bt(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await cr.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRMb2dnZXIge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIEFnZW50Q29tbWFuZE9wdGlvbnMge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgd2FpdE1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHJpbW1lZE91dHB1dCA9IG91dHB1dC50cmltKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KSA/PyBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke3RyaW1tZWRPdXRwdXR9YDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zdCBvdXRwdXRzID0gYWdlbnRPdXRwdXRzLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6IHtcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBicmFjZUV4cGFuZCwgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uIHtcbiAgZGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgZGV2RGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBwZWVyRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgd29ya3NwYWNlcz86IHN0cmluZ1tdIHwgeyBwYWNrYWdlcz86IHN0cmluZ1tdIH07XG59XG50eXBlIERlcGVuZGVuY3lNYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuaW50ZXJmYWNlIFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3Qge1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgcm9vdDogc3RyaW5nO1xufVxuXG5jb25zdCBERVBFTkRFTkNZX1NFQ1RJT05TID0gWydkZXBlbmRlbmNpZXMnLCAnZGV2RGVwZW5kZW5jaWVzJywgJ3BlZXJEZXBlbmRlbmNpZXMnLCAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnXSBhcyBjb25zdDtcbmNvbnN0IElHTk9SRURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsnLmdpdCcsICdub2RlX21vZHVsZXMnXSk7XG5jb25zdCBVUERBVEVfQ09NTUFORCA9IFsnYnVuJywgJ3VwZGF0ZScsICctLWxhdGVzdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVuRGVwZW5kZW5jaWVzKGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd29ya3NwYWNlRGlyZWN0b3JpZXMgPSBhd2FpdCBmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMoY3dkKTtcbiAgYXdhaXQgYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZCwgd29ya3NwYWNlRGlyZWN0b3JpZXMpO1xuICBhd2FpdCB1cGRhdGVQYWNrYWdlKGN3ZCwgJ3Jvb3QnKTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiB3b3Jrc3BhY2VEaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IHVwZGF0ZVBhY2thZ2Uoam9pbihjd2QsIGRpcmVjdG9yeSksIGRpcmVjdG9yeSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IHdvcmtzcGFjZVBhdHRlcm5zKGF3YWl0IHJlYWRQYWNrYWdlSnNvbihjd2QpKTtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBhd2FpdCBsaXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMoY3dkLCBwYXR0ZXJucyk7XG4gIGNvbnN0IGluY2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgaXNFeGNsdXNpb24gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKTtcbiAgICBjb25zdCBtYXRjaGVzID0gYXdhaXQgZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2QsIGRpcmVjdG9yaWVzLCBpc0V4Y2x1c2lvbiA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBtYXRjaGVzKSB7XG4gICAgICBpZiAoaXNFeGNsdXNpb24pIHtcbiAgICAgICAgZXhjbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZC5hZGQoZGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmluY2x1ZGVkXVxuICAgIC5maWx0ZXIoKGRpcmVjdG9yeSkgPT4gZGlyZWN0b3J5ICE9PSAnLicgJiYgIWV4Y2x1ZGVkLmhhcyhkaXJlY3RvcnkpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJucyh7IHdvcmtzcGFjZXMgPSBbXSB9OiBQYWNrYWdlSnNvbik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkod29ya3NwYWNlcykpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlcztcbiAgfVxuICByZXR1cm4gd29ya3NwYWNlcy5wYWNrYWdlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJvb3RzID0gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnMpO1xuXG4gIGZvciAoY29uc3QgeyBtYXhEZXB0aCwgcm9vdCB9IG9mIHJvb3RzKSB7XG4gICAgaWYgKCEoYXdhaXQgaXNEaXJlY3RvcnkoY3dkLCByb290KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBhd2FpdCBsaXN0RGlyZWN0b3JpZXMoY3dkLCByb290LCBtYXhEZXB0aCkpIHtcbiAgICAgIGRpcmVjdG9yaWVzLmFkZChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uZGlyZWN0b3JpZXNdO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyhwYXR0ZXJuczogc3RyaW5nW10pOiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290W10ge1xuICBjb25zdCByb290cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBjYW5kaWRhdGVSb290cyhwYXR0ZXJuKSkge1xuICAgICAgcm9vdHMuc2V0KHJvb3Qucm9vdCwgcm9vdHMuaGFzKHJvb3Qucm9vdCkgPyBtZXJnZWRNYXhEZXB0aChyb290cy5nZXQocm9vdC5yb290KSwgcm9vdC5tYXhEZXB0aCkgOiByb290Lm1heERlcHRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yb290cy5lbnRyaWVzKCldXG4gICAgLm1hcCgoW3Jvb3QsIG1heERlcHRoXSkgPT4gKHsgbWF4RGVwdGgsIHJvb3QgfSkpXG4gICAgLmZpbHRlcigocm9vdCkgPT4gIWhhc1BhcmVudFJvb3Qocm9vdCwgcm9vdHMpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQucm9vdC5sb2NhbGVDb21wYXJlKHJpZ2h0LnJvb3QpKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdHMocGF0dGVybjogc3RyaW5nKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpLm1hcCgoZXhwYW5kZWRQYXR0ZXJuKSA9PiAoe1xuICAgIG1heERlcHRoOiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgoZXhwYW5kZWRQYXR0ZXJuKSxcbiAgICByb290OiBjYW5kaWRhdGVSb290KGV4cGFuZGVkUGF0dGVybiksXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VkTWF4RGVwdGgobGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkLCByaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5tYXgobGVmdCwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRSb290KHJvb3Q6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3QsIHJvb3RzOiBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXS5zb21lKFxuICAgIChbb3RoZXJSb290LCBvdGhlck1heERlcHRoXSkgPT5cbiAgICAgIG90aGVyUm9vdCAhPT0gcm9vdC5yb290ICYmXG4gICAgICAob3RoZXJSb290ID09PSAnLicgfHwgcm9vdC5yb290LnN0YXJ0c1dpdGgoYCR7b3RoZXJSb290fS9gKSkgJiZcbiAgICAgIGNvdmVyc0RlcHRoKG90aGVyTWF4RGVwdGgsIHJvb3QubWF4RGVwdGgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvdmVyc0RlcHRoKHBhcmVudE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGNoaWxkTWF4RGVwdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50TWF4RGVwdGggPT09IHVuZGVmaW5lZCB8fCAoY2hpbGRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE1heERlcHRoID49IGNoaWxkTWF4RGVwdGgpO1xufVxuXG5mdW5jdGlvbiBjYW5kaWRhdGVSb290KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXR0ZXJuLnNwbGl0KCcvJykpIHtcbiAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgaGFzR2xvYk1hZ2ljKHNlZ21lbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwID8gJy4nIDogc2VnbWVudHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBoYXNHbG9iTWFnaWMoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvWyo/W1xcXXt9KCkhK10vLnRlc3Qoc2VnbWVudCk7XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aChwYXR0ZXJuOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAocGF0dGVybi5zcGxpdCgnLycpLmluY2x1ZGVzKCcqKicpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0aERlcHRoKHBhdHRlcm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnlTdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5KSk7XG4gICAgcmV0dXJuIGRpcmVjdG9yeVN0YXQuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3REaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgZGlyZWN0b3J5ID0gJy4nLCBtYXhEZXB0aD86IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbZGlyZWN0b3J5XTtcbiAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGRpcmVjdG9yeSkgPj0gbWF4RGVwdGgpIHtcbiAgICByZXR1cm4gZGlyZWN0b3JpZXM7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihqb2luKGN3ZCwgZGlyZWN0b3J5KSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNEaXJlY3RvcnkoKSB8fCBJR05PUkVEX0RJUkVDVE9SSUVTLmhhcyhlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGREaXJlY3RvcnkgPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSkuc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gICAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGNoaWxkRGlyZWN0b3J5KSA+IG1heERlcHRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZGlyZWN0b3JpZXMucHVzaCguLi4oYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgY2hpbGREaXJlY3RvcnksIG1heERlcHRoKSkpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdG9yaWVzO1xufVxuXG5mdW5jdGlvbiBwYXRoRGVwdGgocGF0aDogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhdGggPT09ICcuJyA/IDAgOiBwYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcmllczogc3RyaW5nW10sIHBhdHRlcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgbWF0Y2hlciA9IGdsb2JQYXR0ZXJuTWF0Y2hlcihub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgaWYgKG1hdGNoZXIoZGlyZWN0b3J5KSAmJiAoYXdhaXQgaGFzUGFja2FnZUpzb24oY3dkLCBkaXJlY3RvcnkpKSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgocGF0dGVybikucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcuJykge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4vJykgPyBub3JtYWxpemVkLnNsaWNlKDIpIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gcGF0aC5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICcnID8gJy4nIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gZ2xvYlBhdHRlcm5NYXRjaGVyKHBhdHRlcm46IHN0cmluZyk6IChkaXJlY3Rvcnk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIHJldHVybiAoZGlyZWN0b3J5KSA9PiBtaW5pbWF0Y2goZGlyZWN0b3J5LCBwYXR0ZXJuLCB7IGRvdDogdHJ1ZSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzUGFja2FnZUpzb24oY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25TdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5LCAncGFja2FnZS5qc29uJykpO1xuICAgIHJldHVybiBwYWNrYWdlSnNvblN0YXQuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkOiBzdHJpbmcsIHdvcmtzcGFjZURpcmVjdG9yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYXRhbG9nRGVwZW5kZW5jaWVzID0gW107XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIFsnLicsIC4uLndvcmtzcGFjZURpcmVjdG9yaWVzXSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKGRpcmVjdG9yeSA9PT0gJy4nID8gY3dkIDogam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjYXRhbG9nRGVwZW5kZW5jeU5hbWVzKHBhY2thZ2VKc29uKSkge1xuICAgICAgY2F0YWxvZ0RlcGVuZGVuY2llcy5wdXNoKGAke2RpcmVjdG9yeSA9PT0gJy4nID8gJ3Jvb3QnIDogZGlyZWN0b3J5fTogJHtkZXBlbmRlbmN5fWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXRhbG9nRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBbXG4gICAgICAnQ2Fubm90IHNhZmVseSB1cGRhdGUgQnVuIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgd2l0aCBjYXRhbG9nIHJlZmVyZW5jZXMuJyxcbiAgICAgICdVcGRhdGUgY2F0YWxvZyB2ZXJzaW9ucyBpbiB0aGUgcm9vdCBwYWNrYWdlLmpzb24sIHRoZW4gcnVuIGJ1biBpbnN0YWxsLicsXG4gICAgICBgQ2F0YWxvZy1tYW5hZ2VkIGRlcGVuZGVuY2llczogJHtjYXRhbG9nRGVwZW5kZW5jaWVzLmpvaW4oJywgJyl9YCxcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJHtwYWNrYWdlSnNvblBhdGh9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBERVBFTkRFTkNZX1NFQ1RJT05TKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcGFja2FnZUpzb25bc2VjdGlvbl07XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCdjYXRhbG9nOicpKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGFja2FnZShjd2Q6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuIyAke2xhYmVsfVxcbmApO1xuICBhd2FpdCBydW5Db21tYW5kKFVQREFURV9DT01NQU5ELCBjd2QpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2QsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCBpbiAke3JlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGN3ZCkgfHwgJy4nfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVByb2Nlc3NUaW1lb3V0LCBzdHJlYW1Ub1RleHQsIHRpbWVvdXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFOb2RlIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufVxuXG5pbnRlcmZhY2UgUnVuQ29tbWFuZE9wdGlvbnMge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn1cblxuY29uc3QgR0hfUkVUUllfTUFYX0FUVEVNUFRTID0gMztcbmNvbnN0IEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KGVycm9yTWVzc2FnZSA9ICdFcnJvcjogaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBsZXQgZmFpbHVyZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmV0cnkgPSBmYWxzZTtcbiAgICBjb25zdCBwcm9jZXNzVGltZW91dCA9IGNyZWF0ZVByb2Nlc3NUaW1lb3V0KHByb2MpO1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gdGltZW91dEVycm9yTWVzc2FnZShvdXRwdXQsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCk7XG4gICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0cnkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWA7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByb2Nlc3NUaW1lb3V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHJldHJ5KSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlTWVzc2FnZSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyT3V0cHV0ID0gYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKTtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IG5hbWVXaXRoT3duZXJPdXRwdXQudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSk7XG4gIHJldHVybiBwck51bWJlci50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gc3RydWN0dXJlZENsb25lKGRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrIHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaVJlc3VsdHMge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmludGVyZmFjZSBDb21wYWN0V29ya2Zsb3dSdW4ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuU3RlcCB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dSdW5Kb2Ige1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuRGV0YWlscyB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB7fTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgc3VtbWFyeVtidWNrZXRdID0gKHN1bW1hcnlbYnVja2V0XSA/PyAwKSArIDE7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gbm9vcDtcblxuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHRzID49IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0cyA9PT0gMSkge1xuICAgICAgICBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFLFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICAgICAgICAgIHdyaXRlUHJvZ3Jlc3NGblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3c6IFJlY29yZDxzdHJpbmcsIENoZWNrW10+ID0ge307XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2lSZXN1bHRzLmNoZWNrcykge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3dbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvd1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgbGV0IGxhdGVzdENoZWNrID0gZmlyc3RDaGVjaztcbiAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgbGF0ZXN0QXR0ZW1wdENoZWNrcykge1xuICAgICAgICBpZiAobGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAobGF0ZXN0Q2hlY2spKSB7XG4gICAgICAgICAgbGF0ZXN0Q2hlY2sgPSBjaGVjaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpO1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cHMuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBncm91cHMuc2V0KGtleSwgW2NoZWNrXSk7XG4gIH1cblxuICBsZXQgbGF0ZXN0R3JvdXA6IENoZWNrW10gPSBbXTtcbiAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2YgZ3JvdXBzLnZhbHVlcygpKSB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbGF0ZXN0R3JvdXAgPSBjdXJyZW50R3JvdXA7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSkge1xuICAgICAgbGF0ZXN0R3JvdXAgPSBjdXJyZW50R3JvdXA7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYXRlc3RHcm91cDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBzdW1tYXJ5OiBkZWVwQ29weShjaVJlc3VsdHMuc3VtbWFyeSksXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogJ0FsbCBDSSB3b3JrZmxvd3MgcGFzc2VkLlxcbicsIGV4aXRDb2RlOiAwIH07XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIGxldCBsYXRlc3QgPSAnJztcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgaWYgKHRpbWVzdGFtcCA+IGxhdGVzdCkge1xuICAgICAgbGF0ZXN0ID0gdGltZXN0YW1wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGF0ZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5Kb2IoXG4gIHJ1bjogV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkLFxuICBqb2JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFydW4/LmpvYnMgfHwgcnVuLmpvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IubmFtZSA9PT0gam9iTmFtZSkgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2Iuc3RhdHVzICE9PSAnY29tcGxldGVkJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShqb2I6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFqb2I/LnN0ZXBzIHx8IGpvYi5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpPy5uYW1lID8/XG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJyk/Lm5hbWVcbiAgKTtcbn1cbiIsImltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCkpID8/IChhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAnZ2gnLFxuICAgICdyZXBvJyxcbiAgICAndmlldycsXG4gICAgJy0tanNvbicsXG4gICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICctLXRlbXBsYXRlJyxcbiAgICAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nLFxuICBdKTtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShkZWZhdWx0QnJhbmNoLnRyaW0oKSwgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZUJyYW5jaE91dHB1dCA9IGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICAgJ2doJyxcbiAgICAgICdwcicsXG4gICAgICAndmlldycsXG4gICAgICAnLS1qc29uJyxcbiAgICAgICdiYXNlUmVmTmFtZScsXG4gICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAne3suYmFzZVJlZk5hbWV9fScsXG4gICAgXSk7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IGJhc2VCcmFuY2hPdXRwdXQudHJpbSgpO1xuICAgIHJldHVybiBiYXNlQnJhbmNoLmxlbmd0aCA+IDAgPyBiYXNlQnJhbmNoIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAvbm8gcHVsbCByZXF1ZXN0cz8gZm91bmQgZm9yIGJyYW5jaC9pLnRlc3QoU3RyaW5nKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcgfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICB0eXBlIEpzb25PYmplY3QsXG4gIHR5cGUgTWVzc2FnZSxcbiAgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbixcbiAgdHlwZSBNZXRhZGF0YU5vZGUsXG4gIHByb2dyZXNzLFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5pbnRlcmZhY2UgSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBQclJldmlld05vZGUge1xuICBpZDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJtaXR0ZWRBdD86IHN0cmluZyB8IG51bGw7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSXNzdWVNZXRhZGF0YVJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVJc3N1ZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ2lzc3VlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQck51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ3B1bGwgcmVxdWVzdCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlTnVtYmVyKSk7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID09PSB1bmRlZmluZWQgPyBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSA6IG5vcm1hbGl6ZVByTnVtYmVyKHByTnVtYmVyKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByTnVtYmVyT3V0cHV0ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSwgWzFdKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBwck51bWJlck91dHB1dC50cmltKCk7XG4gIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcocHJOdW1iZXJPdXRwdXQpIHx8ICEvXlxcZCskLy50ZXN0KHByTnVtYmVyKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcik7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIHJldHVybiBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCBwck51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc3N1ZU1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGZldGNoTWV0YWRhdGE8SXNzdWVNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBub3VuOiAnaXNzdWUnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfTUVTU0FHRVNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWU/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcblxuICByZXR1cm4geyAuLi5pc3N1ZSwgbWVzc2FnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgbm91bjogJ3B1bGwgcmVxdWVzdCcsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3QsXG4gIH0pO1xuICBjb25zdCBbaXNzdWVDb21tZW50cywgcmV2aWV3c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJJc3N1ZUNvbW1lbnRzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gICAgcHJSZXZpZXdzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucHVsbFJlcXVlc3QsXG4gICAgbWVzc2FnZXM6IFsuLi5pc3N1ZUNvbW1lbnRzLCAuLi5yZXZpZXdzXS50b1NvcnRlZChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50UHJOdW1iZXIsIGV4aXRXaXRoRXJyb3IsIGdoLCBwcm9ncmVzcywgcnVuQ29tbWFuZCwgeWFtbER1bXAgfSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblByT3B0aW9ucyB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVByT3B0aW9ucyB7XG4gIGJvZHk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcih7IGJvZHksIHRpdGxlIH06IE9wZW5Qck9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhlYWRPdXRwdXQgPSBhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKTtcbiAgY29uc3QgaGVhZCA9IGhlYWRPdXRwdXQudHJpbSgpO1xuICBjb25zdCBiYXNlT3V0cHV0ID0gYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pO1xuICBjb25zdCBiYXNlID0gYmFzZU91dHB1dC50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAodGl0bGUpIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tdGl0bGUnLCB0aXRsZSk7XG4gIH1cbiAgaWYgKGJvZHkpIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIoeyBib2R5LCB0aXRsZSB9OiBVcGRhdGVQck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKGBVcGRhdGluZyBwdWxsIHJlcXVlc3QgIyR7cHJOdW1iZXJ9Li4uYCk7XG4gIHJldHVybiBhd2FpdCBlZGl0UHIocHJOdW1iZXIsIFsnLS10aXRsZScsIHRpdGxlLCAnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZWRpdFByKHByTnVtYmVyOiBzdHJpbmcsIGVkaXRBcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgZ2goWydwcicsICdlZGl0JywgcHJOdW1iZXIsIC4uLmVkaXRBcmdzXSwgc3RkaW5EYXRhKTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG4iLCJpbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdyYXBocWwsXG4gIHByb2dyZXNzLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmludGVyZmFjZSBSZXZpZXdDb21tZW50Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBkaWZmSHVuaz86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUmV2aWV3VGhyZWFkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGlzT3V0ZGF0ZWQ/OiBib29sZWFuIHwgbnVsbDtcbiAgcGF0aD86IHN0cmluZyB8IG51bGw7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1lbnRzOiB7XG4gICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgcGFnZUluZm86IHtcbiAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihxdWVyeSwge1xuICAgICAgb3duZXIsXG4gICAgICBuYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgY3Vyc29yLFxuICAgIH0pO1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSk7XG4gICAgICBjb25zdCBjb21tZW50Q29ubmVjdGlvbiA9IHJlc3BvbnNlLmRhdGE/Lm5vZGU/LmNvbW1lbnRzO1xuXG4gICAgICBpZiAoIWNvbW1lbnRDb25uZWN0aW9uKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbW1lbnRzIGluIEdyYXBoUUwgcmVzcG9uc2UgZm9yIHRocmVhZCAke3RocmVhZC5pZH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbW1lbnRzLnB1c2goLi4uY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24gKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHsgcHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keSB9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHsgdGhyZWFkSWQ6ICR0aHJlYWRJZCB9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IE9taXQ8UmV2aWV3Q29tbWVudE5vZGUsICdhdXRob3InPiAmIHsgYXV0aG9yPzogc3RyaW5nIH0ge1xuICBjb25zdCB7IGF1dGhvciwgLi4uY29tbWVudFdpdGhvdXRBdXRob3IgfSA9IGNvbW1lbnQ7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudFdpdGhvdXRBdXRob3IsXG4gICAgYXV0aG9yOiB0eXBlb2YgYXV0aG9yID09PSAnc3RyaW5nJyA/IGF1dGhvciA6IChhdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hJc3N1ZU1lc3NhZ2VzIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlzc3VlWWFtbCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG5cbiAgcmV0dXJuIGBcblBsYW4gYSBHaXRIdWIgaXNzdWUgYnkgZ2F0aGVyaW5nIGNvbnRleHQsIHdyaXRpbmcgYSBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnMsIGFuZCBwb3N0aW5nIG9yIHVwZGF0aW5nIHRoYXQgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS4gSGVyZSBpcyB0aGUgZmV0Y2hlZCBpc3N1ZSBjb250ZXh0IGFzIFlBTUw6XG5+fn5+eWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxufn5+flxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGFib3ZlIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGNhcmVmdWxseS5cbjIuIENvbGxlY3QgZW5vdWdoIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIHNwZWNpZmljYXRpb246XG4gICAtIEluc3BlY3QgdGhlIHJlbGV2YW50IGNvZGUsIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCByZWNlbnQgZGlmZnMsIGFuZCBhbnkgb3RoZXIgbG9jYWwgY29udGV4dCBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0aGUgZXhwZXJpbWVudC5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gYSBsaWJyYXJ5LCBBUEksIG9yIGxhbmd1YWdlIGZlYXR1cmUsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gV3JpdGUgdGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBpc3N1ZSBjb21tZW50LlxuICAgLSBXcml0ZSB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgY29sbGVjdGVkIGluZm9ybWF0aW9uLlxuICAgLSBEZWZpbmUgYSBnb2FsIHRoYXQgY2xlYXJseSBndWlkZXMgb3VyIGltcGxlbWVudGF0aW9uIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG4gICAtIFdyaXRlIGEgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBpbmNvcnBvcmF0aW5nIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLlxuICAgLSBJZiBuZWVkZWQsIGluY2x1ZGUgY29kZSBzbmlwcGV0cyB0aGF0IGV4cGxhaW4gaG93IHRvIHVzZSBsaWJyYXJpZXMgb3IgQVBJcywgYWxvbmcgd2l0aCByZWZlcmVuY2VzIHRvIHRoZWlyIGRvY3VtZW50YXRpb24uXG40LiBQb3N0IHRoZSBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gaXNzdWUgIyR7aXNzdWVOdW1iZXJ9LCB0aGVuIHByaW50IHRoZSBpc3N1ZSBVUkwuXG4gICAtIElmIHRoZSBpc3N1ZSBhbHJlYWR5IGhhcyBhIHNwZWNpZmljYXRpb24sIHVwZGF0ZSB0aGUgZXhpc3RpbmcgY29tbWVudCBpbnN0ZWFkIG9mIHBvc3RpbmcgYSBuZXcgb25lLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMsIGJ1dCBkbyBub3QgaW5jbHVkZSB0aGUgc3Vycm91bmRpbmcgXFxgfn5+flxcYCBmZW5jZXMgaW4gdGhlIGFjdHVhbCBjb21tZW50Olxufn5+flxuIyMgQmFja2dyb3VuZFxuXG5bU3VtbWFyaXplIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFuZCBleHBsYWluIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGlzc3VlXVxuXG4jIyBHb2FsXG5cbltEZWZpbmUgdGhlIGdvYWwgd2Ugd2FudCB0byBhY2hpZXZlIGluIHRoaXMgaXNzdWVdXG5cbiMjIFNwZWNpZmljYXRpb25cblxuW0RldGFpbGVkIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVyc11cblxuIyMgS2V5IFRlY2hub2xvZ2llcyAoT05MWSBpZiBleHRlcm5hbCByZXNvdXJjZXMgYXJlIG5lZWRlZClcblxuW0Rlc2NyaWJlIHdoYXQgbGlicmFyaWVzIG9yIEFQSXMgd2Ugc2hvdWxkIHVzZSwgaW5jbHVkaW5nIGNvbmNyZXRlIHZlcnNpb25zIGFuZCBjb2RlIHNuaXBwZXRzLl1cblxufn5+flxuYC50cmltKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFJldmlld1Byb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZvciBlYWNoIGZpbmRpbmcsIGRvIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RlcHM6XG4xLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgZXhwZXJpbWVudC5cbjQuIFByb3Bvc2UgYSBmaXggd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvZGU6XG4gICAtIERlc2NyaWJlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY2hhbmdlIHRoYXQgd291bGQgYWRkcmVzcyB0aGUgZmluZGluZy5cbiAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cblxuUmVwb3J0IG9ubHkgdGhlIHZhbGlkIGZpbmRpbmdzLCB0aGUgZXZpZGVuY2UgZm9yIGVhY2ggb25lLCBhbmQgdGhlIHByb3Bvc2VkIGZpeCB3aXRoIGl0cyBsaWtlbHkgaW1wYWN0LiBJbmNsdWRlIGEgYnJpZWYganVzdGlmaWNhdGlvbiBmb3IgZWFjaCwgY2l0aW5nIHRoZSBldmlkZW5jZSB1c2VkIChlLmcuLCBhIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciBvZmZpY2lhbCBkb2N1bWVudGF0aW9uKS4gRG8gbm90IG1vZGlmeSB0aGUgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCBmaW5kaW5ncywgcmVzcG9uZCBleGFjdGx5IHdpdGg6IFxcYCR7Tk9fQ09OQ0VSTl9NRVNTQUdFfVxcYFxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuXG4ke3ByQ29udGV4dCA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxcbn5+fn55YW1sXFxuJHtwckNvbnRleHQudHJpbSgpfVxcbn5+fn5gIDogJyd9XG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrZWRTa2lsbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoXG4gICAgW1xuICAgICAgJ2J1bngnLFxuICAgICAgJ3NraWxsc0BsYXRlc3QnLFxuICAgICAgJ2FkZCcsXG4gICAgICBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uLy4uJywgaW1wb3J0Lm1ldGEudXJsKSksXG4gICAgICAnLS1nbG9iYWwnLFxuICAgICAgJy0teWVzJyxcbiAgICAgICctLXNraWxsJyxcbiAgICAgICcqJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjbGF1ZGUtY29kZScsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY29kZXgnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2dlbWluaS1jbGknLFxuICAgIF0sXG4gICAge1xuICAgICAgd2FpdE1lc3NhZ2U6ICdJbnN0YWxsaW5nIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseS4nLFxuICAgIH1cbiAgKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyB9IGZyb20gJy4vZGVwcy91cGRhdGVCdW5EZXBlbmRlbmNpZXMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLWJ1bi1kZXBzJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgYWxsIEJ1biBkZXBlbmRlbmNpZXMgaW4gdGhlIHJvb3QgcGFja2FnZSBhbmQgd29ya3NwYWNlIHBhY2thZ2VzJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB1cGRhdGVCdW5EZXBlbmRlbmNpZXMoKTtcbiAgfSk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdyZXZpZXcgYWdlbnRzJyxcbiAgICAgICAgICBtYXBPdXRwdXQ6IChhZ2VudCwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyIsImFjdGl2ZVByb2Nlc3NlcyIsIlNldCIsImNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInByb2Nlc3NUaW1lb3V0Iiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJkZXRhY2hlZCIsInN0ZGlvIiwiY3JlYXRlUHJvY2Vzc1RpbWVvdXQiLCJ0aW1lb3V0TXMiLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsInRpbWVkT3V0IiwiRXJyb3IiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiYSIsImpvaW4iLCJjbG9zZSIsImNsZWFyIiwiZiIsIm1lc3NhZ2UiLCJtaWxsaXNlY29uZHMiLCJmb3JtYXREdXJhdGlvbiIsImxlbmd0aCIsImZvcmNlS2lsbFRpbWVyIiwiYWRkIiwiX3N0ZXAyIiwiX2l0ZXJhdG9yMiIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX2xvb3AiLCJzaWduYWwiLCJ2YWx1ZSIsInByb2Nlc3MiLCJfc3RlcDMiLCJfaXRlcmF0b3IzIiwicyIsImRvbmUiLCJraWxsUHJvY2VzcyIsImVyciIsImUiLCJleGl0Iiwic2lnbmFsTnVtYmVyIiwiaW5zdGFsbENsZWFudXBIYW5kbGVycyIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidW5yZWYiLCJjbGVhclRpbWVvdXQiLCJwaWQiLCJraWxsIiwiX3VudXNlZCIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJkZWNvZGVyIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsImZpbmFsQ2h1bmsiLCJfdCIsIl9jb250ZXh0MiIsIlRleHREZWNvZGVyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZGVjb2RlIiwiVWludDhBcnJheSIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwiZG90Q291bnQiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwiREVGQVVMVF9BTExfQUdFTlRfQ09NTUFORF9PUFRJT05TIiwiYWxsQWdlbnRzTGFiZWwiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsImFnZW50T3V0cHV0cyIsIm91dHB1dHMiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwidHJpbW1lZE91dHB1dCIsInJ1bkFnZW50Q29tbWFuZCIsInRyaW0iLCJtYXBPdXRwdXQiLCJjYWxsIiwiZGlzcGxheUFnZW50TmFtZSIsImZpbHRlciIsInVuZGVmaW5lZCIsIl9ydW5BZ2VudENvbW1hbmQiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZSIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwidG9TdHJpbmciLCJwYWRTdGFydCIsIkRFUEVOREVOQ1lfU0VDVElPTlMiLCJJR05PUkVEX0RJUkVDVE9SSUVTIiwiVVBEQVRFX0NPTU1BTkQiLCJ1cGRhdGVCdW5EZXBlbmRlbmNpZXMiLCJfdXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiY3dkIiwid29ya3NwYWNlRGlyZWN0b3JpZXMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiZGlyZWN0b3J5IiwiZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwiYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwidXBkYXRlUGFja2FnZSIsIl9maW5kV29ya3NwYWNlRGlyZWN0b3JpZXMiLCJwYXR0ZXJucyIsImRpcmVjdG9yaWVzIiwiaW5jbHVkZWQiLCJleGNsdWRlZCIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJwYXR0ZXJuIiwiaXNFeGNsdXNpb24iLCJtYXRjaGVzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIndvcmtzcGFjZVBhdHRlcm5zIiwicmVhZFBhY2thZ2VKc29uIiwibGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwic3RhcnRzV2l0aCIsImV4cGFuZFdvcmtzcGFjZVBhdHRlcm4iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJoYXMiLCJ0b1NvcnRlZCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJfcmVmIiwiX3dvcmtzcGFjZXMkcGFja2FnZXMiLCJfcmVmJHdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VzIiwiQXJyYXkiLCJpc0FycmF5IiwicGFja2FnZXMiLCJfbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwicm9vdHMiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiX3N0ZXA3JHZhbHVlIiwibWF4RGVwdGgiLCJyb290IiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIl90NCIsIl90NSIsIndvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzIiwiaXNEaXJlY3RvcnkiLCJsaXN0RGlyZWN0b3JpZXMiLCJNYXAiLCJfaSIsIl9jYW5kaWRhdGVSb290cyIsImNhbmRpZGF0ZVJvb3RzIiwic2V0IiwibWVyZ2VkTWF4RGVwdGgiLCJnZXQiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsInNvbWUiLCJfcmVmNCIsInBhcmVudE1heERlcHRoIiwiY2hpbGRNYXhEZXB0aCIsIl9yZWY1Iiwib3RoZXJSb290Iiwib3RoZXJNYXhEZXB0aCIsImhhc1BhcmVudFJvb3QiLCJicmFjZUV4cGFuZCIsIm5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4iLCJleHBhbmRlZFBhdHRlcm4iLCJ3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgiLCJjYW5kaWRhdGVSb290IiwiTWF0aCIsIm1heCIsInNlZ21lbnRzIiwic3BsaXQiLCJzZWdtZW50IiwiaGFzR2xvYk1hZ2ljIiwidGVzdCIsImluY2x1ZGVzIiwicGF0aERlcHRoIiwiX3g2IiwiX2lzRGlyZWN0b3J5IiwiZGlyZWN0b3J5U3RhdCIsInN0YXQiLCJfeDciLCJfeDgiLCJfeDkiLCJfbGlzdERpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsImVudHJ5IiwiY2hpbGREaXJlY3RvcnkiLCJfdDciLCJfdDgiLCJfdDkiLCJfdDAiLCJyZWFkZGlyIiwid2l0aEZpbGVUeXBlcyIsIm5hbWUiLCJzZXAiLCJwYXRoIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl9leHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwibWF0Y2hlciIsIl9pdGVyYXRvcjAiLCJfc3RlcDAiLCJfdDEiLCJfdDEwIiwiZ2xvYlBhdHRlcm5NYXRjaGVyIiwiaGFzUGFja2FnZUpzb24iLCJub3JtYWxpemVkIiwibm9ybWFsaXplUGF0aCIsInJlcGxhY2UiLCJtaW5pbWF0Y2giLCJkb3QiLCJfeDExIiwiX3gxMiIsIl9oYXNQYWNrYWdlSnNvbiIsIl9jYWxsZWU3IiwicGFja2FnZUpzb25TdGF0IiwiX2NvbnRleHQ3IiwiaXNGaWxlIiwiX3gxMyIsIl94MTQiLCJfYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2NhbGxlZTgiLCJjYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2kzIiwiX2FyciIsInBhY2thZ2VKc29uIiwiX2l0ZXJhdG9yMSIsIl9zdGVwMSIsImRlcGVuZGVuY3kiLCJfY29udGV4dDgiLCJjYXRhbG9nRGVwZW5kZW5jeU5hbWVzIiwiX3gxNSIsIl9yZWFkUGFja2FnZUpzb24iLCJfY2FsbGVlOSIsInBhY2thZ2VKc29uUGF0aCIsIl90MTIiLCJfdDEzIiwiX2NvbnRleHQ5IiwiSlNPTiIsInJlYWRGaWxlIiwicGFyc2UiLCJuYW1lcyIsImRlcGVuZGVuY2llcyIsIl9pMiIsIl9PYmplY3QkZW50cmllcyIsIk9iamVjdCIsIl9PYmplY3QkZW50cmllcyRfaSIsIl94MTYiLCJfeDE3IiwiX3VwZGF0ZVBhY2thZ2UiLCJfY2FsbGVlMCIsImxhYmVsIiwiX2NvbnRleHQwIiwicnVuQ29tbWFuZCIsIl94MTgiLCJfeDE5IiwiX3J1bkNvbW1hbmQiLCJfY2FsbGVlMSIsIl9jb250ZXh0MSIsInJlbGF0aXZlIiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsImZhaWx1cmVNZXNzYWdlIiwicmV0cnkiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lck91dHB1dCIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsInByTnVtYmVyIiwiZ3JhcGhxbCIsIl9ncmFwaHFsIiwicXVlcnkiLCJ2YXJzIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInJ0a0F2YWlsYWJsZSIsIm5vb3AiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl9jaGVjayRidWNrZXQyIiwiX3N1bW1hcnkkYnVja2V0IiwiY2hlY2siLCJidWNrZXQiLCJTeW50YXhFcnJvciIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJ3cml0ZVByb2dyZXNzRm4iLCJhdHRlbXB0cyIsImNpUmVzdWx0cyIsImNsYXNzaWZpZWRSZXN1bHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93Iiwid29ya2Zsb3dLZXkiLCJ3b3JrZmxvdyIsImZyb21FbnRyaWVzIiwibGF0ZXN0QXR0ZW1wdENoZWNrcyIsImdyb3VwcyIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwibGF0ZXN0R3JvdXAiLCJ2YWx1ZXMiLCJjdXJyZW50R3JvdXAiLCJsYXRlc3RHcm91cFRpbWVzdGFtcCIsImxhdGVzdENoZWNrc0ZvcldvcmtmbG93IiwiZmlyc3RDaGVjayIsImxhdGVzdENoZWNrIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsInRlc3RSZWxhdGVkQ2hlY2siLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIl9saW5rJG1hdGNoIiwibGluayIsIm1hdGNoIiwid29ya2Zsb3dSdW4iLCJfd29ya2Zsb3dSdW4iLCJydW5JZCIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJwYXlsb2FkIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNiIsImNvbXBhY3RXb3JrZmxvdyIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9vYmplY3RTcHJlYWQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImxhdGVzdCIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfZmFpbGVkV29ya2Zsb3dMb2ciLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJsaW5lIiwiam9iTmFtZSIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsImRlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJfY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImJhc2VCcmFuY2hPdXRwdXQiLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiaXNzdWUiLCJpc3N1ZU1lc3NhZ2VzIiwibnVtYmVyIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX2ZldGNoUHJNZXNzYWdlcyIsInJlc29sdmVkUHJOdW1iZXIiLCJwdWxsUmVxdWVzdCIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJyZWZlcmVuY2VUZXh0Iiwia2luZFNlZ21lbnQiLCJfaXNzdWVNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhIiwicmVwb3NpdG9yeSIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEyIiwiY29tbWVudHMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfcHJNZXNzYWdlcyIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGEzIiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX3Jlc3BvbnNlJGRhdGE0IiwiX3ByUmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhNSIsInJldmlld01lc3NhZ2UiLCJfcGFnaW5hdGVNZXNzYWdlcyIsImNvbmZpZyIsImN1cnNvciIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJOdW1iZXIiLCJub2RlcyIsImhhc01lc3NhZ2VCb2R5IiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsIl9mZXRjaE1ldGFkYXRhIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJ0aXRsZSIsImF1dGhvciIsImxvZ2luIiwiYm9keSIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsIm9wZW5QciIsIl9vcGVuUHIiLCJfdGVtcCIsImhlYWRPdXRwdXQiLCJoZWFkIiwiYmFzZU91dHB1dCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHIiLCJfdXBkYXRlUHIiLCJlZGl0UHIiLCJfZWRpdFByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsInRocmVhZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsImlkcyIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwidGhyZWFkcyIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsIm5vZGUiLCJpc091dGRhdGVkIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJfdDYiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsIl9hdXRob3IkbG9naW4iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwicmVwbGFjZUFsbCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJpbnN0YWxsUGFja2VkU2tpbGxzIiwiX2luc3RhbGxQYWNrZWRTa2lsbHMiLCJmaWxlVVJMVG9QYXRoIiwiVVJMIiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfbGVuIiwiX2tleSIsIl9yZWYxMSIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxIiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX2NhbGxlZTEwIiwiX2NvbnRleHQxMCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQW1CTyxJQUtEQSxFQUEwQixDQUFDLFNBQVUsVUFBVyxVQUNoREMsRUFBa0IsSUFBSUMsSUFDeEJDLEdBQTJCLEVBSS9CLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBa0MzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBbENNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQU1LLFlBTkwsSUFBMUJmLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9jLEVBQWdCLE9BQVhmLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRa0IsTUFBTSxHQUFJ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
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return P(s,"_invoke",function(t,r,a){var i,u,c,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,u=0))}if(a||t>1)return o;throw f=!0,r}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(P(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,P(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,P(f,"constructor",s),P(s,"constructor",c),c.displayName="GeneratorFunction",P(s,a,"GeneratorFunction"),P(f),P(f,a,"Generator"),P(f,r,function(){return this}),P(f,"toString",function(){return"[object Generator]"}),($=function(){return{w:i,m:p}})()}function P(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}P=function(n,e,t,r){function i(e,t){P(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},P(n,e,t,r)}function q(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function E(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,a,i,o,u=[],c=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=i.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(n,e)||D(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(n){return function(n){if(Array.isArray(n))return k(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||D(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(n){"@babel/helpers - typeof";return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},T(n)}function D(n,e){if(n){if("string"==typeof n)return k(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?k(n,e):void 0}}var L=["SIGINT","SIGTERM","SIGHUP"],_=new Set,G=!1;function M(n,e){return U.apply(this,arguments)}function U(){return U=I($().m(function n(e,r){var a,i,o,u,c,s,l,f,p,d,h;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),i=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=H(i,r.timeoutMs),u=Q(r.waitMessage,r.waitIntervalSeconds),n.n=1,Y(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([J(i.stdout,function(n){return c.write(n)}),J(i.stderr,function(n){return c.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=E(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(F("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),U.apply(this,arguments)}function F(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function H(n,e){void 0===e&&(e=36e5);var t,r=!1;_.add(n),function(){if(G)return;G=!0;var n,e=O(L);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=O(_);try{for(t.s();!(n=t.n()).done;){W(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,W(n,"SIGTERM"),(t=setTimeout(function(){return W(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),_.delete(n)},timedOut:function(){return r},timeoutMs:e}}function W(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function J(n,e){return B.apply(this,arguments)}function B(){return(B=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,c=x(e);case 3:return n.n=4,c.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!i||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Q(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,a=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(a),t("\n")}}function Y(n){return z.apply(this,arguments)}function z(){return z=I($().m(function n(e){var t,r,o;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=I($().m(function n(){return $().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,i(s(e),{recursive:!0});case 3:return(r=a(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,o=n.v,t(o),n.a(2,{write:function(){},close:function(){var n=I($().m(function n(){return $().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),z.apply(this,arguments)}var K="There is no concern.",Z=["codex","claude","gemini"],V=new RegExp("\\b".concat("there is no concern","\\b"),"i"),X={allAgentsLabel:"agents"};function nn(n,e){return en.apply(this,arguments)}function en(){return(en=I($().m(function n(e,t){var r,a,i,o;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=X),n.n=1,e;case 1:return r=n.v,a=Q(un(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(Z.map(I($().m(function n(e){var a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(e,r,{waitMessage:!1});case 1:return u=n.v,c=u.trim(),n.a(2,null!=(a=null==(i=(o=t).mapOutput)?void 0:i.call(o,e,c))?a:"## ".concat(on(e),"\n\n").concat(c))}},n)}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.length>0?o.join("\n\n"):K);case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function tn(n,e,t){return rn.apply(this,arguments)}function rn(){return(rn=I($().m(function n(e,t,r){var a,i,o,u;return $().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=M,o=an,u=e,n.n=1,t;case 1:return n.a(2,i(o(u,n.v),{logFilePath:cn(e),waitMessage:null!=(a=r.waitMessage)?a:un(on(e))}))}},n)}))).apply(this,arguments)}function an(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function on(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function un(n){return"Waiting for ".concat(n," to finish.")}function cn(n){return"logs/".concat(n,"-").concat((e=new Date,t=E([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(sn),5),r=t[0],a=t[1],i=t[2],o=t[3],u=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(u)),".log");var e,t,r,a,i,o,u}function sn(n){return n.toString().padStart(2,"0")}var ln=["dependencies","devDependencies","peerDependencies","optionalDependencies"],fn=new Set([".git","node_modules"]),pn=["bun","update","--latest"];function dn(n){return hn.apply(this,arguments)}function hn(){return(hn=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,mn(e);case 1:return t=n.v,n.n=2,Ln(e,t);case 2:return n.n=3,Fn(e,"root");case 3:r=O(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,Fn(l(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function mn(n){return vn.apply(this,arguments)}function vn(){return(vn=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=yn,n.n=1,Gn(e);case 1:return t=h(n.v),n.n=2,wn(e,t);case 2:r=n.v,a=new Set,i=new Set,o=O(t),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=7;break}return c=u.value,s=c.startsWith("!"),n.n=5,Pn(e,r,s?c.slice(1):c);case 5:l=n.v,f=O(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,N(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function yn(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function wn(n,e){return gn.apply(this,arguments)}function gn(){return(gn=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d,h;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=bn(t),i=O(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return u=o.value,c=u.maxDepth,s=u.root,n.n=3,On(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=O,n.n=5,Cn(e,s,c);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,N(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function bn(n){var e,t=new Map,r=O(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=kn(a);i<o.length;i++){var u=o[i];t.set(u.root,t.has(u.root)?xn(t.get(u.root),u.maxDepth):u.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return N(t.entries()).map(function(n){var e=E(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return N(e.entries()).some(function(e){var t,r,a=E(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function kn(n){return h(En(n)).map(function(n){return{maxDepth:In(n),root:Sn(n)}})}function xn(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function Sn(n){var e,t=[],r=O(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||jn(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function jn(n){return/[*?[\]{}()!+]/.test(n)}function In(n){if(!n.split("/").includes("**"))return $n(n)}function On(n,e){return Rn.apply(this,arguments)}function Rn(){return(Rn=I($().m(function n(e,t){var r;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Cn(n,e,t){return An.apply(this,arguments)}function An(){return(An=I($().m(function n(e,t,r){var a,i,o,u,s,f,d,h,m,v;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&$n(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,c(l(e,t),{withFileTypes:!0});case 2:i=n.v,o=O(i),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=9;break}if((s=u.value).isDirectory()&&!fn.has(s.name)){n.n=5;break}return n.a(3,8);case 5:if(f=l(t,s.name).split(p).join("/"),!(void 0!==r&&$n(f)>r)){n.n=6;break}return n.a(3,8);case 6:return d=a.push,h=a,m=N,n.n=7,Cn(e,f,r);case 7:d.apply.call(d,h,m(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,v=n.v,o.e(v);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function $n(n){return"."===n?0:n.split("/").length}function Pn(n,e,t){return qn.apply(this,arguments)}function qn(){return(qn=I($().m(function n(e,t,r){var a,i,o,u,c,s,l;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:a=Nn(En(r)),i=[],o=O(t),n.p=1,o.s();case 2:if((u=o.n()).done){n.n=6;break}if(c=u.value,!(s=a(c))){n.n=4;break}return n.n=3,Tn(e,c);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(c);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function En(n){var e=function(n){var e=n.split(p).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function Nn(n){return function(e){return d(e,n,{dot:!0})}}function Tn(n,e){return Dn.apply(this,arguments)}function Dn(){return(Dn=I($().m(function n(e,t){var r;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Ln(n,e){return _n.apply(this,arguments)}function _n(){return(_n=I($().m(function n(e,t){var r,a,i,o,u,c,s,f;return $().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(N(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,Gn("."===o?e:l(e,o));case 2:u=n.v,c=O(Un(u));try{for(c.s();!(s=c.n()).done;)f=s.value,r.push("".concat("."===o?"root":o,": ").concat(f))}catch(n){c.e(n)}finally{c.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Gn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=l(e,"package.json"),n.p=1,r=JSON,n.n=2,o(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function Un(n){var e,t=[],r=O(ln);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var u=E(o[i],2),c=u[0];u[1].startsWith("catalog:")&&t.push(c)}}}catch(n){r.e(n)}finally{r.f()}return t}function Fn(n,e){return Hn.apply(this,arguments)}function Hn(){return(Hn=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,Wn(pn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Wn(n,e){return Jn.apply(this,arguments)}function Jn(){return(Jn=I($().m(function n(e,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=t(e[0],e.slice(1),{cwd:r,stdio:"inherit"}),n.n=1,new Promise(function(n,t){a.once("error",t),a.once("close",function(a){0!==a?t(new Error("Command failed in ".concat(f(process.cwd(),r)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var Bn={blockQuote:"literal",lineWidth:0};function Qn(n){v.write("".concat(n,"\n"))}function Yn(n,e){void 0===e&&(e=1),v.write("".concat(n,"\n")),process.exit(e)}function zn(){return Kn.apply(this,arguments)}function Kn(){return(Kn=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:if(!m.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,J(m);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Zn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,zn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:Yn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Xn(n,e){return ne.apply(this,arguments)}function ne(){return ne=I($().m(function n(e,r){var a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),i=null!=(a=r.allowedExitCodes)?a:[],o=$().m(function n(){var a,o,u,s,l,f,p,d,h,m,v;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=H(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([J(o.stdout),J(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=E(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}u=F(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:he(e,m,v)&&c<3?s=!0:u=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return Qn("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,y(1e3*c);case 7:return n.a(2,0);case 8:u&&Yn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(q(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:Yn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),ne.apply(this,arguments)}function ee(n,e){return te.apply(this,arguments)}function te(){return(te=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn(["gh"].concat(N(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function re(n,e,t){return ae.apply(this,arguments)}function ae(){return(ae=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn(["gh"].concat(N(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ie(){return oe.apply(this,arguments)}function oe(){return(oe=I($().m(function n(){var e,t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=E(r,2),i=a[0],o=a[1],i&&o||Yn("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function ue(){return ce.apply(this,arguments)}function ce(){return(ce=I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function se(n,e){return le.apply(this,arguments)}function le(){return(le=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f;return $().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=E(i[a],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,ee(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),Yn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function fe(n){return g(n,Bn)}function pe(n){return structuredClone(n)}function de(n,e){var t,a,i,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(a=u.status)?a:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(o=u.stderr)?o:"")}}function he(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var me=/\btest\b/i,ve=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],ye=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,we=0===de(["rtk","--version"]).exitCode,ge=function(){};function be(n){return ke.apply(this,arguments)}function ke(){return(ke=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,y;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,re(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((y=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw y;case 5:l={},f=O(c);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function xe(n,e,t,r){return Se.apply(this,arguments)}function Se(){return(Se=I($().m(function n(e,t,r,a){var i,o,u,c,s,l,f,p;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Ee),void 0===r&&(r=be),void 0===a&&(a=function(n){return v.write(n)}),i=0,n.n=1,r(e);case 1:o=n.v,u=ge,n.p=2;case 3:if(c=je(o),s=Ie(c),l=E(s,2),f=l[0],p=l[1],!(Object.keys(f).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[o,i,!1]);case 4:if(!(i>=100)){n.n=5;break}return n.a(2,[o,i,!0]);case 5:return 1===(i+=1)&&(u=Q("Waiting for test-related workflows to finish.",36,a)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function je(n){var e,t={},r=O(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=E(n,2),t=e[0],r=function(n){var e,t=new Map,r=O(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=Ae(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var u,c=[],s=O(t.values());try{for(s.s();!(u=s.n()).done;){var l=u.value;0!==c.length?Le(l)>Le(c)&&(c=l):c=l}}catch(n){s.e(n)}finally{s.f()}return c}(e[1]),a=r[0];a||Yn("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,u=r;o<u.length;o++){var c=u[o];Pe(c)>Pe(i)&&(i=c)}return[t,{classification:$e(r),check:i,checks:r}]}))}function Ie(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=E(a[r],2),o=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return qe(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Oe(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Re(n){return Ce.apply(this,arguments)}function Ce(){return(Ce=I($().m(function n(e){var t,r;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,re(["run","view",e,"--json",ve.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return v.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ae(n){var e=Oe(n);return e?"run:".concat(e):"unknown_run"}function $e(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Pe(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function qe(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&me.test(n)})}function Ee(n){return Ne.apply(this,arguments)}function Ne(){return(Ne=I($().m(function n(e){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,y(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Te(){return De.apply(this,arguments)}function De(){return(De=I($().m(function n(){var e,t,r,a,i,o,u,c,s,l,f,p,d;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue();case 1:return e=n.v,n.n=2,_e(e);case 2:return t=n.v,Qn("Fetching latest CI results..."),n.n=3,xe(e);case 3:if(r=n.v,a=E(r,3),i=a[0],o=a[1],u=a[2],c=je(i),s=Ie(c),l=E(s,2),f=l[0],p=l[1],d={summary:pe(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:u,latestCommits:t},!(Object.keys(f).length>0)){n.n=5;break}return n.n=4,Promise.all(Object.entries(f).map(I($().m(function n(e){var t,r,a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return t=E(e,2),r=t[0],a=t[1],n.n=1,Ue(r,a);case 1:return i=n.v,o=A,u=A({},i),c=Je,n.n=2,He(a.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 4:return d.failed_workflows=n.v,n.a(2,{output:fe(d),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=7;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=6,Promise.all(Object.entries(p).map(function(n){var e=E(n,2);return Ue(e[0],e[1])}));case 6:return d.running_test_related_workflows=n.v,n.a(2,{output:fe(d),exitCode:1});case 7:return n.a(2,{output:Me(t),exitCode:0})}},n)}))).apply(this,arguments)}function Le(n){var e,t="",r=O(n);try{for(r.s();!(e=r.n()).done;){var a=Pe(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function _e(n){return Ge.apply(this,arguments)}function Ge(){return(Ge=I($().m(function n(e){var t,r,a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return a=n.v,i=E(a,2),o=i[0],u=i[1],n.n=2,se("\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n commits(last: 3) {\n nodes {\n commit {\n committedDate\n abbreviatedOid\n messageHeadline\n }\n }\n }\n }\n }\n }\n",{owner:o,name:u,number:Number(e)});case 2:return c=n.v,n.a(2,(null!=(t=null==(r=c.data)||null==(r=r.repository)||null==(r=r.pullRequest)||null==(r=r.commits)?void 0:r.nodes)?t:[]).flatMap(function(n){var e,t,r,a=Ye(null==(e=n.commit)?void 0:e.committedDate),i=Ye(null==(t=n.commit)?void 0:t.abbreviatedOid),o=Ye(null==(r=n.commit)?void 0:r.messageHeadline);return a&&i&&o?[{date:a,hash:i,title:o}]:[]}).toReversed())}},n)}))).apply(this,arguments)}function Me(n){return"All CI workflows passed.\n".concat(function(n){if(0===n.length)return"Latest commits: unavailable.\n";return fe({latestCommits:n})}(n))}function Ue(n,e){return Fe.apply(this,arguments)}function Fe(){return(Fe=I($().m(function n(e,t){var r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return a=Oe(t.check),n.n=1,Re(a);case 1:return i=n.v,o=ze(i,Ye(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Ye(t.check.name),job_url:Ye(null==o?void 0:o.url),failed_step:Ke(o),run_id:a,run_url:null!=(r=Ye(null==i?void 0:i.url))?r:Ye(t.check.link),branch:Ye(null==i?void 0:i.headBranch),sha:Ye(null==i?void 0:i.headSha),conclusion:Ye(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function He(n){return We.apply(this,arguments)}function We(){return(We=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:if(t=Oe(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,re(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Je(n){return{failed_log:Be(n)}}function Be(n){var e=Qe(w(n));if(!we)return e;var t=de(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Qe(t.output):e}function Qe(n){return n.split("\n").map(function(n){return n.replace(ye,"")}).join("\n").trim()}function Ye(n){return"string"==typeof n&&n.length>0?n:void 0}function ze(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Ke(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function Ze(){return Ve.apply(this,arguments)}function Ve(){return(Ve=I($().m(function n(){var e,t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,et();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Xe();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Xe(){return nt.apply(this,arguments)}function nt(){return(nt=I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,at(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function et(){return tt.apply(this,arguments)}function tt(){return(tt=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,M(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!rt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function rt(n){return/no pull requests? found for branch/i.test(String(n))}function at(n,e){if(n.length>0)return n;throw new Error(e)}function it(n){return mt(n,"issue")}function ot(n){return mt(n,"pull request")}function ut(n){return ct.apply(this,arguments)}function ct(){return(ct=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,vt(a,i,it(e));case 2:return o=n.v,Qn("Fetched issue #".concat(o.number," messages.")),n.a(2,fe({issue:o}))}},n)}))).apply(this,arguments)}function st(n){return lt.apply(this,arguments)}function lt(){return(lt=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,ue();case 1:a=n.v,n.n=3;break;case 2:a=ot(e);case 3:return t=a,n.n=4,dt(t);case 4:return r=n.v,Qn("Fetched pull request #".concat(r.number," messages.")),n.a(2,fe({pull_request:r}))}},n)}))).apply(this,arguments)}function ft(){return pt.apply(this,arguments)}function pt(){return(pt=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,re(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!rt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,dt(t);case 3:return r=n.v,n.a(2,fe({pull_request:r}))}},n)}))).apply(this,arguments)}function dt(n){return ht.apply(this,arguments)}function ht(){return(ht=I($().m(function n(e){var t,r,a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,wt(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function mt(n,e){var t=String(n).trim();if(0===t.length&&Yn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];Yn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function vt(n,e,t){return yt.apply(this,arguments)}function yt(){return(yt=I($().m(function n(e,t,r){var a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Rt({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return a=n.v,n.n=2,It({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:At});case 2:return i=n.v,n.a(2,A(A({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function wt(n,e,t){return gt.apply(this,arguments)}function gt(){return(gt=I($().m(function n(e,t,r){var a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Rt({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return a=n.v,n.n=2,Promise.all([kt(e,t,r),St(e,t,r)]);case 2:return i=n.v,o=E(i,2),u=o[0],c=o[1],n.a(2,A(A({},a),{},{messages:[].concat(N(u),N(c)).toSorted(bt)}))}},n)}))).apply(this,arguments)}function bt(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function kt(n,e,t){return xt.apply(this,arguments)}function xt(){return(xt=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,It({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:At});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function St(n,e,t){return jt.apply(this,arguments)}function jt(){return(jt=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,It({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:$t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function It(n){return Ot.apply(this,arguments)}function Ot(){return(Ot=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,se(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,N(i.nodes.map(e.mapNode).filter(Pt))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Rt(n){return Ct.apply(this,arguments)}function Ct(){return(Ct=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,se(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||Yn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function At(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function $t(n){var e,t,r,a,i;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function Pt(n){return"string"==typeof n.body&&n.body.length>0}function qt(n){return Et.apply(this,arguments)}function Et(){return(Et=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f;return $().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,Xn(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,ee(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return u=n.v,c=u.trim(),o||Yn("Error: could not determine current branch"),c||Yn("Error: could not determine default branch"),o===c&&Yn("Error: current branch is the default branch (".concat(c,")")),s=["pr","create","--base",c,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),Qn("Creating pull request..."),n.n=3,ee(s,r);case 3:return l=fe,f=JSON,n.n=4,ee(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function Nt(n){return Tt.apply(this,arguments)}function Tt(){return(Tt=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,ue();case 1:return a=n.v,Qn("Updating pull request #".concat(a,"...")),n.n=2,Dt(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Dt(n,e,t){return Lt.apply(this,arguments)}function Lt(){return(Lt=I($().m(function n(e,t,r){var a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(["pr","edit",e].concat(N(t)),r);case 1:return a=fe,i=JSON,n.n=2,ee(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}var _t=["author"];function Gt(){return Mt.apply(this,arguments)}function Mt(){return(Mt=I($().m(function n(){var e,t,r,a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Vt(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=E(i[a],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function Ut(n,e,t,r,a){return Ft.apply(this,arguments)}function Ft(){return(Ft=I($().m(function n(e,t,r,a,i){var o,u,c,s,l,f,p,d,h;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,se(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(u=s.data)||null==(u=u.repository)||null==(u=u.pullRequest)?void 0:u.reviewThreads)||Yn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=O(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(c=l.pageInfo.endCursor)?c:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function Ht(n,e,t){return Wt.apply(this,arguments)}function Wt(){return(Wt=I($().m(function n(e,t,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Ut("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Jt(n,e,t){return Bt.apply(this,arguments)}function Bt(){return(Bt=I($().m(function n(e,t,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Ut("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,I($().m(function n(e){var t,r,i,o,u,c,s,l;return $().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(Zt),i=e.comments.pageInfo,o=null!=(t=i.endCursor)?t:void 0;case 2:if(!i.hasNextPage){n.n=4;break}return n.n=3,se("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:s=n.v,(l=null==(u=s.data)||null==(u=u.node)?void 0:u.comments)||Yn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,N(l.nodes.map(Zt))),i=l.pageInfo,o=null!=(c=i.endCursor)?c:void 0,n.n=2;break;case 4:a.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 5:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Qt(){return Yt.apply(this,arguments)}function Yt(){return(Yt=I($().m(function n(){var e,t,r,a,i,o,u;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return e=n.v,t=E(e,2),r=t[0],a=t[1],n.n=2,ue();case 2:return i=n.v,Qn("Fetching unresolved review threads..."),o=fe,n.n=3,Jt(r,a,i);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function zt(n){return Kt.apply(this,arguments)}function Kt(){return(Kt=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,y,w,g,b,k;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ie();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,ue();case 2:return o=n.v,g=Set,n.n=3,Ht(a,i,o);case 3:b=n.v,u=new g(b),Qn("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=O(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=E(f.value,2),h=d[0],m=E(d[1],2),v=m[0],y=m[1],Qn("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,se("\n mutation ($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $threadId, body: $body }) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: { threadId: $threadId }) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:y});case 7:w=n.v,null!=(p=w.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):Qn("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return Qn("Done."),n.a(2,fe({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Zt(n){var e,t=n.author;return A(A({},function(n,e){if(null==n)return{};var t,r,a=function(n,e){if(null==n)return{};var t={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;t[r]=n[r]}return t}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(r=0;r<i.length;r++)t=i[r],-1===e.indexOf(t)&&{}.propertyIsEnumerable.call(n,t)&&(a[t]=n[t])}return a}(n,_t)),{},{author:"string"==typeof t?t:null!=(e=null==t?void 0:t.login)?e:void 0})}function Vt(n){try{var e=JSON.parse(n);return function(n){if("object"!==T(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==T(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Yn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Yn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Xt(n){return nr.apply(this,arguments)}function nr(){return(nr=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function er(n){return"git merge-base ".concat(tr("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(tr(n)," HEAD")}function tr(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function rr(){return ar.apply(this,arguments)}function ar(){return(ar=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ze();case 1:return e=n.v,t=er(e),n.n=2,ft();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Clean up any temporary files created during the experiment.\n4. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(K,"`\n\n").concat(ir(r),"\n").trim())}},n)}))).apply(this,arguments)}function ir(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function or(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function ur(){return cr.apply(this,arguments)}function cr(){return(cr=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ze();case 1:return e=n.v,t=er(e),n.n=2,ft();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"branch",' against its base branch using `git diff "$(').concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}function sr(){return lr.apply(this,arguments)}function lr(){return(lr=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(["bunx","skills@latest","add",b(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var fr=new n;function pr(n){var t=fr.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(I($().m(function e(){var t,r,a,i,o,u,c,s,l,f=arguments;return $().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=E(r,2),o=i[0],u=i[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function dr(n,e,t){var r=fr.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(I($().m(function n(e){var r;return $().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}fr.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),fr.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sr();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),fr.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action(I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn();case 1:return n.a(2)}},n)}))),pr({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?nn(rr(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return V.test(n)}(e))return"## ".concat(on(n),"\n\n").concat(e)}}):tn(n,rr())}}),dr("review-codex","Run Codex review against the current branch",function(){return tn("codex",rr())}),dr("review-claude","Run Claude Code review against the current branch",function(){return tn("claude",rr())}),dr("review-gemini","Run Gemini CLI review against the current branch",function(){return tn("gemini",rr())}),pr({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?nn(Xt(it(e)),{allAgentsLabel:"planning agents"}):tn(n,Xt(it(e)))}}),dr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("codex",Xt(it(n)))}}),dr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("claude",Xt(it(n)))}}),dr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return tn("gemini",Xt(it(n)))}}),fr.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(I($().m(function n(e,t,r,a){var i;return $().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,tn(a.agent,or(e,t,r));case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),pr({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return tn(n,ur())}}),dr("simplify-codex","Run Codex PR simplification against the current branch",function(){return tn("codex",ur())}),dr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return tn("claude",ur())}),dr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return tn("gemini",ur())}),fr.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(I($().m(function n(e){var t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,zn();case 1:return t=n.v,n.n=2,qt({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),fr.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(I($().m(function n(e){var t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,Nt({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),fr.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),fr.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),fr.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,st(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),fr.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Qt();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),fr.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(I($().m(function n(){var e,t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gt();case 1:return e=n.v,n.n=2,zt(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await fr.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRMb2dnZXIge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIEFnZW50Q29tbWFuZE9wdGlvbnMge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgd2FpdE1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHJpbW1lZE91dHB1dCA9IG91dHB1dC50cmltKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KSA/PyBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke3RyaW1tZWRPdXRwdXR9YDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zdCBvdXRwdXRzID0gYWdlbnRPdXRwdXRzLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6IHtcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBicmFjZUV4cGFuZCwgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uIHtcbiAgZGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgZGV2RGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBwZWVyRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgd29ya3NwYWNlcz86IHN0cmluZ1tdIHwgeyBwYWNrYWdlcz86IHN0cmluZ1tdIH07XG59XG50eXBlIERlcGVuZGVuY3lNYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuaW50ZXJmYWNlIFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3Qge1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgcm9vdDogc3RyaW5nO1xufVxuXG5jb25zdCBERVBFTkRFTkNZX1NFQ1RJT05TID0gWydkZXBlbmRlbmNpZXMnLCAnZGV2RGVwZW5kZW5jaWVzJywgJ3BlZXJEZXBlbmRlbmNpZXMnLCAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnXSBhcyBjb25zdDtcbmNvbnN0IElHTk9SRURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsnLmdpdCcsICdub2RlX21vZHVsZXMnXSk7XG5jb25zdCBVUERBVEVfQ09NTUFORCA9IFsnYnVuJywgJ3VwZGF0ZScsICctLWxhdGVzdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVuRGVwZW5kZW5jaWVzKGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd29ya3NwYWNlRGlyZWN0b3JpZXMgPSBhd2FpdCBmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMoY3dkKTtcbiAgYXdhaXQgYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZCwgd29ya3NwYWNlRGlyZWN0b3JpZXMpO1xuICBhd2FpdCB1cGRhdGVQYWNrYWdlKGN3ZCwgJ3Jvb3QnKTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiB3b3Jrc3BhY2VEaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IHVwZGF0ZVBhY2thZ2Uoam9pbihjd2QsIGRpcmVjdG9yeSksIGRpcmVjdG9yeSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IHdvcmtzcGFjZVBhdHRlcm5zKGF3YWl0IHJlYWRQYWNrYWdlSnNvbihjd2QpKTtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBhd2FpdCBsaXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMoY3dkLCBwYXR0ZXJucyk7XG4gIGNvbnN0IGluY2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgaXNFeGNsdXNpb24gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKTtcbiAgICBjb25zdCBtYXRjaGVzID0gYXdhaXQgZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2QsIGRpcmVjdG9yaWVzLCBpc0V4Y2x1c2lvbiA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBtYXRjaGVzKSB7XG4gICAgICBpZiAoaXNFeGNsdXNpb24pIHtcbiAgICAgICAgZXhjbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZC5hZGQoZGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmluY2x1ZGVkXVxuICAgIC5maWx0ZXIoKGRpcmVjdG9yeSkgPT4gZGlyZWN0b3J5ICE9PSAnLicgJiYgIWV4Y2x1ZGVkLmhhcyhkaXJlY3RvcnkpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJucyh7IHdvcmtzcGFjZXMgPSBbXSB9OiBQYWNrYWdlSnNvbik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkod29ya3NwYWNlcykpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlcztcbiAgfVxuICByZXR1cm4gd29ya3NwYWNlcy5wYWNrYWdlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJvb3RzID0gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnMpO1xuXG4gIGZvciAoY29uc3QgeyBtYXhEZXB0aCwgcm9vdCB9IG9mIHJvb3RzKSB7XG4gICAgaWYgKCEoYXdhaXQgaXNEaXJlY3RvcnkoY3dkLCByb290KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBhd2FpdCBsaXN0RGlyZWN0b3JpZXMoY3dkLCByb290LCBtYXhEZXB0aCkpIHtcbiAgICAgIGRpcmVjdG9yaWVzLmFkZChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uZGlyZWN0b3JpZXNdO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyhwYXR0ZXJuczogc3RyaW5nW10pOiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290W10ge1xuICBjb25zdCByb290cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBjYW5kaWRhdGVSb290cyhwYXR0ZXJuKSkge1xuICAgICAgcm9vdHMuc2V0KHJvb3Qucm9vdCwgcm9vdHMuaGFzKHJvb3Qucm9vdCkgPyBtZXJnZWRNYXhEZXB0aChyb290cy5nZXQocm9vdC5yb290KSwgcm9vdC5tYXhEZXB0aCkgOiByb290Lm1heERlcHRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yb290cy5lbnRyaWVzKCldXG4gICAgLm1hcCgoW3Jvb3QsIG1heERlcHRoXSkgPT4gKHsgbWF4RGVwdGgsIHJvb3QgfSkpXG4gICAgLmZpbHRlcigocm9vdCkgPT4gIWhhc1BhcmVudFJvb3Qocm9vdCwgcm9vdHMpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQucm9vdC5sb2NhbGVDb21wYXJlKHJpZ2h0LnJvb3QpKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdHMocGF0dGVybjogc3RyaW5nKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpLm1hcCgoZXhwYW5kZWRQYXR0ZXJuKSA9PiAoe1xuICAgIG1heERlcHRoOiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgoZXhwYW5kZWRQYXR0ZXJuKSxcbiAgICByb290OiBjYW5kaWRhdGVSb290KGV4cGFuZGVkUGF0dGVybiksXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VkTWF4RGVwdGgobGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkLCByaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5tYXgobGVmdCwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRSb290KHJvb3Q6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3QsIHJvb3RzOiBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXS5zb21lKFxuICAgIChbb3RoZXJSb290LCBvdGhlck1heERlcHRoXSkgPT5cbiAgICAgIG90aGVyUm9vdCAhPT0gcm9vdC5yb290ICYmXG4gICAgICAob3RoZXJSb290ID09PSAnLicgfHwgcm9vdC5yb290LnN0YXJ0c1dpdGgoYCR7b3RoZXJSb290fS9gKSkgJiZcbiAgICAgIGNvdmVyc0RlcHRoKG90aGVyTWF4RGVwdGgsIHJvb3QubWF4RGVwdGgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvdmVyc0RlcHRoKHBhcmVudE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGNoaWxkTWF4RGVwdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50TWF4RGVwdGggPT09IHVuZGVmaW5lZCB8fCAoY2hpbGRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE1heERlcHRoID49IGNoaWxkTWF4RGVwdGgpO1xufVxuXG5mdW5jdGlvbiBjYW5kaWRhdGVSb290KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXR0ZXJuLnNwbGl0KCcvJykpIHtcbiAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgaGFzR2xvYk1hZ2ljKHNlZ21lbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwID8gJy4nIDogc2VnbWVudHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBoYXNHbG9iTWFnaWMoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvWyo/W1xcXXt9KCkhK10vLnRlc3Qoc2VnbWVudCk7XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aChwYXR0ZXJuOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAocGF0dGVybi5zcGxpdCgnLycpLmluY2x1ZGVzKCcqKicpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0aERlcHRoKHBhdHRlcm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnlTdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5KSk7XG4gICAgcmV0dXJuIGRpcmVjdG9yeVN0YXQuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3REaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgZGlyZWN0b3J5ID0gJy4nLCBtYXhEZXB0aD86IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbZGlyZWN0b3J5XTtcbiAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGRpcmVjdG9yeSkgPj0gbWF4RGVwdGgpIHtcbiAgICByZXR1cm4gZGlyZWN0b3JpZXM7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihqb2luKGN3ZCwgZGlyZWN0b3J5KSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNEaXJlY3RvcnkoKSB8fCBJR05PUkVEX0RJUkVDVE9SSUVTLmhhcyhlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGREaXJlY3RvcnkgPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSkuc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gICAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGNoaWxkRGlyZWN0b3J5KSA+IG1heERlcHRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZGlyZWN0b3JpZXMucHVzaCguLi4oYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgY2hpbGREaXJlY3RvcnksIG1heERlcHRoKSkpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdG9yaWVzO1xufVxuXG5mdW5jdGlvbiBwYXRoRGVwdGgocGF0aDogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhdGggPT09ICcuJyA/IDAgOiBwYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcmllczogc3RyaW5nW10sIHBhdHRlcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgbWF0Y2hlciA9IGdsb2JQYXR0ZXJuTWF0Y2hlcihub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgaWYgKG1hdGNoZXIoZGlyZWN0b3J5KSAmJiAoYXdhaXQgaGFzUGFja2FnZUpzb24oY3dkLCBkaXJlY3RvcnkpKSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgocGF0dGVybikucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcuJykge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4vJykgPyBub3JtYWxpemVkLnNsaWNlKDIpIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gcGF0aC5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICcnID8gJy4nIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gZ2xvYlBhdHRlcm5NYXRjaGVyKHBhdHRlcm46IHN0cmluZyk6IChkaXJlY3Rvcnk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIHJldHVybiAoZGlyZWN0b3J5KSA9PiBtaW5pbWF0Y2goZGlyZWN0b3J5LCBwYXR0ZXJuLCB7IGRvdDogdHJ1ZSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzUGFja2FnZUpzb24oY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25TdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5LCAncGFja2FnZS5qc29uJykpO1xuICAgIHJldHVybiBwYWNrYWdlSnNvblN0YXQuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkOiBzdHJpbmcsIHdvcmtzcGFjZURpcmVjdG9yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYXRhbG9nRGVwZW5kZW5jaWVzID0gW107XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIFsnLicsIC4uLndvcmtzcGFjZURpcmVjdG9yaWVzXSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKGRpcmVjdG9yeSA9PT0gJy4nID8gY3dkIDogam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjYXRhbG9nRGVwZW5kZW5jeU5hbWVzKHBhY2thZ2VKc29uKSkge1xuICAgICAgY2F0YWxvZ0RlcGVuZGVuY2llcy5wdXNoKGAke2RpcmVjdG9yeSA9PT0gJy4nID8gJ3Jvb3QnIDogZGlyZWN0b3J5fTogJHtkZXBlbmRlbmN5fWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXRhbG9nRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBbXG4gICAgICAnQ2Fubm90IHNhZmVseSB1cGRhdGUgQnVuIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgd2l0aCBjYXRhbG9nIHJlZmVyZW5jZXMuJyxcbiAgICAgICdVcGRhdGUgY2F0YWxvZyB2ZXJzaW9ucyBpbiB0aGUgcm9vdCBwYWNrYWdlLmpzb24sIHRoZW4gcnVuIGJ1biBpbnN0YWxsLicsXG4gICAgICBgQ2F0YWxvZy1tYW5hZ2VkIGRlcGVuZGVuY2llczogJHtjYXRhbG9nRGVwZW5kZW5jaWVzLmpvaW4oJywgJyl9YCxcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJHtwYWNrYWdlSnNvblBhdGh9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBERVBFTkRFTkNZX1NFQ1RJT05TKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcGFja2FnZUpzb25bc2VjdGlvbl07XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCdjYXRhbG9nOicpKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGFja2FnZShjd2Q6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuIyAke2xhYmVsfVxcbmApO1xuICBhd2FpdCBydW5Db21tYW5kKFVQREFURV9DT01NQU5ELCBjd2QpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2QsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCBpbiAke3JlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGN3ZCkgfHwgJy4nfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVByb2Nlc3NUaW1lb3V0LCBzdHJlYW1Ub1RleHQsIHRpbWVvdXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFOb2RlIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufVxuXG5pbnRlcmZhY2UgUnVuQ29tbWFuZE9wdGlvbnMge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn1cblxuY29uc3QgR0hfUkVUUllfTUFYX0FUVEVNUFRTID0gMztcbmNvbnN0IEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KGVycm9yTWVzc2FnZSA9ICdFcnJvcjogaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBsZXQgZmFpbHVyZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmV0cnkgPSBmYWxzZTtcbiAgICBjb25zdCBwcm9jZXNzVGltZW91dCA9IGNyZWF0ZVByb2Nlc3NUaW1lb3V0KHByb2MpO1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gdGltZW91dEVycm9yTWVzc2FnZShvdXRwdXQsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCk7XG4gICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0cnkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWA7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByb2Nlc3NUaW1lb3V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHJldHJ5KSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlTWVzc2FnZSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyT3V0cHV0ID0gYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKTtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IG5hbWVXaXRoT3duZXJPdXRwdXQudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSk7XG4gIHJldHVybiBwck51bWJlci50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gc3RydWN0dXJlZENsb25lKGRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrIHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaVJlc3VsdHMge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmludGVyZmFjZSBDb21wYWN0V29ya2Zsb3dSdW4ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuU3RlcCB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dSdW5Kb2Ige1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuRGV0YWlscyB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQckNvbW1pdE5vZGUge1xuICBjb21taXQ/OiB7XG4gICAgY29tbWl0dGVkRGF0ZT86IHN0cmluZztcbiAgICBhYmJyZXZpYXRlZE9pZD86IHN0cmluZztcbiAgICBtZXNzYWdlSGVhZGxpbmU/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBQckNvbW1pdHNSZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1pdHM/OiB7XG4gICAgICAgICAgbm9kZXM/OiBQckNvbW1pdE5vZGVbXTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXRlc3RDb21taXRTdW1tYXJ5IHtcbiAgZGF0ZTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB7fTtcbmNvbnN0IFBSX0NPTU1JVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWl0cyhsYXN0OiAzKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgY29tbWl0IHtcbiAgICAgICAgICAgICAgY29tbWl0dGVkRGF0ZVxuICAgICAgICAgICAgICBhYmJyZXZpYXRlZE9pZFxuICAgICAgICAgICAgICBtZXNzYWdlSGVhZGxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIHN1bW1hcnlbYnVja2V0XSA9IChzdW1tYXJ5W2J1Y2tldF0gPz8gMCkgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9IG5vb3A7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93OiBSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNpUmVzdWx0cy5jaGVja3MpIHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93W3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3dbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGxldCBsYXRlc3RDaGVjayA9IGZpcnN0Q2hlY2s7XG4gICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGxhdGVzdEF0dGVtcHRDaGVja3MpIHtcbiAgICAgICAgaWYgKGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGxhdGVzdENoZWNrKSkge1xuICAgICAgICAgIGxhdGVzdENoZWNrID0gY2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZ3JvdXBzLnNldChrZXksIFtjaGVja10pO1xuICB9XG5cbiAgbGV0IGxhdGVzdEdyb3VwOiBDaGVja1tdID0gW107XG4gIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkpIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGF0ZXN0R3JvdXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCBsYXRlc3RDb21taXRzID0gYXdhaXQgbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXIpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdENvbW1pdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHMpLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICBsZXQgbGF0ZXN0ID0gJyc7XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIGlmICh0aW1lc3RhbXAgPiBsYXRlc3QpIHtcbiAgICAgIGxhdGVzdCA9IHRpbWVzdGFtcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhdGVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8TGF0ZXN0Q29tbWl0U3VtbWFyeVtdPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDxQckNvbW1pdHNSZXNwb25zZT4oUFJfQ09NTUlUU19RVUVSWSwge1xuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICB9KTtcblxuICByZXR1cm4gKHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21taXRzPy5ub2RlcyA/PyBbXSlcbiAgICAuZmxhdE1hcCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IHN0cmluZ09yVW5kZWZpbmVkKG5vZGUuY29tbWl0Py5jb21taXR0ZWREYXRlKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8uYWJicmV2aWF0ZWRPaWQpO1xuICAgICAgY29uc3QgdGl0bGUgPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8ubWVzc2FnZUhlYWRsaW5lKTtcbiAgICAgIHJldHVybiBkYXRlICYmIGhhc2ggJiYgdGl0bGUgPyBbeyBkYXRlLCBoYXNoLCB0aXRsZSB9XSA6IFtdO1xuICAgIH0pXG4gICAgLnRvUmV2ZXJzZWQoKTtcbn1cblxuZnVuY3Rpb24gc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHM6IExhdGVzdENvbW1pdFN1bW1hcnlbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgQWxsIENJIHdvcmtmbG93cyBwYXNzZWQuXG4ke2Zvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24obGF0ZXN0Q29tbWl0cyl9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbihsYXRlc3RDb21taXRzOiBMYXRlc3RDb21taXRTdW1tYXJ5W10pOiBzdHJpbmcge1xuICBpZiAobGF0ZXN0Q29tbWl0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ0xhdGVzdCBjb21taXRzOiB1bmF2YWlsYWJsZS5cXG4nO1xuICB9XG5cbiAgcmV0dXJuIHlhbWxEdW1wKHsgbGF0ZXN0Q29tbWl0cyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgJ2doJyxcbiAgICAncmVwbycsXG4gICAgJ3ZpZXcnLFxuICAgICctLWpzb24nLFxuICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAnLS10ZW1wbGF0ZScsXG4gICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgXSk7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoZGVmYXVsdEJyYW5jaC50cmltKCksICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2hPdXRwdXQgPSBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICdnaCcsXG4gICAgICAncHInLFxuICAgICAgJ3ZpZXcnLFxuICAgICAgJy0tanNvbicsXG4gICAgICAnYmFzZVJlZk5hbWUnLFxuICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgJ3t7LmJhc2VSZWZOYW1lfX0nLFxuICAgIF0pO1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSBiYXNlQnJhbmNoT3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gL25vIHB1bGwgcmVxdWVzdHM/IGZvdW5kIGZvciBicmFuY2gvaS50ZXN0KFN0cmluZyhlcnJvcikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgdHlwZSBKc29uT2JqZWN0LFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZUNvbm5lY3Rpb24sXG4gIHR5cGUgTWV0YWRhdGFOb2RlLFxuICBwcm9ncmVzcyxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUHJSZXZpZXdOb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgICByZXZpZXdzPzogTWVzc2FnZUNvbm5lY3Rpb248UHJSZXZpZXdOb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZXNSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWV0YWRhdGFSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10udG9Tb3J0ZWQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudFByTnVtYmVyLCBleGl0V2l0aEVycm9yLCBnaCwgcHJvZ3Jlc3MsIHJ1bkNvbW1hbmQsIHlhbWxEdW1wIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Qck9wdGlvbnMge1xuICBib2R5Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQck9wdGlvbnMge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUHIoeyBib2R5LCB0aXRsZSB9OiBPcGVuUHJPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkT3V0cHV0ID0gYXdhaXQgcnVuQ29tbWFuZChbJ2dpdCcsICdicmFuY2gnLCAnLS1zaG93LWN1cnJlbnQnXSk7XG4gIGNvbnN0IGhlYWQgPSBoZWFkT3V0cHV0LnRyaW0oKTtcbiAgY29uc3QgYmFzZU91dHB1dCA9IGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKTtcbiAgY29uc3QgYmFzZSA9IGJhc2VPdXRwdXQudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5pbnRlcmZhY2UgUmV2aWV3Q29tbWVudE5vZGUge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFJldmlld1RocmVhZE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBKU09OIGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlcGx5SW5wdXQoaW5wdXQpO1xuICBjb25zdCBub3JtYWxpemVkUmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFt0aHJlYWRJZCwgYm9keV0gb2YgT2JqZWN0LmVudHJpZXMocGF5bG9hZC5yZXBsaWVzKSkge1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICBub3JtYWxpemVkUmVwbGllc1t0aHJlYWRJZF0gPSBib2R5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZFJlcGxpZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVJldmlld1RocmVhZHMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcixcbiAgb25UaHJlYWQ6ICh0aHJlYWQ6IFJldmlld1RocmVhZE5vZGUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVwb3NpdG9yeT86IHtcbiAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdUaHJlYWROb2RlW107XG4gICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4ocXVlcnksIHtcbiAgICAgIG93bmVyLFxuICAgICAgbmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgICAgIGN1cnNvcixcbiAgICB9KTtcbiAgICBjb25zdCByZXZpZXdUaHJlYWRzID0gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pO1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSByZXNwb25zZS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uICgkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7IHB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHkgfSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7IHRocmVhZElkOiAkdGhyZWFkSWQgfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBPbWl0PFJldmlld0NvbW1lbnROb2RlLCAnYXV0aG9yJz4gJiB7IGF1dGhvcj86IHN0cmluZyB9IHtcbiAgY29uc3QgeyBhdXRob3IsIC4uLmNvbW1lbnRXaXRob3V0QXV0aG9yIH0gPSBjb21tZW50O1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnRXaXRob3V0QXV0aG9yLFxuICAgIGF1dGhvcjogdHlwZW9mIGF1dGhvciA9PT0gJ3N0cmluZycgPyBhdXRob3IgOiAoYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGV4cGVyaW1lbnQuXG40LiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IHRoZSB2YWxpZCBmaW5kaW5ncywgdGhlIGV2aWRlbmNlIGZvciBlYWNoIG9uZSwgYW5kIHRoZSBwcm9wb3NlZCBmaXggd2l0aCBpdHMgbGlrZWx5IGltcGFjdC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQpfVxuYC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByQ29udGV4dFxuICAgID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XG5+fn5+eWFtbFxuJHtwckNvbnRleHQudHJpbSgpfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsOiBzdHJpbmcsIHBhZ2VOYW1lOiBzdHJpbmcsIHNjcmVlbnNob3REZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzY3JlZW5zaG90RGVzY3JpcHRpb24ucmVwbGFjZUFsbCgnXFxuJywgJyAnKS5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKTtcbiAgcmV0dXJuIGBcblVzZSBcXGBwbGF5d3JpZ2h0LWNsaVxcYCBza2lsbCB0byB0YWtlIGEgc2NyZWVuc2hvdCBvZiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIgYnkgbmF2aWdhdGluZyBmcm9tICR7aW5pdGlhbFVybH0gdG8gXCIke3BhZ2VOYW1lfVwiIHBhZ2UuXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gT3BlbiB0aGUgaW5pdGlhbCBwYWdlIGF0ICR7aW5pdGlhbFVybH0uXG4yLiBOYXZpZ2F0ZSBmcm9tIHRoYXQgaW5pdGlhbCBwYWdlIHVudGlsIHlvdSByZWFjaCB0aGUgcGFnZSBpZGVudGlmaWVkIGFzICR7cGFnZU5hbWV9LlxuICAgLSBJZiBjb2RlIGVycm9ycywgcnVudGltZSBmYWlsdXJlcywgb3IgYnJva2VuIFVJIGZsb3dzIHByZXZlbnQgbmF2aWdhdGlvbiwgaW52ZXN0aWdhdGUgdGhlIGNhdXNlIGluIHRoZSBsb2NhbCBjb2RlYmFzZSwgbWFrZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNvZGUgZml4LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHBhZ2UgY2FuIG5vdyBiZSByZWFjaGVkIGJlZm9yZSBjb250aW51aW5nLlxuICAgLSBJZiB5b3UgY2Fubm90IGZpeCB0aGUgZXJyb3JzLCByZXBvcnQgb24gdGhlIGVycm9ycyB0aGVuIHN0b3AuXG4zLiBDYXB0dXJlIGEgc2NyZWVuc2hvdCB0aGF0IGZvY3VzZXMgb24gdGhpcyB0YXJnZXQ6IFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIi5cbjQuIEtlZXAgdGhlIGdlbmVyYXRlZCBpbWFnZSBhcnRpZmFjdCBhbmQgcmVwb3J0IHRoZSBzY3JlZW5zaG90IGZpbGUgcGF0aCBwbHVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB3YXMgY2FwdHVyZWQuIElmIHlvdSBoYWQgdG8gZml4IGNvZGUgZmlyc3QsIGFsc28gc3VtbWFyaXplIHRoZSBmaXguXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCAke3ByQ29udGV4dCA/ICdwdWxsIHJlcXVlc3QnIDogJ2JyYW5jaCd9IGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZWFjaCBjaGFuZ2VkIGFyZWEuIFRoaXMgaW5jbHVkZXMgbmVhcmJ5IGZ1bmN0aW9ucywgdHlwZXMsIGNhbGwgc2l0ZXMsIHRlc3RzLCBjb25maWd1cmF0aW9ucywgYW5kIGFueSBvdGhlciBmaWxlcyB0aGF0IGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdHJ1bHkgbmVjZXNzYXJ5LlxuTGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGlkZW50aWZ5IHJlZHVuZGFuY2llcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLiBMb29rIGZvciBkdXBsaWNhdGUgbG9naWMsIHJlcGVhdGVkIGNvbmRpdGlvbmFscywgdW5uZWNlc3NhcnkgYWJzdHJhY3Rpb25zLCBvdmVybGFwcGluZyBjb2RlIHBhdGhzLCBkZWFkIGNvZGUsIG9yIGVkaXRzIG1hZGUgb2Jzb2xldGUgdXBvbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblByaW9yaXRpemUgc2ltcGxpZmljYXRpb25zIHRoYXQgcmVkdWNlIHRoZSByZXZpZXdlcidzIGJ1cmRlbiwgc3VjaCBhczpcbi0gUmVtb3ZpbmcgcmVkdW5kYW50IGVkaXRzIG9yIGRlYWQgY29kZS5cbi0gRWxpbWluYXRpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlLlxuLSBGbGF0dGVuaW5nIHVubmVjZXNzYXJpbHkgY29tcGxleCBsb2dpYyBpbnRyb2R1Y2VkIGluIHRoZSBkaWZmIChlLmcuLCB1c2luZyBlYXJseSByZXR1cm5zIHRvIHJlZHVjZSBuZXN0aW5nLCBzaW1wbGlmeWluZyBib29sZWFuIGV4cHJlc3Npb25zLCBvciByZW1vdmluZyByZWR1bmRhbnQgd3JhcHBlciBmdW5jdGlvbnMpLlxuXG5Db21taXQgYW5kIHB1c2ggeW91ciBjaGFuZ2VzLiBBZnRlcndhcmQsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IGhhdmUgcmVtb3ZlZC5cblxuJHtwckNvbnRleHQgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcXG5+fn5+eWFtbFxcbiR7cHJDb250ZXh0LnRyaW0oKX1cXG5+fn5+YCA6ICcnfVxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGFja2VkU2tpbGxzKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFxuICAgIFtcbiAgICAgICdidW54JyxcbiAgICAgICdza2lsbHNAbGF0ZXN0JyxcbiAgICAgICdhZGQnLFxuICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi8uLicsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgJy0tZ2xvYmFsJyxcbiAgICAgICctLXllcycsXG4gICAgICAnLS1za2lsbCcsXG4gICAgICAnKicsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY2xhdWRlLWNvZGUnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NvZGV4JyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdnZW1pbmktY2xpJyxcbiAgICBdLFxuICAgIHtcbiAgICAgIHdhaXRNZXNzYWdlOiAnSW5zdGFsbGluZyBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkuJyxcbiAgICB9XG4gICk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyB1cGRhdGVCdW5EZXBlbmRlbmNpZXMgfSBmcm9tICcuL2RlcHMvdXBkYXRlQnVuRGVwZW5kZW5jaWVzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2NyZWVuc2hvdFByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuaW1wb3J0IHsgaW5zdGFsbFBhY2tlZFNraWxscyB9IGZyb20gJy4vc2tpbGxzL2luc3RhbGxTa2lsbHMuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbnN0YWxsLXNraWxscycpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBhbGwgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5IGZvciBDbGF1ZGUgQ29kZSwgQ29kZXgsIGFuZCBHZW1pbmkgQ0xJJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBpbnN0YWxsUGFja2VkU2tpbGxzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ0RvbmVcXG4nKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1idW4tZGVwcycpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIGFsbCBCdW4gZGVwZW5kZW5jaWVzIGluIHRoZSByb290IHBhY2thZ2UgYW5kIHdvcmtzcGFjZSBwYWNrYWdlcycpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdXBkYXRlQnVuRGVwZW5kZW5jaWVzKCk7XG4gIH0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVSZWZlcmVuY2UpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY29kZXgnLCAnUnVuIENvZGV4IHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3NjcmVlbnNob3QnKVxuICAuZGVzY3JpcHRpb24oJ1Rha2UgYSBzY3JlZW5zaG90IHdpdGggdGhlIHNlbGVjdGVkIGFnZW50IHZpYSBwbGF5d3JpZ2h0LWNsaScpXG4gIC5hcmd1bWVudCgnPGluaXRpYWwtdXJsPicsICdJbml0aWFsIFVSTCB0byBvcGVuIGJlZm9yZSBuYXZpZ2F0aW5nJylcbiAgLmFyZ3VtZW50KCc8cGFnZS1uYW1lPicsICdQYWdlIG5hbWUgdG8gbmF2aWdhdGUgdG8gZnJvbSB0aGUgaW5pdGlhbCBwYWdlJylcbiAgLmFyZ3VtZW50KCc8ZGVzY3JpcHRpb24+JywgJ0Rlc2NyaXB0aW9uIG9mIHRoZSBwYXJ0IHRvIGNhcHR1cmUgaW4gdGhlIHNjcmVlbnNob3QnKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSBzY3JlZW5zaG90IGFnZW50JykuY2hvaWNlcyhbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSkubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKFxuICAgIGFzeW5jIChcbiAgICAgIGluaXRpYWxVcmw6IHN0cmluZyxcbiAgICAgIHBhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgICAgb3B0aW9uczogeyBhZ2VudDogJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaScgfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcih7IGJvZHk6IGJvZHkgfHwgdW5kZWZpbmVkLCB0aXRsZSB9KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHInKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgdGl0bGUgYW5kIGJvZHknKVxuICAuYXJndW1lbnQoJzx0aXRsZT4nLCAnUHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQcih7IGJvZHksIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVSZWZlcmVuY2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZVJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyIG9yIFVSTDsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJSZWZlcmVuY2U/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMiLCJhY3RpdmVQcm9jZXNzZXMiLCJTZXQiLCJjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQiLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJwcm9jZXNzVGltZW91dCIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsImV4aXRDb2RlIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwiZGV0YWNoZWQiLCJzdGRpbyIsImNyZWF0ZVByb2Nlc3NUaW1lb3V0IiwidGltZW91dE1zIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJ0aW1lZE91dCIsIkVycm9yIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNvbmNhdCIsImEiLCJqb2luIiwiY2xvc2UiLCJjbGVhciIsImYiLCJtZXNzYWdlIiwibWlsbGlzZWNvbmRzIiwiZm9ybWF0RHVyYXRpb24iLCJsZW5ndGgiLCJmb3JjZUtpbGxUaW1lciIsImFkZCIsIl9zdGVwMiIsIl9pdGVyYXRvcjIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9sb29wIiwic2lnbmFsIiwidmFsdWUiLCJwcm9jZXNzIiwiX3N0ZXAzIiwiX2l0ZXJhdG9yMyIsInMiLCJkb25lIiwia2lsbFByb2Nlc3MiLCJlcnIiLCJlIiwiZXhpdCIsInNpZ25hbE51bWJlciIsImluc3RhbGxDbGVhbnVwSGFuZGxlcnMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInVucmVmIiwiY2xlYXJUaW1lb3V0IiwicGlkIiwia2lsbCIsIl91bnVzZWQiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiZGVjb2RlciIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJmaW5hbENodW5rIiwiX3QiLCJfY29udGV4dDIiLCJUZXh0RGVjb2RlciIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRlY29kZSIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsImRvdENvdW50IiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsIkRFRkFVTFRfQUxMX0FHRU5UX0NPTU1BTkRfT1BUSU9OUyIsImFsbEFnZW50c0xhYmVsIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJhZ2VudE91dHB1dHMiLCJvdXRwdXRzIiwid2FpdE1lc3NhZ2VGb3IiLCJtYXAiLCJhZ2VudCIsIl9vcHRpb25zJG1hcE91dHB1dCIsIl9vcHRpb25zJG1hcE91dHB1dDIiLCJfb3B0aW9ucyIsInRyaW1tZWRPdXRwdXQiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJfcnVuQWdlbnRDb21tYW5kIiwiX29wdGlvbnMkd2FpdE1lc3NhZ2UiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJERVBFTkRFTkNZX1NFQ1RJT05TIiwiSUdOT1JFRF9ESVJFQ1RPUklFUyIsIlVQREFURV9DT01NQU5EIiwidXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiX3VwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsImN3ZCIsIndvcmtzcGFjZURpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImRpcmVjdG9yeSIsImZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsImFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsInVwZGF0ZVBhY2thZ2UiLCJfZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwicGF0dGVybnMiLCJkaXJlY3RvcmllcyIsImluY2x1ZGVkIiwiZXhjbHVkZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwicGF0dGVybiIsImlzRXhjbHVzaW9uIiwibWF0Y2hlcyIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ3b3Jrc3BhY2VQYXR0ZXJucyIsInJlYWRQYWNrYWdlSnNvbiIsImxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInN0YXJ0c1dpdGgiLCJleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFzIiwidG9Tb3J0ZWQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwiX3JlZiIsIl93b3Jrc3BhY2VzJHBhY2thZ2VzIiwiX3JlZiR3b3Jrc3BhY2VzIiwid29ya3NwYWNlcyIsIkFycmF5IiwiaXNBcnJheSIsInBhY2thZ2VzIiwiX2xpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInJvb3RzIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsIl9zdGVwNyR2YWx1ZSIsIm1heERlcHRoIiwicm9vdCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJfdDQiLCJfdDUiLCJ3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyIsImlzRGlyZWN0b3J5IiwibGlzdERpcmVjdG9yaWVzIiwiTWFwIiwiX2kiLCJfY2FuZGlkYXRlUm9vdHMiLCJjYW5kaWRhdGVSb290cyIsInNldCIsIm1lcmdlZE1heERlcHRoIiwiZ2V0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJzb21lIiwiX3JlZjQiLCJwYXJlbnRNYXhEZXB0aCIsImNoaWxkTWF4RGVwdGgiLCJfcmVmNSIsIm90aGVyUm9vdCIsIm90aGVyTWF4RGVwdGgiLCJoYXNQYXJlbnRSb290IiwiYnJhY2VFeHBhbmQiLCJub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuIiwiZXhwYW5kZWRQYXR0ZXJuIiwid29ya3NwYWNlUGF0dGVybk1heERlcHRoIiwiY2FuZGlkYXRlUm9vdCIsIk1hdGgiLCJtYXgiLCJzZWdtZW50cyIsInNwbGl0Iiwic2VnbWVudCIsImhhc0dsb2JNYWdpYyIsInRlc3QiLCJpbmNsdWRlcyIsInBhdGhEZXB0aCIsIl94NiIsIl9pc0RpcmVjdG9yeSIsImRpcmVjdG9yeVN0YXQiLCJzdGF0IiwiX3g3IiwiX3g4IiwiX3g5IiwiX2xpc3REaXJlY3RvcmllcyIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJlbnRyeSIsImNoaWxkRGlyZWN0b3J5IiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX3QwIiwicmVhZGRpciIsIndpdGhGaWxlVHlwZXMiLCJuYW1lIiwic2VwIiwicGF0aCIsIl94MCIsIl94MSIsIl94MTAiLCJfZXhwYW5kV29ya3NwYWNlUGF0dGVybiIsIm1hdGNoZXIiLCJfaXRlcmF0b3IwIiwiX3N0ZXAwIiwiX3QxIiwiX3QxMCIsImdsb2JQYXR0ZXJuTWF0Y2hlciIsImhhc1BhY2thZ2VKc29uIiwibm9ybWFsaXplZCIsIm5vcm1hbGl6ZVBhdGgiLCJyZXBsYWNlIiwibWluaW1hdGNoIiwiZG90IiwiX3gxMSIsIl94MTIiLCJfaGFzUGFja2FnZUpzb24iLCJfY2FsbGVlNyIsInBhY2thZ2VKc29uU3RhdCIsIl9jb250ZXh0NyIsImlzRmlsZSIsIl94MTMiLCJfeDE0IiwiX2Fzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9jYWxsZWU4IiwiY2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9pMyIsIl9hcnIiLCJwYWNrYWdlSnNvbiIsIl9pdGVyYXRvcjEiLCJfc3RlcDEiLCJkZXBlbmRlbmN5IiwiX2NvbnRleHQ4IiwiY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyIsIl94MTUiLCJfcmVhZFBhY2thZ2VKc29uIiwiX2NhbGxlZTkiLCJwYWNrYWdlSnNvblBhdGgiLCJfdDEyIiwiX3QxMyIsIl9jb250ZXh0OSIsIkpTT04iLCJyZWFkRmlsZSIsInBhcnNlIiwibmFtZXMiLCJkZXBlbmRlbmNpZXMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMiLCJPYmplY3QiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfeDE2IiwiX3gxNyIsIl91cGRhdGVQYWNrYWdlIiwiX2NhbGxlZTAiLCJsYWJlbCIsIl9jb250ZXh0MCIsInJ1bkNvbW1hbmQiLCJfeDE4IiwiX3gxOSIsIl9ydW5Db21tYW5kIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJyZWxhdGl2ZSIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJmYWlsdXJlTWVzc2FnZSIsInJldHJ5Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX2doIiwiYXJncyIsImdoQWxsb3dFeGl0Q29kZXMiLCJfZ2hBbGxvd0V4aXRDb2RlcyIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIm5hbWVXaXRoT3duZXJPdXRwdXQiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJwck51bWJlciIsImdyYXBocWwiLCJfZ3JhcGhxbCIsInF1ZXJ5IiwidmFycyIsImtleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwieWFtbER1bXAiLCJkYXRhIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RydWN0dXJlZENsb25lIiwic3Bhd25TeW5jU2FmZSIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInJlc3VsdCIsInNwYXduU3luYyIsImVuY29kaW5nIiwic3RhdHVzIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJydGtBdmFpbGFibGUiLCJub29wIiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfY2hlY2skYnVja2V0MiIsIl9zdW1tYXJ5JGJ1Y2tldCIsImNoZWNrIiwiYnVja2V0IiwiU3ludGF4RXJyb3IiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJzbGVlcFNlY29uZHMiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImtleXMiLCJsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImxhdGVzdEdyb3VwIiwidmFsdWVzIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsIl9sYXRlc3RBdHRlbXB0Q2hlY2tzIiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJ0ZXN0UmVsYXRlZENoZWNrIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3dvcmtmbG93UnVuIiwicnVuSWQiLCJydW5Kc29uIiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJfc2xlZXBTZWNvbmRzIiwic2Vjb25kcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJsYXRlc3RDb21taXRzIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsInBheWxvYWQiLCJsYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY3IiwiX3JlZjgiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJzdWNjZXNzZnVsQ2lPdXRwdXQiLCJsYXRlc3QiLCJfbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMiLCJfcmVzcG9uc2UkZGF0YSRyZXBvc2kiLCJfcmVzcG9uc2UkZGF0YSIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJudW1iZXIiLCJOdW1iZXIiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJjb21taXRzIiwibm9kZXMiLCJmbGF0TWFwIiwibm9kZSIsIl9ub2RlJGNvbW1pdCIsIl9ub2RlJGNvbW1pdDIiLCJfbm9kZSRjb21taXQzIiwiZGF0ZSIsInN0cmluZ09yVW5kZWZpbmVkIiwiY29tbWl0IiwiY29tbWl0dGVkRGF0ZSIsImhhc2giLCJhYmJyZXZpYXRlZE9pZCIsInRpdGxlIiwibWVzc2FnZUhlYWRsaW5lIiwidG9SZXZlcnNlZCIsImZvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24iLCJfY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX3N0cmluZ09yVW5kZWZpbmVkIiwicnVuIiwiZmFpbGVkSm9iIiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsImxpbmUiLCJqb2JOYW1lIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwiZGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaE91dHB1dCIsImJhc2VCcmFuY2giLCJpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmciLCJub3JtYWxpemVJc3N1ZU51bWJlciIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJub3JtYWxpemVQck51bWJlciIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl9mZXRjaElzc3VlTWVzc2FnZXMiLCJpc3N1ZU51bWJlciIsImlzc3VlIiwiaXNzdWVNZXNzYWdlcyIsImZldGNoUHJNZXNzYWdlcyIsIl9mZXRjaFByTWVzc2FnZXMiLCJyZXNvbHZlZFByTnVtYmVyIiwiY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwiZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwiX2ZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsInByTnVtYmVyT3V0cHV0IiwiX2N1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwicHJNZXNzYWdlcyIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsIl9pc3N1ZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTIiLCJjb21tZW50cyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl9wck1lc3NhZ2VzIiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTMiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsIl9wcklzc3VlQ29tbWVudHMiLCJfcmVzcG9uc2UkZGF0YTQiLCJfcHJSZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGE1IiwicmV2aWV3TWVzc2FnZSIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiY29uZmlnIiwiY3Vyc29yIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsImhhc01lc3NhZ2VCb2R5IiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsIl9mZXRjaE1ldGFkYXRhIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJhdXRob3IiLCJsb2dpbiIsImJvZHkiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiX3RlbXAiLCJoZWFkT3V0cHV0IiwiaGVhZCIsImJhc2VPdXRwdXQiLCJiYXNlIiwiY3JlYXRlQXJncyIsInVwZGF0ZVByIiwiX3VwZGF0ZVByIiwiZWRpdFByIiwiX2VkaXRQciIsImVkaXRBcmdzIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJub3JtYWxpemVkUmVwbGllcyIsInRocmVhZElkIiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJvblRocmVhZCIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJpc091dGRhdGVkIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJfdDYiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsIl9hdXRob3IkbG9naW4iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwicmVwbGFjZUFsbCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJpbnN0YWxsUGFja2VkU2tpbGxzIiwiX2luc3RhbGxQYWNrZWRTa2lsbHMiLCJmaWxlVVJMVG9QYXRoIiwiVVJMIiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfbGVuIiwiX2tleSIsIl9yZWYxMSIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxIiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX2NhbGxlZTEwIiwiX2NvbnRleHQxMCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQW1CTyxJQUtEQSxFQUEwQixDQUFDLFNBQVUsVUFBVyxVQUNoREMsRUFBa0IsSUFBSUMsSUFDeEJDLEdBQTJCLEVBSS9CLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBa0MzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBbENNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQU1LLFlBTkwsSUFBMUJmLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9jLEVBQWdCLE9BQVhmLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRa0IsTUFBTSxHQUFJLENBQ3JEQyxVQUFVLEVBQ1ZDLE1BQU8sQ0FBQyxTQUFVLE9BQVEsVUFFdEJoQixFQUFpQmlCLEVBQXFCbEIsRUFBTUYsRUFBUXFCLFdBQ3BEakIsRUFBbUJrQixFQUFtQnRCLEVBQVF1QixZQUFhdkIsRUFBUXdCLHFCQUFvQlgsRUFBQUUsRUFBQSxFQUNqRVUsRUFBb0J6QixFQUFRMEIsYUFBWSxLQUFBLEVBQWpELE9BQWJyQixFQUFhUSxFQUFBYyxFQUFBZCxFQUFBQyxFQUFBLEVBQUFELEVBQUFFLEVBQUEsRUFHd0JhLFFBQVFDLElBQUksQ0FDbkRDLEVBQWE1QixFQUFLTSxPQUFRLFNBQUN1QixHQUFLLE9BQUsxQixFQUFjMkIsTUFBTUQsRUFBTSxHQUMvREQsRUFBYTVCLEVBQUtPLE9BQVEsU0FBQ3NCLEdBQUssT0FBSzFCLEVBQWMyQixNQUFN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
|