@willbooster/agent-skills 1.6.2 → 1.7.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 +6 -7
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 r}from"node:child_process";import{createWriteStream as t}from"node:fs";import{mkdir as
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as r}from"node:child_process";import{createWriteStream as t}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as i,stderr as u}from"node:process";import{setTimeout as c}from"node:timers/promises";import{stringify as s}from"yaml";function l(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,t=Array(e);r<e;r++)t[r]=n[r];return t}function f(n){var e,r,t,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);a--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new d(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function d(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 d=function(n){this.s=n,this.n=n.next},d.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var r=this.s.return;return void 0===r?Promise.resolve({value:n,done:!0}):e(r.apply(this.s,arguments))},throw:function(n){var r=this.s.return;return void 0===r?Promise.reject(n):e(r.apply(this.s,arguments))}},new d(n)}function p(n,e,r,t,a,o,i){try{var u=n[o](i),c=u.value}catch(n){return void r(n)}u.done?e(c):Promise.resolve(c).then(t,a)}function h(n){return function(){var e=this,r=arguments;return new Promise(function(t,a){var o=n.apply(e,r);function i(n){p(o,t,a,i,u,"next",n)}function u(n){p(o,t,a,i,u,"throw",n)}i(void 0)})}}function m(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=j(n))||e){r&&(n=r);var t=0,a=function(){};return{s:a,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},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 o,i=!0,u=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return i=n.done,n},e:function(n){u=!0,o=n},f:function(){try{i||null==r.return||r.return()}finally{if(u)throw o}}}}function v(n,e,r){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var t=r.call(n,e);if("object"!=typeof t)return t;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:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function y(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function w(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?y(Object(r),!0).forEach(function(e){v(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):y(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function g(){
|
|
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,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,t,o,a){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return g(s,"_invoke",function(r,t,o){var a,u,c,s=0,l=o||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,r){return a=e,u=0,c=n,p.n=r,i}};function d(r,t){for(u=r,c=t,e=0;!f&&s&&!o&&e<l.length;e++){var o,a=l[e],d=p.p,h=a[2];r>3?(o=h===t)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((o=r<2&&d<a[1])?(u=0,p.v=t,p.n=a[1]):d<h&&(o=r<3||a[0]>t||t>h)&&(a[4]=r,a[5]=t,p.n=h,u=0))}if(o||r>1)return i;throw f=!0,t}return function(o,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;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(o="next"),e=a[o]){if(!(e=e.call(a,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=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:r.call(t,p))!==i)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(g(e={},t,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,g(n,o,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,g(f,"constructor",s),g(s,"constructor",c),c.displayName="GeneratorFunction",g(s,o,"GeneratorFunction"),g(f),g(f,o,"Generator"),g(f,t,function(){return this}),g(f,"toString",function(){return"[object Generator]"}),(b=function(){return{w:a,m:p}})()}function g(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}g=function(n,e,r,t){function a(e,r){g(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(a("next",0),a("throw",1),a("return",2))},g(n,e,r,t)}function k(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function S(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var t,o,a,i,u=[],c=!0,s=!1;try{if(a=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=a.call(r)).done)&&(u.push(t.value),u.length!==e);c=!0);}catch(n){s=!0,o=n}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(n,e)||x(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 j(n){return function(n){if(Array.isArray(n))return l(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||x(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 O(n){"@babel/helpers - typeof";return O="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},O(n)}function x(n,e){if(n){if("string"==typeof n)return l(n,e);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(n,e):void 0}}var $="PLEASE WAIT FOR UP TO 1 HOUR.";function I(n,e){return A.apply(this,arguments)}function A(){return A=h(b().m(function n(e,t){var o,a,i,u,c,s,l,f,p;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),a=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),i=C(t.waitMessage,t.waitIntervalSeconds),n.n=1,E(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(a.stdout,function(n){return u.write(n)}),P(a.stderr,function(n){return u.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=S(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return i(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),A.apply(this,arguments)}function P(n,e){return R.apply(this,arguments)}function R(){return(R=h(b().m(function n(e,r){var t,o,a,i,u,c,s,l,p;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],o=!1,a=!1,n.p=2,u=f(e);case 3:return n.n=4,u.next();case 4:if(!(o=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),t.push(l),null==r||r(l);case 5:o=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,p=n.v,a=!0,i=p;case 8:if(n.p=8,n.p=9,!o||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw i;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function C(n,e,r){if(void 0===e&&(e=10),void 0===r&&(r=function(n){return process.stderr.write(n)}),!n)return function(){};var t=setInterval(function(){r(".")},1e3*e);return r("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(t),r("\n")}}function E(n){return q.apply(this,arguments)}function q(){return q=h(b().m(function n(e){var r,i,u;return b().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=h(b().m(function n(){return b().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return r=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,o(a(e),{recursive:!0});case 3:return(i=t(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){i.writable&&i.write(n)},close:function(){var n=h(b().m(function n(){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){i.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,u=n.v,r(u),n.a(2,{write:function(){},close:function(){var n=h(b().m(function n(){return b().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),q.apply(this,arguments)}var _="There is no concern.",T=["codex","claude","gemini"],N=new RegExp("\\b".concat("there is no concern","\\b"),"i");function L(){return(L=h(b().m(function n(e){var r,t,o;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,e;case 1:return r=n.v,t=C(J("review agents")),n.p=2,n.n=3,Promise.all(T.map(h(b().m(function n(e){var t;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,D(e,r,{waitMessage:!1});case 1:if(!H(t=n.v.trim())){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,"## ".concat(M(e),"\n\n").concat(t))}},n)}))));case 3:return o=n.v.filter(function(n){return void 0!==n}),n.a(2,o.length>0?o.join("\n\n"):_);case 4:return n.p=4,t(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function D(n,e,r){return F.apply(this,arguments)}function F(){return(F=h(b().m(function n(e,r,t){var o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),o=I,a=G,i=e,n.n=1,r;case 1:return n.a(2,o(a(i,n.v),{logFilePath:W(e),waitMessage:void 0===t.waitMessage?J(M(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function G(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 M(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function H(n){return N.test(n)}function J(n){return"Waiting for ".concat(n," to finish. ").concat($)}function W(n){return"logs/".concat(n,"-").concat((e=new Date,r=S([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(B),5),t=r[0],o=r[1],a=r[2],i=r[3],u=r[4],"".concat(t).concat(o,"-").concat(a).concat(i).concat(u)),".log");var e,r,t,o,a,i,u}function B(n){return n.toString().padStart(2,"0")}var U={blockQuote:"literal",lineWidth:0},Q=/\btest\b/i,Y="Waiting for test-related workflows to finish. ".concat($),z=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function Z(n){u.write("".concat(n,"\n"))}function K(n,e){void 0===e&&(e=1),u.write("".concat(n,"\n")),process.exit(e)}function V(n,e,r){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(r)}function X(){return nn.apply(this,arguments)}function nn(){return(nn=h(b().m(function n(){return b().w(function(n){for(;;)switch(n.n){case 0:if(!i.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Gn(i);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function en(){return rn.apply(this,arguments)}function rn(){return(rn=h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:K("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function tn(n,e){return on.apply(this,arguments)}function on(){return on=h(b().m(function n(e,t){var o,a,i,u,s;return b().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),a=null!=(o=t.allowedExitCodes)?o:[],i=b().m(function n(){var o,i,u,l,f,p,d,h;return b().w(function(n){for(;;)switch(n.n){case 0:return i=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?i.stdin.end(t.stdinData):i.stdin.end(),n.n=1,Promise.all([Gn(i.stdout),Gn(i.stderr),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=S(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(V(e,d,h)&&s<3)){n.n=4;break}return Z("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,c(1e3*s);case 3:return n.a(2,0);case 4:K(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(k(i()),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:s+=1,n.n=1;break;case 5:K("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),on.apply(this,arguments)}function an(n,e){return un.apply(this,arguments)}function un(){return(un=h(b().m(function n(e,r){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["gh"].concat(j(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(n,e,r){return sn.apply(this,arguments)}function sn(){return(sn=h(b().m(function n(e,r,t){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["gh"].concat(j(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=h(b().m(function n(){var e,r,t,o,a;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,an(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=S(r,2),o=t[0],a=t[1],o&&a||K("Error: could not determine current repository"),n.a(2,[o,a])}},n)}))).apply(this,arguments)}function pn(){return dn.apply(this,arguments)}function dn(){return(dn=h(b().m(function n(){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,an(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function hn(n,e){return mn.apply(this,arguments)}function mn(){return(mn=h(b().m(function n(e,r){var t,o,a,i,u,c,s,l,f;return b().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],o=0,a=Object.entries(r);case 1:if(!(o<a.length)){n.n=4;break}if(i=S(a[o],2),u=i[0],void 0!==(c=i[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:o++,n.n=1;break;case 4:return f=JSON,n.n=5,an(t,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"),K("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function vn(n){var e,r;return y(y({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function wn(n,e,r,t,o){return yn.apply(this,arguments)}function yn(){return(yn=h(b().m(function n(e,r,t,o,a){var i,u,c,s,l,f,p,d,h,v,w,y;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,hn(e,{owner:r,name:t,number:Number(o),cursor:i});case 1:if(v=u=n.v.data,h=null==v){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}w=void 0,n.n=5;break;case 4:w=u.reviewThreads;case 5:(s=w)||K("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=m(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,y=n.v,l.e(y);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:i=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function bn(n,e,r){return gn.apply(this,arguments)}function gn(){return(gn=h(b().m(function n(e,r,t){var o;return b().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,wn("\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,r,t,function(n){n.isResolved||o.push(n.id)});case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function kn(n,e,r){return Sn.apply(this,arguments)}function Sn(){return(Sn=h(b().m(function n(e,r,t){var o;return b().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,wn("\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,r,t,h(b().m(function n(e){var r,t,a,i,u,c,s,l,f,p;return b().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:t=e.comments.nodes.map(vn),a=e.comments.pageInfo,i=null!=(r=a.endCursor)?r:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,hn("\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:i});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||K("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,j(s.nodes.map(vn))),a=s.pageInfo,i=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:o.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:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function jn(n){return s(n,U)}function On(n){return JSON.parse(JSON.stringify(n))}function xn(n){return $n.apply(this,arguments)}function $n(){return($n=h(b().m(function n(e){var r,t,o,a,i,u,c,s,l,f;return b().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,cn(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,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var r,t,o=null!=(r=e.bucket)?r:"";return n[o]=(null!=(t=n[o])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(o=l.pending)?o:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(i=l.cancel)?i:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function In(n,e,r,t){return An.apply(this,arguments)}function An(){return(An=h(b().m(function n(e,r,t,o){var a,i,c,s,l,f,p,d;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Dn),void 0===t&&(t=xn),void 0===o&&(o=function(n){return u.write(n)}),a=0,n.n=1,t(e);case 1:i=n.v,c=function(){},n.p=2;case 3:if(s=Pn(i),l=Rn(s),f=S(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[i,a,!1]);case 4:if(!(a>=360)){n.n=5;break}return n.a(2,[i,a,!0]);case 5:return 1===(a+=1)&&(c=C(Y,10,o)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:i=n.v;case 8:n.n=3;break;case 9:return n.p=9,c(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Pn(n){var e=n.checks.reduce(function(n,e){var r=e.workflow||e.name||"unknown_workflow";return null!=n[r]||(n[r]=[]),n[r].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,r=S(n,2),t=r[0],o=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Cn(n);return e?"run:".concat(e):"unknown_run"}(e),t=n.get(r);return t?(t.push(e),n):(n.set(r,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Nn(e)>Nn(n)?e:n},[])}(r[1]),a=o[0];a||K("Error: no checks found for workflow ".concat(t));var i=null!=(e=o.reduce(function(n,e){return n?Tn(e)>Tn(n)?e:n:e},void 0))?e:a;return[t,{classification:_n(o),check:i,checks:o}]}))}function Rn(n){for(var e={},r={},t=0,o=Object.entries(n);t<o.length;t++){var a=S(o[t],2),i=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ln(n)})&&(r[i]=u):e[i]=u}return[e,r]}function Cn(n){var e,r=null==n?void 0:n.link;if(r)return null==(e=r.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function En(n){return qn.apply(this,arguments)}function qn(){return(qn=h(b().m(function n(e){var r,t;return b().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,cn(["run","view",e,"--json",z.join(",")],[1]);case 2:if(0!==(r=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(r));case 4:if(n.p=4,!((t=n.v)instanceof SyntaxError)){n.n=5;break}return u.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(t.message,"\n")),n.a(2,void 0);case 5:throw t;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function _n(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 Tn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Nn(n){return n.reduce(function(n,e){var r=Tn(e);return r>n?r:n},"")}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Q.test(n)})}function Dn(n){return Fn.apply(this,arguments)}function Fn(){return(Fn=h(b().m(function n(e){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,c(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Gn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=h(b().m(function n(e){var r,t,o,a,i,u,c,s;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],t=!1,o=!1,n.p=2,i=f(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}c=u.value,r.push(Buffer.from(c));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,s=n.v,o=!0,a=s;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!o){n.n=11;break}throw a;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Hn(){return Jn.apply(this,arguments)}function Jn(){return(Jn=h(b().m(function n(){var e,r,t,o,a,i,u,c;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en();case 1:for(e=n.v,r=re(e),t={},o=0,a=Object.entries(r.replies);o<a.length;o++)i=S(a[o],2),u=i[0],"string"==typeof(c=i[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Wn(n){return Bn.apply(this,arguments)}function Bn(){return(Bn=h(b().m(function n(e){var r,t,o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,an(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||K("Error: could not determine current branch"),t||K("Error: could not determine default branch"),r===t&&K("Error: current branch is the default branch (".concat(t,")")),o=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&o.push("--body-file","-"),Z("Creating pull request..."),n.n=3,an(o,e);case 3:return a=jn,i=JSON,n.n=4,an(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Un(){return Qn.apply(this,arguments)}function Qn(){return(Qn=h(b().m(function n(){var e,r,t,o,a,i,u;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return e=n.v,r=S(e,2),t=r[0],o=r[1],n.n=2,pn();case 2:return a=n.v,Z("Fetching unresolved review threads..."),i=jn,n.n=3,kn(t,o,a);case 3:return u=n.v,n.a(2,i({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Yn(n){return zn.apply(this,arguments)}function zn(){return(zn=h(b().m(function n(e){var r,t,o,a,i,u,c,s,l,f,p,d,h,v,w,y,g,k,j,O;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ln();case 1:return r=n.v,t=S(r,2),o=t[0],a=t[1],n.n=2,pn();case 2:return i=n.v,k=Set,n.n=3,bn(o,a,i);case 3:j=n.v,u=new k(j),Z("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=m(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=S(f.value,2),h=d[0],v=S(d[1],2),w=v[0],y=v[1],Z("Processing ".concat(h+1,"/").concat(s.length,": ").concat(w)),u.has(w)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,hn("\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:w,body:y});case 7:g=n.v,null!=(p=g.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(w):Z("Warning: failed to resolve thread ".concat(w,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,O=n.v,l.e(O);case 11:return n.p=11,l.f(),n.f(11);case 12:return Z("Done."),n.a(2,jn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Zn(){return Kn.apply(this,arguments)}function Kn(){return(Kn=h(b().m(function n(){var e,r,t,o,a,i,u,c,s,l,f,p,d,m,v;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return e=n.v,Z("Fetching latest CI results..."),n.n=2,In(e);case 2:return r=n.v,t=S(r,3),o=t[0],a=t[1],i=t[2],u=Pn(o),c=Rn(u),s=S(c,2),l=s[0],f=s[1],m=Object,n.n=3,Promise.all(Object.entries(u).map(h(b().m(function n(e){var r,t,o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:return r=S(e,2),t=r[0],o=r[1],a=o.check,n.n=1,En(Cn(a));case 1:return i=n.v,n.a(2,[t,{classification:o.classification,check:On(a),workflowRun:i&&On(i)}])}},n)}))));case 3:if(p=m.fromEntries.call(m,n.v),d={latest_ci_results:o,waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:i,latest_workflow_results:p},!(Object.keys(l).length>0)){n.n=5;break}return v=Object,n.n=4,Promise.all(Object.entries(l).map(h(b().m(function n(e){var r,t,o,a,i,u;return b().w(function(n){for(;;)switch(n.n){case 0:if(r=S(e,2),t=r[0],o=r[1],a=Cn(o.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,n.n=2,cn(["run","view",a,"--log-failed"],[1]);case 2:return u=n.v,n.a(2,[i,u])}},n)}))));case 4:return d.failed_workflow_outputs=v.fromEntries.call(v,n.v),n.a(2,{output:jn(d),exitCode:1});case 5:if(!(Object.keys(f).length>0)){n.n=6;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",d.running_test_related_workflows=Object.keys(f),n.a(2,{output:jn(d),exitCode:1});case 6:return d.test_workflow_output="All workflows are successful.",n.a(2,{output:jn(d),exitCode:0})}},n)}))).apply(this,arguments)}function Vn(n){return Xn.apply(this,arguments)}function Xn(){return(Xn=h(b().m(function n(e){var r,t,o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return r=n.v,t=S(r,2),o=t[0],a=t[1],n.n=2,te(o,a,e);case 2:return i=n.v,Z("Fetched issue #".concat(i.number," messages.")),n.a(2,jn({issue:i}))}},n)}))).apply(this,arguments)}function ne(n){return ee.apply(this,arguments)}function ee(){return(ee=h(b().m(function n(e){var r,t,o,a,i,u,c;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:if(r=n.v,t=S(r,2),o=t[0],a=t[1],null==e){n.n=2;break}c=e,n.n=4;break;case 2:return n.n=3,pn();case 3:c=n.v;case 4:return i=c,n.n=5,ae(o,a,i);case 5:return u=n.v,Z("Fetched pull request #".concat(u.number," messages.")),n.a(2,jn({pull_request:u}))}},n)}))).apply(this,arguments)}function re(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||K("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&K("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function te(n,e,r){return oe.apply(this,arguments)}function oe(){return(oe=h(b().m(function n(e,r,t){var o,a;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,he({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:r,number:t,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return o=n.v,n.n=2,pe({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:ve});case 2:return a=n.v,n.a(2,y(y({},o),{},{messages:a}))}},n)}))).apply(this,arguments)}function ae(n,e,r){return ie.apply(this,arguments)}function ie(){return(ie=h(b().m(function n(e,r,t){var o,a,i,u,c;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,he({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:r,number:t,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return o=n.v,n.n=2,Promise.all([ce(e,r,t),le(e,r,t)]);case 2:return a=n.v,i=S(a,2),u=i[0],c=i[1],n.a(2,y(y({},o),{},{messages:[].concat(j(u),j(c)).sort(ue)}))}},n)}))).apply(this,arguments)}function ue(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function ce(n,e,r){return se.apply(this,arguments)}function se(){return(se=h(b().m(function n(e,r,t){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pe({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:ve});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function le(n,e,r){return fe.apply(this,arguments)}function fe(){return(fe=h(b().m(function n(e,r,t){return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pe({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:we});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pe(n){return de.apply(this,arguments)}function de(){return(de=h(b().m(function n(e){var r,t,o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return i=e,n.n=2,hn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(a=i.selectConnection.call(i,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,j(a.nodes.map(e.mapNode).filter(ye))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(o=a.pageInfo.endCursor)?o:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function he(n){return me.apply(this,arguments)}function me(){return(me=h(b().m(function n(e){var r,t,o,a,i;return b().w(function(n){for(;;)switch(n.n){case 0:return i=e,n.n=1,hn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=i.selectMetadata.call(i,n.v))||K("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(r=null==(t=a.author)?void 0:t.login)?r:void 0,body:null!=(o=a.body)?o:""})}},n)}))).apply(this,arguments)}function ve(n){var e,r;return{type:"comment",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function we(n){var e,r,t,o,a;return{type:"review",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,state:null!=(t=n.state)?t:void 0,createdAt:null!=(o=n.submittedAt)?o:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function ye(n){return"string"==typeof n.body&&n.body.length>0}function be(){return ge.apply(this,arguments)}function ge(){return(ge=h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return e=ke,n.n=1,I(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ke(n,e){if(n.length>0)return n;throw new Error(e)}function Se(){return je.apply(this,arguments)}function je(){return(je=h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,be();case 1:return e=n.v,n.a(2,"\nReview the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim 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 claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment 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.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(_,"`\n").trim())}},n)}))).apply(this,arguments)}function Oe(){return xe.apply(this,arguments)}function xe(){return(xe=h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,be();case 1:return e=n.v,n.a(2,"\nSimplify the current branch against the repository's default branch using `git diff \"$(git merge-base ".concat(e," HEAD)\"`.\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").trim())}},n)}))).apply(this,arguments)}var $e=new n;function Ie(n){$e.command(n.name).description(n.description).allowExcessArguments(!1).addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(h(b().m(function e(r){var t;return b().w(function(e){for(;;)switch(e.n){case 0:return t=process.stdout,e.n=1,n.run(r.agent);case 1:t.write.call(t,e.v);case 2:return e.a(2)}},e)})))}function Ae(n,e,r){$e.command(n).description(e).allowExcessArguments(!1).action(h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,r();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}$e.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Ie({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?function(n){return L.apply(this,arguments)}(Se()):D(n,Se())}}),Ae("review-codex","Run Codex review against the current branch",function(){return D("codex",Se())}),Ae("review-claude","Run Claude Code review against the current branch",function(){return D("claude",Se())}),Ae("review-gemini","Run Gemini CLI review against the current branch",function(){return D("gemini",Se())}),Ie({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 D(n,Oe())}}),Ae("simplify-codex","Run Codex PR simplification against the current branch",function(){return D("codex",Oe())}),Ae("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return D("claude",Oe())}),Ae("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return D("gemini",Oe())}),$e.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(h(b().m(function n(){var e,r;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X();case 1:return e=n.v,n.n=2,Wn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),$e.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),$e.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue-number>","GitHub issue number").allowExcessArguments(!1).action(h(b().m(function n(e){var r;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),$e.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr-number]","GitHub pull request number; defaults to the current branch pull request").allowExcessArguments(!1).action(h(b().m(function n(e){var r;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ne(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),$e.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(h(b().m(function n(){var e;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Un();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),$e.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(h(b().m(function n(){var e,r;return b().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Hn();case 1:return e=n.v,n.n=2,Yn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await $e.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcmVwby9kZWZhdWx0QnJhbmNoLnRzIiwiLi4vc3JjL3Byb21wdHMvcmV2aWV3UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xuICB3YWl0SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xufTtcblxudHlwZSBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1BMRUFTRSBXQUlUIEZPUiBVUCBUTyAxIEhPVVIuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mob3B0aW9ucy53YWl0TWVzc2FnZSwgb3B0aW9ucy53YWl0SW50ZXJ2YWxTZWNvbmRzKTtcbiAgY29uc3QgY29tbWFuZExvZ2dlciA9IGF3YWl0IGNyZWF0ZUNvbW1hbmRMb2dnZXIob3B0aW9ucy5sb2dGaWxlUGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCwgKGNodW5rKSA9PiBjb21tYW5kTG9nZ2VyLndyaXRlKGNodW5rKSksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNvbnN0IGNodW5rVGV4dCA9IHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgY2h1bmtzLnB1c2goY2h1bmtUZXh0KTtcbiAgICBvbkNodW5rPy4oY2h1bmtUZXh0KTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICB9LCB3YWl0SW50ZXJ2YWxTZWNvbmRzICogMTAwMCk7XG5cbiAgd3JpdGVQcm9ncmVzcyhgJHt3YWl0TWVzc2FnZX0gT25lIGRvdCByZXByZXNlbnRzICR7d2FpdEludGVydmFsU2Vjb25kc30gc2Vjb25kczogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzLCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxudHlwZSBBZ2VudENvbW1hbmRPcHRpb25zID0ge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMocHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcigncmV2aWV3IGFnZW50cycpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dHMgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IChcbiAgICAgICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQsIHtcbiAgICAgICAgICAgICAgd2FpdE1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLnRyaW0oKTtcbiAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiAnQ29kZXgnO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gJ0NsYXVkZSBDb2RlJztcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuICdHZW1pbmkgQ0xJJztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyB5YW1sU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4uL3lhbWwuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDM2MDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gYFdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLiAke1dBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklOR31gO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gKCkgPT4ge307XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkTGF0ZXN0KS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjaGVjayA9IHJlc3VsdC5jaGVjaztcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ya2Zsb3dSdW4od29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgICAgY2hlY2s6IGRlZXBDb3B5KGNoZWNrKSxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuOiBydW4gJiYgZGVlcENvcHkocnVuKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbGF0ZXN0X2NpX3Jlc3VsdHM6IGNpUmVzdWx0cyxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0czogbGF0ZXN0V29ya2Zsb3dSZXN1bHRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgICAgICAgICBpZiAoIXJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLiddO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pXTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBpc3N1ZU51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID8/IChhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSk7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAgICdnaCcsXG4gICAgICAgICdyZXBvJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gICAgICBdKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50RGVmYXVsdEJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSBhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggJHtkZWZhdWx0QnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZvciBlYWNoIHJldmlldyBjb21tZW50LCBkbyB0aGUgZm9sbG93aW5nIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgY29tbWVudDpcbjEuIENvbGxlY3QgdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkOlxuICAgLSBSZWFkIHRoZSBjb21tZW50IGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IGNsYWltIGJlaW5nIG1hZGUuXG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuMi4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGNsYWltIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBjbGFpbSBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIEp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1lbnQgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG5SZXBvcnQgb25seSB0aGUgY29tbWVudHMgeW91IGp1ZGdlZCB2YWxpZCwgYW5kIGluY2x1ZGUgYSBzaG9ydCBiYXNpcyBmb3IgZWFjaCBvbmUgdGhhdCBjaXRlcyB0aGUgZXZpZGVuY2UgeW91IHVzZWQsIHN1Y2ggYXMgdGhlIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciByZWxldmFudCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBEbyBub3QgbW9kaWZ5IGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLCByZXNwb25kIHdpdGggZXhhY3RseTogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnREZWZhdWx0QnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJChnaXQgbWVyZ2UtYmFzZSAke2RlZmF1bHRCcmFuY2h9IEhFQUQpXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuYC50cmltKCk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBydW5BZ2VudENvbW1hbmQsIHJ1bkFsbEFnZW50Q29tbWFuZHMgfSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJyA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSkgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBvcGVuUHIoYm9keSB8fCB1bmRlZmluZWQpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlLW51bWJlcj4nLCAnR2l0SHViIGlzc3VlIG51bWJlcicpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVOdW1iZXI6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHItbnVtYmVyXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlcjsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJOdW1iZXI/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXIpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBydW46IChtb2RlOiBUTW9kZSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoY29uZmlnLm5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbilcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGFnZW50OiBUTW9kZSB9KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgcnVuOiAoKSA9PiBQcm9taXNlPHN0cmluZz4pOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IHJ1bigpKTtcbiAgICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkciLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsImNsb3NlIiwiZiIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiX3QiLCJfY29udGV4dDIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3MiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwicnVuQWdlbnRDb21tYW5kIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsInRyaW0iLCJ1bmRlZmluZWQiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwibGVuZ3RoIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0ZXN0IiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInBhZFN0YXJ0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJleGl0Q29kZSIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImlucHV0IiwicnVuQ29tbWFuZCIsIl9ydW5Db21tYW5kIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g4IiwiX3g5IiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJKU09OIiwicGFyc2UiLCJjYWxsIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsIl9vYmplY3RTcHJlYWQiLCJhdXRob3IiLCJsb2dpbiIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE2IiwiX3gxNyIsIl94MTgiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MTkiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjAiLCJfeDIxIiwiX3gyMiIsIl94MjMiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjQiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNSIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjYiLCJfY2FsbGVlMTUiLCJfdDEwIiwiX2NvbnRleHQxNiIsIkJ1ZmZlciIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwicGF5bG9hZCIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJib2R5IiwiX2NvbnRleHQxNyIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJvcGVuUHIiLCJfeDI3IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOCIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOCIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJfdDEzIiwiX3QxNCIsIl9jb250ZXh0MTkiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3gyOCIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX3Jlc3BvbnNlJGRhdGEiLCJfc3RlcDMkdmFsdWUiLCJpbmRleCIsIl9zdGVwMyR2YWx1ZSQiLCJfdDE1IiwiX3QxNiIsIl90MTciLCJfY29udGV4dDIwIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX2NhbGxlZTIyIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsImxhdGVzdFdvcmtmbG93UmVzdWx0cyIsIl90MjAiLCJfdDIxIiwiX2NvbnRleHQyMyIsIl9jYWxsZWUyMCIsIl9yZWY0IiwiX3JlZjYiLCJydW4iLCJfY29udGV4dDIxIiwibGF0ZXN0X2NpX3Jlc3VsdHMiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsImxhdGVzdF93b3JrZmxvd19yZXN1bHRzIiwiX2NhbGxlZTIxIiwiX3JlZjciLCJfcmVmOSIsIl90MTgiLCJfdDE5IiwiX2NvbnRleHQyMiIsImZhaWxlZF93b3JrZmxvd19vdXRwdXRzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfeDI5IiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsIl9jYWxsZWUyMyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjYiLCJpc3N1ZSIsIl9jb250ZXh0MjQiLCJpc3N1ZU1lc3NhZ2VzIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX3gzMCIsIl9mZXRjaFByTWVzc2FnZXMiLCJfY2FsbGVlMjQiLCJfeWllbGQkY3VycmVudFJlcG9QYXI3IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyOCIsInJlc29sdmVkUHJOdW1iZXIiLCJfdDIyIiwiX2NvbnRleHQyNSIsInByTWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsIl94MzEiLCJfeDMyIiwiX3gzMyIsIl9pc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTI1IiwibWVzc2FnZXMiLCJfY29udGV4dDI2IiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhMiIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3gzNCIsIl94MzUiLCJfeDM2IiwiX3ByTWVzc2FnZXMiLCJfY2FsbGVlMjYiLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX2NvbnRleHQyNyIsIl9yZXNwb25zZSRkYXRhNCIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDM3IiwiX3gzOCIsIl94MzkiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX2NhbGxlZTI3IiwiX2NvbnRleHQyOCIsIl9yZXNwb25zZSRkYXRhNSIsIl94NDAiLCJfeDQxIiwiX3g0MiIsIl9wclJldmlld3MiLCJfY2FsbGVlMjgiLCJfY29udGV4dDI5IiwiX3Jlc3BvbnNlJGRhdGE2IiwicmV2aWV3TWVzc2FnZSIsIl94NDMiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWUyOSIsImNvbmZpZyIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJfdDIzIiwiX2NvbnRleHQzMCIsImhhc01lc3NhZ2VCb2R5IiwiX3g0NCIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTMwIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJfdDI0IiwiX2NvbnRleHQzMSIsInRpdGxlIiwidXJsIiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luMiIsIl9jb21tZW50JGF1dGhvcjIiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJkZWZhdWx0QnJhbmNoIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJhZGRBZ2VudENvbW1hbmQiLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsImFyZ3VtZW50IiwicGFyc2VBc3luYyIsImFyZ3Yi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
|
|
4
|
+
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,t,a,o){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return b(s,"_invoke",function(r,t,a){var o,u,c,s=0,l=a||[],f=!1,d={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(e,r){return o=e,u=0,c=n,d.n=r,i}};function p(r,t){for(u=r,c=t,e=0;!f&&s&&!a&&e<l.length;e++){var a,o=l[e],p=d.p,h=o[2];r>3?(a=h===t)&&(c=o[(u=o[4])?5:(u=3,3)],o[4]=o[5]=n):o[0]<=p&&((a=r<2&&p<o[1])?(u=0,d.v=t,d.n=o[1]):p<h&&(a=r<3||o[0]>t||t>h)&&(o[4]=r,o[5]=t,d.n=h,u=0))}if(a||r>1)return i;throw f=!0,t}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,h),u=l,c=h;(e=u<2?n:c)||!f;){o||(u?u<3?(u>1&&(d.n=-1),p(u,c)):d.n=c:d.v=c);try{if(s=2,o){if(u||(a="next"),e=o[a]){if(!(e=e.call(o,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=o.return)&&e.call(o),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);o=n}else if((e=(f=d.n<0)?c:r.call(t,d))!==i)break}catch(e){o=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,a,o),!0),s}var i={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(b(e={},t,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function d(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,b(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,b(f,"constructor",s),b(s,"constructor",c),c.displayName="GeneratorFunction",b(s,a,"GeneratorFunction"),b(f),b(f,a,"Generator"),b(f,t,function(){return this}),b(f,"toString",function(){return"[object Generator]"}),(g=function(){return{w:o,m:d}})()}function b(n,e,r,t){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}b=function(n,e,r,t){function o(e,r){b(n,e,function(n){return this._invoke(e,r,n)})}e?a?a(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(o("next",0),o("throw",1),o("return",2))},b(n,e,r,t)}function k(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function x(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var t,a,o,i,u=[],c=!0,s=!1;try{if(o=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=o.call(r)).done)&&(u.push(t.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return u}}(n,e)||j(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 S(n){return function(n){if(Array.isArray(n))return l(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||j(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 O(n){"@babel/helpers - typeof";return O="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},O(n)}function j(n,e){if(n){if("string"==typeof n)return l(n,e);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(n,e):void 0}}var A="PLEASE WAIT FOR UP TO 1 HOUR.";function I(n,e){return $.apply(this,arguments)}function $(){return $=h(g().m(function n(e,t){var a,o,i,u,c,s,l,f,d;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),o=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),i=C(t.waitMessage,t.waitIntervalSeconds),n.n=1,q(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([R(o.stdout,function(n){return u.write(n)}),R(o.stderr,function(n){return u.write(n)}),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=x(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw d="".concat(l).concat(f),new Error(d||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return i(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),$.apply(this,arguments)}function R(n,e){return P.apply(this,arguments)}function P(){return(P=h(g().m(function n(e,r){var t,a,o,i,u,c,s,l,d;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],a=!1,o=!1,n.p=2,u=f(e);case 3:return n.n=4,u.next();case 4:if(!(a=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),t.push(l),null==r||r(l);case 5:a=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,i=d;case 8:if(n.p=8,n.p=9,!a||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!o){n.n=11;break}throw i;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function C(n,e,r){if(void 0===e&&(e=10),void 0===r&&(r=function(n){return process.stderr.write(n)}),!n)return function(){};var t=setInterval(function(){r(".")},1e3*e);return r("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(t),r("\n")}}function q(n){return E.apply(this,arguments)}function E(){return E=h(g().m(function n(e){var r,i,u;return g().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=h(g().m(function n(){return g().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return r=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(i=t(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){i.writable&&i.write(n)},close:function(){var n=h(g().m(function n(){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){i.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,u=n.v,r(u),n.a(2,{write:function(){},close:function(){var n=h(g().m(function n(){return g().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),E.apply(this,arguments)}var N="There is no concern.",_=["codex","claude","gemini"],T=new RegExp("\\b".concat("there is no concern","\\b"),"i");function L(n,e){return D.apply(this,arguments)}function D(){return(D=h(g().m(function n(e,r){var t,a,o;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={allAgentsLabel:"agents"}),n.n=1,e;case 1:return t=n.v,a=C(W(r.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.map(h(g().m(function n(e){var a,o,i,u;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F(e,t,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(a=null==(o=(i=r).mapOutput)?void 0:o.call(i,e,u))?a:"## ".concat(M(e),"\n\n").concat(u))}},n)}))));case 3:return o=n.v.filter(function(n){return void 0!==n}),n.a(2,o.length>0?o.join("\n\n"):N);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 F(n,e,r){return G.apply(this,arguments)}function G(){return(G=h(g().m(function n(e,r,t){var a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),a=I,o=H,i=e,n.n=1,r;case 1:return n.a(2,a(o(i,n.v),{logFilePath:J(e),waitMessage:void 0===t.waitMessage?W(M(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function H(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 M(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function W(n){return"Waiting for ".concat(n," to finish. ").concat(A)}function J(n){return"logs/".concat(n,"-").concat((e=new Date,r=x([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(U),5),t=r[0],a=r[1],o=r[2],i=r[3],u=r[4],"".concat(t).concat(a,"-").concat(o).concat(i).concat(u)),".log");var e,r,t,a,o,i,u}function U(n){return n.toString().padStart(2,"0")}var B={blockQuote:"literal",lineWidth:0},Q=/\btest\b/i,Y="Waiting for test-related workflows to finish. ".concat(A),z=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function V(n){u.write("".concat(n,"\n"))}function Z(n,e){void 0===e&&(e=1),u.write("".concat(n,"\n")),process.exit(e)}function K(n,e,r){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(r)}function X(){return nn.apply(this,arguments)}function nn(){return(nn=h(g().m(function n(){return g().w(function(n){for(;;)switch(n.n){case 0:if(!i.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Gn(i);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function en(){return rn.apply(this,arguments)}function rn(){return(rn=h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:Z("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function tn(n,e){return an.apply(this,arguments)}function an(){return an=h(g().m(function n(e,t){var a,o,i,u,s;return g().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),o=null!=(a=t.allowedExitCodes)?a:[],i=g().m(function n(){var a,i,u,l,f,d,p,h;return g().w(function(n){for(;;)switch(n.n){case 0:return i=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?i.stdin.end(t.stdinData):i.stdin.end(),n.n=1,Promise.all([Gn(i.stdout),Gn(i.stderr),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=x(u,3),f=l[0],d=l[1],p=l[2],h="".concat(f).concat(d),0!==p&&!o.includes(p)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(K(e,p,h)&&s<3)){n.n=4;break}return V("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,c(1e3*s);case 3:return n.a(2,0);case 4:Z(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(k(i()),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:s+=1,n.n=1;break;case 5:Z("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),an.apply(this,arguments)}function on(n,e){return un.apply(this,arguments)}function un(){return(un=h(g().m(function n(e,r){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["gh"].concat(S(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(n,e,r){return sn.apply(this,arguments)}function sn(){return(sn=h(g().m(function n(e,r,t){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["gh"].concat(S(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=h(g().m(function n(){var e,r,t,a,o;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=x(r,2),a=t[0],o=t[1],a&&o||Z("Error: could not determine current repository"),n.a(2,[a,o])}},n)}))).apply(this,arguments)}function dn(){return pn.apply(this,arguments)}function pn(){return(pn=h(g().m(function n(){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function hn(n,e){return mn.apply(this,arguments)}function mn(){return(mn=h(g().m(function n(e,r){var t,a,o,i,u,c,s,l,f;return g().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],a=0,o=Object.entries(r);case 1:if(!(a<o.length)){n.n=4;break}if(i=x(o[a],2),u=i[0],void 0!==(c=i[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,on(t,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"),Z("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function vn(n){var e,r;return w(w({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function yn(n,e,r,t,a){return wn.apply(this,arguments)}function wn(){return(wn=h(g().m(function n(e,r,t,a,o){var i,u,c,s,l,f,d,p,h,v,y,w;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,hn(e,{owner:r,name:t,number:Number(a),cursor:i});case 1:if(v=u=n.v.data,h=null==v){n.n=2;break}h=null==(u=u.repository);case 2:if(p=h){n.n=3;break}p=null==(u=u.pullRequest);case 3:if(!p){n.n=4;break}y=void 0,n.n=5;break;case 4:y=u.reviewThreads;case 5:(s=y)||Z("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=m(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return d=f.value,n.n=8,o(d);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,w=n.v,l.e(w);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:i=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function gn(n,e,r){return bn.apply(this,arguments)}function bn(){return(bn=h(g().m(function n(e,r,t){var a;return g().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,yn("\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,r,t,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function kn(n,e,r){return xn.apply(this,arguments)}function xn(){return(xn=h(g().m(function n(e,r,t){var a;return g().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,yn("\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,r,t,h(g().m(function n(e){var r,t,o,i,u,c,s,l,f,d;return g().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:t=e.comments.nodes.map(vn),o=e.comments.pageInfo,i=null!=(r=o.endCursor)?r:void 0;case 2:if(!o.hasNextPage){n.n=7;break}return n.n=3,hn("\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:i});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}d=void 0,n.n=6;break;case 5:d=u.comments;case 6:(s=d)||Z("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,S(s.nodes.map(vn))),o=s.pageInfo,i=null!=(c=o.endCursor)?c:void 0,n.n=2;break;case 7: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:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Sn(n){return s(n,B)}function On(n){return JSON.parse(JSON.stringify(n))}function jn(n){return An.apply(this,arguments)}function An(){return(An=h(g().m(function n(e){var r,t,a,o,i,u,c,s,l,f;return g().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,cn(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,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var r,t,a=null!=(r=e.bucket)?r:"";return n[a]=(null!=(t=n[a])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(o=l.skipping)?o:0,cancel:null!=(i=l.cancel)?i:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function In(n,e,r,t){return $n.apply(this,arguments)}function $n(){return($n=h(g().m(function n(e,r,t,a){var o,i,c,s,l,f,d,p;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Dn),void 0===t&&(t=jn),void 0===a&&(a=function(n){return u.write(n)}),o=0,n.n=1,t(e);case 1:i=n.v,c=function(){},n.p=2;case 3:if(s=Rn(i),l=Pn(s),f=x(l,2),d=f[0],p=f[1],!(Object.keys(d).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[i,o,!1]);case 4:if(!(o>=360)){n.n=5;break}return n.a(2,[i,o,!0]);case 5:return 1===(o+=1)&&(c=C(Y,10,a)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:i=n.v;case 8:n.n=3;break;case 9:return n.p=9,c(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Rn(n){var e=n.checks.reduce(function(n,e){var r=e.workflow||e.name||"unknown_workflow";return null!=n[r]||(n[r]=[]),n[r].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,r=x(n,2),t=r[0],a=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Cn(n);return e?"run:".concat(e):"unknown_run"}(e),t=n.get(r);return t?(t.push(e),n):(n.set(r,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Tn(e)>Tn(n)?e:n},[])}(r[1]),o=a[0];o||Z("Error: no checks found for workflow ".concat(t));var i=null!=(e=a.reduce(function(n,e){return n?_n(e)>_n(n)?e:n:e},void 0))?e:o;return[t,{classification:Nn(a),check:i,checks:a}]}))}function Pn(n){for(var e={},r={},t=0,a=Object.entries(n);t<a.length;t++){var o=x(a[t],2),i=o[0],u=o[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ln(n)})&&(r[i]=u):e[i]=u}return[e,r]}function Cn(n){var e,r=null==n?void 0:n.link;if(r)return null==(e=r.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function qn(n){return En.apply(this,arguments)}function En(){return(En=h(g().m(function n(e){var r,t;return g().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,cn(["run","view",e,"--json",z.join(",")],[1]);case 2:if(0!==(r=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(r));case 4:if(n.p=4,!((t=n.v)instanceof SyntaxError)){n.n=5;break}return u.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(t.message,"\n")),n.a(2,void 0);case 5:throw t;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Nn(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 _n(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Tn(n){return n.reduce(function(n,e){var r=_n(e);return r>n?r:n},"")}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Q.test(n)})}function Dn(n){return Fn.apply(this,arguments)}function Fn(){return(Fn=h(g().m(function n(e){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,c(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Gn(n){return Hn.apply(this,arguments)}function Hn(){return(Hn=h(g().m(function n(e){var r,t,a,o,i,u,c,s;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],t=!1,a=!1,n.p=2,i=f(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}c=u.value,r.push(Buffer.from(c));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,s=n.v,a=!0,o=s;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Mn(){return Wn.apply(this,arguments)}function Wn(){return(Wn=h(g().m(function n(){var e,r,t,a,o,i,u,c;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en();case 1:for(e=n.v,r=re(e),t={},a=0,o=Object.entries(r.replies);a<o.length;a++)i=x(o[a],2),u=i[0],"string"==typeof(c=i[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Jn(n){return Un.apply(this,arguments)}function Un(){return(Un=h(g().m(function n(e){var r,t,a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tn(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,on(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||Z("Error: could not determine current branch"),t||Z("Error: could not determine default branch"),r===t&&Z("Error: current branch is the default branch (".concat(t,")")),a=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&a.push("--body-file","-"),V("Creating pull request..."),n.n=3,on(a,e);case 3:return o=Sn,i=JSON,n.n=4,on(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,o(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Bn(){return Qn.apply(this,arguments)}function Qn(){return(Qn=h(g().m(function n(){var e,r,t,a,o,i,u;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return e=n.v,r=x(e,2),t=r[0],a=r[1],n.n=2,dn();case 2:return o=n.v,V("Fetching unresolved review threads..."),i=Sn,n.n=3,kn(t,a,o);case 3:return u=n.v,n.a(2,i({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Yn(n){return zn.apply(this,arguments)}function zn(){return(zn=h(g().m(function n(e){var r,t,a,o,i,u,c,s,l,f,d,p,h,v,y,w,b,k,S,O;return g().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ln();case 1:return r=n.v,t=x(r,2),a=t[0],o=t[1],n.n=2,dn();case 2:return i=n.v,k=Set,n.n=3,gn(a,o,i);case 3:S=n.v,u=new k(S),V("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=m(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(p=x(f.value,2),h=p[0],v=x(p[1],2),y=v[0],w=v[1],V("Processing ".concat(h+1,"/").concat(s.length,": ").concat(y)),u.has(y)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,hn("\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:y,body:w});case 7:b=n.v,null!=(d=b.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(y):V("Warning: failed to resolve thread ".concat(y,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,O=n.v,l.e(O);case 11:return n.p=11,l.f(),n.f(11);case 12:return V("Done."),n.a(2,Sn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Vn(){return Zn.apply(this,arguments)}function Zn(){return(Zn=h(g().m(function n(){var e,r,t,a,o,i,u,c,s,l,f,d,p,m,v;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn();case 1:return e=n.v,V("Fetching latest CI results..."),n.n=2,In(e);case 2:return r=n.v,t=x(r,3),a=t[0],o=t[1],i=t[2],u=Rn(a),c=Pn(u),s=x(c,2),l=s[0],f=s[1],m=Object,n.n=3,Promise.all(Object.entries(u).map(h(g().m(function n(e){var r,t,a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:return r=x(e,2),t=r[0],a=r[1],o=a.check,n.n=1,qn(Cn(o));case 1:return i=n.v,n.a(2,[t,{classification:a.classification,check:On(o),workflowRun:i&&On(i)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),p={latest_ci_results:a,waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:i,latest_workflow_results:d},!(Object.keys(l).length>0)){n.n=5;break}return v=Object,n.n=4,Promise.all(Object.entries(l).map(h(g().m(function n(e){var r,t,a,o,i,u;return g().w(function(n){for(;;)switch(n.n){case 0:if(r=x(e,2),t=r[0],a=r[1],o=Cn(a.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,n.n=2,cn(["run","view",o,"--log-failed"],[1]);case 2:return u=n.v,n.a(2,[i,u])}},n)}))));case 4:return p.failed_workflow_outputs=v.fromEntries.call(v,n.v),n.a(2,{output:Sn(p),exitCode:1});case 5:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",p.running_test_related_workflows=Object.keys(f),n.a(2,{output:Sn(p),exitCode:1});case 6:return p.test_workflow_output="All workflows are successful.",n.a(2,{output:Sn(p),exitCode:0})}},n)}))).apply(this,arguments)}function Kn(n){return Xn.apply(this,arguments)}function Xn(){return(Xn=h(g().m(function n(e){var r,t,a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return r=n.v,t=x(r,2),a=t[0],o=t[1],n.n=2,te(a,o,e);case 2:return i=n.v,V("Fetched issue #".concat(i.number," messages.")),n.a(2,Sn({issue:i}))}},n)}))).apply(this,arguments)}function ne(n){return ee.apply(this,arguments)}function ee(){return(ee=h(g().m(function n(e){var r,t,a,o,i,u,c;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:if(r=n.v,t=x(r,2),a=t[0],o=t[1],null==e){n.n=2;break}c=e,n.n=4;break;case 2:return n.n=3,dn();case 3:c=n.v;case 4:return i=c,n.n=5,oe(a,o,i);case 5:return u=n.v,V("Fetched pull request #".concat(u.number," messages.")),n.a(2,Sn({pull_request:u}))}},n)}))).apply(this,arguments)}function re(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Z("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Z("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function te(n,e,r){return ae.apply(this,arguments)}function ae(){return(ae=h(g().m(function n(e,r,t){var a,o;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,he({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:r,number:t,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,de({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:ve});case 2:return o=n.v,n.a(2,w(w({},a),{},{messages:o}))}},n)}))).apply(this,arguments)}function oe(n,e,r){return ie.apply(this,arguments)}function ie(){return(ie=h(g().m(function n(e,r,t){var a,o,i,u,c;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,he({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:r,number:t,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([ce(e,r,t),le(e,r,t)]);case 2:return o=n.v,i=x(o,2),u=i[0],c=i[1],n.a(2,w(w({},a),{},{messages:[].concat(S(u),S(c)).sort(ue)}))}},n)}))).apply(this,arguments)}function ue(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function ce(n,e,r){return se.apply(this,arguments)}function se(){return(se=h(g().m(function n(e,r,t){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:ve});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function le(n,e,r){return fe.apply(this,arguments)}function fe(){return(fe=h(g().m(function n(e,r,t){return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de({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:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:ye});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function de(n){return pe.apply(this,arguments)}function pe(){return(pe=h(g().m(function n(e){var r,t,a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return i=e,n.n=2,hn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(o=i.selectConnection.call(i,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,S(o.nodes.map(e.mapNode).filter(we))),o.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(a=o.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function he(n){return me.apply(this,arguments)}function me(){return(me=h(g().m(function n(e){var r,t,a,o,i;return g().w(function(n){for(;;)switch(n.n){case 0:return i=e,n.n=1,hn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(o=i.selectMetadata.call(i,n.v))||Z("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:o.number,title:o.title,url:o.url,author:null!=(r=null==(t=o.author)?void 0:t.login)?r:void 0,body:null!=(a=o.body)?a:""})}},n)}))).apply(this,arguments)}function ve(n){var e,r;return{type:"comment",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function ye(n){var e,r,t,a,o;return{type:"review",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,state:null!=(t=n.state)?t:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(o=n.body)?o:""}}function we(n){return"string"==typeof n.body&&n.body.length>0}function ge(n){return be.apply(this,arguments)}function be(){return(be=h(g().m(function n(e){var r;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn(e);case 1:return r=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a code-focused plan, and posting that plan back to the issue.\nThe target issue number is #".concat(e,".\nHere is the fetched issue context as YAML:\n```yaml\n").concat(r.trim(),"\n```\n\nFollow this workflow:\n1. Read the fetched issue body and timeline messages carefully.\n2. Collect enough supporting information before planning:\n - Read the issue carefully and identify the exact requested behavior, constraints, and open questions.\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 - If the issue depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Propose a code-focused implementation plan grounded in the issue, fetched messages, and the evidence you collected. Describe what code should be written, where it should live, and how it should work. Prefer concrete guidance such as:\n - Which files, modules, classes, functions, types, tests, or configuration should be added or changed.\n - How the new or changed logic should flow through the system.\n - What interfaces, data shapes, condition branches, or side effects need to change.\n - Which edge cases, risks, and validation steps matter for the code change.\n - Any missing information or assumptions that affect the design.\n4. Post the plan back to issue #").concat(e," from the repository root then print the issue URL.\n\nFormat the issue comment exactly like this (without triple backticks):\n```\n## Code Plan\n\n### Files / Modules to Change\n\n- File or module and why it needs to change\n\n### Code to Write\n\n- Function, type, class, or branch to add or modify\n- How the logic should work\n\n### Validation\n\n- Test or check to confirm the behavior\n\n## Risks / Open Questions\n\n- Risk or uncertainty\n```\n").trim())}},n)}))).apply(this,arguments)}function ke(){return xe.apply(this,arguments)}function xe(){return(xe=h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return e=Se,n.n=1,I(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function Se(n,e){if(n.length>0)return n;throw new Error(e)}function Oe(){return je.apply(this,arguments)}function je(){return(je=h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ke();case 1:return e=n.v,n.a(2,"\nReview the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim 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 claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment 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.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(N,"`\n").trim())}},n)}))).apply(this,arguments)}function Ae(){return Ie.apply(this,arguments)}function Ie(){return(Ie=h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ke();case 1:return e=n.v,n.a(2,"\nSimplify the current branch against the repository's default branch using `git diff \"$(git merge-base ".concat(e," HEAD)\"`.\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").trim())}},n)}))).apply(this,arguments)}var $e=new n;function Re(n){var r=$e.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&r.argument(n.argumentName,n.argumentDescription),r.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(h(g().m(function e(){var r,t,a,o,i,u,c,s,l,f=arguments;return g().w(function(e){for(;;)switch(e.n){case 0:for(r=f.length,t=new Array(r),a=0;a<r;a++)t[a]=f[a];return o=x(t,2),i=o[0],u=o[1],c="string"==typeof i?i:"",s="string"==typeof i?u:i,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 Pe(n,e,r){var t=$e.command(n).description(e).allowExcessArguments(!1);"function"!=typeof r?t.argument(r.argumentName,r.argumentDescription).action(h(g().m(function n(e){var t;return g().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,r.run(e);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))):t.action(h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,r();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}$e.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Re({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?L(Oe(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return T.test(n)}(e))return"## ".concat(M(n),"\n\n").concat(e)}}):F(n,Oe())}}),Pe("review-codex","Run Codex review against the current branch",function(){return F("codex",Oe())}),Pe("review-claude","Run Claude Code review against the current branch",function(){return F("claude",Oe())}),Pe("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",Oe())}),Re({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-number>",argumentDescription:"GitHub issue number",run:function(n,e){return"all"===n?L(ge(e),{allAgentsLabel:"planning agents"}):F(n,ge(e))}}),Pe("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return F("codex",ge(n))}}),Pe("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return F("claude",ge(n))}}),Pe("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return F("gemini",ge(n))}}),Re({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 F(n,Ae())}}),Pe("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",Ae())}),Pe("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",Ae())}),Pe("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",Ae())}),$e.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(h(g().m(function n(){var e,r;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X();case 1:return e=n.v,n.n=2,Jn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),$e.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),$e.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue-number>","GitHub issue number").allowExcessArguments(!1).action(h(g().m(function n(e){var r;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),$e.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr-number]","GitHub pull request number; defaults to the current branch pull request").allowExcessArguments(!1).action(h(g().m(function n(e){var r;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ne(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),$e.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(h(g().m(function n(){var e;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Bn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),$e.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(h(g().m(function n(){var e,r;return g().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Mn();case 1:return e=n.v,n.n=2,Yn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await $e.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcHJvbXB0cy9wbGFuUHJvbXB0LnRzIiwiLi4vc3JjL3JlcG8vZGVmYXVsdEJyYW5jaC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LnRzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBsb2dGaWxlUGF0aD86IHN0cmluZztcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbiAgd2FpdEludGVydmFsU2Vjb25kcz86IG51bWJlcjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5jb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDEwO1xuZXhwb3J0IGNvbnN0IFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyA9ICdQTEVBU0UgV0FJVCBGT1IgVVAgVE8gMSBIT1VSLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9IE9uZSBkb3QgcmVwcmVzZW50cyAke3dhaXRJbnRlcnZhbFNlY29uZHN9IHNlY29uZHM6IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC4gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ25hbWUnLFxuICAnbnVtYmVyJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdzdGF0dXMnLFxuICAndXBkYXRlZEF0JyxcbiAgJ3VybCcsXG4gICd3b3JrZmxvd05hbWUnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBDaGVjayA9IHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIENpUmVzdWx0cyA9IHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiA9ICdmYWlsZWQnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2Nlc3NmdWwnO1xuXG5leHBvcnQgdHlwZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQgPSB7XG4gIGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uO1xuICBjaGVjazogQ2hlY2s7XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbnR5cGUgUmV2aWV3Q29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBkaWZmSHVuaz86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBSZXZpZXdUaHJlYWROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHJSZXZpZXdOb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJtaXR0ZWRBdD86IHN0cmluZyB8IG51bGw7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG50eXBlIFBhZ2VJbmZvID0ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+ID0ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgICAgcmV2aWV3cz86IE1lc3NhZ2VDb25uZWN0aW9uPFByUmV2aWV3Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZXNSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBudW1iZXI6IG51bWJlcjtcbiAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIE1ldGFkYXRhTm9kZSA9IHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZXhpdFdpdGhFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSkpLnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tZW50QXV0aG9yKGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlKTogUmV2aWV3Q29tbWVudE5vZGUgJiB7IGF1dGhvcj86IHN0cmluZyB8IG51bGwgfSB7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudCxcbiAgICBhdXRob3I6IHR5cGVvZiBjb21tZW50LmF1dGhvciA9PT0gJ3N0cmluZycgPyBjb21tZW50LmF1dGhvciA6IChjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gbnVsbCksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVJldmlld1RocmVhZHMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcixcbiAgb25UaHJlYWQ6ICh0aHJlYWQ6IFJldmlld1RocmVhZE5vZGUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByZXZpZXdUaHJlYWRzID0gKFxuICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgcmVwb3NpdG9yeT86IHtcbiAgICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdUaHJlYWROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4ocXVlcnksIHtcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsIGFzeW5jICh0aHJlYWQpID0+IHtcbiAgICBpZiAodGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50cyA9IHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcik7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCBjb21tZW50Q29ubmVjdGlvbiA9IChcbiAgICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pXG4gICAgICApLmRhdGE/Lm5vZGU/LmNvbW1lbnRzO1xuXG4gICAgICBpZiAoIWNvbW1lbnRDb25uZWN0aW9uKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbW1lbnRzIGluIEdyYXBoUUwgcmVzcG9uc2UgZm9yIHRocmVhZCAke3RocmVhZC5pZH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbW1lbnRzLnB1c2goLi4uY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIGFzIFQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSAoKSA9PiB7fTtcblxuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHRzID49IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0cyA9PT0gMSkge1xuICAgICAgICBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFLFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICAgICAgICAgIHdyaXRlUHJvZ3Jlc3NGblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPEpzb25PYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIEpzb25PYmplY3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gY2hlY2tzLnJlZHVjZSgoZ3JvdXBlZENoZWNrcywgY2hlY2spID0+IHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZENoZWNrcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gICAgfVxuICAgIGdyb3VwZWRDaGVja3Muc2V0KGtleSwgW2NoZWNrXSk7XG4gICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLnJlZHVjZTxDaGVja1tdPigobGF0ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkgPyBjdXJyZW50R3JvdXAgOiBsYXRlc3RHcm91cDtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNodW5rcy5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShjaHVuaykgOiBCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDoge3B1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHl9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHt0aHJlYWRJZDogJHRocmVhZElkfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IGxhdGVzdFdvcmtmbG93UmVzdWx0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRMYXRlc3QpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gcmVzdWx0LmNoZWNrO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JrZmxvd1J1bih3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjaykpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgICAgICAgICBjaGVjazogZGVlcENvcHkoY2hlY2spLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW46IHJ1biAmJiBkZWVwQ29weShydW4pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBsYXRlc3RfY2lfcmVzdWx0czogY2lSZXN1bHRzLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdF93b3JrZmxvd19yZXN1bHRzOiBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd19vdXRwdXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICAgICAgICAgIGlmICghcnVuSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSldO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cyk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnQWxsIHdvcmtmbG93cyBhcmUgc3VjY2Vzc2Z1bC4nO1xuICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIGlzc3VlTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPz8gKGF3YWl0IGN1cnJlbnRQck51bWJlcigpKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCByZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc3N1ZU1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGZldGNoTWV0YWRhdGE8SXNzdWVNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBub3VuOiAnaXNzdWUnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfTUVTU0FHRVNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWU/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcblxuICByZXR1cm4geyAuLi5pc3N1ZSwgbWVzc2FnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgbm91bjogJ3B1bGwgcmVxdWVzdCcsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3QsXG4gIH0pO1xuICBjb25zdCBbaXNzdWVDb21tZW50cywgcmV2aWV3c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJJc3N1ZUNvbW1lbnRzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gICAgcHJSZXZpZXdzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucHVsbFJlcXVlc3QsXG4gICAgbWVzc2FnZXM6IFsuLi5pc3N1ZUNvbW1lbnRzLCAuLi5yZXZpZXdzXS5zb3J0KGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgY29kZS1mb2N1c2VkIHBsYW4sIGFuZCBwb3N0aW5nIHRoYXQgcGxhbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS5cbkhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxuXFxgXFxgXFxgeWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxuXFxgXFxgXFxgXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gUmVhZCB0aGUgZmV0Y2hlZCBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSBwbGFubmluZzpcbiAgIC0gUmVhZCB0aGUgaXNzdWUgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgcmVxdWVzdGVkIGJlaGF2aW9yLCBjb25zdHJhaW50cywgYW5kIG9wZW4gcXVlc3Rpb25zLlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBQcm9wb3NlIGEgY29kZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uIHBsYW4gZ3JvdW5kZWQgaW4gdGhlIGlzc3VlLCBmZXRjaGVkIG1lc3NhZ2VzLCBhbmQgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuIERlc2NyaWJlIHdoYXQgY29kZSBzaG91bGQgYmUgd3JpdHRlbiwgd2hlcmUgaXQgc2hvdWxkIGxpdmUsIGFuZCBob3cgaXQgc2hvdWxkIHdvcmsuIFByZWZlciBjb25jcmV0ZSBndWlkYW5jZSBzdWNoIGFzOlxuICAgLSBXaGljaCBmaWxlcywgbW9kdWxlcywgY2xhc3NlcywgZnVuY3Rpb25zLCB0eXBlcywgdGVzdHMsIG9yIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGFkZGVkIG9yIGNoYW5nZWQuXG4gICAtIEhvdyB0aGUgbmV3IG9yIGNoYW5nZWQgbG9naWMgc2hvdWxkIGZsb3cgdGhyb3VnaCB0aGUgc3lzdGVtLlxuICAgLSBXaGF0IGludGVyZmFjZXMsIGRhdGEgc2hhcGVzLCBjb25kaXRpb24gYnJhbmNoZXMsIG9yIHNpZGUgZWZmZWN0cyBuZWVkIHRvIGNoYW5nZS5cbiAgIC0gV2hpY2ggZWRnZSBjYXNlcywgcmlza3MsIGFuZCB2YWxpZGF0aW9uIHN0ZXBzIG1hdHRlciBmb3IgdGhlIGNvZGUgY2hhbmdlLlxuICAgLSBBbnkgbWlzc2luZyBpbmZvcm1hdGlvbiBvciBhc3N1bXB0aW9ucyB0aGF0IGFmZmVjdCB0aGUgZGVzaWduLlxuNC4gUG9zdCB0aGUgcGxhbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMgKHdpdGhvdXQgdHJpcGxlIGJhY2t0aWNrcyk6XG5cXGBcXGBcXGBcbiMjIENvZGUgUGxhblxuXG4jIyMgRmlsZXMgLyBNb2R1bGVzIHRvIENoYW5nZVxuXG4tIEZpbGUgb3IgbW9kdWxlIGFuZCB3aHkgaXQgbmVlZHMgdG8gY2hhbmdlXG5cbiMjIyBDb2RlIHRvIFdyaXRlXG5cbi0gRnVuY3Rpb24sIHR5cGUsIGNsYXNzLCBvciBicmFuY2ggdG8gYWRkIG9yIG1vZGlmeVxuLSBIb3cgdGhlIGxvZ2ljIHNob3VsZCB3b3JrXG5cbiMjIyBWYWxpZGF0aW9uXG5cbi0gVGVzdCBvciBjaGVjayB0byBjb25maXJtIHRoZSBiZWhhdmlvclxuXG4jIyBSaXNrcyAvIE9wZW4gUXVlc3Rpb25zXG5cbi0gUmlzayBvciB1bmNlcnRhaW50eVxuXFxgXFxgXFxgXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnREZWZhdWx0QnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCAke2RlZmF1bHRCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtkZWZhdWx0QnJhbmNofSBIRUFEKVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyB5b3UganVkZ2VkIHZhbGlkLCBhbmQgaW5jbHVkZSBhIHNob3J0IGJhc2lzIGZvciBlYWNoIG9uZSB0aGF0IGNpdGVzIHRoZSBldmlkZW5jZSB5b3UgdXNlZCwgc3VjaCBhcyB0aGUgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIHJlbGV2YW50IG9mZmljaWFsIGRvY3VtZW50YXRpb24uIERvIG5vdCBtb2RpZnkgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCByZXZpZXcgY29tbWVudHMsIHJlc3BvbmQgd2l0aCBleGFjdGx5OiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudERlZmF1bHRCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdyZXZpZXcgYWdlbnRzJyxcbiAgICAgICAgICBtYXBPdXRwdXQ6IChhZ2VudCwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWUtbnVtYmVyPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVOdW1iZXIpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXIpLCB7IGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZS1udW1iZXI+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXInLFxuICBydW46IChpc3N1ZU51bWJlcikgPT4gcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcikpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZS1udW1iZXI+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXInLFxuICBydW46IChpc3N1ZU51bWJlcikgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXIpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZS1udW1iZXI+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXInLFxuICBydW46IChpc3N1ZU51bWJlcikgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXIpKSxcbn0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBvcGVuUHIoYm9keSB8fCB1bmRlZmluZWQpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlLW51bWJlcj4nLCAnR2l0SHViIGlzc3VlIG51bWJlcicpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVOdW1iZXI6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHItbnVtYmVyXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlcjsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJOdW1iZXI/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXIpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIiwicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsImEiLCJjb25jYXQiLCJFcnJvciIsImpvaW4iLCJjbG9zZSIsImYiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsIl90IiwiX2NvbnRleHQyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwidG9TdHJpbmciLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsInJ1bkFsbEFnZW50Q29tbWFuZHMiLCJfcnVuQWxsQWdlbnRDb21tYW5kcyIsInByb21wdCIsInJlc29sdmVkUHJvbXB0Iiwib3V0cHV0cyIsImFsbEFnZW50c0xhYmVsIiwid2FpdE1lc3NhZ2VGb3IiLCJtYXAiLCJhZ2VudCIsIl9vcHRpb25zJG1hcE91dHB1dCIsIl9vcHRpb25zJG1hcE91dHB1dDIiLCJfb3B0aW9ucyIsInJ1bkFnZW50Q29tbWFuZCIsInRyaW0iLCJtYXBPdXRwdXQiLCJjYWxsIiwiZGlzcGxheUFnZW50TmFtZSIsImZpbHRlciIsInVuZGVmaW5lZCIsImxlbmd0aCIsIl9ydW5BZ2VudENvbW1hbmQiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInBhZFN0YXJ0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJleGl0Q29kZSIsInRlc3QiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJpbmNsdWRlcyIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX2doIiwiYXJncyIsIl90b0NvbnN1bWFibGVBcnJheSIsImdoQWxsb3dFeGl0Q29kZXMiLCJfeDYiLCJfeDciLCJfZ2hBbGxvd0V4aXRDb2RlcyIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwibmFtZSIsIl9jb250ZXh0NyIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OCIsIl94OSIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsIl9rZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwia2V5IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsIl9vYmplY3RTcHJlYWQiLCJhdXRob3IiLCJsb2dpbiIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE2IiwiX3gxNyIsIl94MTgiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MTkiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjAiLCJfeDIxIiwiX3gyMiIsIl94MjMiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjQiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNSIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjYiLCJfY2FsbGVlMTUiLCJfdDEwIiwiX2NvbnRleHQxNiIsIkJ1ZmZlciIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwicGF5bG9hZCIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJib2R5IiwiX2NvbnRleHQxNyIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJvcGVuUHIiLCJfeDI3IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOCIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOCIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJfdDEzIiwiX3QxNCIsIl9jb250ZXh0MTkiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3gyOCIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX3Jlc3BvbnNlJGRhdGEiLCJfc3RlcDMkdmFsdWUiLCJpbmRleCIsIl9zdGVwMyR2YWx1ZSQiLCJfdDE1IiwiX3QxNiIsIl90MTciLCJfY29udGV4dDIwIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX2NhbGxlZTIyIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsImxhdGVzdFdvcmtmbG93UmVzdWx0cyIsIl90MjAiLCJfdDIxIiwiX2NvbnRleHQyMyIsIl9jYWxsZWUyMCIsIl9yZWY0IiwiX3JlZjYiLCJydW4iLCJfY29udGV4dDIxIiwibGF0ZXN0X2NpX3Jlc3VsdHMiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsImxhdGVzdF93b3JrZmxvd19yZXN1bHRzIiwiX2NhbGxlZTIxIiwiX3JlZjciLCJfcmVmOSIsIl90MTgiLCJfdDE5IiwiX2NvbnRleHQyMiIsImZhaWxlZF93b3JrZmxvd19vdXRwdXRzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfeDI5IiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsIl9jYWxsZWUyMyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjYiLCJpc3N1ZSIsIl9jb250ZXh0MjQiLCJpc3N1ZU1lc3NhZ2VzIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX3gzMCIsIl9mZXRjaFByTWVzc2FnZXMiLCJfY2FsbGVlMjQiLCJfeWllbGQkY3VycmVudFJlcG9QYXI3IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyOCIsInJlc29sdmVkUHJOdW1iZXIiLCJfdDIyIiwiX2NvbnRleHQyNSIsInByTWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsIl94MzEiLCJfeDMyIiwiX3gzMyIsIl9pc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTI1IiwibWVzc2FnZXMiLCJfY29udGV4dDI2IiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhMiIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3gzNCIsIl94MzUiLCJfeDM2IiwiX3ByTWVzc2FnZXMiLCJfY2FsbGVlMjYiLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX2NvbnRleHQyNyIsIl9yZXNwb25zZSRkYXRhNCIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDM3IiwiX3gzOCIsIl94MzkiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX2NhbGxlZTI3IiwiX2NvbnRleHQyOCIsIl9yZXNwb25zZSRkYXRhNSIsIl94NDAiLCJfeDQxIiwiX3g0MiIsIl9wclJldmlld3MiLCJfY2FsbGVlMjgiLCJfY29udGV4dDI5IiwiX3Jlc3BvbnNlJGRhdGE2IiwicmV2aWV3TWVzc2FnZSIsIl94NDMiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWUyOSIsImNvbmZpZyIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJfdDIzIiwiX2NvbnRleHQzMCIsImhhc01lc3NhZ2VCb2R5IiwiX3g0NCIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTMwIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJfdDI0IiwiX2NvbnRleHQzMSIsInRpdGxlIiwidXJsIiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luMiIsIl9jb21tZW50JGF1dGhvcjIiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwiZGVmYXVsdEJyYW5jaCIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhcmd1bWVudE5hbWUiLCJhcmd1bWVudCIsImFyZ3VtZW50RGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiX2xlbiIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3M3IiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQWFBLElBQ2FBLEVBQThCLGdDQUUzQyxTQUFzQkMsRUFBc0JDLEVBQUFDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQTJCM0MsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQTNCTSxTQUFBQyxFQUFzQ0MsRUFBbUJDLEdBQTBCLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWIsSUFBQWMsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQUlLLFlBSkwsSUFBMUJiLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9ZLEVBQWdCLE9BQVhiLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRZ0IsTUFBTSxHQUFJLENBQ3JEQyxNQUFPLENBQUMsU0FBVSxPQUFRLFVBRXRCYixFQUFtQmMsRUFBbUJqQixFQUFRa0IsWUFBYWxCLEVBQVFtQixxQkFBb0JSLEVBQUFFLEVBQUEsRUFDakVPLEVBQW9CcEIsRUFBUXFCLGFBQVksS0FBQSxFQUFqRCxPQUFiakIsRUFBYU8sRUFBQVcsRUFBQVgsRUFBQUMsRUFBQSxFQUFBRCxFQUFBRSxFQUFBLEVBR3dCVSxRQUFRQyxJQUFJLENBQ25EQyxFQUFhdkIs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@willbooster/agent-skills",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "A collection of agent skills for WillBooster Inc.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "build-ts app --input src/cli.ts && chmod +x dist/cli.js",
|
|
20
|
-
"check-all-for-ai": "bun run check-for-ai && bun run test
|
|
20
|
+
"check-all-for-ai": "bun run check-for-ai && bun run test",
|
|
21
21
|
"check-for-ai": "bun install > /dev/null && bun run cleanup && bun run typecheck",
|
|
22
22
|
"cleanup": "bun --bun wb lint --fix --format",
|
|
23
23
|
"format": "bun --bun wb lint --format",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"lint": "bun --bun wb lint",
|
|
27
27
|
"lint-fix": "bun --bun wb lint --fix",
|
|
28
28
|
"prepare": "lefthook install || true",
|
|
29
|
-
"prepublishOnly": "bun run build",
|
|
30
29
|
"release": "semantic-release",
|
|
31
30
|
"test": "bun wb test",
|
|
32
31
|
"test:integration": "RUN_GITHUB_INTEGRATION=1 bun test test/cli/agentSkillsCli.e2e.test.ts",
|
|
@@ -38,17 +37,17 @@
|
|
|
38
37
|
"yaml": "2.8.3"
|
|
39
38
|
},
|
|
40
39
|
"devDependencies": {
|
|
41
|
-
"@biomejs/biome": "2.4.
|
|
40
|
+
"@biomejs/biome": "2.4.9",
|
|
42
41
|
"@semantic-release/commit-analyzer": "13.0.1",
|
|
43
42
|
"@semantic-release/github": "12.0.6",
|
|
44
43
|
"@semantic-release/npm": "13.1.5",
|
|
45
44
|
"@semantic-release/release-notes-generator": "14.1.0",
|
|
46
45
|
"@tsconfig/bun": "1.0.10",
|
|
47
46
|
"@types/bun": "1.3.11",
|
|
48
|
-
"@willbooster/biome-config": "3.
|
|
49
|
-
"@willbooster/prettier-config": "10.
|
|
47
|
+
"@willbooster/biome-config": "3.3.0",
|
|
48
|
+
"@willbooster/prettier-config": "10.3.0",
|
|
50
49
|
"@willbooster/wb": "13.4.2",
|
|
51
|
-
"build-ts": "
|
|
50
|
+
"build-ts": "17.0.22",
|
|
52
51
|
"conventional-changelog-conventionalcommits": "9.3.0",
|
|
53
52
|
"lefthook": "2.1.4",
|
|
54
53
|
"prettier": "3.8.1",
|