@willbooster/agent-skills 1.11.0 → 1.12.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/README.md CHANGED
@@ -37,6 +37,7 @@ bunx skills@latest add WillBooster/agent-skills --skill '*' --agent claude-code
37
37
  | [`screenshot-claude`](skills/screenshot-claude/SKILL.md) / [`screenshot-codex`](skills/screenshot-codex/SKILL.md) / [`screenshot-gemini`](skills/screenshot-gemini/SKILL.md) | Yes | Take a screenshot of a specific page using a specified agent. | `$screenshot-codex https://example.com "Pricing" "the comparison table"` |
38
38
  | [`simplify-pr-claude`](skills/simplify-pr-claude/SKILL.md) / [`simplify-pr-codex`](skills/simplify-pr-codex/SKILL.md) / [`simplify-pr-gemini`](skills/simplify-pr-gemini/SKILL.md) | Yes | Safely simplify the current PR using a specified agent. | `$simplify-pr-codex` |
39
39
  | [`update-pr`](skills/update-pr/SKILL.md) | No | Update the PR body for the current branch. | `Refresh the PR description to match the latest changes, then $update-pr` |
40
+ | [`wbfy`](skills/wbfy/SKILL.md) | No | Apply `wbfy` to the current repository and handle follow-up fixes. | `Apply the latest repository conventions with $wbfy` |
40
41
 
41
42
  ## CLI
