@willbooster/agent-skills 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -3
- package/package.json +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}from"node:child_process";import{stdin as t,stderr as
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as r}from"node:child_process";import{stdin as t,stderr as a}from"node:process";import{setTimeout as o}from"node:timers/promises";import{stringify as i}from"yaml";function u(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 c(n){var e,r,t,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);a--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new s(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function s(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return s=function(n){this.s=n,this.n=n.next},s.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var 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 s(n)}function l(n,e,r,t,a,o,i){try{var u=n[o](i),c=u.value}catch(n){return void r(n)}u.done?e(c):Promise.resolve(c).then(t,a)}function f(n){return function(){var e=this,r=arguments;return new Promise(function(t,a){var o=n.apply(e,r);function i(n){l(o,t,a,i,u,"next",n)}function u(n){l(o,t,a,i,u,"throw",n)}i(void 0)})}}function p(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=j(n))||e){r&&(n=r);var t=0,a=function(){};return{s:a,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},e:function(n){throw n},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,u=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return i=n.done,n},e:function(n){u=!0,o=n},f:function(){try{i||null==r.return||r.return()}finally{if(u)throw o}}}}function d(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 h(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 m(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?h(Object(r),!0).forEach(function(e){d(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):h(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function v(){
|
|
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",i=r.toStringTag||"@@toStringTag";function a(r,t,i,a){var u=t&&t.prototype instanceof c?t:c,s=Object.create(u.prototype);return y(s,"_invoke",function(r,t,i){var a,c,u,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,r){return a=e,c=0,u=n,p.n=r,o}};function d(r,t){for(c=r,u=t,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];r>3?(i=h===t)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=r<2&&d<a[1])?(c=0,p.v=t,p.n=a[1]):d<h&&(i=r<3||a[0]>t||t>h)&&(a[4]=r,a[5]=t,p.n=h,c=0))}if(i||r>1)return o;throw f=!0,t}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(e=c<2?n:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,a){if(c||(i="next"),e=a[i]){if(!(e=e.call(a,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,c<2&&(c=0)}else 1===c&&(e=a.return)&&e.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+i+"' method"),c=1);a=n}else if((e=(f=p.n<0)?u:r.call(t,p))!==o)break}catch(e){a=n,c=1,u=e}finally{s=1}}return{value:e,done:f}}}(r,i,a),!0),s}var o={};function c(){}function u(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(y(e={},t,function(){return this}),e),f=s.prototype=c.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,y(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return u.prototype=s,y(f,"constructor",s),y(s,"constructor",u),u.displayName="GeneratorFunction",y(s,i,"GeneratorFunction"),y(f),y(f,i,"Generator"),y(f,t,function(){return this}),y(f,"toString",function(){return"[object Generator]"}),(v=function(){return{w:a,m:p}})()}function y(n,e,r,t){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}y=function(n,e,r,t){function a(e,r){y(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:(a("next",0),a("throw",1),a("return",2))},y(n,e,r,t)}function w(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 b(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,a,o,c=[],u=!0,s=!1;try{if(a=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(t=a.call(r)).done)&&(c.push(t.value),c.length!==e);u=!0);}catch(n){s=!0,i=n}finally{try{if(!u&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw i}}return c}}(n,e)||j(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(n){return function(n){if(Array.isArray(n))return c(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||j(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(n){"@babel/helpers - typeof";return k="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},k(n)}function j(n,e){if(n){if("string"==typeof n)return c(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)?c(n,e):void 0}}function O(n){return x.apply(this,arguments)}function x(){return x=f(v().m(function n(e){var t,i,a,o,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:return i=r(null!=(t=e[0])?t:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),n.n=1,Promise.all([S(i.stdout),S(i.stderr),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(a=n.v,o=b(a,3),c=o[0],u=o[1],0!==o[2]){n.n=2;break}return n.a(2,c);case 2:throw s="".concat(c).concat(u),new Error(s||"Command failed: ".concat(e.join(" ")));case 3:return n.a(2)}},n)})),x.apply(this,arguments)}function S(n){return I.apply(this,arguments)}function I(){return(I=f(v().m(function n(e){var r,t,i,a,o,c,s,l;return v().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,o=u(e);case 3:return n.n=4,o.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r+="string"==typeof s?s:s.toString("utf8");case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,i=!0,a=l;case 8:if(n.p=8,n.p=9,!t||null==o.return){n.n=10;break}return n.n=10,o.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,r)}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var R="There is no concern.",P=["codex","claude","gemini"],A=new RegExp("\\b".concat("there is no concern","\\b"),"i");function E(n,e){return C.apply(this,arguments)}function C(){return(C=f(v().m(function n(e,r){var t,i,a;return v().w(function(n){for(;;)switch(n.n){case 0:return t=O,i=T,a=e,n.n=1,r;case 1:return n.a(2,t(i(a,n.v)))}},n)}))).apply(this,arguments)}function _(){return(_=f(v().m(function n(e){var r,t;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,e;case 1:return r=n.v,n.n=2,Promise.all(P.map(f(v().m(function n(e){var t;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,E(e,r);case 1:if(!N(t=n.v.trim())){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,"## ".concat($(e),"\n\n").concat(t))}},n)}))));case 2:return t=n.v.filter(function(n){return void 0!==n}),n.a(2,t.length>0?t.join("\n\n"):R)}},n)}))).apply(this,arguments)}function T(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","--yolo","-p",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 $(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function N(n){return A.test(n)}var q={blockQuote:"literal",lineWidth:0},L=/\btest\b/i,D=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function G(n){i.write("".concat(n,"\n"))}function F(n,e){void 0===e&&(e=1),i.write("".concat(n,"\n")),process.exit(e)}function J(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 H(){return B.apply(this,arguments)}function B(){return(B=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,En(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function W(){return M.apply(this,arguments)}function M(){return(M=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:F("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Q(n,e){return U.apply(this,arguments)}function U(){return U=f(v().m(function n(e,t){var i,o,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),o=null!=(i=t.allowedExitCodes)?i:[],c=v().m(function n(){var i,c,u,l,f,p,d,h;return v().w(function(n){for(;;)switch(n.n){case 0:return c=r(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?c.stdin.end(t.stdinData):c.stdin.end(),n.n=1,Promise.all([En(c.stdout),En(c.stderr),new Promise(function(n,e){c.once("error",e),c.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=b(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!o.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(J(e,d,h)&&s<3)){n.n=4;break}return G("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,a(1e3*s);case 3:return n.a(2,0);case 4:F(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(w(c()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:s+=1,n.n=1;break;case 5:F("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),U.apply(this,arguments)}function z(n,e){return Y.apply(this,arguments)}function Y(){return(Y=f(v().m(function n(e,r){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["gh"].concat(g(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Z(n,e,r){return K.apply(this,arguments)}function K(){return(K=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["gh"].concat(g(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function V(){return X.apply(this,arguments)}function X(){return(X=f(v().m(function n(){var e,r,t,i,a;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,z(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=b(r,2),i=t[0],a=t[1],i&&a||F("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function nn(){return en.apply(this,arguments)}function en(){return(en=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,z(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function rn(n,e){return tn.apply(this,arguments)}function tn(){return(tn=f(v().m(function n(e,r){var t,i,a,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],i=0,a=Object.entries(r);case 1:if(!(i<a.length)){n.n=4;break}if(o=b(a[i],2),c=o[0],void 0!==(u=o[1])&&""!==u){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(c,"=").concat(u));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,z(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"),F("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function an(n){var e,r;return m(m({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function on(n,e,r,t,i){return cn.apply(this,arguments)}function cn(){return(cn=f(v().m(function n(e,r,t,i,a){var o,c,u,s,l,f,d,h,m,y,w,b;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,rn(e,{owner:r,name:t,number:Number(i),cursor:o});case 1:if(y=c=n.v.data,m=null==y){n.n=2;break}m=null==(c=c.repository);case 2:if(h=m){n.n=3;break}h=null==(c=c.pullRequest);case 3:if(!h){n.n=4;break}w=void 0,n.n=5;break;case 4:w=c.reviewThreads;case 5:(s=w)||F("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=p(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,a(d);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,b=n.v,l.e(b);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:o=null!=(u=s.pageInfo.endCursor)?u:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function un(n,e,r){return sn.apply(this,arguments)}function sn(){return(sn=f(v().m(function n(e,r,t){var i;return v().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,on("\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 ln(n,e,r){return fn.apply(this,arguments)}function fn(){return(fn=f(v().m(function n(e,r,t){var i;return v().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,on("\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,f(v().m(function n(e){var r,t,a,o,c,u,s,l,f,p;return v().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(an),a=e.comments.pageInfo,o=null!=(r=a.endCursor)?r:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,rn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=c=n.v.data,l=null==f){n.n=4;break}l=null==(c=c.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=c.comments;case 6:(s=p)||F("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,g(s.nodes.map(an))),a=s.pageInfo,o=null!=(u=a.endCursor)?u: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 pn(n){return o(n,q)}function dn(n){return JSON.parse(JSON.stringify(n))}function hn(n){return mn.apply(this,arguments)}function mn(){return(mn=f(v().m(function n(e){var r,t,i,a,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=["pr","checks"],e&&c.push(e),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],n.p=1,n.n=2,Z(c,[8]);case 2:s=n.v,u=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}u=[],n.n=5;break;case 4:throw f;case 5:return l=u.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:u.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:u})}},n,null,[[1,3]])}))).apply(this,arguments)}function vn(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=b(n,2),t=r[0],i=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=kn(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||In(e)>In(n)?e:n},[])}(r[1]),a=i[0];a||F("Error: no checks found for workflow ".concat(t));var o=null!=(e=i.reduce(function(n,e){return n?Sn(e)>Sn(n)?e:n:e},void 0))?e:a;return[t,{classification:xn(i),check:o,checks:i}]}))}function yn(n){for(var e={},r={},t=0,i=Object.entries(n);t<i.length;t++){var a=b(i[t],2),o=a[0],c=a[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(n){return Rn(n)})&&(r[o]=c):e[o]=c}return[e,r]}function wn(n,e,r,t){return bn.apply(this,arguments)}function bn(){return(bn=f(v().m(function n(e,r,t,i){var a,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r=Pn),void 0===t&&(t=hn),void 0===i&&(i=G),a=0,n.n=1,t(e);case 1:o=n.v;case 2:if(c=vn(o),u=yn(c),s=b(u,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){n.n=3;break}return n.a(2,[o,a,!1]);case 3:if(0!==Object.keys(f).length){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=360)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return gn(a+=1)&&i("Waiting for test-related workflows to finish (attempt ".concat(a,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:o=n.v;case 8:n.n=2;break;case 9:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e=Math.max(1,Math.floor(3));return 1===n||(n-1)%e==0}function kn(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 jn(n){return On.apply(this,arguments)}function On(){return(On=f(v().m(function n(e){var r,t;return v().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,Z(["run","view",e,"--json",D.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 i.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 xn(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 Sn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function In(n){return n.reduce(function(n,e){var r=Sn(e);return r>n?r:n},"")}function Rn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&L.test(n)})}function Pn(n){return An.apply(this,arguments)}function An(){return(An=f(v().m(function n(e){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,a(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function En(n){return Cn.apply(this,arguments)}function Cn(){return(Cn=f(v().m(function n(e){var r,t,i,a,o,c,s,l;return v().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,o=u(e);case 3:return n.n=4,o.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r.push(Buffer.from(s));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,i=!0,a=l;case 8:if(n.p=8,n.p=9,!t||null==o.return){n.n=10;break}return n.n=10,o.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,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function _n(){return Tn.apply(this,arguments)}function Tn(){return(Tn=f(v().m(function n(){var e,r,t,i,a,o,c,u;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,W();case 1:for(e=n.v,r=Hn(e),t={},i=0,a=Object.entries(r.replies);i<a.length;i++)o=b(a[i],2),c=o[0],"string"==typeof(u=o[1])&&u.length>0&&(t[c]=u);return n.a(2,t)}},n)}))).apply(this,arguments)}function $n(n){return Nn.apply(this,arguments)}function Nn(){return(Nn=f(v().m(function n(e){var r,t,i,a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,z(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||F("Error: could not determine current branch"),t||F("Error: could not determine default branch"),r===t&&F("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","-"),G("Creating pull request..."),n.n=3,z(i,e);case 3:return a=pn,o=JSON,n.n=4,z(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function qn(){return Ln.apply(this,arguments)}function Ln(){return(Ln=f(v().m(function n(){var e,r,t,i,a,o,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:return e=n.v,r=b(e,2),t=r[0],i=r[1],n.n=2,nn();case 2:return a=n.v,G("Fetching unresolved review threads..."),o=pn,n.n=3,ln(t,i,a);case 3:return c=n.v,n.a(2,o({unresolved_threads:c}))}},n)}))).apply(this,arguments)}function Dn(n){return Gn.apply(this,arguments)}function Gn(){return(Gn=f(v().m(function n(e){var r,t,i,a,o,c,u,s,l,f,d,h,m,y,w,g,k,j,O,x;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,V();case 1:return r=n.v,t=b(r,2),i=t[0],a=t[1],n.n=2,nn();case 2:return o=n.v,j=Set,n.n=3,un(i,a,o);case 3:O=n.v,c=new j(O),G("Replying to ".concat(Object.keys(e).length," review threads...")),u=[],s=Object.entries(e),l=p(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(h=b(f.value,2),m=h[0],y=b(h[1],2),w=y[0],g=y[1],G("Processing ".concat(m+1,"/").concat(s.length,": ").concat(w)),c.has(w)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,rn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:w,body:g});case 7:k=n.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?u.push(w):G("Warning: failed to resolve thread ".concat(w,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,x=n.v,l.e(x);case 11:return n.p=11,l.f(),n.f(11);case 12:return G("Done."),n.a(2,pn({resolved_thread_ids:u}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Fn(){return Jn.apply(this,arguments)}function Jn(){return(Jn=f(v().m(function n(){var e,r,t,i,a,o,c,u,s,l,p,d,h,m,y;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,nn();case 1:return e=n.v,G("Fetching latest CI results..."),n.n=2,wn(e);case 2:return r=n.v,t=b(r,3),i=t[0],a=t[1],o=t[2],c=vn(i),u=yn(c),s=b(u,2),l=s[0],p=s[1],m=Object,n.n=3,Promise.all(Object.entries(c).map(f(v().m(function n(e){var r,t,i,a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return r=b(e,2),t=r[0],i=r[1],a=i.check,n.n=1,jn(kn(a));case 1:return o=n.v,n.a(2,[t,{classification:i.classification,check:dn(a),workflowRun:o&&dn(o)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),h={latest_ci_results:i,waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o,latest_workflow_results:d},!(Object.keys(l).length>0)){n.n=5;break}return y=Object,n.n=4,Promise.all(Object.entries(l).map(f(v().m(function n(e){var r,t,i,a,o,c;return v().w(function(n){for(;;)switch(n.n){case 0:if(r=b(e,2),t=r[0],i=r[1],a=kn(i.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return o=t,n.n=2,Z(["run","view",a,"--log-failed"],[1]);case 2:return c=n.v,n.a(2,[o,c])}},n)}))));case 4:return h.failed_workflow_outputs=y.fromEntries.call(y,n.v),n.a(2,{output:pn(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),n.a(2,{output:pn(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",n.a(2,{output:pn(h),exitCode:0})}},n)}))).apply(this,arguments)}function Hn(n){try{var e=JSON.parse(n);return function(n){if("object"!==k(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==k(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||F("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&F("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Bn(){return Wn.apply(this,arguments)}function Wn(){return(Wn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return e=Mn,n.n=1,O(["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 Mn(n,e){if(n.length>0)return n;throw new Error(e)}function Qn(){return Un.apply(this,arguments)}function Un(){return(Un=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Bn();case 1:return e=n.v,n.a(2,"\nReview the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(R,"`\n").trim())}},n)}))).apply(this,arguments)}function zn(){return Yn.apply(this,arguments)}function Yn(){return(Yn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Bn();case 1:return e=n.v,n.a(2,"\nSimplify the current branch against the repository's default branch using `git diff \"$(git merge-base ".concat(e," HEAD)\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var Zn=new n;function Kn(n){Zn.command(n.name).description(n.description).allowExcessArguments(!1).addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(f(v().m(function e(r){var t;return v().w(function(e){for(;;)switch(e.n){case 0:return t=process.stdout,e.n=1,n.run(r.agent);case 1:t.write.call(t,e.v);case 2:return e.a(2)}},e)})))}function Vn(n,e,r){Zn.command(n).description(e).allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().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)})))}Zn.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Kn({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?function(n){return _.apply(this,arguments)}(Qn()):E(n,Qn())}}),Vn("review-codex","Run Codex review against the current branch",function(){return E("codex",Qn())}),Vn("review-claude","Run Claude Code review against the current branch",function(){return E("claude",Qn())}),Vn("review-gemini","Run Gemini CLI review against the current branch",function(){return E("gemini",Qn())}),Kn({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 E(n,zn())}}),Vn("simplify-codex","Run Codex PR simplification against the current branch",function(){return E("codex",zn())}),Vn("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return E("claude",zn())}),Vn("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return E("gemini",zn())}),Zn.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H();case 1:return e=n.v,n.n=2,$n(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Zn.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),Zn.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),Zn.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_n();case 1:return e=n.v,n.n=2,Dn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await Zn.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcmVwby9kZWZhdWx0QnJhbmNoLnRzIiwiLi4vc3JjL3Byb21wdHMvcmV2aWV3UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgfSksXG4gIF0pO1xuXG4gIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCB0ZXh0ID0gJyc7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgdGV4dCArPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcblxuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BbGxBZ2VudENvbW1hbmRzKHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IG91dHB1dHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IChhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0KSkudHJpbSgpO1xuICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgIH0pXG4gICAgKVxuICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnLS15b2xvJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuIFsnY2xhdWRlJywgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsICctcCcsIHByb21wdF07XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgICducHgnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgICAnLS1hcHByb3ZhbC1tb2RlJyxcbiAgICAgICAgJ3lvbG8nLFxuICAgICAgICAnLS1tb2RlbCcsXG4gICAgICAgICdnZW1pbmktMy4xLXByby1wcmV2aWV3JyxcbiAgICAgICAgJy1wJyxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyB5YW1sU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4uL3lhbWwuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19QUk9HUkVTU19JTlRFUlZBTF9TRUNPTkRTID0gMzA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDM2MDtcbmV4cG9ydCBjb25zdCBaRVJPX1RJTUVTVEFNUCA9ICcwMDAxLTAxLTAxVDAwOjAwOjAwWic7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTID0gW1xuICAnYXR0ZW1wdCcsXG4gICdjb25jbHVzaW9uJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdkYXRhYmFzZUlkJyxcbiAgJ2Rpc3BsYXlUaXRsZScsXG4gICdldmVudCcsXG4gICdoZWFkQnJhbmNoJyxcbiAgJ2hlYWRTaGEnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBSZXZpZXdDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGRpZmZIdW5rPzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFJldmlld1RocmVhZE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGlzT3V0ZGF0ZWQ/OiBib29sZWFuIHwgbnVsbDtcbiAgcGF0aD86IHN0cmluZyB8IG51bGw7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1lbnRzOiB7XG4gICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgcGFnZUluZm86IHtcbiAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSBwcm9ncmVzc1xuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICB9XG5cbiAgICBhdHRlbXB0cyArPSAxO1xuICAgIGlmIChzaG91bGRSZXBvcnRUZXN0Q2hlY2tXYWl0UHJvZ3Jlc3MoYXR0ZW1wdHMpKSB7XG4gICAgICBwcm9ncmVzc0ZuKFxuICAgICAgICBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2ggKGF0dGVtcHQgJHthdHRlbXB0c30vJHtURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTfSk6ICR7T2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmpvaW4oJywgJyl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcG9ydFRlc3RDaGVja1dhaXRQcm9ncmVzcyhhdHRlbXB0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID0gTWF0aC5tYXgoXG4gICAgMSxcbiAgICBNYXRoLmZsb29yKFRFU1RfQ0hFQ0tfUFJPR1JFU1NfSU5URVJWQUxfU0VDT05EUyAvIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKVxuICApO1xuICByZXR1cm4gYXR0ZW1wdCA9PT0gMSB8fCAoYXR0ZW1wdCAtIDEpICUgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkTGF0ZXN0KS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjaGVjayA9IHJlc3VsdC5jaGVjaztcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ya2Zsb3dSdW4od29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgICAgY2hlY2s6IGRlZXBDb3B5KGNoZWNrKSxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuOiBydW4gJiYgZGVlcENvcHkocnVuKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbGF0ZXN0X2NpX3Jlc3VsdHM6IGNpUmVzdWx0cyxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0czogbGF0ZXN0V29ya2Zsb3dSZXN1bHRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgICAgICAgICBpZiAoIXJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLiddO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pXTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZXBseUlucHV0KGlucHV0OiBzdHJpbmcpOiB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBjb25zdCBlcnJvclByZWZpeCA9ICdFcnJvcjogSW52YWxpZCBpbnB1dCBmb3JtYXQgb24gc3RkaW4nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWlzUmVwbHlJbnB1dChwYXJzZWQpKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGAke2Vycm9yUHJlZml4fTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYSBzdHJpbmctdmFsdWVkIFxcYHJlcGxpZXNcXGAgbWFwYCwgMik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBJbnZhbGlkIEpTT04gcHJvdmlkZWQgb24gc3RkaW46ICR7ZXJyb3IubWVzc2FnZX1gLCAyKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSZXBseUlucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZXBsaWVzID0gKHZhbHVlIGFzIHsgcmVwbGllcz86IHVua25vd24gfSkucmVwbGllcztcbiAgaWYgKHR5cGVvZiByZXBsaWVzICE9PSAnb2JqZWN0JyB8fCByZXBsaWVzID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocmVwbGllcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXBsaWVzKS5ldmVyeSgocmVwbHkpID0+IHJlcGx5ID09PSBudWxsIHx8IHJlcGx5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlcGx5ID09PSAnc3RyaW5nJyk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLXRlbXBsYXRlJywgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19J10pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnREZWZhdWx0QnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCAke2RlZmF1bHRCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtkZWZhdWx0QnJhbmNofSBIRUFEKVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyB5b3UganVkZ2VkIHZhbGlkLCBhbmQgaW5jbHVkZSBhIHNob3J0IGJhc2lzIGZvciBlYWNoIG9uZSB0aGF0IGNpdGVzIHRoZSBldmlkZW5jZSB5b3UgdXNlZCwgc3VjaCBhcyB0aGUgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIHJlbGV2YW50IG9mZmljaWFsIGRvY3VtZW50YXRpb24uIERvIG5vdCBtb2RpZnkgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCByZXZpZXcgY29tbWVudHMsIHJlc3BvbmQgd2l0aCBleGFjdGx5OiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudERlZmF1bHRCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHJ1bkFnZW50Q29tbWFuZCwgcnVuQWxsQWdlbnRDb21tYW5kcyB9IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCcgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCkpIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgcnVuOiAobW9kZTogVE1vZGUpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKGNvbmZpZy5uYW1lKVxuICAgIC5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogeyBhZ2VudDogVE1vZGUgfSkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJ1bjogKCkgPT4gUHJvbWlzZTxzdHJpbmc+KTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBydW4oKSk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsicnVuQ29tbWFuZCIsIl94IiwiX3J1bkNvbW1hbmQiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIl9jb21tYW5kJCIsInByb2MiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJ2IiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiX3gyIiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwidGV4dCIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVuayIsIl90IiwiX2NvbnRleHQyIiwicCIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiZiIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsInJ1bkFnZW50Q29tbWFuZCIsIl9ydW5BZ2VudENvbW1hbmQiLCJhZ2VudCIsInByb21wdCIsIl90MiIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwiX2NhbGxlZTMiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJfY29udGV4dDMiLCJtYXAiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwidHJpbSIsInVuZGVmaW5lZCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJsZW5ndGgiLCJ0ZXN0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJwcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzU3RkZXJyIiwid3JpdGUiLCJleGl0V2l0aEVycm9yIiwicHJvY2VzcyIsImV4aXQiLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsImV4aXRDb2RlIiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwicHJvY2Vzc1N0ZGluIiwiaXNUVFkiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiaW5wdXQiLCJvcHRpb25zIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJfY29udGV4dDQiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImVuZCIsImluY2x1ZGVzIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfeDMiLCJfeDQiLCJfZ2giLCJfY2FsbGVlNCIsImFyZ3MiLCJfY29udGV4dDUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g1IiwiX3g2IiwiX3g3IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NiIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIl9jYWxsZWU2IiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g4IiwiX3g5IiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJwdXNoIiwiSlNPTiIsInBhcnNlIiwiY2FsbCIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsImVycm9yIiwiX2Vycm9yJG1lc3NhZ2UiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsIl9vYmplY3RTcHJlYWQiLCJhdXRob3IiLCJsb2dpbiIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE2IiwiX3gxNyIsIl94MTgiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MTkiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJjaVJlc3VsdHMiLCJsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyIsImdyb3VwZWRSZXN1bHRzIiwid29ya2Zsb3dLZXkiLCJ3b3JrZmxvdyIsImZyb21FbnRyaWVzIiwiX3JlZiIsIl9sYXRlc3RBdHRlbXB0Q2hlY2tzJCIsIl9yZWYyIiwibGF0ZXN0QXR0ZW1wdENoZWNrcyIsImdyb3VwcyIsImdyb3VwZWRDaGVja3MiLCJydW5JZCIsIndvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rIiwid29ya2Zsb3dBdHRlbXB0S2V5IiwiZ3JvdXAiLCJnZXQiLCJzZXQiLCJNYXAiLCJmcm9tIiwidmFsdWVzIiwibGF0ZXN0R3JvdXAiLCJjdXJyZW50R3JvdXAiLCJsYXRlc3RHcm91cFRpbWVzdGFtcCIsImxhdGVzdENoZWNrc0ZvcldvcmtmbG93IiwiZmlyc3RDaGVjayIsImxhdGVzdENoZWNrIiwiY3VycmVudExhdGVzdCIsImxhdGVzdENoZWNrVGltZXN0YW1wIiwiY2xhc3NpZmljYXRpb24iLCJ3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjAiLCJfeDIxIiwiX3gyMiIsIl94MjMiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsInByb2dyZXNzRm4iLCJhdHRlbXB0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJfY29udGV4dDEzIiwic2xlZXBTZWNvbmRzIiwia2V5cyIsInNob3VsZFJlcG9ydFRlc3RDaGVja1dhaXRQcm9ncmVzcyIsInByb2dyZXNzSW50ZXJ2YWxBdHRlbXB0cyIsIk1hdGgiLCJtYXgiLCJmbG9vciIsIlRFU1RfQ0hFQ0tfUFJPR1JFU1NfSU5URVJWQUxfU0VDT05EUyIsIl9saW5rJG1hdGNoIiwibGluayIsIm1hdGNoIiwid29ya2Zsb3dSdW4iLCJfeDI0IiwiX3dvcmtmbG93UnVuIiwiX2NhbGxlZTEzIiwicnVuSnNvbiIsIl90MSIsIl9jb250ZXh0MTQiLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsImxhdGVzdCIsIl94MjUiLCJfc2xlZXBTZWNvbmRzIiwiX2NhbGxlZTE0Iiwic2Vjb25kcyIsIl9jb250ZXh0MTUiLCJfeDI2IiwiX2NhbGxlZTE1IiwiY2h1bmtzIiwiX3QxMCIsIl9jb250ZXh0MTYiLCJCdWZmZXIiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9jYWxsZWUxNiIsInBheWxvYWQiLCJub3JtYWxpemVkUmVwbGllcyIsIl9pMyIsIl9PYmplY3QkZW50cmllczMiLCJfT2JqZWN0JGVudHJpZXMzJF9pIiwiYm9keSIsIl9jb250ZXh0MTciLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwib3BlblByIiwiX3gyNyIsIl9vcGVuUHIiLCJfY2FsbGVlMTciLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJfdDExIiwiX3QxMiIsIl9jb250ZXh0MTgiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTgiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiX3QxMyIsIl90MTQiLCJfY29udGV4dDE5IiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl94MjgiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZXNwb25zZSRkYXRhIiwiX3N0ZXAzJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDMkdmFsdWUkIiwiX3QxNSIsIl90MTYiLCJfdDE3IiwiX2NvbnRleHQyMCIsIlNldCIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl9jYWxsZWUyMiIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJsYXRlc3RXb3JrZmxvd1Jlc3VsdHMiLCJfdDIwIiwiX3QyMSIsIl9jb250ZXh0MjMiLCJfY2FsbGVlMjAiLCJfcmVmNCIsIl9yZWY2IiwicnVuIiwiX2NvbnRleHQyMSIsImxhdGVzdF9jaV9yZXN1bHRzIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0cyIsIl9jYWxsZWUyMSIsIl9yZWY3IiwiX3JlZjkiLCJfdDE4IiwiX3QxOSIsIl9jb250ZXh0MjIiLCJmYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwiZGVmYXVsdEJyYW5jaCIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImNvbmZpZyIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiYWRkQWdlbnRDb21tYW5kIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsInJ1bkFsbEFnZW50Q29tbWFuZHMiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFFQSxTQUFzQkEsRUFBVUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBb0IvQixTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBcEJNLFNBQUFDLEVBQTBCQyxHQUFpQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFWLElBQUFXLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBQyxHQUFBLEtBQUEsRUFHOUMsT0FGSVIsRUFBT1MsRUFBZ0IsT0FBWFYsRUFBQ0QsRUFBUSxJQUFFQyxFQUFJLEdBQUlELEVBQVFZLE1BQU0sR0FBSSxDQUNyREMsTUFBTyxDQUFDLFNBQVUsT0FBUSxVQUMxQkosRUFBQUMsRUFBQSxFQUV1Q0ksUUFBUUMsSUFBSSxDQUNuREMsRUFBYWQsRUFBS0csUUFDbEJXLEVBQWFkLEVBQUtJLFFBQ2xCLElBQUlRLFFBQWdCLFNBQUNHLEVBQVNDLEdBQzVCaEIsRUFB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
|
|
4
|
+
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,t,a,o){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return y(s,"_invoke",function(r,t,a){var o,u,c,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,r){return o=e,u=0,c=n,p.n=r,i}};function d(r,t){for(u=r,c=t,e=0;!f&&s&&!a&&e<l.length;e++){var a,o=l[e],d=p.p,h=o[2];r>3?(a=h===t)&&(c=o[(u=o[4])?5:(u=3,3)],o[4]=o[5]=n):o[0]<=d&&((a=r<2&&d<o[1])?(u=0,p.v=t,p.n=o[1]):d<h&&(a=r<3||o[0]>t||t>h)&&(o[4]=r,o[5]=t,p.n=h,u=0))}if(a||r>1)return i;throw f=!0,t}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){o||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,o){if(u||(a="next"),e=o[a]){if(!(e=e.call(o,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=o.return)&&e.call(o),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);o=n}else if((e=(f=p.n<0)?c:r.call(t,p))!==i)break}catch(e){o=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,a,o),!0),s}var i={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(y(e={},t,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,y(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,y(f,"constructor",s),y(s,"constructor",c),c.displayName="GeneratorFunction",y(s,a,"GeneratorFunction"),y(f),y(f,a,"Generator"),y(f,t,function(){return this}),y(f,"toString",function(){return"[object Generator]"}),(v=function(){return{w:o,m:p}})()}function y(n,e,r,t){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}y=function(n,e,r,t){function o(e,r){y(n,e,function(n){return this._invoke(e,r,n)})}e?a?a(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(o("next",0),o("throw",1),o("return",2))},y(n,e,r,t)}function w(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 b(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var t,a,o,i,u=[],c=!0,s=!1;try{if(o=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=o.call(r)).done)&&(u.push(t.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return u}}(n,e)||j(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(n){return function(n){if(Array.isArray(n))return u(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||j(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(n){"@babel/helpers - typeof";return k="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},k(n)}function j(n,e){if(n){if("string"==typeof n)return u(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)?u(n,e):void 0}}function S(n){return x.apply(this,arguments)}function x(){return x=f(v().m(function n(e){var t,a,o,i,u,c,s;return v().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(t=e[0])?t:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),n.n=1,Promise.all([O(a.stdout),O(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(o=n.v,i=b(o,3),u=i[0],c=i[1],0!==i[2]){n.n=2;break}return n.a(2,u);case 2:throw s="".concat(u).concat(c),new Error(s||"Command failed: ".concat(e.join(" ")));case 3:return n.a(2)}},n)})),x.apply(this,arguments)}function O(n){return $.apply(this,arguments)}function $(){return($=f(v().m(function n(e){var r,t,a,o,i,u,s,l;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r="",t=!1,a=!1,n.p=2,i=c(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}s=u.value,r+="string"==typeof s?s:s.toString("utf8");case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r)}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var A="There is no concern.",I=["codex","claude","gemini"],R=new RegExp("\\b".concat("there is no concern","\\b"),"i");function C(n,e){return P.apply(this,arguments)}function P(){return(P=f(v().m(function n(e,r){var t,a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return t=S,a=E,o=e,n.n=1,r;case 1:return n.a(2,t(a(o,n.v)))}},n)}))).apply(this,arguments)}function q(){return(q=f(v().m(function n(e){var r,t;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,e;case 1:return r=n.v,n.n=2,Promise.all(I.map(f(v().m(function n(e){var t;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,C(e,r);case 1:if(!N(t=n.v.trim())){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,"## ".concat(_(e),"\n\n").concat(t))}},n)}))));case 2:return t=n.v.filter(function(n){return void 0!==n}),n.a(2,t.length>0?t.join("\n\n"):A)}},n)}))).apply(this,arguments)}function E(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 _(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function N(n){return R.test(n)}var T={blockQuote:"literal",lineWidth:0},L=/\btest\b/i,D=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function G(n){a.write("".concat(n,"\n"))}function F(n,e){void 0===e&&(e=1),a.write("".concat(n,"\n")),process.exit(e)}function J(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 M(){return H.apply(this,arguments)}function H(){return(H=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Cn(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function B(){return W.apply(this,arguments)}function W(){return(W=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:F("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Q(n,e){return U.apply(this,arguments)}function U(){return U=f(v().m(function n(e,t){var a,i,u,c,s;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(a=t.allowedExitCodes)?a:[],u=v().m(function n(){var a,u,c,l,f,p,d,h;return v().w(function(n){for(;;)switch(n.n){case 0:return u=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?u.stdin.end(t.stdinData):u.stdin.end(),n.n=1,Promise.all([Cn(u.stdout),Cn(u.stderr),new Promise(function(n,e){u.once("error",e),u.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(c=n.v,l=b(c,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!i.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(J(e,d,h)&&s<3)){n.n=4;break}return G("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,o(1e3*s);case 3:return n.a(2,0);case 4:F(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(w(u()),2);case 2:if(0!==(c=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!c){n.n=4;break}return n.a(2,c.v);case 4:s+=1,n.n=1;break;case 5:F("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),U.apply(this,arguments)}function Y(n,e){return z.apply(this,arguments)}function z(){return(z=f(v().m(function n(e,r){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["gh"].concat(g(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Z(n,e,r){return K.apply(this,arguments)}function K(){return(K=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["gh"].concat(g(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function V(){return X.apply(this,arguments)}function X(){return(X=f(v().m(function n(){var e,r,t,a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=b(r,2),a=t[0],o=t[1],a&&o||F("Error: could not determine current repository"),n.a(2,[a,o])}},n)}))).apply(this,arguments)}function nn(){return en.apply(this,arguments)}function en(){return(en=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function rn(n,e){return tn.apply(this,arguments)}function tn(){return(tn=f(v().m(function n(e,r){var t,a,o,i,u,c,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],a=0,o=Object.entries(r);case 1:if(!(a<o.length)){n.n=4;break}if(i=b(o[a],2),u=i[0],void 0!==(c=i[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,Y(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"),F("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function an(n){var e,r;return m(m({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function on(n,e,r,t,a){return un.apply(this,arguments)}function un(){return(un=f(v().m(function n(e,r,t,a,o){var i,u,c,s,l,f,d,h,m,y,w,b;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,rn(e,{owner:r,name:t,number:Number(a),cursor:i});case 1:if(y=u=n.v.data,m=null==y){n.n=2;break}m=null==(u=u.repository);case 2:if(h=m){n.n=3;break}h=null==(u=u.pullRequest);case 3:if(!h){n.n=4;break}w=void 0,n.n=5;break;case 4:w=u.reviewThreads;case 5:(s=w)||F("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=p(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,b=n.v,l.e(b);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:i=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function cn(n,e,r){return sn.apply(this,arguments)}function sn(){return(sn=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,on("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,r,t,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function ln(n,e,r){return fn.apply(this,arguments)}function fn(){return(fn=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,on("\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,f(v().m(function n(e){var r,t,o,i,u,c,s,l,f,p;return v().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(an),o=e.comments.pageInfo,i=null!=(r=o.endCursor)?r:void 0;case 2:if(!o.hasNextPage){n.n=7;break}return n.n=3,rn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:i});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||F("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,g(s.nodes.map(an))),o=s.pageInfo,i=null!=(c=o.endCursor)?c:void 0,n.n=2;break;case 7:a.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function pn(n){return i(n,T)}function dn(n){return JSON.parse(JSON.stringify(n))}function hn(n){return mn.apply(this,arguments)}function mn(){return(mn=f(v().m(function n(e){var r,t,a,o,i,u,c,s,l,f;return v().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,Z(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var r,t,a=null!=(r=e.bucket)?r:"";return n[a]=(null!=(t=n[a])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(o=l.skipping)?o:0,cancel:null!=(i=l.cancel)?i:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function vn(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=b(n,2),t=r[0],a=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=kn(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||$n(e)>$n(n)?e:n},[])}(r[1]),o=a[0];o||F("Error: no checks found for workflow ".concat(t));var i=null!=(e=a.reduce(function(n,e){return n?On(e)>On(n)?e:n:e},void 0))?e:o;return[t,{classification:xn(a),check:i,checks:a}]}))}function yn(n){for(var e={},r={},t=0,a=Object.entries(n);t<a.length;t++){var o=b(a[t],2),i=o[0],u=o[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return An(n)})&&(r[i]=u):e[i]=u}return[e,r]}function wn(n,e,r,t){return bn.apply(this,arguments)}function bn(){return(bn=f(v().m(function n(e,r,t,a){var o,i,u,c,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r=In),void 0===t&&(t=hn),void 0===a&&(a=G),o=0,n.n=1,t(e);case 1:i=n.v;case 2:if(u=vn(i),c=yn(u),s=b(c,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){n.n=3;break}return n.a(2,[i,o,!1]);case 3:if(0!==Object.keys(f).length){n.n=4;break}return n.a(2,[i,o,!1]);case 4:if(!(o>=360)){n.n=5;break}return n.a(2,[i,o,!0]);case 5:return gn(o+=1)&&a("Waiting for test-related workflows to finish (attempt ".concat(o,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:i=n.v;case 8:n.n=2;break;case 9:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e=Math.max(1,Math.floor(3));return 1===n||(n-1)%e==0}function kn(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 jn(n){return Sn.apply(this,arguments)}function Sn(){return(Sn=f(v().m(function n(e){var r,t;return v().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,Z(["run","view",e,"--json",D.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 a.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 xn(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 On(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function $n(n){return n.reduce(function(n,e){var r=On(e);return r>n?r:n},"")}function An(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&L.test(n)})}function In(n){return Rn.apply(this,arguments)}function Rn(){return(Rn=f(v().m(function n(e){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,o(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Cn(n){return Pn.apply(this,arguments)}function Pn(){return(Pn=f(v().m(function n(e){var r,t,a,o,i,u,s,l;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],t=!1,a=!1,n.p=2,i=c(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}s=u.value,r.push(Buffer.from(s));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function qn(){return En.apply(this,arguments)}function En(){return(En=f(v().m(function n(){var e,r,t,a,o,i,u,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,B();case 1:for(e=n.v,r=Qn(e),t={},a=0,o=Object.entries(r.replies);a<o.length;a++)i=b(o[a],2),u=i[0],"string"==typeof(c=i[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function _n(n){return Nn.apply(this,arguments)}function Nn(){return(Nn=f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,Y(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||F("Error: could not determine current branch"),t||F("Error: could not determine default branch"),r===t&&F("Error: current branch is the default branch (".concat(t,")")),a=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&a.push("--body-file","-"),G("Creating pull request..."),n.n=3,Y(a,e);case 3:return o=pn,i=JSON,n.n=4,Y(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,o(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Tn(){return Ln.apply(this,arguments)}function Ln(){return(Ln=f(v().m(function n(){var e,r,t,a,o,i,u;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:return e=n.v,r=b(e,2),t=r[0],a=r[1],n.n=2,nn();case 2:return o=n.v,G("Fetching unresolved review threads..."),i=pn,n.n=3,ln(t,a,o);case 3:return u=n.v,n.a(2,i({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Dn(n){return Gn.apply(this,arguments)}function Gn(){return(Gn=f(v().m(function n(e){var r,t,a,o,i,u,c,s,l,f,d,h,m,y,w,g,k,j,S,x;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,V();case 1:return r=n.v,t=b(r,2),a=t[0],o=t[1],n.n=2,nn();case 2:return i=n.v,j=Set,n.n=3,cn(a,o,i);case 3:S=n.v,u=new j(S),G("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=p(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(h=b(f.value,2),m=h[0],y=b(h[1],2),w=y[0],g=y[1],G("Processing ".concat(m+1,"/").concat(s.length,": ").concat(w)),u.has(w)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,rn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:w,body:g});case 7:k=n.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(w):G("Warning: failed to resolve thread ".concat(w,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,x=n.v,l.e(x);case 11:return n.p=11,l.f(),n.f(11);case 12:return G("Done."),n.a(2,pn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Fn(){return Jn.apply(this,arguments)}function Jn(){return(Jn=f(v().m(function n(){var e,r,t,a,o,i,u,c,s,l,p,d,h,m,y;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,nn();case 1:return e=n.v,G("Fetching latest CI results..."),n.n=2,wn(e);case 2:return r=n.v,t=b(r,3),a=t[0],o=t[1],i=t[2],u=vn(a),c=yn(u),s=b(c,2),l=s[0],p=s[1],m=Object,n.n=3,Promise.all(Object.entries(u).map(f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return r=b(e,2),t=r[0],a=r[1],o=a.check,n.n=1,jn(kn(o));case 1:return i=n.v,n.a(2,[t,{classification:a.classification,check:dn(o),workflowRun:i&&dn(i)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),h={latest_ci_results:a,waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:i,latest_workflow_results:d},!(Object.keys(l).length>0)){n.n=5;break}return y=Object,n.n=4,Promise.all(Object.entries(l).map(f(v().m(function n(e){var r,t,a,o,i,u;return v().w(function(n){for(;;)switch(n.n){case 0:if(r=b(e,2),t=r[0],a=r[1],o=kn(a.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,n.n=2,Z(["run","view",o,"--log-failed"],[1]);case 2:return u=n.v,n.a(2,[i,u])}},n)}))));case 4:return h.failed_workflow_outputs=y.fromEntries.call(y,n.v),n.a(2,{output:pn(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),n.a(2,{output:pn(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",n.a(2,{output:pn(h),exitCode:0})}},n)}))).apply(this,arguments)}function Mn(n){return Hn.apply(this,arguments)}function Hn(){return(Hn=f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:return r=n.v,t=b(r,2),a=t[0],o=t[1],n.n=2,Un(a,o,e);case 2:return i=n.v,G("Fetched issue #".concat(i.number," messages.")),n.a(2,pn({issue:i}))}},n)}))).apply(this,arguments)}function Bn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=f(v().m(function n(e){var r,t,a,o,i,u,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:if(r=n.v,t=b(r,2),a=t[0],o=t[1],null==e){n.n=2;break}c=e,n.n=4;break;case 2:return n.n=3,nn();case 3:c=n.v;case 4:return i=c,n.n=5,zn(a,o,i);case 5:return u=n.v,G("Fetched pull request #".concat(u.number," messages.")),n.a(2,pn({pull_request:u}))}},n)}))).apply(this,arguments)}function Qn(n){try{var e=JSON.parse(n);return function(n){if("object"!==k(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==k(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||F("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&F("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Un(n,e,r){return Yn.apply(this,arguments)}function Yn(){return(Yn=f(v().m(function n(e,r,t){var a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return a=n.v,n.n=2,re({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:ie});case 2:return o=n.v,n.a(2,m(m({},a),{},{messages:o}))}},n)}))).apply(this,arguments)}function zn(n,e,r){return Zn.apply(this,arguments)}function Zn(){return(Zn=f(v().m(function n(e,r,t){var a,o,i,u,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return a=n.v,n.n=2,Promise.all([Vn(e,r,t),ne(e,r,t)]);case 2:return o=n.v,i=b(o,2),u=i[0],c=i[1],n.a(2,m(m({},a),{},{messages:[].concat(g(u),g(c)).sort(Kn)}))}},n)}))).apply(this,arguments)}function Kn(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function Vn(n,e,r){return Xn.apply(this,arguments)}function Xn(){return(Xn=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,re({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:ie});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ne(n,e,r){return ee.apply(this,arguments)}function ee(){return(ee=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,re({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:ue});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function re(n){return te.apply(this,arguments)}function te(){return(te=f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return i=e,n.n=2,rn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(o=i.selectConnection.call(i,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,g(o.nodes.map(e.mapNode).filter(ce))),o.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(a=o.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function ae(n){return oe.apply(this,arguments)}function oe(){return(oe=f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return i=e,n.n=1,rn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(o=i.selectMetadata.call(i,n.v))||F("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:o.number,title:o.title,url:o.url,author:null!=(r=null==(t=o.author)?void 0:t.login)?r:void 0,body:null!=(a=o.body)?a:""})}},n)}))).apply(this,arguments)}function ie(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 ue(n){var e,r,t,a,o;return{type:"review",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,state:null!=(t=n.state)?t:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(o=n.body)?o:""}}function ce(n){return"string"==typeof n.body&&n.body.length>0}function se(){return le.apply(this,arguments)}function le(){return(le=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return e=fe,n.n=1,S(["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 fe(n,e){if(n.length>0)return n;throw new Error(e)}function pe(){return de.apply(this,arguments)}function de(){return(de=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se();case 1:return e=n.v,n.a(2,"\nReview the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(A,"`\n").trim())}},n)}))).apply(this,arguments)}function he(){return me.apply(this,arguments)}function me(){return(me=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se();case 1:return e=n.v,n.a(2,"\nSimplify the current branch against the repository's default branch using `git diff \"$(git merge-base ".concat(e," HEAD)\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var ve=new n;function ye(n){ve.command(n.name).description(n.description).allowExcessArguments(!1).addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(f(v().m(function e(r){var t;return v().w(function(e){for(;;)switch(e.n){case 0:return t=process.stdout,e.n=1,n.run(r.agent);case 1:t.write.call(t,e.v);case 2:return e.a(2)}},e)})))}function we(n,e,r){ve.command(n).description(e).allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().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)})))}ve.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ye({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?function(n){return q.apply(this,arguments)}(pe()):C(n,pe())}}),we("review-codex","Run Codex review against the current branch",function(){return C("codex",pe())}),we("review-claude","Run Claude Code review against the current branch",function(){return C("claude",pe())}),we("review-gemini","Run Gemini CLI review against the current branch",function(){return C("gemini",pe())}),ye({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 C(n,he())}}),we("simplify-codex","Run Codex PR simplification against the current branch",function(){return C("codex",he())}),we("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return C("claude",he())}),we("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return C("gemini",he())}),ve.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M();case 1:return e=n.v,n.n=2,_n(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ve.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ve.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue-number>","GitHub issue number").allowExcessArguments(!1).action(f(v().m(function n(e){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Mn(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),ve.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr-number]","GitHub pull request number; defaults to the current branch pull request").allowExcessArguments(!1).action(f(v().m(function n(e){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Bn(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),ve.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ve.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qn();case 1:return e=n.v,n.n=2,Dn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await ve.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcmVwby9kZWZhdWx0QnJhbmNoLnRzIiwiLi4vc3JjL3Byb21wdHMvcmV2aWV3UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgfSksXG4gIF0pO1xuXG4gIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCB0ZXh0ID0gJyc7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgdGV4dCArPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcblxuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BbGxBZ2VudENvbW1hbmRzKHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IG91dHB1dHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IChhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0KSkudHJpbSgpO1xuICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgIH0pXG4gICAgKVxuICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnZXhlYycsICctLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3gnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gWydjbGF1ZGUnLCAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ25weCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICdAZ29vZ2xlL2dlbWluaS1jbGlAcHJldmlldycsXG4gICAgICAgICctLWFwcHJvdmFsLW1vZGUnLFxuICAgICAgICAneW9sbycsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWC50ZXN0KG91dHB1dCk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1BST0dSRVNTX0lOVEVSVkFMX1NFQ09ORFMgPSAzMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSBwcm9ncmVzc1xuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICB9XG5cbiAgICBhdHRlbXB0cyArPSAxO1xuICAgIGlmIChzaG91bGRSZXBvcnRUZXN0Q2hlY2tXYWl0UHJvZ3Jlc3MoYXR0ZW1wdHMpKSB7XG4gICAgICBwcm9ncmVzc0ZuKFxuICAgICAgICBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2ggKGF0dGVtcHQgJHthdHRlbXB0c30vJHtURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTfSk6ICR7T2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmpvaW4oJywgJyl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcG9ydFRlc3RDaGVja1dhaXRQcm9ncmVzcyhhdHRlbXB0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID0gTWF0aC5tYXgoXG4gICAgMSxcbiAgICBNYXRoLmZsb29yKFRFU1RfQ0hFQ0tfUFJPR1JFU1NfSU5URVJWQUxfU0VDT05EUyAvIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKVxuICApO1xuICByZXR1cm4gYXR0ZW1wdCA9PT0gMSB8fCAoYXR0ZW1wdCAtIDEpICUgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkTGF0ZXN0KS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjaGVjayA9IHJlc3VsdC5jaGVjaztcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ya2Zsb3dSdW4od29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgICAgY2hlY2s6IGRlZXBDb3B5KGNoZWNrKSxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuOiBydW4gJiYgZGVlcENvcHkocnVuKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbGF0ZXN0X2NpX3Jlc3VsdHM6IGNpUmVzdWx0cyxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0czogbGF0ZXN0V29ya2Zsb3dSZXN1bHRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgICAgICAgICBpZiAoIXJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLiddO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pXTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBpc3N1ZU51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID8/IChhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSk7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLXRlbXBsYXRlJywgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19J10pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnREZWZhdWx0QnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCAke2RlZmF1bHRCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtkZWZhdWx0QnJhbmNofSBIRUFEKVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyB5b3UganVkZ2VkIHZhbGlkLCBhbmQgaW5jbHVkZSBhIHNob3J0IGJhc2lzIGZvciBlYWNoIG9uZSB0aGF0IGNpdGVzIHRoZSBldmlkZW5jZSB5b3UgdXNlZCwgc3VjaCBhcyB0aGUgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIHJlbGV2YW50IG9mZmljaWFsIGRvY3VtZW50YXRpb24uIERvIG5vdCBtb2RpZnkgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCByZXZpZXcgY29tbWVudHMsIHJlc3BvbmQgd2l0aCBleGFjdGx5OiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudERlZmF1bHRCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHJ1bkFnZW50Q29tbWFuZCwgcnVuQWxsQWdlbnRDb21tYW5kcyB9IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpKSA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWUtbnVtYmVyPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZU51bWJlcjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twci1udW1iZXJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwck51bWJlcj86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwck51bWJlcik7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIHJ1bjogKG1vZGU6IFRNb2RlKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChjb25maWcubmFtZSlcbiAgICAuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IHsgYWdlbnQ6IFRNb2RlIH0pID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBydW46ICgpID0+IFByb21pc2U8c3RyaW5nPik6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgcnVuKCkpO1xuICAgIH0pO1xufVxuIl0sIm5hbWVzIjpbInJ1bkNvbW1hbmQiLCJfeCIsIl9ydW5Db21tYW5kIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJfY29tbWFuZCQiLCJwcm9jIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInciLCJfY29udGV4dCIsIm4iLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwidiIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsIl94MiIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsInRleHQiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmsiLCJfdCIsIl9jb250ZXh0MiIsInAiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsImYiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BZ2VudENvbW1hbmQiLCJfcnVuQWdlbnRDb21tYW5kIiwiYWdlbnQiLCJwcm9tcHQiLCJfdDIiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJfcnVuQWxsQWdlbnRDb21tYW5kcyIsIl9jYWxsZWUzIiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiX2NvbnRleHQzIiwibWFwIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsInRyaW0iLCJ1bmRlZmluZWQiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwibGVuZ3RoIiwidGVzdCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwicHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2Vzc1N0ZGVyciIsIndyaXRlIiwiZXhpdFdpdGhFcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJleGl0Q29kZSIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImlucHV0Iiwib3B0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbnRleHQ0Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJlbmQiLCJpbmNsdWRlcyIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX3gzIiwiX3g0IiwiX2doIiwiX2NhbGxlZTQiLCJhcmdzIiwiX2NvbnRleHQ1IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NSIsIl94NiIsIl94NyIsIl9naEFsbG93RXhpdENvZGVzIiwiX2NhbGxlZTUiLCJfY29udGV4dDYiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJfY2FsbGVlNiIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwibmFtZSIsIl9jb250ZXh0NyIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OCIsIl94OSIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsIl9rZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwia2V5IiwicHVzaCIsIkpTT04iLCJwYXJzZSIsImNhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJlcnJvciIsIl9lcnJvciRtZXNzYWdlIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJfb2JqZWN0U3ByZWFkIiwiYXV0aG9yIiwibG9naW4iLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTkiLCJwck51bWJlciIsIm9uVGhyZWFkIiwiY3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwidGhyZWFkIiwiX3Q0IiwiX3Q1IiwiX3Q2IiwiX2NvbnRleHQwIiwibnVtYmVyIiwiTnVtYmVyIiwiZGF0YSIsInJlcG9zaXRvcnkiLCJwdWxsUmVxdWVzdCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibm9kZXMiLCJzIiwiZSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfY2FsbGVlMCIsImlkcyIsIl9jb250ZXh0MSIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3gxNiIsIl94MTciLCJfeDE4IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTEwIiwidGhyZWFkcyIsIl9jb250ZXh0MTEiLCJfY2FsbGVlMSIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJjb21tZW50cyIsIl95aWVsZCRncmFwaHFsJGRhdGEyIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90NyIsIl90OCIsIl90OSIsIl9jb250ZXh0MTAiLCJ0aHJlYWRJZCIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsImxpbmUiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsInlhbWxEdW1wIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5IiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfeDE5IiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwiX2NhbGxlZTExIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiX3QwIiwiX2NvbnRleHQxMiIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiY2lSZXN1bHRzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImNsYXNzaWZpZWRSZXN1bHRzIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJyZXN1bHQiLCJzb21lIiwidGVzdFJlbGF0ZWRDaGVjayIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfY2FsbGVlMTIiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJwcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImtleXMiLCJzaG91bGRSZXBvcnRUZXN0Q2hlY2tXYWl0UHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsQXR0ZW1wdHMiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJURVNUX0NIRUNLX1BST0dSRVNTX0lOVEVSVkFMX1NFQ09ORFMiLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNCIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI1IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNiIsIl9jYWxsZWUxNSIsImNodW5rcyIsIl90MTAiLCJfY29udGV4dDE2IiwiQnVmZmVyIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJwYXlsb2FkIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsIm9wZW5QciIsIl94MjciLCJfb3BlblByIiwiX2NhbGxlZTE3IiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE4IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE4IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTMiLCJfdDE0IiwiX2NvbnRleHQxOSIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDI4IiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTkiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTUiLCJfdDE2IiwiX3QxNyIsIl9jb250ZXh0MjAiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjIiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwibGF0ZXN0V29ya2Zsb3dSZXN1bHRzIiwiX3QyMCIsIl90MjEiLCJfY29udGV4dDIzIiwiX2NhbGxlZTIwIiwiX3JlZjQiLCJfcmVmNiIsInJ1biIsIl9jb250ZXh0MjEiLCJsYXRlc3RfY2lfcmVzdWx0cyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwibGF0ZXN0X3dvcmtmbG93X3Jlc3VsdHMiLCJfY2FsbGVlMjEiLCJfcmVmNyIsIl9yZWY5IiwiX3QxOCIsIl90MTkiLCJfY29udGV4dDIyIiwiZmFpbGVkX3dvcmtmbG93X291dHB1dHMiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl94MjkiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTIzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXI1IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNiIsImlzc3VlIiwiX2NvbnRleHQyNCIsImlzc3VlTWVzc2FnZXMiLCJmZXRjaFByTWVzc2FnZXMiLCJfeDMwIiwiX2ZldGNoUHJNZXNzYWdlcyIsIl9jYWxsZWUyNCIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjciLCJfeWllbGQkY3VycmVudFJlcG9QYXI4IiwicmVzb2x2ZWRQck51bWJlciIsIl90MjIiLCJfY29udGV4dDI1IiwicHJNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiX3gzMSIsIl94MzIiLCJfeDMzIiwiX2lzc3VlTWVzc2FnZXMiLCJfY2FsbGVlMjUiLCJtZXNzYWdlcyIsIl9jb250ZXh0MjYiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEyIiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfeDM0IiwiX3gzNSIsIl94MzYiLCJfcHJNZXNzYWdlcyIsIl9jYWxsZWUyNiIsIl95aWVsZCRQcm9taXNlJGFsbDMiLCJfeWllbGQkUHJvbWlzZSRhbGw0IiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfY29udGV4dDI3IiwiX3Jlc3BvbnNlJGRhdGE0IiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwic29ydCIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdCIsInJpZ2h0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwibG9jYWxlQ29tcGFyZSIsIl94MzciLCJfeDM4IiwiX3gzOSIsIl9wcklzc3VlQ29tbWVudHMiLCJfY2FsbGVlMjciLCJfY29udGV4dDI4IiwiX3Jlc3BvbnNlJGRhdGE1IiwiX3g0MCIsIl94NDEiLCJfeDQyIiwiX3ByUmV2aWV3cyIsIl9jYWxsZWUyOCIsIl9jb250ZXh0MjkiLCJfcmVzcG9uc2UkZGF0YTYiLCJyZXZpZXdNZXNzYWdlIiwiX3g0MyIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiX2NhbGxlZTI5IiwiY29uZmlnIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIl90MjMiLCJfY29udGV4dDMwIiwiaGFzTWVzc2FnZUJvZHkiLCJfeDQ0IiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMzAiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsIl90MjQiLCJfY29udGV4dDMxIiwidGl0bGUiLCJ1cmwiLCJfY29tbWVudCRhdXRob3IkbG9naW4yIiwiX2NvbW1lbnQkYXV0aG9yMiIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0IiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsImRlZmF1bHRCcmFuY2giLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsImFkZEFnZW50Q29tbWFuZCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiYXJndW1lbnQiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFFQSxTQUFzQkEsRUFBVUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBb0IvQixTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBcEJNLFNBQUFDLEVBQTBCQyxHQUFpQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFWLElBQUFXLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBQyxHQUFBLEtBQUEsRUFHOUMsT0FGSVIsRUFBT1MsRUFBZ0IsT0FBWFYsRUFBQ0QsRUFBUSxJQUFFQyxFQUFJLEdBQUlELEVBQVFZLE1BQU0sR0FBSSxDQUNyREMsTUFBTyxDQUFDLFNBQVUsT0FBUSxVQUMxQkosRUFBQUMsRUFBQSxFQUV1Q0ksUUFBUUMsSUFBSSxDQUNuREMsRUFBYWQsRUFBS0csUUFDbEJXLEVBQWFkLEVBQUtJLFFBQ2xCLElBQUlRLFFBQWdCLFNBQUNHLEVBQVNDLEdBQzVCaEIsRUFBS2lCLEtBQUssUUFBU0QsR0FDbkJoQixFQUFLaUIsS0FBSyxRQUFTLFNBQUNDLEdBQUksT0FBS0gsUUFBUUcsRUFBQUEsRUFBUSxFQUFFLEVBQ2pELEtBQ0EsS0FBQSxFQVA2QixHQU83QmpCLEVBQUFNLEVBQUFZLEVBQUFqQixFQUFBa0IsRUFBQW5CLEVBQUEsR0FQS0UsRUFBTUQsRUFBQSxHQUFFRSxFQUFNRixFQUFBLEdBU0osSUFUY0EsRUFBQSxHQVNiLENBQUFLLEVBQUFDLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQUQsRUFBQWMsRUFBQSxF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
|