@willbooster/agent-skills 1.10.0 → 1.10.1
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 +1 -1
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,spawnSync as t}from"node:child_process";import{createWriteStream as
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as r,spawnSync as t}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as o}from"node:fs/promises";import{dirname as a}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function d(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 p(n){var e,r,t,i=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);i--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new h(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function h(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 h=function(n){this.s=n,this.n=n.next},h.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 h(n)}function m(n,e,r,t,i,o,a){try{var u=n[o](a),c=u.value}catch(n){return void r(n)}u.done?e(c):Promise.resolve(c).then(t,i)}function v(n){return function(){var e=this,r=arguments;return new Promise(function(t,i){var o=n.apply(e,r);function a(n){m(o,t,i,a,u,"next",n)}function u(n){m(o,t,i,a,u,"throw",n)}a(void 0)})}}function w(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=A(n))||e){r&&(n=r);var t=0,i=function(){};return{s:i,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},e:function(n){throw n},f:i}}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,a=!0,u=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return a=n.done,n},e:function(n){u=!0,o=n},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw o}}}}function y(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 g(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 b(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?g(Object(r),!0).forEach(function(e){y(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):g(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function k(){
|
|
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 i(r,t,o,i){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return x(s,"_invoke",function(r,t,o){var i,u,c,s=0,l=o||[],f=!1,d={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(e,r){return i=e,u=0,c=n,d.n=r,a}};function p(r,t){for(u=r,c=t,e=0;!f&&s&&!o&&e<l.length;e++){var o,i=l[e],p=d.p,h=i[2];r>3?(o=h===t)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=p&&((o=r<2&&p<i[1])?(u=0,d.v=t,d.n=i[1]):p<h&&(o=r<3||i[0]>t||t>h)&&(i[4]=r,i[5]=t,d.n=h,u=0))}if(o||r>1)return a;throw f=!0,t}return function(o,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;){i||(u?u<3?(u>1&&(d.n=-1),p(u,c)):d.n=c:d.v=c);try{if(s=2,i){if(u||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=n}else if((e=(f=d.n<0)?c:r.call(t,d))!==a)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,o,i),!0),s}var a={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(x(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,x(n,o,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,o,"GeneratorFunction"),x(f),x(f,o,"Generator"),x(f,t,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:i,m:d}})()}function x(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}x=function(n,e,r,t){function i(e,r){x(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:(i("next",0),i("throw",1),i("return",2))},x(n,e,r,t)}function S(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 j(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,i,a,u=[],c=!0,s=!1;try{if(i=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=i.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&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return u}}(n,e)||A(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 R(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(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 A(n,e){if(n){if("string"==typeof n)return d(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)?d(n,e):void 0}}var I="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return P.apply(this,arguments)}function P(){return P=v(k().m(function n(e,t){var o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),a=E(t.waitMessage,t.waitIntervalSeconds),n.n=1,N(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([C(i.stdout,function(n){return u.write(n)}),C(i.stderr,function(n){return u.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=j(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 a(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),P.apply(this,arguments)}function C(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().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,i=!1,n.p=2,u=p(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,f=n.v,i=!0,a=f;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,!i){n.n=11;break}throw a;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 E(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 N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var r,t,u;return k().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=v(k().m(function n(){return k().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,i(a(e),{recursive:!0});case 3:return(t=o(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){t.writable&&t.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){t.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=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var _="There is no concern.",L=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return F.apply(this,arguments)}function F(){return(F=v(k().m(function n(e,r){var t,o,i;return k().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,o=E(J(r.allAgentsLabel)),n.p=2,n.n=3,Promise.all(L.map(v(k().m(function n(e){var o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(e,t,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(o=null==(i=(a=r).mapOutput)?void 0:i.call(a,e,u))?o:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return i=n.v.filter(function(n){return void 0!==n}),n.a(2,i.length>0?i.join("\n\n"):_);case 4:return n.p=4,o(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function H(n,e,r){return M.apply(this,arguments)}function M(){return(M=v(k().m(function n(e,r,t){var o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),o=$,i=U,a=e,n.n=1,r;case 1:return n.a(2,o(i(a,n.v),{logFilePath:B(e),waitMessage:void 0===t.waitMessage?J(W(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function U(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 W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(I)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,r=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),t=r[0],o=r[1],i=r[2],a=r[3],u=r[4],"".concat(t).concat(o,"-").concat(i).concat(a).concat(u)),".log");var e,r,t,o,i,a,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0},Z=/\btest\b/i,z="Waiting for test-related workflows to finish. ".concat(I),K=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],V=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function X(n){c.write("".concat(n,"\n"))}function nn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function en(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 rn(){return tn.apply(this,arguments)}function tn(){return(tn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Un(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n){return an.apply(this,arguments)}function an(){return(an=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,rn();case 1:if(!((r=n.v).length>0)){n.n=2;break}return n.a(2,r);case 2:nn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function un(n,e){return cn.apply(this,arguments)}function cn(){return cn=v(k().m(function n(e,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(o=t.allowedExitCodes)?o:[],a=k().m(function n(){var o,a,u,l,f,d,p,h;return k().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?a.stdin.end(t.stdinData):a.stdin.end(),n.n=1,Promise.all([Un(a.stdout),Un(a.stderr),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],d=l[1],p=l[2],h="".concat(f).concat(d),0!==p&&!i.includes(p)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(en(e,p,h)&&c<3)){n.n=4;break}return X("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:nn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(a()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:nn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),cn.apply(this,arguments)}function sn(n,e){return ln.apply(this,arguments)}function ln(){return(ln=v(k().m(function n(e,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(R(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function fn(n,e,r){return dn.apply(this,arguments)}function dn(){return(dn=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(R(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(){var e,r,t,o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=j(r,2),o=t[0],i=t[1],o&&i||nn("Error: could not determine current repository"),n.a(2,[o,i])}},n)}))).apply(this,arguments)}function mn(){return vn.apply(this,arguments)}function vn(){return(vn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],o=0,i=Object.entries(r);case 1:if(!(o<i.length)){n.n=4;break}if(a=j(i[o],2),u=a[0],void 0!==(c=a[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,sn(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"),nn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e,r;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function bn(n,e,r,t,o){return kn.apply(this,arguments)}function kn(){return(kn=v(k().m(function n(e,r,t,o,i){var a,u,c,s,l,f,d,p,h,m,v,y;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:r,name:t,number:Number(o),cursor:a});case 1:if(m=u=n.v.data,h=null==m){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}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||nn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(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,i(d);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:a=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 xn(n,e,r){return Sn.apply(this,arguments)}function Sn(){return(Sn=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\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 jn(n,e,r){return Rn.apply(this,arguments)}function Rn(){return(Rn=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\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,v(k().m(function n(e){var r,t,i,a,u,c,s,l,f,d;return k().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(gn),i=e.comments.pageInfo,a=null!=(r=i.endCursor)?r:void 0;case 2:if(!i.hasNextPage){n.n=7;break}return n.n=3,wn("\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:a});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)||nn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,R(s.nodes.map(gn))),i=s.pageInfo,a=null!=(c=i.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 On(n){return f(n,Y)}function An(n){return JSON.parse(JSON.stringify(n))}function In(n){return $n.apply(this,arguments)}function $n(){return($n=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f;return k().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,fn(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!=(i=l.skipping)?i:0,cancel:null!=(a=l.cancel)?a:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Pn(n,e,r,t){return Cn.apply(this,arguments)}function Cn(){return(Cn=v(k().m(function n(e,r,t,o){var i,a,u,s,l,f,d,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Hn),void 0===t&&(t=In),void 0===o&&(o=function(n){return c.write(n)}),i=0,n.n=1,t(e);case 1:a=n.v,u=function(){},n.p=2;case 3:if(s=qn(a),l=En(s),f=j(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,[a,i,!1]);case 4:if(!(i>=360)){n.n=5;break}return n.a(2,[a,i,!0]);case 5:return 1===(i+=1)&&(u=E(z,10,o)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:a=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(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=j(n,2),t=r[0],o=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Nn(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||Gn(e)>Gn(n)?e:n},[])}(r[1]),i=o[0];i||nn("Error: no checks found for workflow ".concat(t));var a=null!=(e=o.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:i;return[t,{classification:Ln(o),check:a,checks:o}]}))}function En(n){for(var e={},r={},t=0,o=Object.entries(n);t<o.length;t++){var i=j(o[t],2),a=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Fn(n)})&&(r[a]=u):e[a]=u}return[e,r]}function Nn(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 Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=v(k().m(function n(e){var r,t;return k().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,fn(["run","view",e,"--json",K.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 c.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 Ln(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 Dn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Gn(n){return n.reduce(function(n,e){var r=Dn(e);return r>n?r:n},"")}function Fn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Z.test(n)})}function Hn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Un(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=v(k().m(function n(e){var r,t,o,i,a,u,c,s;return k().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,a=p(e);case 3:return n.n=4,a.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,i=s;case 8:if(n.p=8,n.p=9,!t||null==a.return){n.n=10;break}return n.n=10,a.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,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Jn(){return Bn.apply(this,arguments)}function Bn(){return(Bn=v(k().m(function n(){var e,r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: JSON input is required on stdin");case 1:for(e=n.v,r=ue(e),t={},o=0,i=Object.entries(r.replies);o<i.length;o++)a=j(i[o],2),u=a[0],"string"==typeof(c=a[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,sn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||nn("Error: could not determine current branch"),t||nn("Error: could not determine default branch"),r===t&&nn("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","-"),X("Creating pull request..."),n.n=3,sn(o,e);case 3:return i=On,a=JSON,n.n=4,sn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Zn(n){return zn.apply(this,arguments)}function zn(){return(zn=v(k().m(function n(e){var r,t,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return r=n.v,X("Updating pull request #".concat(r," body...")),n.n=2,sn(["pr","edit",r,"--body-file","-"],e);case 2:return t=On,o=JSON,n.n=3,sn(["pr","view",r,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 3:return n.a(2,t(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function Kn(){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(){var e,r,t,o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return e=n.v,r=j(e,2),t=r[0],o=r[1],n.n=2,mn();case 2:return i=n.v,X("Fetching unresolved review threads..."),a=On,n.n=3,jn(t,o,i);case 3:return u=n.v,n.a(2,a({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Xn(n){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f,d,p,h,m,v,y,g,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,mn();case 2:return a=n.v,b=Set,n.n=3,xn(o,i,a);case 3:x=n.v,u=new b(x),X("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(p=j(f.value,2),h=p[0],m=j(p[1],2),v=m[0],y=m[1],X("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:y});case 7:g=n.v,null!=(d=g.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(v):X("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return X("Done."),n.a(2,On({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function ee(){return re.apply(this,arguments)}function re(){return(re=v(k().m(function n(){var e,r,t,o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return e=n.v,X("Fetching latest CI results..."),n.n=2,Pn(e);case 2:if(r=n.v,t=j(r,3),o=t[0],i=t[1],a=t[2],u=qn(o),c=En(u),s=j(c,2),l=s[0],f=s[1],d={summary:An(o.summary),waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:a},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return r=j(e,2),t=r[0],o=r[1],n.n=1,ce(t,o);case 1:return i=n.v,a=b,u=b({},i),c=de,n.n=2,le(o.check);case 2:return n.a(2,a(u,c(n.v)))}},n)}))));case 3:return d.failed_workflows=n.v,n.a(2,{output:On(d),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return ce(e[0],e[1])}));case 5:return d.running_test_related_workflows=n.v,n.a(2,{output:On(d),exitCode:1});case 6:return d.test_workflow_output="All workflows are successful.",n.a(2,{output:On(d),exitCode:0})}},n)}))).apply(this,arguments)}function te(n){return oe.apply(this,arguments)}function oe(){return(oe=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,Se(o,i,ve(e));case 2:return a=n.v,X("Fetched issue #".concat(a.number," messages.")),n.a(2,On({issue:a}))}},n)}))).apply(this,arguments)}function ie(n){return ae.apply(this,arguments)}function ae(){return(ae=v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:if(r=n.v,t=j(r,2),o=t[0],i=t[1],void 0!==e){n.n=3;break}return n.n=2,mn();case 2:c=n.v,n.n=4;break;case 3:c=we(e);case 4:return a=c,n.n=5,Re(o,i,a);case 5:return u=n.v,X("Fetched pull request #".concat(u.number," messages.")),n.a(2,On({pull_request:u}))}},n)}))).apply(this,arguments)}function ue(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)||nn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&nn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function ce(n,e){return se.apply(this,arguments)}function se(){return(se=v(k().m(function n(e,r){var t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return o=Nn(r.check),n.n=1,Tn(o);case 1:return i=n.v,a=ge(i,me(r.check.name)),n.a(2,{classification:r.classification,workflow:e,job:me(r.check.name),job_url:me(null==a?void 0:a.url),failed_step:be(a),run_id:o,run_url:null!=(t=me(null==i?void 0:i.url))?t:me(r.check.link),branch:me(null==i?void 0:i.headBranch),sha:me(null==i?void 0:i.headSha),conclusion:me(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function le(n){return fe.apply(this,arguments)}function fe(){return(fe=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:if(r=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,fn(["run","view",r,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function de(n){return{failed_log:pe(n)}}function pe(n){var e=he(l(n));if(!ke)return e;var r=xe(["rtk","log"],e);return 0===r.exitCode&&r.output.trim().length>0?he(r.output):e}function he(n){return n.split("\n").map(function(n){return n.replace(V,"")}).join("\n").trim()}function me(n){return"string"==typeof n&&n.length>0?n:void 0}function ve(n){return ye(n,"issue")}function we(n){return ye(n,"pull request")}function ye(n,e){var r=String(n).trim();if(0===r.length&&nn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(r))return r;var t="issue"===e?"issues":"pull",o=r.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(t,"/(\\d+)(?:/|$)")));if(null!=o&&o[1])return o[1];nn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(r,'"'),2)}function ge(n,e){var r,t;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(r=null!=(t=n.jobs.find(function(n){return n.name===e}))?t:n.jobs.find(function(n){return"failure"===n.conclusion}))?r:n.jobs.find(function(n){return"completed"!==n.status})}function be(n){var e,r,t;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(r=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:r.name)?e:null==(t=n.steps.find(function(n){return"completed"!==n.status}))?void 0:t.name}var ke=0===xe(["rtk","--version"]).exitCode;function xe(n,e){var r,o,i,a,u=t(null!=(r=n[0])?r:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(o=u.status)?o:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(a=u.stderr)?a:"")}}function Se(n,e,r){return je.apply(this,arguments)}function je(){return(je=v(k().m(function n(e,r,t){var o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne({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,qe({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:_e});case 2:return i=n.v,n.a(2,b(b({},o),{},{messages:i}))}},n)}))).apply(this,arguments)}function Re(n,e,r){return Oe.apply(this,arguments)}function Oe(){return(Oe=v(k().m(function n(e,r,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne({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([Ie(e,r,t),Pe(e,r,t)]);case 2:return i=n.v,a=j(i,2),u=a[0],c=a[1],n.a(2,b(b({},o),{},{messages:[].concat(R(u),R(c)).sort(Ae)}))}},n)}))).apply(this,arguments)}function Ae(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function Ie(n,e,r){return $e.apply(this,arguments)}function $e(){return($e=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({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:_e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Pe(n,e,r){return Ce.apply(this,arguments)}function Ce(){return(Ce=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({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:Le});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return a=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(i=a.selectConnection.call(a,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,R(i.nodes.map(e.mapNode).filter(De))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(o=i.pageInfo.endCursor)?o:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Ne(n){return Te.apply(this,arguments)}function Te(){return(Te=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=a.selectMetadata.call(a,n.v))||nn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(r=null==(t=i.author)?void 0:t.login)?r:void 0,body:null!=(o=i.body)?o:""})}},n)}))).apply(this,arguments)}function _e(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 Le(n){var e,r,t,o,i;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!=(i=n.body)?i:""}}function De(n){return"string"==typeof n.body&&n.body.length>0}function Ge(n){return Fe.apply(this,arguments)}function Fe(){return(Fe=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(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 He(){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Je();case 1:if(null==(e=n.v)){n.n=2;break}r=e,n.n=4;break;case 2:return n.n=3,Ue();case 3:r=n.v;case 4:return n.a(2,r)}},n)}))).apply(this,arguments)}function Ue(){return We.apply(this,arguments)}function We(){return(We=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=Ye,n.n=1,$(["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 Je(){return Be.apply(this,arguments)}function Be(){return(Be=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!Qe(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function Qe(n){return/no pull requests? found for branch/i.test(String(n))}function Ye(n,e){if(n.length>0)return n;throw new Error(e)}function Ze(n){return"git merge-base ".concat(ze("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(ze(n)," HEAD")}function ze(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function Ke(){return Ve.apply(this,arguments)}function Ve(){return(Ve=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He();case 1:return e=n.v,r=Ze(e),n.a(2,"\nReview the current branch against its base branch ".concat(e,' via `git diff "$(').concat(r,')"`.\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 and evidence you judged to be valid. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid review comments, respond exactly with: `').concat(_,"`\n").trim())}},n)}))).apply(this,arguments)}function Xe(){return nr.apply(this,arguments)}function nr(){return(nr=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He();case 1:return e=n.v,r=Ze(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(r,")\"`.\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 er=new n;function rr(n){var r=er.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(v(k().m(function e(){var r,t,o,i,a,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(r=f.length,t=new Array(r),o=0;o<r;o++)t[o]=f[o];return i=j(t,2),a=i[0],u=i[1],c="string"==typeof a?a:"",s="string"==typeof a?u:a,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 tr(n,e,r){var t=er.command(n).description(e).allowExcessArguments(!1);"function"!=typeof r?t.argument(r.argumentName,r.argumentDescription).action(v(k().m(function n(e){var t;return k().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(v(k().m(function n(){var e;return k().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)})))}er.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),rr({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?G(Ke(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):H(n,Ke())}}),tr("review-codex","Run Codex review against the current branch",function(){return H("codex",Ke())}),tr("review-claude","Run Claude Code review against the current branch",function(){return H("claude",Ke())}),tr("review-gemini","Run Gemini CLI review against the current branch",function(){return H("gemini",Ke())}),rr({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(Ge(ve(e)),{allAgentsLabel:"planning agents"}):H(n,Ge(ve(e)))}}),tr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("codex",Ge(ve(n)))}}),tr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("claude",Ge(ve(n)))}}),tr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("gemini",Ge(ve(n)))}}),rr({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 H(n,Xe())}}),tr("simplify-codex","Run Codex PR simplification against the current branch",function(){return H("codex",Xe())}),tr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return H("claude",Xe())}),tr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return H("gemini",Xe())}),er.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return e=n.v,n.n=2,Qn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),er.command("update-pr").description("Update the current pull request body").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Zn(e);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),er.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),er.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),er.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),er.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),er.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Jn();case 1:return e=n.v,n.n=2,Xn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await er.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcHJvbXB0cy9wbGFuUHJvbXB0LnRzIiwiLi4vc3JjL3JlcG8vZGVmYXVsdEJyYW5jaC50cyIsIi4uL3NyYy9wcm9tcHRzL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LnRzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBsb2dGaWxlUGF0aD86IHN0cmluZztcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbiAgd2FpdEludGVydmFsU2Vjb25kcz86IG51bWJlcjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5jb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDEwO1xuZXhwb3J0IGNvbnN0IFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyA9ICdQTEVBU0UgV0FJVCBGT1IgVVAgVE8gMSBIT1VSLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9IE9uZSBkb3QgcmVwcmVzZW50cyAke3dhaXRJbnRlcnZhbFNlY29uZHN9IHNlY29uZHM6IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC4gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBSZXZpZXdDb21tZW50Tm9kZSAmIHsgYXV0aG9yPzogc3RyaW5nIHwgbnVsbCB9IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tZW50LFxuICAgIGF1dGhvcjogdHlwZW9mIGNvbW1lbnQuYXV0aG9yID09PSAnc3RyaW5nJyA/IGNvbW1lbnQuYXV0aG9yIDogKGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyBudWxsKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgYXMgVDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8SnNvbk9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgSnNvbk9iamVjdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGNodW5rKSA6IEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIoYm9keTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfSBib2R5Li4uYCk7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuXG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIGNvZGUtZm9jdXNlZCBwbGFuLCBhbmQgcG9zdGluZyB0aGF0IHBsYW4gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uXG5IZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcblxcYFxcYFxcYHlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cblxcYFxcYFxcYFxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGZldGNoZWQgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgcGxhbm5pbmc6XG4gICAtIFJlYWQgdGhlIGlzc3VlIGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IHJlcXVlc3RlZCBiZWhhdmlvciwgY29uc3RyYWludHMsIGFuZCBvcGVuIHF1ZXN0aW9ucy5cbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gUHJvcG9zZSBhIGNvZGUtZm9jdXNlZCBpbXBsZW1lbnRhdGlvbiBwbGFuIGdyb3VuZGVkIGluIHRoZSBpc3N1ZSwgZmV0Y2hlZCBtZXNzYWdlcywgYW5kIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLiBEZXNjcmliZSB3aGF0IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4sIHdoZXJlIGl0IHNob3VsZCBsaXZlLCBhbmQgaG93IGl0IHNob3VsZCB3b3JrLiBQcmVmZXIgY29uY3JldGUgZ3VpZGFuY2Ugc3VjaCBhczpcbiAgIC0gV2hpY2ggZmlsZXMsIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgdHlwZXMsIHRlc3RzLCBvciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhZGRlZCBvciBjaGFuZ2VkLlxuICAgLSBIb3cgdGhlIG5ldyBvciBjaGFuZ2VkIGxvZ2ljIHNob3VsZCBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS5cbiAgIC0gV2hhdCBpbnRlcmZhY2VzLCBkYXRhIHNoYXBlcywgY29uZGl0aW9uIGJyYW5jaGVzLCBvciBzaWRlIGVmZmVjdHMgbmVlZCB0byBjaGFuZ2UuXG4gICAtIFdoaWNoIGVkZ2UgY2FzZXMsIHJpc2tzLCBhbmQgdmFsaWRhdGlvbiBzdGVwcyBtYXR0ZXIgZm9yIHRoZSBjb2RlIGNoYW5nZS5cbiAgIC0gQW55IG1pc3NpbmcgaW5mb3JtYXRpb24gb3IgYXNzdW1wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGRlc2lnbi5cbjQuIFBvc3QgdGhlIHBsYW4gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0gZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzICh3aXRob3V0IHRyaXBsZSBiYWNrdGlja3MpOlxuXFxgXFxgXFxgXG4jIyBDb2RlIFBsYW5cblxuIyMjIEZpbGVzIC8gTW9kdWxlcyB0byBDaGFuZ2VcblxuLSBGaWxlIG9yIG1vZHVsZSBhbmQgd2h5IGl0IG5lZWRzIHRvIGNoYW5nZVxuXG4jIyMgQ29kZSB0byBXcml0ZVxuXG4tIEZ1bmN0aW9uLCB0eXBlLCBjbGFzcywgb3IgYnJhbmNoIHRvIGFkZCBvciBtb2RpZnlcbi0gSG93IHRoZSBsb2dpYyBzaG91bGQgd29ya1xuXG4jIyMgVmFsaWRhdGlvblxuXG4tIFRlc3Qgb3IgY2hlY2sgdG8gY29uZmlybSB0aGUgYmVoYXZpb3JcblxuIyMgUmlza3MgLyBPcGVuIFF1ZXN0aW9uc1xuXG4tIFJpc2sgb3IgdW5jZXJ0YWludHlcblxcYFxcYFxcYFxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KFxuICAgIChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICAgICAnZ2gnLFxuICAgICAgICAncmVwbycsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgICAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nLFxuICAgICAgXSlcbiAgICApLnRyaW0oKSxcbiAgICAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJ1xuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoWydnaCcsICdwcicsICd2aWV3JywgJy0tanNvbicsICdiYXNlUmVmTmFtZScsICctLXRlbXBsYXRlJywgJ3t7LmJhc2VSZWZOYW1lfX0nXSlcbiAgICApLnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAvbm8gcHVsbCByZXF1ZXN0cz8gZm91bmQgZm9yIGJyYW5jaC9pLnRlc3QoU3RyaW5nKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoICR7YmFzZUJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyBhbmQgZXZpZGVuY2UgeW91IGp1ZGdlZCB0byBiZSB2YWxpZC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuYC50cmltKCk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBub3JtYWxpemVJc3N1ZU51bWJlcixcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxuICB1cGRhdGVQcixcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHInKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgYm9keScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQcihib2R5KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtaXNzdWUnKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGFuIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwnKVxuICAuYXJndW1lbnQoJzxpc3N1ZT4nLCAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKGlzc3VlUmVmZXJlbmNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1wcicpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYSBwdWxsIHJlcXVlc3QgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCwgZXhjbHVkaW5nIGlubGluZSBjb21tZW50cycpXG4gIC5hcmd1bWVudCgnW3ByXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlciBvciBVUkw7IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHByUmVmZXJlbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hQck1lc3NhZ2VzKHByUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgYXJndW1lbnROYW1lPzogc3RyaW5nO1xuICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW46IChtb2RlOiBUTW9kZSwgYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbmZpZy5uYW1lKS5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcbiAgaWYgKGNvbmZpZy5hcmd1bWVudE5hbWUpIHtcbiAgICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZy5hcmd1bWVudE5hbWUsIGNvbmZpZy5hcmd1bWVudERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbc3RyaW5nIHwgeyBhZ2VudDogVE1vZGUgfSwgeyBhZ2VudDogVE1vZGUgfSB8IHVuZGVmaW5lZF07XG4gICAgICBjb25zdCBhcmd1bWVudCA9IHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBhcmd1bWVudE9yT3B0aW9ucyA6ICcnO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gbWF5YmVPcHRpb25zIDogYXJndW1lbnRPck9wdGlvbnMpIGFzIHsgYWdlbnQ6IFRNb2RlIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgoKSA9PiBQcm9taXNlPHN0cmluZz4pXG4gICAgfCB7XG4gICAgICAgIGFyZ3VtZW50TmFtZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBydW46IChhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bigpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZ09yUnVuLmFyZ3VtZW50TmFtZSwgY29uZmlnT3JSdW4uYXJndW1lbnREZXNjcmlwdGlvbikuYWN0aW9uKGFzeW5jIChhcmd1bWVudDogc3RyaW5nKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ucnVuKGFyZ3VtZW50KSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIldBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsInN0ZGlvIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiY2xvc2UiLCJmIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJfdCIsIl9jb250ZXh0MiIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2VzcyIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJhbGxBZ2VudHNMYWJlbCIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyRtYXBPdXRwdXQyIiwiX29wdGlvbnMiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJfcnVuQWdlbnRDb21tYW5kIiwiX3QzIiwiY3JlYXRlQWdlbnRDb21tYW5kIiwiYWdlbnRMb2dGaWxlUGF0aCIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJwYWRTdGFydCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiVEVTVF9DSEVDS19XQUlUX01FU1NBR0UiLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJwcm9ncmVzcyIsInByb2Nlc3NTdGRlcnIiLCJleGl0V2l0aEVycm9yIiwiZXhpdCIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiZXhpdENvZGUiLCJ0ZXN0IiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwicHJvY2Vzc1N0ZGluIiwiaXNUVFkiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiZXJyb3JNZXNzYWdlIiwiaW5wdXQiLCJydW5Db21tYW5kIiwiX3J1bkNvbW1hbmQiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX2xvb3AiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl94OCIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g5IiwiX3gwIiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJfZXJyb3IkbWVzc2FnZSIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwiX29iamVjdFNwcmVhZCIsImF1dGhvciIsImxvZ2luIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDE0IiwiX3gxNSIsIl94MTYiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE3IiwiX3gxOCIsIl94MTkiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MjAiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjEiLCJfeDIyIiwiX3gyMyIsIl94MjQiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjUiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNiIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjciLCJfY2FsbGVlMTUiLCJfdDEwIiwiX2NvbnRleHQxNiIsIkJ1ZmZlciIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwicGF5bG9hZCIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJib2R5IiwiX2NvbnRleHQxNyIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJvcGVuUHIiLCJfeDI4IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOCIsInVwZGF0ZVByIiwiX3gyOSIsIl91cGRhdGVQciIsIl9jYWxsZWUxOCIsIl90MTMiLCJfdDE0IiwiX2NvbnRleHQxOSIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOSIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJfdDE1IiwiX3QxNiIsIl9jb250ZXh0MjAiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3gzMCIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTIwIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX3Jlc3BvbnNlJGRhdGEiLCJfc3RlcDMkdmFsdWUiLCJpbmRleCIsIl9zdGVwMyR2YWx1ZSQiLCJfdDE3IiwiX3QxOCIsIl90MTkiLCJfY29udGV4dDIxIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX2NhbGxlZTIyIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsIl9jb250ZXh0MjMiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsIl9jYWxsZWUyMSIsIl9yZWY1IiwiX3JlZjciLCJjb21wYWN0V29ya2Zsb3ciLCJfdDIwIiwiX3QyMSIsIl90MjIiLCJfY29udGV4dDIyIiwiY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY4IiwiX3JlZjkiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfeDMxIiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsIl9jYWxsZWUyMyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjYiLCJpc3N1ZSIsIl9jb250ZXh0MjQiLCJpc3N1ZU1lc3NhZ2VzIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJmZXRjaFByTWVzc2FnZXMiLCJfeDMyIiwiX2ZldGNoUHJNZXNzYWdlcyIsIl9jYWxsZWUyNCIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjciLCJfeWllbGQkY3VycmVudFJlcG9QYXI4IiwicmVzb2x2ZWRQck51bWJlciIsIl90MjMiLCJfY29udGV4dDI1Iiwibm9ybWFsaXplUHJOdW1iZXIiLCJwck1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJfeDMzIiwiX3gzNCIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfY2FsbGVlMjUiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJfY29udGV4dDI2IiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJzdHJpbmdPclVuZGVmaW5lZCIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX3gzNSIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsIl9jYWxsZWUyNiIsIl9jb250ZXh0MjciLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJydGtBdmFpbGFibGUiLCJzcGF3blN5bmNTYWZlIiwicmVwbGFjZSIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsImpvYk5hbWUiLCJfcmVmMyIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJzdGF0dXMiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsIl94MzYiLCJfeDM3IiwiX3gzOCIsIl9pc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTI3IiwibWVzc2FnZXMiLCJfY29udGV4dDI4IiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhMiIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3gzOSIsIl94NDAiLCJfeDQxIiwiX3ByTWVzc2FnZXMiLCJfY2FsbGVlMjgiLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX2NvbnRleHQyOSIsIl9yZXNwb25zZSRkYXRhNCIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDQyIiwiX3g0MyIsIl94NDQiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX2NhbGxlZTI5IiwiX2NvbnRleHQzMCIsIl9yZXNwb25zZSRkYXRhNSIsIl94NDUiLCJfeDQ2IiwiX3g0NyIsIl9wclJldmlld3MiLCJfY2FsbGVlMzAiLCJfY29udGV4dDMxIiwiX3Jlc3BvbnNlJGRhdGE2IiwicmV2aWV3TWVzc2FnZSIsIl94NDgiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWUzMSIsImNvbmZpZyIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJfdDI0IiwiX2NvbnRleHQzMiIsImhhc01lc3NhZ2VCb2R5IiwiX3g0OSIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTMyIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJfdDI1IiwiX2NvbnRleHQzMyIsInRpdGxlIiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luMiIsIl9jb21tZW50JGF1dGhvcjIiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfbGVuIiwiX3JlZjAiLCJhcmd1bWVudE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIl9hcmdzOCIsImFkZEFnZW50Q29tbWFuZCIsImNvbmZpZ09yUnVuIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJpc3N1ZVJlZmVyZW5jZSIsInByUmVmZXJlbmNlIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBYUEsSUFDYUEsRUFBOEIsZ0NBRTNDLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBMkIzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBM0JNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBYixJQUFBYyxFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUMsRUFBQUQsRUFBQUUsR0FBQSxLQUFBLEVBSUssWUFKTCxJQUExQmIsSUFBQUEsRUFBNkIsQ0FBQSxHQUNyRkUsRUFBT1ksRUFBZ0IsT0FBWGIsRUFBQ0YsRUFBUSxJQUFFRSxFQUFJLEdBQUlGLEVBQVFnQixNQUFNLEdBQUksQ0FDckRDLE1BQU8sQ0FBQyxTQUFVLE9BQVEsVUFFdEJiLEVBQW1CYyxFQUFtQmpCLEVBQVFrQixZQUFhbEIs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
|
|
4
|
+
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function o(r,t,i,o){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return x(s,"_invoke",function(r,t,i){var o,u,c,s=0,l=i||[],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,a}};function p(r,t){for(u=r,c=t,e=0;!f&&s&&!i&&e<l.length;e++){var i,o=l[e],p=d.p,h=o[2];r>3?(i=h===t)&&(c=o[(u=o[4])?5:(u=3,3)],o[4]=o[5]=n):o[0]<=p&&((i=r<2&&p<o[1])?(u=0,d.v=t,d.n=o[1]):p<h&&(i=r<3||o[0]>t||t>h)&&(o[4]=r,o[5]=t,d.n=h,u=0))}if(i||r>1)return a;throw f=!0,t}return function(i,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||(i="next"),e=o[i]){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 '"+i+"' method"),u=1);o=n}else if((e=(f=d.n<0)?c:r.call(t,d))!==a)break}catch(e){o=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,i,o),!0),s}var a={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(x(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,x(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,i,"GeneratorFunction"),x(f),x(f,i,"Generator"),x(f,t,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:o,m:d}})()}function x(n,e,r,t){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}x=function(n,e,r,t){function o(e,r){x(n,e,function(n){return this._invoke(e,r,n)})}e?i?i(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(o("next",0),o("throw",1),o("return",2))},x(n,e,r,t)}function S(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 j(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,i,o,a,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,i=n}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw i}}return u}}(n,e)||A(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 O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(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 R(n){"@babel/helpers - typeof";return R="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},R(n)}function A(n,e){if(n){if("string"==typeof n)return d(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)?d(n,e):void 0}}var I="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return P.apply(this,arguments)}function P(){return P=v(k().m(function n(e,t){var i,o,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),o=r(null!=(i=e[0])?i:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),a=E(t.waitMessage,t.waitIntervalSeconds),n.n=1,N(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([C(o.stdout,function(n){return u.write(n)}),C(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=j(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 a(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),P.apply(this,arguments)}function C(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,r){var t,i,o,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],i=!1,o=!1,n.p=2,u=p(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(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:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,o=!0,a=f;case 8:if(n.p=8,n.p=9,!i||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 a;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 E(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 N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var r,t,u;return k().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=v(k().m(function n(){return k().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(t=i(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){t.writable&&t.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){t.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=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var _="There is no concern.",L=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return F.apply(this,arguments)}function F(){return(F=v(k().m(function n(e,r){var t,i,o;return k().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,i=E(J(r.allAgentsLabel)),n.p=2,n.n=3,Promise.all(L.map(v(k().m(function n(e){var i,o,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(e,t,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(o=(a=r).mapOutput)?void 0:o.call(a,e,u))?i:"## ".concat(W(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"):_);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function H(n,e,r){return M.apply(this,arguments)}function M(){return(M=v(k().m(function n(e,r,t){var i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),i=$,o=U,a=e,n.n=1,r;case 1:return n.a(2,i(o(a,n.v),{logFilePath:B(e),waitMessage:void 0===t.waitMessage?J(W(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function U(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 W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(I)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,r=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),t=r[0],i=r[1],o=r[2],a=r[3],u=r[4],"".concat(t).concat(i,"-").concat(o).concat(a).concat(u)),".log");var e,r,t,i,o,a,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0},Z=/\btest\b/i,z="Waiting for test-related workflows to finish. ".concat(I),K=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],V=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function X(n){c.write("".concat(n,"\n"))}function nn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function en(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 rn(){return tn.apply(this,arguments)}function tn(){return(tn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Un(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n){return an.apply(this,arguments)}function an(){return(an=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,rn();case 1:if(!((r=n.v).length>0)){n.n=2;break}return n.a(2,r);case 2:nn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function un(n,e){return cn.apply(this,arguments)}function cn(){return cn=v(k().m(function n(e,t){var i,o,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),o=null!=(i=t.allowedExitCodes)?i:[],a=k().m(function n(){var i,a,u,l,f,d,p,h;return k().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?a.stdin.end(t.stdinData):a.stdin.end(),n.n=1,Promise.all([Un(a.stdout),Un(a.stderr),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(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(!(en(e,p,h)&&c<3)){n.n=4;break}return X("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:nn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(a()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:nn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),cn.apply(this,arguments)}function sn(n,e){return ln.apply(this,arguments)}function ln(){return(ln=v(k().m(function n(e,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function fn(n,e,r){return dn.apply(this,arguments)}function dn(){return(dn=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(){var e,r,t,i,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=j(r,2),i=t[0],o=t[1],i&&o||nn("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function mn(){return vn.apply(this,arguments)}function vn(){return(vn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=v(k().m(function n(e,r){var t,i,o,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],i=0,o=Object.entries(r);case 1:if(!(i<o.length)){n.n=4;break}if(a=j(o[i],2),u=a[0],void 0!==(c=a[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,sn(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"),nn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e,r;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function bn(n,e,r,t,i){return kn.apply(this,arguments)}function kn(){return(kn=v(k().m(function n(e,r,t,i,o){var a,u,c,s,l,f,d,p,h,m,v,y;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:r,name:t,number:Number(i),cursor:a});case 1:if(m=u=n.v.data,h=null==m){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}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||nn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(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,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:a=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 xn(n,e,r){return Sn.apply(this,arguments)}function Sn(){return(Sn=v(k().m(function n(e,r,t){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,bn("\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||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function jn(n,e,r){return On.apply(this,arguments)}function On(){return(On=v(k().m(function n(e,r,t){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,bn("\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,v(k().m(function n(e){var r,t,o,a,u,c,s,l,f,d;return k().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(gn),o=e.comments.pageInfo,a=null!=(r=o.endCursor)?r:void 0;case 2:if(!o.hasNextPage){n.n=7;break}return n.n=3,wn("\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:a});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)||nn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,O(s.nodes.map(gn))),o=s.pageInfo,a=null!=(c=o.endCursor)?c:void 0,n.n=2;break;case 7:i.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,i)}},n)}))).apply(this,arguments)}function Rn(n){return f(n,Y)}function An(n){return JSON.parse(JSON.stringify(n))}function In(n){return $n.apply(this,arguments)}function $n(){return($n=v(k().m(function n(e){var r,t,i,o,a,u,c,s,l,f;return k().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,fn(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,i=null!=(r=e.bucket)?r:"";return n[i]=(null!=(t=n[i])?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!=(i=l.pending)?i:0,skipping:null!=(o=l.skipping)?o:0,cancel:null!=(a=l.cancel)?a:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Pn(n,e,r,t){return Cn.apply(this,arguments)}function Cn(){return(Cn=v(k().m(function n(e,r,t,i){var o,a,u,s,l,f,d,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Hn),void 0===t&&(t=In),void 0===i&&(i=function(n){return c.write(n)}),o=0,n.n=1,t(e);case 1:a=n.v,u=function(){},n.p=2;case 3:if(s=qn(a),l=En(s),f=j(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,[a,o,!1]);case 4:if(!(o>=360)){n.n=5;break}return n.a(2,[a,o,!0]);case 5:return 1===(o+=1)&&(u=E(z,10,i)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:a=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(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=j(n,2),t=r[0],i=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Nn(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||Gn(e)>Gn(n)?e:n},[])}(r[1]),o=i[0];o||nn("Error: no checks found for workflow ".concat(t));var a=null!=(e=i.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:o;return[t,{classification:Ln(i),check:a,checks:i}]}))}function En(n){for(var e={},r={},t=0,i=Object.entries(n);t<i.length;t++){var o=j(i[t],2),a=o[0],u=o[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Fn(n)})&&(r[a]=u):e[a]=u}return[e,r]}function Nn(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 Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=v(k().m(function n(e){var r,t;return k().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,fn(["run","view",e,"--json",K.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 c.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 Ln(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 Dn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Gn(n){return n.reduce(function(n,e){var r=Dn(e);return r>n?r:n},"")}function Fn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Z.test(n)})}function Hn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Un(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=v(k().m(function n(e){var r,t,i,o,a,u,c,s;return k().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,i=!1,n.p=2,a=p(e);case 3:return n.n=4,a.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,i=!0,o=s;case 8:if(n.p=8,n.p=9,!t||null==a.return){n.n=10;break}return n.n=10,a.return();case 10:if(n.p=10,!i){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 Jn(){return Bn.apply(this,arguments)}function Bn(){return(Bn=v(k().m(function n(){var e,r,t,i,o,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: JSON input is required on stdin");case 1:for(e=n.v,r=ue(e),t={},i=0,o=Object.entries(r.replies);i<o.length;i++)a=j(o[i],2),u=a[0],"string"==typeof(c=a[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=v(k().m(function n(e){var r,t,i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,sn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||nn("Error: could not determine current branch"),t||nn("Error: could not determine default branch"),r===t&&nn("Error: current branch is the default branch (".concat(t,")")),i=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&i.push("--body-file","-"),X("Creating pull request..."),n.n=3,sn(i,e);case 3:return o=Rn,a=JSON,n.n=4,sn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,o(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Zn(n){return zn.apply(this,arguments)}function zn(){return(zn=v(k().m(function n(e){var r,t,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return r=n.v,X("Updating pull request #".concat(r," body...")),n.n=2,sn(["pr","edit",r,"--body-file","-"],e);case 2:return t=Rn,i=JSON,n.n=3,sn(["pr","view",r,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 3:return n.a(2,t(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Kn(){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(){var e,r,t,i,o,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return e=n.v,r=j(e,2),t=r[0],i=r[1],n.n=2,mn();case 2:return o=n.v,X("Fetching unresolved review threads..."),a=Rn,n.n=3,jn(t,i,o);case 3:return u=n.v,n.a(2,a({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Xn(n){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(e){var r,t,i,o,a,u,c,s,l,f,d,p,h,m,v,y,g,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),i=t[0],o=t[1],n.n=2,mn();case 2:return a=n.v,b=Set,n.n=3,xn(i,o,a);case 3:x=n.v,u=new b(x),X("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(p=j(f.value,2),h=p[0],m=j(p[1],2),v=m[0],y=m[1],X("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:y});case 7:g=n.v,null!=(d=g.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(v):X("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return X("Done."),n.a(2,Rn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function ee(){return re.apply(this,arguments)}function re(){return(re=v(k().m(function n(){var e,r,t,i,o,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return e=n.v,X("Fetching latest CI results..."),n.n=2,Pn(e);case 2:if(r=n.v,t=j(r,3),i=t[0],o=t[1],a=t[2],u=qn(i),c=En(u),s=j(c,2),l=s[0],f=s[1],d={summary:An(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:a},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var r,t,i,o,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return r=j(e,2),t=r[0],i=r[1],n.n=1,ce(t,i);case 1:return o=n.v,a=b,u=b({},o),c=de,n.n=2,le(i.check);case 2:return n.a(2,a(u,c(n.v)))}},n)}))));case 3:return d.failed_workflows=n.v,n.a(2,{output:Rn(d),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return ce(e[0],e[1])}));case 5:return d.running_test_related_workflows=n.v,n.a(2,{output:Rn(d),exitCode:1});case 6:return d.test_workflow_output="All workflows are successful.",n.a(2,{output:Rn(d),exitCode:0})}},n)}))).apply(this,arguments)}function te(n){return ie.apply(this,arguments)}function ie(){return(ie=v(k().m(function n(e){var r,t,i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),i=t[0],o=t[1],n.n=2,Se(i,o,ve(e));case 2:return a=n.v,X("Fetched issue #".concat(a.number," messages.")),n.a(2,Rn({issue:a}))}},n)}))).apply(this,arguments)}function oe(n){return ae.apply(this,arguments)}function ae(){return(ae=v(k().m(function n(e){var r,t,i,o,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:if(r=n.v,t=j(r,2),i=t[0],o=t[1],void 0!==e){n.n=3;break}return n.n=2,mn();case 2:c=n.v,n.n=4;break;case 3:c=we(e);case 4:return a=c,n.n=5,Oe(i,o,a);case 5:return u=n.v,X("Fetched pull request #".concat(u.number," messages.")),n.a(2,Rn({pull_request:u}))}},n)}))).apply(this,arguments)}function ue(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||nn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&nn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function ce(n,e){return se.apply(this,arguments)}function se(){return(se=v(k().m(function n(e,r){var t,i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:return i=Nn(r.check),n.n=1,Tn(i);case 1:return o=n.v,a=ge(o,me(r.check.name)),n.a(2,{classification:r.classification,workflow:e,job:me(r.check.name),job_url:me(null==a?void 0:a.url),failed_step:be(a),run_id:i,run_url:null!=(t=me(null==o?void 0:o.url))?t:me(r.check.link),branch:me(null==o?void 0:o.headBranch),sha:me(null==o?void 0:o.headSha),conclusion:me(null==o?void 0:o.conclusion)})}},n)}))).apply(this,arguments)}function le(n){return fe.apply(this,arguments)}function fe(){return(fe=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:if(r=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,fn(["run","view",r,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function de(n){return{failed_log:pe(n)}}function pe(n){var e=he(l(n));if(!ke)return e;var r=xe(["rtk","log"],e);return 0===r.exitCode&&r.output.trim().length>0?he(r.output):e}function he(n){return n.split("\n").map(function(n){return n.replace(V,"")}).join("\n").trim()}function me(n){return"string"==typeof n&&n.length>0?n:void 0}function ve(n){return ye(n,"issue")}function we(n){return ye(n,"pull request")}function ye(n,e){var r=String(n).trim();if(0===r.length&&nn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(r))return r;var t="issue"===e?"issues":"pull",i=r.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(t,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];nn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(r,'"'),2)}function ge(n,e){var r,t;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(r=null!=(t=n.jobs.find(function(n){return n.name===e}))?t:n.jobs.find(function(n){return"failure"===n.conclusion}))?r:n.jobs.find(function(n){return"completed"!==n.status})}function be(n){var e,r,t;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(r=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:r.name)?e:null==(t=n.steps.find(function(n){return"completed"!==n.status}))?void 0:t.name}var ke=0===xe(["rtk","--version"]).exitCode;function xe(n,e){var r,i,o,a,u=t(null!=(r=n[0])?r:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(o=u.stdout)?o:"").concat(null!=(a=u.stderr)?a:"")}}function Se(n,e,r){return je.apply(this,arguments)}function je(){return(je=v(k().m(function n(e,r,t){var i,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne({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 i=n.v,n.n=2,qe({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:_e});case 2:return o=n.v,n.a(2,b(b({},i),{},{messages:o}))}},n)}))).apply(this,arguments)}function Oe(n,e,r){return Re.apply(this,arguments)}function Re(){return(Re=v(k().m(function n(e,r,t){var i,o,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne({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 i=n.v,n.n=2,Promise.all([Ie(e,r,t),Pe(e,r,t)]);case 2:return o=n.v,a=j(o,2),u=a[0],c=a[1],n.a(2,b(b({},i),{},{messages:[].concat(O(u),O(c)).sort(Ae)}))}},n)}))).apply(this,arguments)}function Ae(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function Ie(n,e,r){return $e.apply(this,arguments)}function $e(){return($e=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({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:_e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Pe(n,e,r){return Ce.apply(this,arguments)}function Ce(){return(Ce=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({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:Le});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=v(k().m(function n(e){var r,t,i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return a=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(o=a.selectConnection.call(a,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,O(o.nodes.map(e.mapNode).filter(De))),o.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(i=o.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Ne(n){return Te.apply(this,arguments)}function Te(){return(Te=v(k().m(function n(e){var r,t,i,o,a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(o=a.selectMetadata.call(a,n.v))||nn("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!=(i=o.body)?i:""})}},n)}))).apply(this,arguments)}function _e(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 Le(n){var e,r,t,i,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!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(o=n.body)?o:""}}function De(n){return"string"==typeof n.body&&n.body.length>0}function Ge(n){return Fe.apply(this,arguments)}function Fe(){return(Fe=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(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 He(){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Je();case 1:if(null==(e=n.v)){n.n=2;break}r=e,n.n=4;break;case 2:return n.n=3,Ue();case 3:r=n.v;case 4:return n.a(2,r)}},n)}))).apply(this,arguments)}function Ue(){return We.apply(this,arguments)}function We(){return(We=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=Ye,n.n=1,$(["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 Je(){return Be.apply(this,arguments)}function Be(){return(Be=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!Qe(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function Qe(n){return/no pull requests? found for branch/i.test(String(n))}function Ye(n,e){if(n.length>0)return n;throw new Error(e)}function Ze(n){return"git merge-base ".concat(ze("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(ze(n)," HEAD")}function ze(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function Ke(){return Ve.apply(this,arguments)}function Ve(){return(Ve=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He();case 1:return e=n.v,r=Ze(e),n.a(2,"\nReview the current branch against its base branch ".concat(e,' via `git diff "$(').concat(r,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(_,"`\n").trim())}},n)}))).apply(this,arguments)}function Xe(){return nr.apply(this,arguments)}function nr(){return(nr=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He();case 1:return e=n.v,r=Ze(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(r,")\"`.\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 er=new n;function rr(n){var r=er.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(v(k().m(function e(){var r,t,i,o,a,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(r=f.length,t=new Array(r),i=0;i<r;i++)t[i]=f[i];return o=j(t,2),a=o[0],u=o[1],c="string"==typeof a?a:"",s="string"==typeof a?u:a,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 tr(n,e,r){var t=er.command(n).description(e).allowExcessArguments(!1);"function"!=typeof r?t.argument(r.argumentName,r.argumentDescription).action(v(k().m(function n(e){var t;return k().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(v(k().m(function n(){var e;return k().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)})))}er.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),rr({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?G(Ke(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):H(n,Ke())}}),tr("review-codex","Run Codex review against the current branch",function(){return H("codex",Ke())}),tr("review-claude","Run Claude Code review against the current branch",function(){return H("claude",Ke())}),tr("review-gemini","Run Gemini CLI review against the current branch",function(){return H("gemini",Ke())}),rr({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(Ge(ve(e)),{allAgentsLabel:"planning agents"}):H(n,Ge(ve(e)))}}),tr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("codex",Ge(ve(n)))}}),tr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("claude",Ge(ve(n)))}}),tr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("gemini",Ge(ve(n)))}}),rr({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 H(n,Xe())}}),tr("simplify-codex","Run Codex PR simplification against the current branch",function(){return H("codex",Xe())}),tr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return H("claude",Xe())}),tr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return H("gemini",Xe())}),er.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return e=n.v,n.n=2,Qn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),er.command("update-pr").description("Update the current pull request body").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Zn(e);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),er.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),er.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),er.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,oe(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),er.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),er.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Jn();case 1:return e=n.v,n.n=2,Xn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await er.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcHJvbXB0cy9wbGFuUHJvbXB0LnRzIiwiLi4vc3JjL3JlcG8vZGVmYXVsdEJyYW5jaC50cyIsIi4uL3NyYy9wcm9tcHRzL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LnRzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBsb2dGaWxlUGF0aD86IHN0cmluZztcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbiAgd2FpdEludGVydmFsU2Vjb25kcz86IG51bWJlcjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5jb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDEwO1xuZXhwb3J0IGNvbnN0IFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyA9ICdQTEVBU0UgV0FJVCBGT1IgVVAgVE8gMSBIT1VSLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9IE9uZSBkb3QgcmVwcmVzZW50cyAke3dhaXRJbnRlcnZhbFNlY29uZHN9IHNlY29uZHM6IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC4gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBSZXZpZXdDb21tZW50Tm9kZSAmIHsgYXV0aG9yPzogc3RyaW5nIHwgbnVsbCB9IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tZW50LFxuICAgIGF1dGhvcjogdHlwZW9mIGNvbW1lbnQuYXV0aG9yID09PSAnc3RyaW5nJyA/IGNvbW1lbnQuYXV0aG9yIDogKGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyBudWxsKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgYXMgVDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8SnNvbk9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgSnNvbk9iamVjdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGNodW5rKSA6IEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIoYm9keTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfSBib2R5Li4uYCk7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuXG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIGNvZGUtZm9jdXNlZCBwbGFuLCBhbmQgcG9zdGluZyB0aGF0IHBsYW4gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uXG5IZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcblxcYFxcYFxcYHlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cblxcYFxcYFxcYFxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGZldGNoZWQgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgcGxhbm5pbmc6XG4gICAtIFJlYWQgdGhlIGlzc3VlIGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IHJlcXVlc3RlZCBiZWhhdmlvciwgY29uc3RyYWludHMsIGFuZCBvcGVuIHF1ZXN0aW9ucy5cbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gUHJvcG9zZSBhIGNvZGUtZm9jdXNlZCBpbXBsZW1lbnRhdGlvbiBwbGFuIGdyb3VuZGVkIGluIHRoZSBpc3N1ZSwgZmV0Y2hlZCBtZXNzYWdlcywgYW5kIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLiBEZXNjcmliZSB3aGF0IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4sIHdoZXJlIGl0IHNob3VsZCBsaXZlLCBhbmQgaG93IGl0IHNob3VsZCB3b3JrLiBQcmVmZXIgY29uY3JldGUgZ3VpZGFuY2Ugc3VjaCBhczpcbiAgIC0gV2hpY2ggZmlsZXMsIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgdHlwZXMsIHRlc3RzLCBvciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhZGRlZCBvciBjaGFuZ2VkLlxuICAgLSBIb3cgdGhlIG5ldyBvciBjaGFuZ2VkIGxvZ2ljIHNob3VsZCBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS5cbiAgIC0gV2hhdCBpbnRlcmZhY2VzLCBkYXRhIHNoYXBlcywgY29uZGl0aW9uIGJyYW5jaGVzLCBvciBzaWRlIGVmZmVjdHMgbmVlZCB0byBjaGFuZ2UuXG4gICAtIFdoaWNoIGVkZ2UgY2FzZXMsIHJpc2tzLCBhbmQgdmFsaWRhdGlvbiBzdGVwcyBtYXR0ZXIgZm9yIHRoZSBjb2RlIGNoYW5nZS5cbiAgIC0gQW55IG1pc3NpbmcgaW5mb3JtYXRpb24gb3IgYXNzdW1wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGRlc2lnbi5cbjQuIFBvc3QgdGhlIHBsYW4gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0gZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzICh3aXRob3V0IHRyaXBsZSBiYWNrdGlja3MpOlxuXFxgXFxgXFxgXG4jIyBDb2RlIFBsYW5cblxuIyMjIEZpbGVzIC8gTW9kdWxlcyB0byBDaGFuZ2VcblxuLSBGaWxlIG9yIG1vZHVsZSBhbmQgd2h5IGl0IG5lZWRzIHRvIGNoYW5nZVxuXG4jIyMgQ29kZSB0byBXcml0ZVxuXG4tIEZ1bmN0aW9uLCB0eXBlLCBjbGFzcywgb3IgYnJhbmNoIHRvIGFkZCBvciBtb2RpZnlcbi0gSG93IHRoZSBsb2dpYyBzaG91bGQgd29ya1xuXG4jIyMgVmFsaWRhdGlvblxuXG4tIFRlc3Qgb3IgY2hlY2sgdG8gY29uZmlybSB0aGUgYmVoYXZpb3JcblxuIyMgUmlza3MgLyBPcGVuIFF1ZXN0aW9uc1xuXG4tIFJpc2sgb3IgdW5jZXJ0YWludHlcblxcYFxcYFxcYFxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KFxuICAgIChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICAgICAnZ2gnLFxuICAgICAgICAncmVwbycsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgICAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nLFxuICAgICAgXSlcbiAgICApLnRyaW0oKSxcbiAgICAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJ1xuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoWydnaCcsICdwcicsICd2aWV3JywgJy0tanNvbicsICdiYXNlUmVmTmFtZScsICctLXRlbXBsYXRlJywgJ3t7LmJhc2VSZWZOYW1lfX0nXSlcbiAgICApLnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAvbm8gcHVsbCByZXF1ZXN0cz8gZm91bmQgZm9yIGJyYW5jaC9pLnRlc3QoU3RyaW5nKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoICR7YmFzZUJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRm9yIGVhY2ggZmluZGluZywgZG8gdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwczpcbjEuIEdhdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlOlxuICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgZmluZGluZyBpcyBhYm91dCBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgZmluZGluZyBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjIuIEp1ZGdlIHdoZXRoZXIgdGhlIGZpbmRpbmcgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG4zLiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IHRoZSB2YWxpZCBmaW5kaW5ncywgdGhlIGV2aWRlbmNlIGZvciBlYWNoIG9uZSwgYW5kIHRoZSBwcm9wb3NlZCBmaXggd2l0aCBpdHMgbGlrZWx5IGltcGFjdC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBvcGVuUHIoYm9keSB8fCB1bmRlZmluZWQpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCBib2R5JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKGJvZHkpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVSZWZlcmVuY2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZVJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyIG9yIFVSTDsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJSZWZlcmVuY2U/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIiwicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsImEiLCJjb25jYXQiLCJFcnJvciIsImpvaW4iLCJjbG9zZSIsImYiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsIl90IiwiX2NvbnRleHQyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwidG9TdHJpbmciLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsInJ1bkFsbEFnZW50Q29tbWFuZHMiLCJfcnVuQWxsQWdlbnRDb21tYW5kcyIsInByb21wdCIsInJlc29sdmVkUHJvbXB0Iiwib3V0cHV0cyIsImFsbEFnZW50c0xhYmVsIiwid2FpdE1lc3NhZ2VGb3IiLCJtYXAiLCJhZ2VudCIsIl9vcHRpb25zJG1hcE91dHB1dCIsIl9vcHRpb25zJG1hcE91dHB1dDIiLCJfb3B0aW9ucyIsInJ1bkFnZW50Q29tbWFuZCIsInRyaW0iLCJtYXBPdXRwdXQiLCJjYWxsIiwiZGlzcGxheUFnZW50TmFtZSIsImZpbHRlciIsInVuZGVmaW5lZCIsImxlbmd0aCIsIl9ydW5BZ2VudENvbW1hbmQiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInBhZFN0YXJ0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJleGl0Q29kZSIsInRlc3QiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsInN0ZGluRGF0YSIsInN0ZGluIiwiaW5jbHVkZXMiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl9naCIsImFyZ3MiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g2IiwiX3g3IiwiX3g4IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDkiLCJfeDAiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kyIiwiX09iamVjdCRlbnRyaWVzMiIsIl9PYmplY3QkZW50cmllczIkX2kiLCJfa2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJfb2JqZWN0U3ByZWFkIiwiYXV0aG9yIiwibG9naW4iLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWU5IiwicHJOdW1iZXIiLCJvblRocmVhZCIsImN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRocmVhZCIsIl90NCIsIl90NSIsIl90NiIsIl9jb250ZXh0MCIsIm51bWJlciIsIk51bWJlciIsImRhdGEiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm5vZGVzIiwicyIsImUiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl94MTQiLCJfeDE1IiwiX3gxNiIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX2NhbGxlZTAiLCJpZHMiLCJfY29udGV4dDEiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl94MTciLCJfeDE4IiwiX3gxOSIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxMCIsInRocmVhZHMiLCJfY29udGV4dDExIiwiX2NhbGxlZTEiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiY29tbWVudHMiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDciLCJfdDgiLCJfdDkiLCJfY29udGV4dDEwIiwidGhyZWFkSWQiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJsaW5lIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX3gyMCIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9jYWxsZWUxMSIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl90MCIsIl9jb250ZXh0MTIiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiX3gyNCIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX2NhbGxlZTEyIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJfY29udGV4dDEzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicmVzdWx0Iiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNSIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI2IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNyIsIl9jYWxsZWUxNSIsIl90MTAiLCJfY29udGV4dDE2IiwiQnVmZmVyIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJwYXlsb2FkIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsIm9wZW5QciIsIl94MjgiLCJfb3BlblByIiwiX2NhbGxlZTE3IiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE4IiwidXBkYXRlUHIiLCJfeDI5IiwiX3VwZGF0ZVByIiwiX2NhbGxlZTE4IiwiX3QxMyIsIl90MTQiLCJfY29udGV4dDE5IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTUiLCJfdDE2IiwiX2NvbnRleHQyMCIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDMwIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMjAiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTciLCJfdDE4IiwiX3QxOSIsIl9jb250ZXh0MjEiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjIiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwiX2NvbnRleHQyMyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX2NhbGxlZTIxIiwiX3JlZjUiLCJfcmVmNyIsImNvbXBhY3RXb3JrZmxvdyIsIl90MjAiLCJfdDIxIiwiX3QyMiIsIl9jb250ZXh0MjIiLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjgiLCJfcmVmOSIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl94MzEiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTIzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXI1IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNiIsImlzc3VlIiwiX2NvbnRleHQyNCIsImlzc3VlTWVzc2FnZXMiLCJub3JtYWxpemVJc3N1ZU51bWJlciIsImZldGNoUHJNZXNzYWdlcyIsIl94MzIiLCJfZmV0Y2hQck1lc3NhZ2VzIiwiX2NhbGxlZTI0IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjgiLCJyZXNvbHZlZFByTnVtYmVyIiwiX3QyMyIsIl9jb250ZXh0MjUiLCJub3JtYWxpemVQck51bWJlciIsInByTWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsIl94MzMiLCJfeDM0IiwiX2NvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9jYWxsZWUyNSIsIl9zdHJpbmdPclVuZGVmaW5lZCIsInJ1biIsImZhaWxlZEpvYiIsIl9jb250ZXh0MjYiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfeDM1IiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwiX2NhbGxlZTI2IiwiX2NvbnRleHQyNyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsInJ0a0F2YWlsYWJsZSIsInNwYXduU3luY1NhZmUiLCJyZXBsYWNlIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsImxhYmVsIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50Iiwiam9iTmFtZSIsIl9yZWYzIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsInN0YXR1cyIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInNwYXduU3luYyIsImVuY29kaW5nIiwiX3gzNiIsIl94MzciLCJfeDM4IiwiX2lzc3VlTWVzc2FnZXMiLCJfY2FsbGVlMjciLCJtZXNzYWdlcyIsIl9jb250ZXh0MjgiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEyIiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfeDM5IiwiX3g0MCIsIl94NDEiLCJfcHJNZXNzYWdlcyIsIl9jYWxsZWUyOCIsIl95aWVsZCRQcm9taXNlJGFsbDMiLCJfeWllbGQkUHJvbWlzZSRhbGw0IiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfY29udGV4dDI5IiwiX3Jlc3BvbnNlJGRhdGE0IiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwic29ydCIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdCIsInJpZ2h0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwibG9jYWxlQ29tcGFyZSIsIl94NDIiLCJfeDQzIiwiX3g0NCIsIl9wcklzc3VlQ29tbWVudHMiLCJfY2FsbGVlMjkiLCJfY29udGV4dDMwIiwiX3Jlc3BvbnNlJGRhdGE1IiwiX3g0NSIsIl94NDYiLCJfeDQ3IiwiX3ByUmV2aWV3cyIsIl9jYWxsZWUzMCIsIl9jb250ZXh0MzEiLCJfcmVzcG9uc2UkZGF0YTYiLCJyZXZpZXdNZXNzYWdlIiwiX3g0OCIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiX2NhbGxlZTMxIiwiY29uZmlnIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIl90MjQiLCJfY29udGV4dDMyIiwiaGFzTWVzc2FnZUJvZHkiLCJfeDQ5IiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMzIiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsIl90MjUiLCJfY29udGV4dDMzIiwidGl0bGUiLCJfY29tbWVudCRhdXRob3IkbG9naW4yIiwiX2NvbW1lbnQkYXV0aG9yMiIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwiYnVpbGRNZXJnZUJhc2VDb21tYW5kIiwic2hlbGxRdW90ZSIsInJlcGxhY2VBbGwiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsIm1lcmdlQmFzZUNvbW1hbmQiLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJfcmVmMCIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3M4IiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImlzc3VlUmVmZXJlbmNlIiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFhQSxJQUNhQSxFQUE4QixnQ0FFM0MsU0FBc0JDLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0EyQjNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUEzQk0sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFB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
|