42
43
 
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function p(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function d(n){var e,t,r,i=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new h(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function h(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return h=function(n){this.s=n,this.n=n.next},h.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new h(n)}function m(n,e,t,r,i,a,o){try{var u=n[a](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,i)}function v(n){return function(){var e=this,t=arguments;return new Promise(function(r,i){var a=n.apply(e,t);function o(n){m(a,r,i,o,u,"next",n)}function u(n){m(a,r,i,o,u,"throw",n)}o(void 0)})}}function g(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=I(n))||e){t&&(n=t);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,a=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw a}}}}function w(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function y(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function b(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?y(Object(t),!0).forEach(function(e){w(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):y(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function k(){
2
+ import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function p(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function d(n){var e,t,r,i=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new h(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function h(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return h=function(n){this.s=n,this.n=n.next},h.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new h(n)}function m(n,e,t,r,i,a,o){try{var u=n[a](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,i)}function v(n){return function(){var e=this,t=arguments;return new Promise(function(r,i){var a=n.apply(e,t);function o(n){m(a,r,i,o,u,"next",n)}function u(n){m(a,r,i,o,u,"throw",n)}o(void 0)})}}function g(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=A(n))||e){t&&(n=t);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,a=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw a}}}}function w(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function y(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function b(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?y(Object(t),!0).forEach(function(e){w(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):y(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function k(){
3
3
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
4
- var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return x(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(x(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,x(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,i,"GeneratorFunction"),x(f),x(f,i,"Generator"),x(f,r,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:a,m:p}})()}function x(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}x=function(n,e,t,r){function a(e,t){x(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},x(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||I(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){return function(n){if(Array.isArray(n))return p(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||I(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(n){"@babel/helpers - typeof";return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},R(n)}function I(n,e){if(n){if("string"==typeof n)return p(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?p(n,e):void 0}}var A="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return P.apply(this,arguments)}function P(){return P=v(k().m(function n(e,r){var i,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([C(a.stdout,function(n){return u.write(n)}),C(a.stderr,function(n){return u.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=j(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),P.apply(this,arguments)}function C(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=!1,a=!1,n.p=2,u=d(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!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.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,t){if(void 0===e&&(e=10),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=setInterval(function(){t(".")},1e3*e);return t("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(r),t("\n")}}function N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var t,r,u;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var _="There is no concern.",L=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function F(n,e){return G.apply(this,arguments)}function G(){return(G=v(k().m(function n(e,t){var r,i,a;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(L.map(v(k().m(function n(e){var i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,U(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):_);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function U(n,e,t){return H.apply(this,arguments)}function H(){return(H=v(k().m(function n(e,t,r){var i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=$,a=M,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function M(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(A)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function Q(n){return n.toString().padStart(2,"0")}function Y(){return z.apply(this,arguments)}function z(){return(z=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Z();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Z(){return K.apply(this,arguments)}function K(){return(K=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=en,n.n=1,$(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function V(){return X.apply(this,arguments)}function X(){return(X=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!nn(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function nn(n){return/no pull requests? found for branch/i.test(String(n))}function en(n,e){if(n.length>0)return n;throw new Error(e)}var tn={blockQuote:"literal",lineWidth:0},rn=/\btest\b/i,an="Waiting for test-related workflows to finish. ".concat(A),on=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],un=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function cn(n){c.write("".concat(n,"\n"))}function sn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function ln(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}function fn(){return pn.apply(this,arguments)}function pn(){return(pn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Kn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function dn(n){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,fn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:sn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function mn(n,e){return vn.apply(this,arguments)}function vn(){return vn=v(k().m(function n(e,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=k().m(function n(){var i,o,u,l,f,p,d,h;return k().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([Kn(o.stdout),Kn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(ln(e,d,h)&&c<3)){n.n=4;break}return cn("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:sn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:sn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),vn.apply(this,arguments)}function gn(n,e){return wn.apply(this,arguments)}function wn(){return(wn=v(k().m(function n(e,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["gh"].concat(O(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function yn(n,e,t){return bn.apply(this,arguments)}function bn(){return(bn=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["gh"].concat(O(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function kn(){return xn.apply(this,arguments)}function xn(){return(xn=v(k().m(function n(){var e,t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=j(t,2),i=r[0],a=r[1],i&&a||sn("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function Sn(){return jn.apply(this,arguments)}function jn(){return(jn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function On(n,e){return Rn.apply(this,arguments)}function Rn(){return(Rn=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=j(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,gn(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),sn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function In(n){var e,t;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function An(n,e,t,r,i){return $n.apply(this,arguments)}function $n(){return($n=v(k().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,w;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,On(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||sn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=g(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,w=n.v,l.e(w);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=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 Pn(n,e,t){return Cn.apply(this,arguments)}function Cn(){return(Cn=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,An("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function qn(n,e,t){return En.apply(this,arguments)}function En(){return(En=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,An("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,v(k().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(In),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,On("\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=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)||sn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,O(s.nodes.map(In))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Nn(n){return f(n,tn)}function Tn(n){return JSON.parse(JSON.stringify(n))}function _n(n){return Ln.apply(this,arguments)}function Ln(){return(Ln=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,yn(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 t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Dn(n,e,t,r){return Fn.apply(this,arguments)}function Fn(){return(Fn=v(k().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=zn),void 0===r&&(r=_n),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=Gn(o),l=Un(s),f=j(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=360)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=E(an,10,i)),n.n=6,t(10);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Gn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=j(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Hn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Qn(e)>Qn(n)?e:n},[])}(t[1]),a=i[0];a||sn("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Bn(e)>Bn(n)?e:n:e},void 0))?e:a;return[r,{classification:Jn(i),check:o,checks:i}]}))}function Un(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=j(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Yn(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Hn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Mn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=v(k().m(function n(e){var t,r;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,yn(["run","view",e,"--json",on.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Jn(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 Bn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Qn(n){return n.reduce(function(n,e){var t=Bn(e);return t>n?t:n},"")}function Yn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&rn.test(n)})}function zn(n){return Zn.apply(this,arguments)}function Zn(){return(Zn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Kn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(e){var t,r,i,a,o,u,c,s;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],r=!1,i=!1,n.p=2,o=d(e);case 3:return n.n=4,o.next();case 4:if(!(r=!(u=n.v).done)){n.n=6;break}c=u.value,t.push(Buffer.from(c));case 5:r=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,s=n.v,i=!0,a=s;case 8:if(n.p=8,n.p=9,!r||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(t).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(){var e,t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn("Error: JSON input is required on stdin");case 1:for(e=n.v,t=ye(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=j(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function ee(n){return te.apply(this,arguments)}function te(){return(te=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,gn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||sn("Error: could not determine current branch"),r||sn("Error: could not determine default branch"),t===r&&sn("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),cn("Creating pull request..."),n.n=3,gn(i,e);case 3:return a=Nn,o=JSON,n.n=4,gn(["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 re(n){return ie.apply(this,arguments)}function ie(){return(ie=v(k().m(function n(e){var t,r,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return t=n.v,cn("Updating pull request #".concat(t," body...")),n.n=2,gn(["pr","edit",t,"--body-file","-"],e);case 2:return r=Nn,i=JSON,n.n=3,gn(["pr","view",t,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 3:return n.a(2,r(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function ae(){return oe.apply(this,arguments)}function oe(){return(oe=v(k().m(function n(){var e,t,r,i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,Sn();case 2:return a=n.v,cn("Fetching unresolved review threads..."),o=Nn,n.n=3,qn(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,w,y,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,Sn();case 2:return o=n.v,b=Set,n.n=3,Pn(i,a,o);case 3:x=n.v,u=new b(x),cn("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=g(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=j(f.value,2),h=d[0],m=j(d[1],2),v=m[0],w=m[1],cn("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,On("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):cn("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return cn("Done."),n.a(2,Nn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function se(){return le.apply(this,arguments)}function le(){return(le=v(k().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return e=n.v,cn("Fetching latest CI results..."),n.n=2,Dn(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=Gn(i),c=Un(u),s=j(c,2),l=s[0],f=s[1],p={summary:Tn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,be(r,i);case 1:return a=n.v,o=b,u=b({},a),c=je,n.n=2,xe(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:Nn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return be(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:Nn(p),exitCode:1});case 6:return p.test_workflow_output="All workflows are successful.",n.a(2,{output:Nn(p),exitCode:0})}},n)}))).apply(this,arguments)}function fe(n){return pe.apply(this,arguments)}function pe(){return(pe=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,Te(i,a,Ae(e));case 2:return o=n.v,cn("Fetched issue #".concat(o.number," messages.")),n.a(2,Nn({issue:o}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=v(k().m(function n(e){var t,r,i;return k().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,Sn();case 1:i=n.v,n.n=3;break;case 2:i=$e(e);case 3:return t=i,n.n=4,ge(t);case 4:return r=n.v,cn("Fetched pull request #".concat(r.number," messages.")),n.a(2,Nn({pull_request:r}))}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yn(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!nn(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ge(t);case 3:return r=n.v,n.a(2,Nn({pull_request:r}))}},n)}))).apply(this,arguments)}function ge(n){return we.apply(this,arguments)}function we(){return(we=v(k().m(function n(e){var t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,Le(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ye(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||sn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&sn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function be(n,e){return ke.apply(this,arguments)}function ke(){return(ke=v(k().m(function n(e,t){var r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return i=Hn(t.check),n.n=1,Mn(i);case 1:return a=n.v,o=Ce(a,Ie(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Ie(t.check.name),job_url:Ie(null==o?void 0:o.url),failed_step:qe(o),run_id:i,run_url:null!=(r=Ie(null==a?void 0:a.url))?r:Ie(t.check.link),branch:Ie(null==a?void 0:a.headBranch),sha:Ie(null==a?void 0:a.headSha),conclusion:Ie(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function xe(n){return Se.apply(this,arguments)}function Se(){return(Se=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:if(t=Hn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,yn(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n){return{failed_log:Oe(n)}}function Oe(n){var e=Re(l(n));if(!Ee)return e;var t=Ne(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Re(t.output):e}function Re(n){return n.split("\n").map(function(n){return n.replace(un,"")}).join("\n").trim()}function Ie(n){return"string"==typeof n&&n.length>0?n:void 0}function Ae(n){return Pe(n,"issue")}function $e(n){return Pe(n,"pull request")}function Pe(n,e){var t=String(n).trim();if(0===t.length&&sn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];sn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function Ce(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function qe(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}var Ee=0===Ne(["rtk","--version"]).exitCode;function Ne(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function Te(n,e,t){return _e.apply(this,arguments)}function _e(){return(_e=v(k().m(function n(e,t,r){var i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ye});case 2:return a=n.v,n.a(2,b(b({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function Le(n,e,t){return De.apply(this,arguments)}function De(){return(De=v(k().m(function n(e,t,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([Ge(e,t,r),He(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,b(b({},i),{},{messages:[].concat(O(u),O(c)).sort(Fe)}))}},n)}))).apply(this,arguments)}function Fe(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function Ge(n,e,t){return Ue.apply(this,arguments)}function Ue(){return(Ue=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ye});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function He(n,e,t){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:ze});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function We(n){return Je.apply(this,arguments)}function Je(){return(Je=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,On(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,O(a.nodes.map(e.mapNode).filter(Ze))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Be(n){return Qe.apply(this,arguments)}function Qe(){return(Qe=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,On(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||sn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function Ye(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function ze(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Ze(n){return"string"==typeof n.body&&n.body.length>0}function Ke(n){return Ve.apply(this,arguments)}function Ve(){return(Ve=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a code-focused plan, and posting that plan back to the issue.\nThe target issue number is #".concat(e,".\nHere is the fetched issue context as YAML:\n```yaml\n").concat(t.trim(),"\n```\n\nFollow this workflow:\n1. Read the fetched issue body and timeline messages carefully.\n2. Collect enough supporting information before planning:\n - Read the issue carefully and identify the exact requested behavior, constraints, and open questions.\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the issue depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Propose a code-focused implementation plan grounded in the issue, fetched messages, and the evidence you collected. Describe what code should be written, where it should live, and how it should work. Prefer concrete guidance such as:\n - Which files, modules, classes, functions, types, tests, or configuration should be added or changed.\n - How the new or changed logic should flow through the system.\n - What interfaces, data shapes, condition branches, or side effects need to change.\n - Which edge cases, risks, and validation steps matter for the code change.\n - Any missing information or assumptions that affect the design.\n4. Post the plan back to issue #").concat(e," from the repository root then print the issue URL.\n\nFormat the issue comment exactly like this (without triple backticks):\n```\n## Code Plan\n\n### Files / Modules to Change\n\n- File or module and why it needs to change\n\n### Code to Write\n\n- Function, type, class, or branch to add or modify\n- How the logic should work\n\n### Validation\n\n- Test or check to confirm the behavior\n\n## Risks / Open Questions\n\n- Risk or uncertainty\n```\n").trim())}},n)}))).apply(this,arguments)}function Xe(n){return"git merge-base ".concat(nt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(nt(n)," HEAD")}function nt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function et(){return tt.apply(this,arguments)}function tt(){return(tt=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y();case 1:return e=n.v,t=Xe(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(_,"`\n\n").concat(rt(r),"\n").trim())}},n)}))).apply(this,arguments)}function rt(n){return n?"Current pull request context:\n```yaml\n".concat(n.trim(),"\n```\n").trim():""}function it(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function at(){return ot.apply(this,arguments)}function ot(){return(ot=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y();case 1:return e=n.v,t=Xe(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var ut=new n;function ct(n){var t=ut.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(v(k().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=j(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function st(n,e,t){var r=ut.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ut.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ct({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?F(et(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):U(n,et())}}),st("review-codex","Run Codex review against the current branch",function(){return U("codex",et())}),st("review-claude","Run Claude Code review against the current branch",function(){return U("claude",et())}),st("review-gemini","Run Gemini CLI review against the current branch",function(){return U("gemini",et())}),ct({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?F(Ke(Ae(e)),{allAgentsLabel:"planning agents"}):U(n,Ke(Ae(e)))}}),st("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return U("codex",Ke(Ae(n)))}}),st("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return U("claude",Ke(Ae(n)))}}),st("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return U("gemini",Ke(Ae(n)))}}),ut.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(v(k().m(function n(e,t,r,i){var a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,U(i.agent,it(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),ct({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 U(n,at())}}),st("simplify-codex","Run Codex PR simplification against the current branch",function(){return U("codex",at())}),st("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return U("claude",at())}),st("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return U("gemini",at())}),ut.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fn();case 1:return e=n.v,n.n=2,ee(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ut.command("update-pr").description("Update the current pull request body").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,re(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ut.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ut.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ut.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ut.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ut.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn();case 1:return e=n.v,n.n=2,ue(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ut.parseAsync(process.argv);
5
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMveWFtbC50cyIsIi4uL3NyYy9wci9wckNvbW1hbmRzLnRzIiwiLi4vc3JjL3Byb21wdHMvcGxhblByb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zaW1wbGlmeVByb21wdC50cyIsIi4uL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgbG9nRmlsZVBhdGg/OiBzdHJpbmc7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuY29uc3QgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgPSAnUExFQVNFIFdBSVQgRk9SIFVQIFRPIDEgSE9VUi4nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhvcHRpb25zLndhaXRNZXNzYWdlLCBvcHRpb25zLndhaXRJbnRlcnZhbFNlY29uZHMpO1xuICBjb25zdCBjb21tYW5kTG9nZ2VyID0gYXdhaXQgY3JlYXRlQ29tbWFuZExvZ2dlcihvcHRpb25zLmxvZ0ZpbGVQYXRoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0LCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciwgKGNodW5rKSA9PiBjb21tYW5kTG9nZ2VyLndyaXRlKGNodW5rKSksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwKSB7XG4gICAgICByZXR1cm4gc3Rkb3V0O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuICAgIHRocm93IG5ldyBFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGNvbW1hbmRMb2dnZXIuY2xvc2UoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KFxuICBzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9uQ2h1bms/OiAoY2h1bms6IHN0cmluZykgPT4gdm9pZFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIHJldHVybiBjaHVua3Muam9pbignJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gIHdhaXRNZXNzYWdlOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgd2FpdEludGVydmFsU2Vjb25kcyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICB3cml0ZVByb2dyZXNzOiBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogKCkgPT4gdm9pZCB7XG4gIGlmICghd2FpdE1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICB3cml0ZVByb2dyZXNzKCcuJyk7XG4gIH0sIHdhaXRJbnRlcnZhbFNlY29uZHMgKiAxMDAwKTtcblxuICB3cml0ZVByb2dyZXNzKGAke3dhaXRNZXNzYWdlfSBPbmUgZG90IHJlcHJlc2VudHMgJHt3YWl0SW50ZXJ2YWxTZWNvbmRzfSBzZWNvbmRzOiBgKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgIHdyaXRlUHJvZ3Jlc3MoJ1xcbicpO1xuICB9O1xufVxuXG50eXBlIENvbW1hbmRMb2dnZXIgPSB7XG4gIHdyaXRlOiAoY2h1bms6IHN0cmluZykgPT4gdm9pZDtcbiAgY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MsIFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UsIE5PX0NPTkNFUk5fUEhSQVNFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5cbmV4cG9ydCBjb25zdCBBR0VOVF9OQU1FUyA9IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddIGFzIGNvbnN0O1xuY29uc3QgQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtOT19DT05DRVJOX1BIUkFTRX1cXFxcYmAsICdpJyk7XG5leHBvcnQgdHlwZSBBZ2VudE5hbWUgPSAodHlwZW9mIEFHRU5UX05BTUVTKVtudW1iZXJdO1xuXG50eXBlIEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG59O1xuXG50eXBlIEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0geyBhbGxBZ2VudHNMYWJlbDogJ2FnZW50cycgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mod2FpdE1lc3NhZ2VGb3Iob3B0aW9ucy5hbGxBZ2VudHNMYWJlbCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKFxuICAgICAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKGFnZW50LCByZXNvbHZlZFByb21wdCwge1xuICAgICAgICAgICAgICB3YWl0TWVzc2FnZTogZmFsc2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCBvdXRwdXQpID8/IGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKS5maWx0ZXIoKG91dHB1dCk6IG91dHB1dCBpcyBzdHJpbmcgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWdlbnRDb21tYW5kKFxuICBhZ2VudDogQWdlbnROYW1lLFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWdlbnRDb21tYW5kT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQsIGF3YWl0IHByb21wdCksIHtcbiAgICBsb2dGaWxlUGF0aDogYWdlbnRMb2dGaWxlUGF0aChhZ2VudCksXG4gICAgd2FpdE1lc3NhZ2U6IG9wdGlvbnMud2FpdE1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSA6IG9wdGlvbnMud2FpdE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnZXhlYycsICctLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3gnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gWydjbGF1ZGUnLCAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ25weCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICdAZ29vZ2xlL2dlbWluaS1jbGlAcHJldmlldycsXG4gICAgICAgICctLWFwcHJvdmFsLW1vZGUnLFxuICAgICAgICAneW9sbycsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFsnZ2gnLCAncHInLCAndmlldycsICctLWpzb24nLCAnYmFzZVJlZk5hbWUnLCAnLS10ZW1wbGF0ZScsICd7ey5iYXNlUmVmTmFtZX19J10pXG4gICAgKS50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgYXMgc3RyaW5naWZ5WWFtbCB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBSZXZpZXdDb21tZW50Tm9kZSAmIHsgYXV0aG9yPzogc3RyaW5nIHwgbnVsbCB9IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tZW50LFxuICAgIGF1dGhvcjogdHlwZW9mIGNvbW1lbnQuYXV0aG9yID09PSAnc3RyaW5nJyA/IGNvbW1lbnQuYXV0aG9yIDogKGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyBudWxsKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgYXMgVDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8SnNvbk9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgSnNvbk9iamVjdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGNodW5rKSA6IEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIoYm9keTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfSBib2R5Li4uYCk7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuXG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIGNvZGUtZm9jdXNlZCBwbGFuLCBhbmQgcG9zdGluZyB0aGF0IHBsYW4gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uXG5IZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcblxcYFxcYFxcYHlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cblxcYFxcYFxcYFxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGZldGNoZWQgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgcGxhbm5pbmc6XG4gICAtIFJlYWQgdGhlIGlzc3VlIGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IHJlcXVlc3RlZCBiZWhhdmlvciwgY29uc3RyYWludHMsIGFuZCBvcGVuIHF1ZXN0aW9ucy5cbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gUHJvcG9zZSBhIGNvZGUtZm9jdXNlZCBpbXBsZW1lbnRhdGlvbiBwbGFuIGdyb3VuZGVkIGluIHRoZSBpc3N1ZSwgZmV0Y2hlZCBtZXNzYWdlcywgYW5kIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLiBEZXNjcmliZSB3aGF0IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4sIHdoZXJlIGl0IHNob3VsZCBsaXZlLCBhbmQgaG93IGl0IHNob3VsZCB3b3JrLiBQcmVmZXIgY29uY3JldGUgZ3VpZGFuY2Ugc3VjaCBhczpcbiAgIC0gV2hpY2ggZmlsZXMsIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgdHlwZXMsIHRlc3RzLCBvciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhZGRlZCBvciBjaGFuZ2VkLlxuICAgLSBIb3cgdGhlIG5ldyBvciBjaGFuZ2VkIGxvZ2ljIHNob3VsZCBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS5cbiAgIC0gV2hhdCBpbnRlcmZhY2VzLCBkYXRhIHNoYXBlcywgY29uZGl0aW9uIGJyYW5jaGVzLCBvciBzaWRlIGVmZmVjdHMgbmVlZCB0byBjaGFuZ2UuXG4gICAtIFdoaWNoIGVkZ2UgY2FzZXMsIHJpc2tzLCBhbmQgdmFsaWRhdGlvbiBzdGVwcyBtYXR0ZXIgZm9yIHRoZSBjb2RlIGNoYW5nZS5cbiAgIC0gQW55IG1pc3NpbmcgaW5mb3JtYXRpb24gb3IgYXNzdW1wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGRlc2lnbi5cbjQuIFBvc3QgdGhlIHBsYW4gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0gZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzICh3aXRob3V0IHRyaXBsZSBiYWNrdGlja3MpOlxuXFxgXFxgXFxgXG4jIyBDb2RlIFBsYW5cblxuIyMjIEZpbGVzIC8gTW9kdWxlcyB0byBDaGFuZ2VcblxuLSBGaWxlIG9yIG1vZHVsZSBhbmQgd2h5IGl0IG5lZWRzIHRvIGNoYW5nZVxuXG4jIyMgQ29kZSB0byBXcml0ZVxuXG4tIEZ1bmN0aW9uLCB0eXBlLCBjbGFzcywgb3IgYnJhbmNoIHRvIGFkZCBvciBtb2RpZnlcbi0gSG93IHRoZSBsb2dpYyBzaG91bGQgd29ya1xuXG4jIyMgVmFsaWRhdGlvblxuXG4tIFRlc3Qgb3IgY2hlY2sgdG8gY29uZmlybSB0aGUgYmVoYXZpb3JcblxuIyMgUmlza3MgLyBPcGVuIFF1ZXN0aW9uc1xuXG4tIFJpc2sgb3IgdW5jZXJ0YWludHlcblxcYFxcYFxcYFxuYC50cmltKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFJldmlld1Byb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZvciBlYWNoIGZpbmRpbmcsIGRvIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RlcHM6XG4xLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgIC0gRGVzY3JpYmUgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjaGFuZ2UgdGhhdCB3b3VsZCBhZGRyZXNzIHRoZSBmaW5kaW5nLlxuICAgLSBJbnZlc3RpZ2F0ZSB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGF0IGNoYW5nZSBieSBpbnNwZWN0aW5nIHRoZSBhZmZlY3RlZCBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIGFkamFjZW50IGJlaGF2aW9yLCBhbmQgbm90ZSBhbnkgZm9sbG93LXVwIGNoYW5nZXMgb3Igcmlza3MgdGhlIGZpeCB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yLlxuXG5SZXBvcnQgb25seSB0aGUgdmFsaWQgZmluZGluZ3MsIHRoZSBldmlkZW5jZSBmb3IgZWFjaCBvbmUsIGFuZCB0aGUgcHJvcG9zZWQgZml4IHdpdGggaXRzIGxpa2VseSBpbXBhY3QuIEluY2x1ZGUgYSBicmllZiBqdXN0aWZpY2F0aW9uIGZvciBlYWNoLCBjaXRpbmcgdGhlIGV2aWRlbmNlIHVzZWQgKGUuZy4sIGEgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIG9mZmljaWFsIGRvY3VtZW50YXRpb24pLiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0OlxuXFxgXFxgXFxgeWFtbFxuJHtwckNvbnRleHQudHJpbSgpfVxuXFxgXFxgXFxgXG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2NyZWVuc2hvdFByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzY3JlZW5zaG90JylcbiAgLmRlc2NyaXB0aW9uKCdUYWtlIGEgc2NyZWVuc2hvdCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCB2aWEgcGxheXdyaWdodC1jbGknKVxuICAuYXJndW1lbnQoJzxpbml0aWFsLXVybD4nLCAnSW5pdGlhbCBVUkwgdG8gb3BlbiBiZWZvcmUgbmF2aWdhdGluZycpXG4gIC5hcmd1bWVudCgnPHBhZ2UtbmFtZT4nLCAnUGFnZSBuYW1lIHRvIG5hdmlnYXRlIHRvIGZyb20gdGhlIGluaXRpYWwgcGFnZScpXG4gIC5hcmd1bWVudCgnPGRlc2NyaXB0aW9uPicsICdEZXNjcmlwdGlvbiBvZiB0aGUgcGFydCB0byBjYXB0dXJlIGluIHRoZSBzY3JlZW5zaG90JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgc2NyZWVuc2hvdCBhZ2VudCcpLmNob2ljZXMoWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihcbiAgICBhc3luYyAoXG4gICAgICBpbml0aWFsVXJsOiBzdHJpbmcsXG4gICAgICBwYWdlTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgYWdlbnQ6ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknIH1cbiAgICApID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQob3B0aW9ucy5hZ2VudCwgYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmwsIHBhZ2VOYW1lLCBkZXNjcmlwdGlvbikpXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHInKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgYm9keScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQcihib2R5KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtaXNzdWUnKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGFuIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwnKVxuICAuYXJndW1lbnQoJzxpc3N1ZT4nLCAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKGlzc3VlUmVmZXJlbmNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1wcicpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYSBwdWxsIHJlcXVlc3QgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCwgZXhjbHVkaW5nIGlubGluZSBjb21tZW50cycpXG4gIC5hcmd1bWVudCgnW3ByXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlciBvciBVUkw7IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHByUmVmZXJlbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hQck1lc3NhZ2VzKHByUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgYXJndW1lbnROYW1lPzogc3RyaW5nO1xuICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW46IChtb2RlOiBUTW9kZSwgYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbmZpZy5uYW1lKS5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcbiAgaWYgKGNvbmZpZy5hcmd1bWVudE5hbWUpIHtcbiAgICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZy5hcmd1bWVudE5hbWUsIGNvbmZpZy5hcmd1bWVudERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbc3RyaW5nIHwgeyBhZ2VudDogVE1vZGUgfSwgeyBhZ2VudDogVE1vZGUgfSB8IHVuZGVmaW5lZF07XG4gICAgICBjb25zdCBhcmd1bWVudCA9IHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBhcmd1bWVudE9yT3B0aW9ucyA6ICcnO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gbWF5YmVPcHRpb25zIDogYXJndW1lbnRPck9wdGlvbnMpIGFzIHsgYWdlbnQ6IFRNb2RlIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgoKSA9PiBQcm9taXNlPHN0cmluZz4pXG4gICAgfCB7XG4gICAgICAgIGFyZ3VtZW50TmFtZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBydW46IChhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bigpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZ09yUnVuLmFyZ3VtZW50TmFtZSwgY29uZmlnT3JSdW4uYXJndW1lbnREZXNjcmlwdGlvbikuYWN0aW9uKGFzeW5jIChhcmd1bWVudDogc3RyaW5nKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ucnVuKGFyZ3VtZW50KSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIldBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsInN0ZGlvIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiY2xvc2UiLCJmIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJfdCIsIl9jb250ZXh0MiIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2VzcyIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJhbGxBZ2VudHNMYWJlbCIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyRtYXBPdXRwdXQyIiwiX29wdGlvbnMiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJfcnVuQWdlbnRDb21tYW5kIiwiX3QzIiwiY3JlYXRlQWdlbnRDb21tYW5kIiwiYWdlbnRMb2dGaWxlUGF0aCIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJwYWRTdGFydCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoIiwiX3Q0IiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwidGVzdCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiVEVTVF9DSEVDS19XQUlUX01FU1NBR0UiLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJwcm9ncmVzcyIsInByb2Nlc3NTdGRlcnIiLCJleGl0V2l0aEVycm9yIiwiZXhpdCIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiZXhpdENvZGUiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsInN0ZGluRGF0YSIsInN0ZGluIiwiaW5jbHVkZXMiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl9naCIsImFyZ3MiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g2IiwiX3g3IiwiX3g4IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDkiLCJfeDAiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kyIiwiX09iamVjdCRlbnRyaWVzMiIsIl9PYmplY3QkZW50cmllczIkX2kiLCJfa2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJfb2JqZWN0U3ByZWFkIiwiYXV0aG9yIiwibG9naW4iLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWU5IiwicHJOdW1iZXIiLCJvblRocmVhZCIsImN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRocmVhZCIsIl90NSIsIl90NiIsIl9jb250ZXh0MCIsIm51bWJlciIsIk51bWJlciIsImRhdGEiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm5vZGVzIiwicyIsImUiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl94MTQiLCJfeDE1IiwiX3gxNiIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX2NhbGxlZTAiLCJpZHMiLCJfY29udGV4dDEiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl94MTciLCJfeDE4IiwiX3gxOSIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxMCIsInRocmVhZHMiLCJfY29udGV4dDExIiwiX2NhbGxlZTEiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiY29tbWVudHMiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDciLCJfdDgiLCJfdDkiLCJfY29udGV4dDEwIiwidGhyZWFkSWQiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJsaW5lIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX3gyMCIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9jYWxsZWUxMSIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl90MCIsIl9jb250ZXh0MTIiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiX3gyNCIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX2NhbGxlZTEyIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJfY29udGV4dDEzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicmVzdWx0Iiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNSIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI2IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNyIsIl9jYWxsZWUxNSIsIl90MTAiLCJfY29udGV4dDE2IiwiQnVmZmVyIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJwYXlsb2FkIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsIm9wZW5QciIsIl94MjgiLCJfb3BlblByIiwiX2NhbGxlZTE3IiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE4IiwidXBkYXRlUHIiLCJfeDI5IiwiX3VwZGF0ZVByIiwiX2NhbGxlZTE4IiwiX3QxMyIsIl90MTQiLCJfY29udGV4dDE5IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTUiLCJfdDE2IiwiX2NvbnRleHQyMCIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDMwIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMjAiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTciLCJfdDE4IiwiX3QxOSIsIl9jb250ZXh0MjEiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjIiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwiX2NvbnRleHQyMyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX2NhbGxlZTIxIiwiX3JlZjUiLCJfcmVmNyIsImNvbXBhY3RXb3JrZmxvdyIsIl90MjAiLCJfdDIxIiwiX3QyMiIsIl9jb250ZXh0MjIiLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjgiLCJfcmVmOSIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl94MzEiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTIzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXI1IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNiIsImlzc3VlIiwiX2NvbnRleHQyNCIsImlzc3VlTWVzc2FnZXMiLCJub3JtYWxpemVJc3N1ZU51bWJlciIsImZldGNoUHJNZXNzYWdlcyIsIl94MzIiLCJfZmV0Y2hQck1lc3NhZ2VzIiwiX2NhbGxlZTI0IiwicmVzb2x2ZWRQck51bWJlciIsIl90MjMiLCJfY29udGV4dDI1Iiwibm9ybWFsaXplUHJOdW1iZXIiLCJjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwiX2NhbGxlZTI1IiwicHJOdW1iZXJPdXRwdXQiLCJfY29udGV4dDI2IiwiX3gzMyIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfY2FsbGVlMjYiLCJfeWllbGQkY3VycmVudFJlcG9QYXI3IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyOCIsIl9jb250ZXh0MjciLCJwck1lc3NhZ2VzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJfeDM0IiwiX3gzNSIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfY2FsbGVlMjciLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJfY29udGV4dDI4IiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJzdHJpbmdPclVuZGVmaW5lZCIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX3gzNiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsIl9jYWxsZWUyOCIsIl9jb250ZXh0MjkiLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJydGtBdmFpbGFibGUiLCJzcGF3blN5bmNTYWZlIiwicmVwbGFjZSIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsImpvYk5hbWUiLCJfcmVmMyIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJzdGF0dXMiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsIl94MzciLCJfeDM4IiwiX3gzOSIsIl9pc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTI5IiwibWVzc2FnZXMiLCJfY29udGV4dDMwIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhMiIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3g0MCIsIl94NDEiLCJfeDQyIiwiX3ByTWVzc2FnZXMiLCJfY2FsbGVlMzAiLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX2NvbnRleHQzMSIsIl9yZXNwb25zZSRkYXRhNCIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDQzIiwiX3g0NCIsIl94NDUiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX2NhbGxlZTMxIiwiX2NvbnRleHQzMiIsIl9yZXNwb25zZSRkYXRhNSIsIl94NDYiLCJfeDQ3IiwiX3g0OCIsIl9wclJldmlld3MiLCJfY2FsbGVlMzIiLCJfY29udGV4dDMzIiwiX3Jlc3BvbnNlJGRhdGE2IiwicmV2aWV3TWVzc2FnZSIsIl94NDkiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWUzMyIsImNvbmZpZyIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJfdDI0IiwiX2NvbnRleHQzNCIsImhhc01lc3NhZ2VCb2R5IiwiX3g1MCIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTM0IiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJfdDI1IiwiX2NvbnRleHQzNSIsInRpdGxlIiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luMiIsIl9jb21tZW50JGF1dGhvcjIiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwicmVwbGFjZUFsbCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJfcmVmMSIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3M5IiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImlzc3VlUmVmZXJlbmNlIiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFhQSxJQUNhQSxFQUE4QixnQ0FFM0MsU0FBc0JDLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0EyQjNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUEzQk0sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFiLElBQUFjLEVBQUEsU0FBQUMs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
4
+ var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return x(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(x(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,x(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,i,"GeneratorFunction"),x(f),x(f,i,"Generator"),x(f,r,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:a,m:p}})()}function x(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}x=function(n,e,t,r){function a(e,t){x(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},x(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||A(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(n){return function(n){if(Array.isArray(n))return p(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){"@babel/helpers - typeof";return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},O(n)}function A(n,e){if(n){if("string"==typeof n)return p(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?p(n,e):void 0}}var R="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return P.apply(this,arguments)}function P(){return P=v(k().m(function n(e,r){var i,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([C(a.stdout,function(n){return u.write(n)}),C(a.stderr,function(n){return u.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=j(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),P.apply(this,arguments)}function C(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=!1,a=!1,n.p=2,u=d(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!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.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,t){if(void 0===e&&(e=10),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=setInterval(function(){t(".")},1e3*e);return t("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(r),t("\n")}}function N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var t,r,u;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var L="There is no concern.",_=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return U.apply(this,arguments)}function U(){return(U=v(k().m(function n(e,t){var r,i,a;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.map(v(k().m(function n(e){var i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):L);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function F(n,e,t){return H.apply(this,arguments)}function H(){return(H=v(k().m(function n(e,t,r){var i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=$,a=M,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function M(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(R)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function Q(n){return n.toString().padStart(2,"0")}function Y(){return z.apply(this,arguments)}function z(){return(z=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,V();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,K();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function K(){return Z.apply(this,arguments)}function Z(){return(Z=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=en,n.n=1,$(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function V(){return X.apply(this,arguments)}function X(){return(X=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!nn(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function nn(n){return/no pull requests? found for branch/i.test(String(n))}function en(n,e){if(n.length>0)return n;throw new Error(e)}var tn={blockQuote:"literal",lineWidth:0},rn=/\btest\b/i,an="Waiting for test-related workflows to finish. ".concat(R),on=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],un=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function cn(n){c.write("".concat(n,"\n"))}function sn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function ln(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}function fn(){return pn.apply(this,arguments)}function pn(){return(pn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Zn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function dn(n){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,fn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:sn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function mn(n,e){return vn.apply(this,arguments)}function vn(){return vn=v(k().m(function n(e,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=k().m(function n(){var i,o,u,l,f,p,d,h;return k().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([Zn(o.stdout),Zn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(ln(e,d,h)&&c<3)){n.n=4;break}return cn("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:sn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:sn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),vn.apply(this,arguments)}function gn(n,e){return wn.apply(this,arguments)}function wn(){return(wn=v(k().m(function n(e,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["gh"].concat(I(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function yn(n,e,t){return bn.apply(this,arguments)}function bn(){return(bn=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["gh"].concat(I(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function kn(){return xn.apply(this,arguments)}function xn(){return(xn=v(k().m(function n(){var e,t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=j(t,2),i=r[0],a=r[1],i&&a||sn("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function Sn(){return jn.apply(this,arguments)}function jn(){return(jn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function In(n,e){return On.apply(this,arguments)}function On(){return(On=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=j(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,gn(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),sn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function An(n){var e,t;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function Rn(n,e,t,r,i){return $n.apply(this,arguments)}function $n(){return($n=v(k().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,w;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,In(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||sn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=g(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,w=n.v,l.e(w);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=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 Pn(n,e,t){return Cn.apply(this,arguments)}function Cn(){return(Cn=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Rn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function qn(n,e,t){return En.apply(this,arguments)}function En(){return(En=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Rn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,v(k().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(An),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,In("\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=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)||sn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,I(s.nodes.map(An))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Nn(n){return f(n,tn)}function Tn(n){return JSON.parse(JSON.stringify(n))}function Ln(n){return _n.apply(this,arguments)}function _n(){return(_n=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,yn(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 t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Dn(n,e,t,r){return Gn.apply(this,arguments)}function Gn(){return(Gn=v(k().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=zn),void 0===r&&(r=Ln),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=Un(o),l=Fn(s),f=j(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=360)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=E(an,10,i)),n.n=6,t(10);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Un(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=j(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Hn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Qn(e)>Qn(n)?e:n},[])}(t[1]),a=i[0];a||sn("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Bn(e)>Bn(n)?e:n:e},void 0))?e:a;return[r,{classification:Jn(i),check:o,checks:i}]}))}function Fn(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=j(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Yn(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Hn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Mn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=v(k().m(function n(e){var t,r;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,yn(["run","view",e,"--json",on.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Jn(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 Bn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Qn(n){return n.reduce(function(n,e){var t=Bn(e);return t>n?t:n},"")}function Yn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&rn.test(n)})}function zn(n){return Kn.apply(this,arguments)}function Kn(){return(Kn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Zn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],r=new TextDecoder,i=!1,a=!1,n.p=2,u=d(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,t.push("string"==typeof s?s:r.decode(new Uint8Array(s),{stream:!0}));case 5:i=!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,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return t.push(r.decode()),n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(){var e,t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn("Error: JSON input is required on stdin");case 1:for(e=n.v,t=ye(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=j(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function ee(n){return te.apply(this,arguments)}function te(){return(te=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,gn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||sn("Error: could not determine current branch"),r||sn("Error: could not determine default branch"),t===r&&sn("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),cn("Creating pull request..."),n.n=3,gn(i,e);case 3:return a=Nn,o=JSON,n.n=4,gn(["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 re(n){return ie.apply(this,arguments)}function ie(){return(ie=v(k().m(function n(e){var t,r,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return t=n.v,cn("Updating pull request #".concat(t," body...")),n.n=2,gn(["pr","edit",t,"--body-file","-"],e);case 2:return r=Nn,i=JSON,n.n=3,gn(["pr","view",t,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 3:return n.a(2,r(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function ae(){return oe.apply(this,arguments)}function oe(){return(oe=v(k().m(function n(){var e,t,r,i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,Sn();case 2:return a=n.v,cn("Fetching unresolved review threads..."),o=Nn,n.n=3,qn(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,w,y,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,Sn();case 2:return o=n.v,b=Set,n.n=3,Pn(i,a,o);case 3:x=n.v,u=new b(x),cn("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=g(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=j(f.value,2),h=d[0],m=j(d[1],2),v=m[0],w=m[1],cn("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,In("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):cn("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return cn("Done."),n.a(2,Nn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function se(){return le.apply(this,arguments)}function le(){return(le=v(k().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return e=n.v,cn("Fetching latest CI results..."),n.n=2,Dn(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=Un(i),c=Fn(u),s=j(c,2),l=s[0],f=s[1],p={summary:Tn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,be(r,i);case 1:return a=n.v,o=b,u=b({},a),c=je,n.n=2,xe(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:Nn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return be(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:Nn(p),exitCode:1});case 6:return p.test_workflow_output="All workflows are successful.",n.a(2,{output:Nn(p),exitCode:0})}},n)}))).apply(this,arguments)}function fe(n){return pe.apply(this,arguments)}function pe(){return(pe=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,Te(i,a,Re(e));case 2:return o=n.v,cn("Fetched issue #".concat(o.number," messages.")),n.a(2,Nn({issue:o}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=v(k().m(function n(e){var t,r,i;return k().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,Sn();case 1:i=n.v,n.n=3;break;case 2:i=$e(e);case 3:return t=i,n.n=4,ge(t);case 4:return r=n.v,cn("Fetched pull request #".concat(r.number," messages.")),n.a(2,Nn({pull_request:r}))}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yn(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!nn(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ge(t);case 3:return r=n.v,n.a(2,Nn({pull_request:r}))}},n)}))).apply(this,arguments)}function ge(n){return we.apply(this,arguments)}function we(){return(we=v(k().m(function n(e){var t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,_e(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ye(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||sn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&sn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function be(n,e){return ke.apply(this,arguments)}function ke(){return(ke=v(k().m(function n(e,t){var r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return i=Hn(t.check),n.n=1,Mn(i);case 1:return a=n.v,o=Ce(a,Ae(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Ae(t.check.name),job_url:Ae(null==o?void 0:o.url),failed_step:qe(o),run_id:i,run_url:null!=(r=Ae(null==a?void 0:a.url))?r:Ae(t.check.link),branch:Ae(null==a?void 0:a.headBranch),sha:Ae(null==a?void 0:a.headSha),conclusion:Ae(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function xe(n){return Se.apply(this,arguments)}function Se(){return(Se=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:if(t=Hn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,yn(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n){return{failed_log:Ie(n)}}function Ie(n){var e=Oe(l(n));if(!Ee)return e;var t=Ne(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Oe(t.output):e}function Oe(n){return n.split("\n").map(function(n){return n.replace(un,"")}).join("\n").trim()}function Ae(n){return"string"==typeof n&&n.length>0?n:void 0}function Re(n){return Pe(n,"issue")}function $e(n){return Pe(n,"pull request")}function Pe(n,e){var t=String(n).trim();if(0===t.length&&sn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];sn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function Ce(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function qe(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}var Ee=0===Ne(["rtk","--version"]).exitCode;function Ne(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function Te(n,e,t){return Le.apply(this,arguments)}function Le(){return(Le=v(k().m(function n(e,t,r){var i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ye});case 2:return a=n.v,n.a(2,b(b({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function _e(n,e,t){return De.apply(this,arguments)}function De(){return(De=v(k().m(function n(e,t,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([Ue(e,t,r),He(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,b(b({},i),{},{messages:[].concat(I(u),I(c)).sort(Ge)}))}},n)}))).apply(this,arguments)}function Ge(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function Ue(n,e,t){return Fe.apply(this,arguments)}function Fe(){return(Fe=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ye});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function He(n,e,t){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,We({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:ze});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function We(n){return Je.apply(this,arguments)}function Je(){return(Je=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,In(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,I(a.nodes.map(e.mapNode).filter(Ke))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Be(n){return Qe.apply(this,arguments)}function Qe(){return(Qe=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,In(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||sn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function Ye(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function ze(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Ke(n){return"string"==typeof n.body&&n.body.length>0}function Ze(n){return Ve.apply(this,arguments)}function Ve(){return(Ve=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Don't forget to clean up any temporary files.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e," from the repository root, then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function Xe(n){return"git merge-base ".concat(nt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(nt(n)," HEAD")}function nt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function et(){return tt.apply(this,arguments)}function tt(){return(tt=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y();case 1:return e=n.v,t=Xe(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(L,"`\n\n").concat(rt(r),"\n").trim())}},n)}))).apply(this,arguments)}function rt(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function it(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function at(){return ot.apply(this,arguments)}function ot(){return(ot=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y();case 1:return e=n.v,t=Xe(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var ut=new n;function ct(n){var t=ut.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(v(k().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=j(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function st(n,e,t){var r=ut.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ut.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ct({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?G(et(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):F(n,et())}}),st("review-codex","Run Codex review against the current branch",function(){return F("codex",et())}),st("review-claude","Run Claude Code review against the current branch",function(){return F("claude",et())}),st("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",et())}),ct({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(Ze(Re(e)),{allAgentsLabel:"planning agents"}):F(n,Ze(Re(e)))}}),st("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("codex",Ze(Re(n)))}}),st("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("claude",Ze(Re(n)))}}),st("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("gemini",Ze(Re(n)))}}),ut.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(v(k().m(function n(e,t,r,i){var a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,F(i.agent,it(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),ct({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return F(n,at())}}),st("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",at())}),st("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",at())}),st("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",at())}),ut.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fn();case 1:return e=n.v,n.n=2,ee(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ut.command("update-pr").description("Update the current pull request body").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,dn("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,re(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ut.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ut.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ut.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ut.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ut.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn();case 1:return e=n.v,n.n=2,ue(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ut.parseAsync(process.argv);
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMveWFtbC50cyIsIi4uL3NyYy9wci9wckNvbW1hbmRzLnRzIiwiLi4vc3JjL3Byb21wdHMvcGxhblByb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zaW1wbGlmeVByb21wdC50cyIsIi4uL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgbG9nRmlsZVBhdGg/OiBzdHJpbmc7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuY29uc3QgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgPSAnUExFQVNFIFdBSVQgRk9SIFVQIFRPIDEgSE9VUi4nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhvcHRpb25zLndhaXRNZXNzYWdlLCBvcHRpb25zLndhaXRJbnRlcnZhbFNlY29uZHMpO1xuICBjb25zdCBjb21tYW5kTG9nZ2VyID0gYXdhaXQgY3JlYXRlQ29tbWFuZExvZ2dlcihvcHRpb25zLmxvZ0ZpbGVQYXRoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0LCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciwgKGNodW5rKSA9PiBjb21tYW5kTG9nZ2VyLndyaXRlKGNodW5rKSksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwKSB7XG4gICAgICByZXR1cm4gc3Rkb3V0O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuICAgIHRocm93IG5ldyBFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGNvbW1hbmRMb2dnZXIuY2xvc2UoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KFxuICBzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9uQ2h1bms/OiAoY2h1bms6IHN0cmluZykgPT4gdm9pZFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIHJldHVybiBjaHVua3Muam9pbignJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gIHdhaXRNZXNzYWdlOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgd2FpdEludGVydmFsU2Vjb25kcyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICB3cml0ZVByb2dyZXNzOiBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogKCkgPT4gdm9pZCB7XG4gIGlmICghd2FpdE1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICB3cml0ZVByb2dyZXNzKCcuJyk7XG4gIH0sIHdhaXRJbnRlcnZhbFNlY29uZHMgKiAxMDAwKTtcblxuICB3cml0ZVByb2dyZXNzKGAke3dhaXRNZXNzYWdlfSBPbmUgZG90IHJlcHJlc2VudHMgJHt3YWl0SW50ZXJ2YWxTZWNvbmRzfSBzZWNvbmRzOiBgKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgIHdyaXRlUHJvZ3Jlc3MoJ1xcbicpO1xuICB9O1xufVxuXG50eXBlIENvbW1hbmRMb2dnZXIgPSB7XG4gIHdyaXRlOiAoY2h1bms6IHN0cmluZykgPT4gdm9pZDtcbiAgY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MsIFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UsIE5PX0NPTkNFUk5fUEhSQVNFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5cbmV4cG9ydCBjb25zdCBBR0VOVF9OQU1FUyA9IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddIGFzIGNvbnN0O1xuY29uc3QgQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtOT19DT05DRVJOX1BIUkFTRX1cXFxcYmAsICdpJyk7XG5leHBvcnQgdHlwZSBBZ2VudE5hbWUgPSAodHlwZW9mIEFHRU5UX05BTUVTKVtudW1iZXJdO1xuXG50eXBlIEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG59O1xuXG50eXBlIEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0geyBhbGxBZ2VudHNMYWJlbDogJ2FnZW50cycgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mod2FpdE1lc3NhZ2VGb3Iob3B0aW9ucy5hbGxBZ2VudHNMYWJlbCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKFxuICAgICAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKGFnZW50LCByZXNvbHZlZFByb21wdCwge1xuICAgICAgICAgICAgICB3YWl0TWVzc2FnZTogZmFsc2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCBvdXRwdXQpID8/IGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKS5maWx0ZXIoKG91dHB1dCk6IG91dHB1dCBpcyBzdHJpbmcgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWdlbnRDb21tYW5kKFxuICBhZ2VudDogQWdlbnROYW1lLFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWdlbnRDb21tYW5kT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQsIGF3YWl0IHByb21wdCksIHtcbiAgICBsb2dGaWxlUGF0aDogYWdlbnRMb2dGaWxlUGF0aChhZ2VudCksXG4gICAgd2FpdE1lc3NhZ2U6IG9wdGlvbnMud2FpdE1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSA6IG9wdGlvbnMud2FpdE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnZXhlYycsICctLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3gnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gWydjbGF1ZGUnLCAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ25weCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICdAZ29vZ2xlL2dlbWluaS1jbGlAcHJldmlldycsXG4gICAgICAgICctLWFwcHJvdmFsLW1vZGUnLFxuICAgICAgICAneW9sbycsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFsnZ2gnLCAncHInLCAndmlldycsICctLWpzb24nLCAnYmFzZVJlZk5hbWUnLCAnLS10ZW1wbGF0ZScsICd7ey5iYXNlUmVmTmFtZX19J10pXG4gICAgKS50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgYXMgc3RyaW5naWZ5WWFtbCB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBSZXZpZXdDb21tZW50Tm9kZSAmIHsgYXV0aG9yPzogc3RyaW5nIHwgbnVsbCB9IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tZW50LFxuICAgIGF1dGhvcjogdHlwZW9mIGNvbW1lbnQuYXV0aG9yID09PSAnc3RyaW5nJyA/IGNvbW1lbnQuYXV0aG9yIDogKGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyBudWxsKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgYXMgVDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8SnNvbk9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgSnNvbk9iamVjdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBkZWNvZGVyLmRlY29kZShuZXcgVWludDhBcnJheShjaHVuayksIHsgc3RyZWFtOiB0cnVlIH0pKTtcbiAgfVxuICBjaHVua3MucHVzaChkZWNvZGVyLmRlY29kZSgpKTtcbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKGJvZHk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0gYm9keS4uLmApO1xuICBhd2FpdCBnaChbJ3ByJywgJ2VkaXQnLCBwck51bWJlciwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDoge3B1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHl9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHt0aHJlYWRJZDogJHRocmVhZElkfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHN1bW1hcnk6IGRlZXBDb3B5KGNpUmVzdWx0cy5zdW1tYXJ5KSxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgfTtcblxuICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQuZmFpbGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZmFpbGVkUmVzdWx0cykubWFwKGFzeW5jIChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IHtcbiAgICAgICAgY29uc3QgY29tcGFjdFdvcmtmbG93ID0gYXdhaXQgY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbXBhY3RXb3JrZmxvdyxcbiAgICAgICAgICAuLi5idWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhhd2FpdCBmYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQuY2hlY2spKSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbiAgICBwYXlsb2FkLnJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMocnVubmluZ1Jlc3VsdHMpLm1hcCgoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCkpXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdBbGwgd29ya2Zsb3dzIGFyZSBzdWNjZXNzZnVsLic7XG4gIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAwIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgaXNzdWVNZXNzYWdlcyhvd25lciwgbmFtZSwgbm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVOdW1iZXIpKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPT09IHVuZGVmaW5lZCA/IGF3YWl0IGN1cnJlbnRQck51bWJlcigpIDogbm9ybWFsaXplUHJOdW1iZXIocHJOdW1iZXIpO1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhyZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJOdW1iZXJPdXRwdXQgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddLCBbMV0pO1xuICBjb25zdCBwck51bWJlciA9IHByTnVtYmVyT3V0cHV0LnRyaW0oKTtcbiAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhwck51bWJlck91dHB1dCkgfHwgIS9eXFxkKyQvLnRlc3QocHJOdW1iZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgcmV0dXJuIGF3YWl0IHByTWVzc2FnZXMob3duZXIsIG5hbWUsIHByTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZXBseUlucHV0KGlucHV0OiBzdHJpbmcpOiB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBjb25zdCBlcnJvclByZWZpeCA9ICdFcnJvcjogSW52YWxpZCBpbnB1dCBmb3JtYXQgb24gc3RkaW4nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWlzUmVwbHlJbnB1dChwYXJzZWQpKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGAke2Vycm9yUHJlZml4fTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYSBzdHJpbmctdmFsdWVkIFxcYHJlcGxpZXNcXGAgbWFwYCwgMik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBJbnZhbGlkIEpTT04gcHJvdmlkZWQgb24gc3RkaW46ICR7ZXJyb3IubWVzc2FnZX1gLCAyKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVJc3N1ZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ2lzc3VlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQck51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ3B1bGwgcmVxdWVzdCcpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5Kb2IoXG4gIHJ1bjogV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkLFxuICBqb2JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFydW4/LmpvYnMgfHwgcnVuLmpvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IubmFtZSA9PT0gam9iTmFtZSkgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2Iuc3RhdHVzICE9PSAnY29tcGxldGVkJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShqb2I6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFqb2I/LnN0ZXBzIHx8IGpvYi5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpPy5uYW1lID8/XG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJyk/Lm5hbWVcbiAgKTtcbn1cblxuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5cbmZ1bmN0aW9uIGNvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGF3blN5bmNTYWZlKFtjb21tYW5kLCAnLS12ZXJzaW9uJ10pLmV4aXRDb2RlID09PSAwO1xufVxuXG5mdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNSZXBseUlucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZXBsaWVzID0gKHZhbHVlIGFzIHsgcmVwbGllcz86IHVua25vd24gfSkucmVwbGllcztcbiAgaWYgKHR5cGVvZiByZXBsaWVzICE9PSAnb2JqZWN0JyB8fCByZXBsaWVzID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocmVwbGllcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXBsaWVzKS5ldmVyeSgocmVwbHkpID0+IHJlcGx5ID09PSBudWxsIHx8IHJlcGx5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlcGx5ID09PSAnc3RyaW5nJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzc3VlTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxJc3N1ZU1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIG5vdW46ICdpc3N1ZScsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWUsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIElzc3VlTWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9NRVNTQUdFU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZT8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmlzc3VlLCBtZXNzYWdlcyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwck1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGZldGNoTWV0YWRhdGE8UHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBub3VuOiAncHVsbCByZXF1ZXN0JyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdCxcbiAgfSk7XG4gIGNvbnN0IFtpc3N1ZUNvbW1lbnRzLCByZXZpZXdzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwcklzc3VlQ29tbWVudHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgICBwclJldmlld3Mob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wdWxsUmVxdWVzdCxcbiAgICBtZXNzYWdlczogWy4uLmlzc3VlQ29tbWVudHMsIC4uLnJldmlld3NdLnNvcnQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hJc3N1ZU1lc3NhZ2VzIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlzc3VlWWFtbCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG5cbiAgcmV0dXJuIGBcblBsYW4gYSBHaXRIdWIgaXNzdWUgYnkgZ2F0aGVyaW5nIGNvbnRleHQsIHdyaXRpbmcgYSBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnMsIGFuZCBwb3N0aW5nIG9yIHVwZGF0aW5nIHRoYXQgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS4gSGVyZSBpcyB0aGUgZmV0Y2hlZCBpc3N1ZSBjb250ZXh0IGFzIFlBTUw6XG5+fn5+eWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxufn5+flxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGFib3ZlIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGNhcmVmdWxseS5cbjIuIENvbGxlY3QgZW5vdWdoIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIHNwZWNpZmljYXRpb246XG4gICAtIEluc3BlY3QgdGhlIHJlbGV2YW50IGNvZGUsIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCByZWNlbnQgZGlmZnMsIGFuZCBhbnkgb3RoZXIgbG9jYWwgY29udGV4dCBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gRG9uJ3QgZm9yZ2V0IHRvIGNsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QsIHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cbiAgIC0gSWYgdGhlIGlzc3VlIGFscmVhZHkgaGFzIGEgc3BlY2lmaWNhdGlvbiwgdXBkYXRlIHRoZSBleGlzdGluZyBjb21tZW50IGluc3RlYWQgb2YgcG9zdGluZyBhIG5ldyBvbmUuXG5cbkZvcm1hdCB0aGUgaXNzdWUgY29tbWVudCBleGFjdGx5IGxpa2UgdGhpcywgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZSBzdXJyb3VuZGluZyBcXGB+fn5+XFxgIGZlbmNlcyBpbiB0aGUgYWN0dWFsIGNvbW1lbnQ6XG5+fn5+XG4jIyBCYWNrZ3JvdW5kXG5cbltTdW1tYXJpemUgdGhlIGN1cnJlbnQgYmVoYXZpb3IgYW5kIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgaXNzdWVdXG5cbiMjIEdvYWxcblxuW0RlZmluZSB0aGUgZ29hbCB3ZSB3YW50IHRvIGFjaGlldmUgaW4gdGhpcyBpc3N1ZV1cblxuIyMgU3BlY2lmaWNhdGlvblxuXG5bRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzXVxuXG4jIyBLZXkgVGVjaG5vbG9naWVzIChPTkxZIGlmIGV4dGVybmFsIHJlc291cmNlcyBhcmUgbmVlZGVkKVxuXG5bRGVzY3JpYmUgd2hhdCBsaWJyYXJpZXMgb3IgQVBJcyB3ZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgY29uY3JldGUgdmVyc2lvbnMgYW5kIGNvZGUgc25pcHBldHMuXVxuXG5+fn5+XG5gLnRyaW0oKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYG9yaWdpbi8ke2Jhc2VCcmFuY2h9YCl9IEhFQUQgMj4vZGV2L251bGwgfHwgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGJhc2VCcmFuY2gpfSBIRUFEYDtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFwiJ1xcXCInXCIpfSdgO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblJldmlldyB0aGUgY3VycmVudCAke3ByQ29udGV4dCA/ICdwdWxsIHJlcXVlc3QnIDogJ2JyYW5jaCd9IGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoICR7YmFzZUJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRm9yIGVhY2ggZmluZGluZywgZG8gdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwczpcbjEuIEdhdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlOlxuICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgZmluZGluZyBpcyBhYm91dCBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgZmluZGluZyBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjIuIEp1ZGdlIHdoZXRoZXIgdGhlIGZpbmRpbmcgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG4zLiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IHRoZSB2YWxpZCBmaW5kaW5ncywgdGhlIGV2aWRlbmNlIGZvciBlYWNoIG9uZSwgYW5kIHRoZSBwcm9wb3NlZCBmaXggd2l0aCBpdHMgbGlrZWx5IGltcGFjdC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQpfVxuYC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByQ29udGV4dFxuICAgID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XG5+fn5+eWFtbFxuJHtwckNvbnRleHQudHJpbSgpfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsOiBzdHJpbmcsIHBhZ2VOYW1lOiBzdHJpbmcsIHNjcmVlbnNob3REZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzY3JlZW5zaG90RGVzY3JpcHRpb24ucmVwbGFjZUFsbCgnXFxuJywgJyAnKS5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKTtcbiAgcmV0dXJuIGBcblVzZSBcXGBwbGF5d3JpZ2h0LWNsaVxcYCBza2lsbCB0byB0YWtlIGEgc2NyZWVuc2hvdCBvZiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIgYnkgbmF2aWdhdGluZyBmcm9tICR7aW5pdGlhbFVybH0gdG8gXCIke3BhZ2VOYW1lfVwiIHBhZ2UuXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gT3BlbiB0aGUgaW5pdGlhbCBwYWdlIGF0ICR7aW5pdGlhbFVybH0uXG4yLiBOYXZpZ2F0ZSBmcm9tIHRoYXQgaW5pdGlhbCBwYWdlIHVudGlsIHlvdSByZWFjaCB0aGUgcGFnZSBpZGVudGlmaWVkIGFzICR7cGFnZU5hbWV9LlxuICAgLSBJZiBjb2RlIGVycm9ycywgcnVudGltZSBmYWlsdXJlcywgb3IgYnJva2VuIFVJIGZsb3dzIHByZXZlbnQgbmF2aWdhdGlvbiwgaW52ZXN0aWdhdGUgdGhlIGNhdXNlIGluIHRoZSBsb2NhbCBjb2RlYmFzZSwgbWFrZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNvZGUgZml4LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHBhZ2UgY2FuIG5vdyBiZSByZWFjaGVkIGJlZm9yZSBjb250aW51aW5nLlxuICAgLSBJZiB5b3UgY2Fubm90IGZpeCB0aGUgZXJyb3JzLCByZXBvcnQgb24gdGhlIGVycm9ycyB0aGVuIHN0b3AuXG4zLiBDYXB0dXJlIGEgc2NyZWVuc2hvdCB0aGF0IGZvY3VzZXMgb24gdGhpcyB0YXJnZXQ6IFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIi5cbjQuIEtlZXAgdGhlIGdlbmVyYXRlZCBpbWFnZSBhcnRpZmFjdCBhbmQgcmVwb3J0IHRoZSBzY3JlZW5zaG90IGZpbGUgcGF0aCBwbHVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB3YXMgY2FwdHVyZWQuIElmIHlvdSBoYWQgdG8gZml4IGNvZGUgZmlyc3QsIGFsc28gc3VtbWFyaXplIHRoZSBmaXguXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuYC50cmltKCk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBub3JtYWxpemVJc3N1ZU51bWJlcixcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxuICB1cGRhdGVQcixcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNjcmVlbnNob3RQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2NyZWVuc2hvdFByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0IGJvZHknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBQUiBib2R5IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdXBkYXRlUHIoYm9keSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkciLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsImNsb3NlIiwiZiIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiX3QiLCJfY29udGV4dDIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3MiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsIl90NCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsInRlc3QiLCJ5YW1sU3RyaW5naWZ5T3B0aW9ucyIsImJsb2NrUXVvdGUiLCJsaW5lV2lkdGgiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIlRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsImV4aXQiLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsImV4aXRDb2RlIiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwicHJvY2Vzc1N0ZGluIiwiaXNUVFkiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiZXJyb3JNZXNzYWdlIiwiaW5wdXQiLCJydW5Db21tYW5kIiwiX3J1bkNvbW1hbmQiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX2xvb3AiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl94OCIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g5IiwiX3gwIiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJfZXJyb3IkbWVzc2FnZSIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwiX29iamVjdFNwcmVhZCIsImF1dGhvciIsImxvZ2luIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDE0IiwiX3gxNSIsIl94MTYiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE3IiwiX3gxOCIsIl94MTkiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MjAiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjEiLCJfeDIyIiwiX3gyMyIsIl94MjQiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjUiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNiIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjciLCJfY2FsbGVlMTUiLCJkZWNvZGVyIiwiX3QxMCIsIl9jb250ZXh0MTYiLCJUZXh0RGVjb2RlciIsImRlY29kZSIsIlVpbnQ4QXJyYXkiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9jYWxsZWUxNiIsInBheWxvYWQiLCJub3JtYWxpemVkUmVwbGllcyIsIl9pMyIsIl9PYmplY3QkZW50cmllczMiLCJfT2JqZWN0JGVudHJpZXMzJF9pIiwiYm9keSIsIl9jb250ZXh0MTciLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwib3BlblByIiwiX3gyOCIsIl9vcGVuUHIiLCJfY2FsbGVlMTciLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJfdDExIiwiX3QxMiIsIl9jb250ZXh0MTgiLCJ1cGRhdGVQciIsIl94MjkiLCJfdXBkYXRlUHIiLCJfY2FsbGVlMTgiLCJfdDEzIiwiX3QxNCIsIl9jb250ZXh0MTkiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTkiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiX3QxNSIsIl90MTYiLCJfY29udGV4dDIwIiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl94MzAiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUyMCIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZXNwb25zZSRkYXRhIiwiX3N0ZXAzJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDMkdmFsdWUkIiwiX3QxNyIsIl90MTgiLCJfdDE5IiwiX2NvbnRleHQyMSIsIlNldCIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl9jYWxsZWUyMiIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJfY29udGV4dDIzIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfY2FsbGVlMjEiLCJfcmVmNSIsIl9yZWY3IiwiY29tcGFjdFdvcmtmbG93IiwiX3QyMCIsIl90MjEiLCJfdDIyIiwiX2NvbnRleHQyMiIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsImJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzIiwiZmFpbGVkV29ya2Zsb3dMb2ciLCJmYWlsZWRfd29ya2Zsb3dzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJfcmVmOCIsIl9yZWY5IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwiZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX3gzMSIsIl9mZXRjaElzc3VlTWVzc2FnZXMiLCJfY2FsbGVlMjMiLCJpc3N1ZU51bWJlciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjUiLCJfeWllbGQkY3VycmVudFJlcG9QYXI2IiwiaXNzdWUiLCJfY29udGV4dDI0IiwiaXNzdWVNZXNzYWdlcyIsIm5vcm1hbGl6ZUlzc3VlTnVtYmVyIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX3gzMiIsIl9mZXRjaFByTWVzc2FnZXMiLCJfY2FsbGVlMjQiLCJyZXNvbHZlZFByTnVtYmVyIiwiX3QyMyIsIl9jb250ZXh0MjUiLCJub3JtYWxpemVQck51bWJlciIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfY2FsbGVlMjUiLCJwck51bWJlck91dHB1dCIsIl9jb250ZXh0MjYiLCJfeDMzIiwiX2N1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsIl9jYWxsZWUyNiIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjciLCJfeWllbGQkY3VycmVudFJlcG9QYXI4IiwiX2NvbnRleHQyNyIsInByTWVzc2FnZXMiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsIl94MzQiLCJfeDM1IiwiX2NvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9jYWxsZWUyNyIsIl9zdHJpbmdPclVuZGVmaW5lZCIsInJ1biIsImZhaWxlZEpvYiIsIl9jb250ZXh0MjgiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfeDM2IiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwiX2NhbGxlZTI4IiwiX2NvbnRleHQyOSIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsInJ0a0F2YWlsYWJsZSIsInNwYXduU3luY1NhZmUiLCJyZXBsYWNlIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsImxhYmVsIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50Iiwiam9iTmFtZSIsIl9yZWYzIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsInN0YXR1cyIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInNwYXduU3luYyIsImVuY29kaW5nIiwiX3gzNyIsIl94MzgiLCJfeDM5IiwiX2lzc3VlTWVzc2FnZXMiLCJfY2FsbGVlMjkiLCJtZXNzYWdlcyIsIl9jb250ZXh0MzAiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEyIiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfeDQwIiwiX3g0MSIsIl94NDIiLCJfcHJNZXNzYWdlcyIsIl9jYWxsZWUzMCIsIl95aWVsZCRQcm9taXNlJGFsbDMiLCJfeWllbGQkUHJvbWlzZSRhbGw0IiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfY29udGV4dDMxIiwiX3Jlc3BvbnNlJGRhdGE0IiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwic29ydCIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdCIsInJpZ2h0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwibG9jYWxlQ29tcGFyZSIsIl94NDMiLCJfeDQ0IiwiX3g0NSIsIl9wcklzc3VlQ29tbWVudHMiLCJfY2FsbGVlMzEiLCJfY29udGV4dDMyIiwiX3Jlc3BvbnNlJGRhdGE1IiwiX3g0NiIsIl94NDciLCJfeDQ4IiwiX3ByUmV2aWV3cyIsIl9jYWxsZWUzMiIsIl9jb250ZXh0MzMiLCJfcmVzcG9uc2UkZGF0YTYiLCJyZXZpZXdNZXNzYWdlIiwiX3g0OSIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiX2NhbGxlZTMzIiwiY29uZmlnIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIl90MjQiLCJfY29udGV4dDM0IiwiaGFzTWVzc2FnZUJvZHkiLCJfeDUwIiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMzQiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsIl90MjUiLCJfY29udGV4dDM1IiwidGl0bGUiLCJfY29tbWVudCRhdXRob3IkbG9naW4yIiwiX2NvbW1lbnQkYXV0aG9yMiIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhcmd1bWVudE5hbWUiLCJhcmd1bWVudCIsImFyZ3VtZW50RGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiX2xlbiIsIl9yZWYxIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczkiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQWFBLElBQ2FBLEVBQThCLGdDQUUzQyxTQUFzQkMsRUFBc0JDLEVBQUFDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQTJCM0MsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQTNCTSxTQUFBQyxFQUFzQ0MsRUFBbUJDLEdBQTBCLElBQUFDLEVBQUFDLEVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willbooster/agent-skills",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "A collection of agent skills for WillBooster Inc.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,15 +37,15 @@
37
37
  "yaml": "2.8.3"
38
38
  },
39
39
  "devDependencies": {
40
- "@biomejs/biome": "2.4.9",
40
+ "@biomejs/biome": "2.4.10",
41
41
  "@semantic-release/commit-analyzer": "13.0.1",
42
42
  "@semantic-release/github": "12.0.6",
43
43
  "@semantic-release/npm": "13.1.5",
44
44
  "@semantic-release/release-notes-generator": "14.1.0",
45
45
  "@tsconfig/bun": "1.0.10",
46
46
  "@types/bun": "1.3.11",
47
- "@willbooster/biome-config": "3.3.0",
48
- "@willbooster/prettier-config": "10.3.0",
47
+ "@willbooster/biome-config": "3.4.1",
48
+ "@willbooster/prettier-config": "10.4.0",
49
49
  "@willbooster/wb": "13.5.0",
50
50
  "build-ts": "17.0.22",
51
51
  "conventional-changelog-conventionalcommits": "9.3.0",
@@ -54,7 +54,7 @@
54
54
  "prettier-plugin-java": "2.8.1",
55
55
  "semantic-release": "25.0.3",
56
56
  "sort-package-json": "3.6.1",
57
- "typescript": "5.9.3"
57
+ "typescript": "6.0.2"
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=24"