Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@nodesuite/process

Package Overview
Dependencies
Maintainers
1
Versions
55
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nodesuite/process - npm Package Compare versions

Comparing version 0.3.26 to 0.3.27

2

.rush/temp/operation/build_prod/state.json
{
"nonCachedDurationMs": 4426.381531999999
"nonCachedDurationMs": 3511.1366249999846
}
{
"nonCachedDurationMs": 5237.867054999995
"nonCachedDurationMs": 5348.414936000001
}
{
"files": {
"libraries/process/.rush/temp/shrinkwrap-deps.json": "cea9ddbd6e9611a412dac258221eca8f8704e1d7",
"libraries/process/.rush/temp/shrinkwrap-deps.json": "b47423c76b02fabcd7150de5225e45db89bfe1db",
"libraries/process/.eslintrc.js": "da8f1d5b00175fe9df49681a80b909d918ac6736",
"libraries/process/CHANGELOG.json": "542aaf0cd010962d016bfa5b3373dc4254f30e6a",
"libraries/process/CHANGELOG.md": "f62e1e838ef5c93626ef5f28fcf382ae06f66e2a",
"libraries/process/CHANGELOG.json": "2282e52120198dd0a084642eaa097add837a1074",
"libraries/process/CHANGELOG.md": "03bb63d3a967bd68aa6dce34111f46dbf6b2770f",
"libraries/process/README.md": "7ccf2c0f3dd5c464ba236834650e60f378ba6bba",
"libraries/process/config/rig.json": "54137d20557298060eb70cf9e72e9ce1c7b7e130",
"libraries/process/package.json": "1b388e4f15c39ae5e2a7f3bc9111472163a3d466",
"libraries/process/package.json": "f5552ba8f53f041d2bbe12010d6d910da4d384b9",
"libraries/process/src/core/exec.ts": "914b376a510f77905337efe6633aeb53c6538731",

@@ -17,9 +17,9 @@ "libraries/process/src/core/index.ts": "e02fe96e7449fd9e1d6f194a29f285c0ad68722d",

"libraries/process/src/errors/index.ts": "95971b616f7de477d74b7822fad038512f9e12c9",
"libraries/process/src/errors/message-timeout.error.ts": "cfd8f48f752f484aeae72aa6dd744c0b7998896e",
"libraries/process/src/errors/open-timeout.error.ts": "6bd2c6596dedb4bc2a537d359a94ad31f8f4f0e2",
"libraries/process/src/errors/process-configuration.error.ts": "3a58c493b48e5f95f6433341695ae002feb41e04",
"libraries/process/src/errors/process-execution.error.ts": "847bc4ace4ca56b8b124af45cd066a47eeef4007",
"libraries/process/src/errors/process-not-available.error.ts": "a4902534f8351f123a9642ebcfb621486e2dcee0",
"libraries/process/src/errors/process-spawn.error.ts": "ca15af5a1ffc16685d6a0789389c7476738f2a3b",
"libraries/process/src/errors/process-termination.error.ts": "ea6afe8549bdd2db46f820a170d0c427a1ba26da",
"libraries/process/src/errors/message-timeout.error.ts": "ef7df0b63367204c38226b2d74a0270e76e09228",
"libraries/process/src/errors/open-timeout.error.ts": "238445823e2ab2f1e4e7ff1d9b75116fd0ee4758",
"libraries/process/src/errors/process-configuration.error.ts": "ace4de70db6920fb070a685d1412931aa9d69642",
"libraries/process/src/errors/process-execution.error.ts": "eacd58cbc2bf7f743e70be08845096cadb3d9864",
"libraries/process/src/errors/process-not-available.error.ts": "380574f46867a144054b648742e2e02313bee9e7",
"libraries/process/src/errors/process-spawn.error.ts": "0c26b86ccb93728fa9d7cb277a55b24928cc0a39",
"libraries/process/src/errors/process-termination.error.ts": "e76d7178cbc3e59a150529bbfc9c6fe6be5b6691",
"libraries/process/src/index.ts": "21dcf0913ba551d5f4038d803b74b8fc0c81b08f",

@@ -26,0 +26,0 @@ "libraries/process/src/promises/close.ts": "1f712029498d20c2102a4a184de2625c42c57a71",

{
"files": {
"libraries/process/.rush/temp/shrinkwrap-deps.json": "cea9ddbd6e9611a412dac258221eca8f8704e1d7",
"libraries/process/.rush/temp/shrinkwrap-deps.json": "b47423c76b02fabcd7150de5225e45db89bfe1db",
"libraries/process/.eslintrc.js": "da8f1d5b00175fe9df49681a80b909d918ac6736",
"libraries/process/CHANGELOG.json": "542aaf0cd010962d016bfa5b3373dc4254f30e6a",
"libraries/process/CHANGELOG.md": "f62e1e838ef5c93626ef5f28fcf382ae06f66e2a",
"libraries/process/CHANGELOG.json": "2282e52120198dd0a084642eaa097add837a1074",
"libraries/process/CHANGELOG.md": "03bb63d3a967bd68aa6dce34111f46dbf6b2770f",
"libraries/process/README.md": "7ccf2c0f3dd5c464ba236834650e60f378ba6bba",
"libraries/process/config/rig.json": "54137d20557298060eb70cf9e72e9ce1c7b7e130",
"libraries/process/package.json": "1b388e4f15c39ae5e2a7f3bc9111472163a3d466",
"libraries/process/package.json": "f5552ba8f53f041d2bbe12010d6d910da4d384b9",
"libraries/process/src/core/exec.ts": "914b376a510f77905337efe6633aeb53c6538731",

@@ -17,9 +17,9 @@ "libraries/process/src/core/index.ts": "e02fe96e7449fd9e1d6f194a29f285c0ad68722d",

"libraries/process/src/errors/index.ts": "95971b616f7de477d74b7822fad038512f9e12c9",
"libraries/process/src/errors/message-timeout.error.ts": "cfd8f48f752f484aeae72aa6dd744c0b7998896e",
"libraries/process/src/errors/open-timeout.error.ts": "6bd2c6596dedb4bc2a537d359a94ad31f8f4f0e2",
"libraries/process/src/errors/process-configuration.error.ts": "3a58c493b48e5f95f6433341695ae002feb41e04",
"libraries/process/src/errors/process-execution.error.ts": "847bc4ace4ca56b8b124af45cd066a47eeef4007",
"libraries/process/src/errors/process-not-available.error.ts": "a4902534f8351f123a9642ebcfb621486e2dcee0",
"libraries/process/src/errors/process-spawn.error.ts": "ca15af5a1ffc16685d6a0789389c7476738f2a3b",
"libraries/process/src/errors/process-termination.error.ts": "ea6afe8549bdd2db46f820a170d0c427a1ba26da",
"libraries/process/src/errors/message-timeout.error.ts": "ef7df0b63367204c38226b2d74a0270e76e09228",
"libraries/process/src/errors/open-timeout.error.ts": "238445823e2ab2f1e4e7ff1d9b75116fd0ee4758",
"libraries/process/src/errors/process-configuration.error.ts": "ace4de70db6920fb070a685d1412931aa9d69642",
"libraries/process/src/errors/process-execution.error.ts": "eacd58cbc2bf7f743e70be08845096cadb3d9864",
"libraries/process/src/errors/process-not-available.error.ts": "380574f46867a144054b648742e2e02313bee9e7",
"libraries/process/src/errors/process-spawn.error.ts": "0c26b86ccb93728fa9d7cb277a55b24928cc0a39",
"libraries/process/src/errors/process-termination.error.ts": "e76d7178cbc3e59a150529bbfc9c6fe6be5b6691",
"libraries/process/src/index.ts": "21dcf0913ba551d5f4038d803b74b8fc0c81b08f",

@@ -26,0 +26,0 @@ "libraries/process/src/promises/close.ts": "1f712029498d20c2102a4a184de2625c42c57a71",

@@ -5,2 +5,8 @@ {

{
"version": "0.3.27",
"tag": "@nodesuite/process_v0.3.27",
"date": "Sat, 28 Jan 2023 01:11:23 GMT",
"comments": {}
},
{
"version": "0.3.26",

@@ -7,0 +13,0 @@ "tag": "@nodesuite/process_v0.3.26",

# Change Log - @nodesuite/process
This log was last generated on Thu, 05 Jan 2023 03:17:01 GMT and should not be manually modified.
This log was last generated on Sat, 28 Jan 2023 01:11:23 GMT and should not be manually modified.
## 0.3.27
Sat, 28 Jan 2023 01:11:23 GMT
_Version update only_
## 0.3.26

@@ -6,0 +11,0 @@ Thu, 05 Jan 2023 03:17:01 GMT

@@ -9,5 +9,5 @@ 'use strict';

var T=class extends Error{constructor(o,r){super(`Message listener on child process "${o}" timed out after ${r}ms.`);this.command=o,this.timeout=r;}};var I=class extends Error{constructor(o,r){super(`Open state listener on child process "${o}" timed out after ${r}ms.`);this.command=o,this.timeout=r;}};var P=class extends Error{constructor(o,r){super(`Encountered an error while configuring child process: ${JSON.stringify(o)}`,{cause:r});this.config=o;}};var y=class extends Error{constructor(o,r){super(`Encountered an error executing child process ${o}: ${r}`);this.command=o;}};var f=class extends Error{constructor(o="at unspecified executable path"){super(`Encountered an error spawning child process ${o}.`);this.command=o;}};var k=class extends Error{constructor(o,r){super(`Encountered an error spawning child process ${o}: ${r}`);this.command=o;}};var N=class extends Error{constructor(o,r){super(`Encountered an error killing child process ${o}: ${r.message}`,{cause:r});this.command=o,this.error=r;}};var C=e=>{try{let t=(n="",p=[])=>[...[n,...p].map(a=>a.trim()).filter(a=>!!a)],o=(n={})=>({...process.env,...n}),r=({stdio:n,...p})=>({...p,stdio:n??[process.stdin,"pipe","pipe"],env:o(p.env)}),i=t(e.command,e.args),s=r(e.options);return {args:i,options:s}}catch(t){throw new P(e,t)}};var _=e=>new Promise(t=>setTimeout(t,e));var V=util.promisify(child_process.exec),D=child_process.spawn,Oo=child_process.fork;var Co=async(e,t=[],o={})=>{let r=C({command:e,args:t,options:o}),{stdout:i,stderr:s}=await V(r.args.join(" "),r.options);if(s)throw new y(e,s);return i??""};var [d,E,z,c,R,j,G,u]=["close","data","disconnect","error","exit","message","open","spawn"],Go=[d,E,z,c,R,j,G,u],_o=[d,R];var [J,b,Z,Q]=["exec","spawn","fork","kill"],ho=[J,b,Z,Q];var [q,ee,oe,re,te]=["string","object","number","boolean","bigint"],vo=[q,ee,oe,re,te];var [se,ne,ie,pe,ce,me,de,Se,Ee,ae,le,fe,ue,Oe,xe,ge,Te,Ie,Pe,ye,O,Ne,Ce,Re,Ge,_e,be,he,we,ve,Le,Ae,ke,Ve,De,Ue]=["SIGALRM","SIGBUS","SIGCHLD","SIGCONT","SIGFPE","SIGHUP","SIGILL","SIGINT","SIGIO","SIGIOT","SIGKILL","SIGPIPE","SIGPOLL","SIGPROF","SIGPWR","SIGQUIT","SIGSEGV","SIGSTKFLT","SIGSTOP","SIGSYS","SIGTERM","SIGTRAP","SIGTSTP","SIGTTIN","SIGTTOU","SIGUNUSED","SIGURG","SIGUSR1","SIGUSR2","SIGVTALRM","SIGWINCH","SIGXCPU","SIGXFSZ","SIGBREAK","SIGLOST","SIGINFO"],Ao=[se,ne,ie,pe,ce,me,de,Se,Ee,ae,le,fe,ue,Oe,xe,ge,Te,Ie,Pe,ye,O,Ne,Ce,Re,Ge,_e,be,he,we,ve,Le,Ae,ke,Ve,De,Ue];var [h,w,Fe,v]=["opening","opened","closing","closed"],Vo=[h,w,Fe,v];var [Me,$e,Be,Ke,We]=["overlapped","pipe","ignore","inherit","ipc"],Uo=[Me,$e,Be,Ke,We],[He,Xe,Ye,Fo]=["stdin","stdout","stderr","stdio"],Mo=[He],$o=[Xe,Ye];var Ko=e=>typeof e=="object"&&!!e&&Object.keys(e).includes("cmd");var ir=async(e,t={})=>{try{let{timeout:o,event:r,signal:i}={timeout:5e3,event:R,signal:O,...t};if(e.killed)return;if(e.killing)return Promise.race([e.killing,_(o)]);e.killing=Promise.race([new Promise(s=>{for(let n=0;n<100;n++)e.killed&&s();}),new Promise((s,n)=>{e.once(r,()=>{s();}),e.once(c,()=>{n();}),e.kill(i),e.killed&&s();}),_(o)]),await e.killing,e.removeAllListeners();}catch(o){throw new N(e.command,o)}};var U=e=>()=>new Promise((t,o)=>{e.killed&&t({code:void 0,signal:e.signalCode??void 0}),e.once(d,(r,i)=>{t({code:r,signal:i});}),e.once(c,r=>{o({error:r});});});var F=(e,t)=>(o,r=9e4)=>new Promise((i,s)=>{var S,x;let n=setTimeout(()=>{let l=new T(t??e.pid,r);console.warn(l.message),s(l);},r),p=(l,g)=>{s({code:l,signal:g});},a=l=>{s({error:l});},m=l=>{var L,A;let g=l.toString().trim();!o(g)||(clearTimeout(n),(L=e.stdout)==null||L.off(E,m),(A=e.stderr)==null||A.off(E,m),e.off(d,p),e.off(c,a),i(g));};(S=e.stdout)==null||S.on(E,m),(x=e.stderr)==null||x.on(E,m),e.once(d,p),e.once(c,a);});var M=(e,t)=>async o=>new Promise((r,i)=>{e.pid&&r(),e.killed&&i("Cannot await open on killed process.");let s=p=>{i(p);},n=()=>{e.removeListener(c,s),r();};e.once(c,s),e.once(u,n),o&&setTimeout(()=>{let p=new I(t??e.pid,o);console.warn(p.message),i(p);},o);});var $=(e,{command:t,method:o,filters:r})=>{let i=new timer.Timer,s=Object.assign(e,{command:t,method:o,timer:i,filters:r,killing:void 0,state:h,untilOpen:M(e,t),untilClose:U(e),untilMessage:F(e,t)});s.once(u,()=>{s.state=w,console.debug(`Process "${t}" opened.`);}),s.once(d,()=>{s.state=v,console.debug(`Process "${t}" closed.`);}),s.on(c,m=>{console.debug(`Process "${t}" error: ${m.message}`),s.killed||s.kill(O);});let n=m=>{let S=m.toString().trim();return !s.filters||s.filters.every(x=>!S.includes(x))?S:void 0},p=m=>{let S=n(m);S&&process.stdout.write(`${S}
`);},a=m=>{let S=n(m);S&&process.stderr.write(`${S}
`);};return s.stdout&&s.stdout.on(E,p),s.stderr&&s.stderr.on(E,a),s};var K=class extends je{constructor(){super(...arguments);this.#o=defer.defer();this.#e=defer.defer();this.#r=!1;this.#t=!1;}#o;#e;#r;#t;get command(){return this._command}get pid(){return this.process().pid}process(){if(!this._process)throw new f(this.command);return this._process}untilClose(){return this.#e.untilResolved()}_setOpen(o){return this.#r?this.#o.promise:(this.once(G,()=>this.#o.resolve()),o())}_setClose(o){return this.#t?this.#e.promise:(this.once(d,()=>this.#e.resolve()),o())}_completeOpen(){if(this._process)this.emit(G),this.#o.resolve();else throw new f(this.command)}_completeClose(){if(this._process)this._process.timer.stop(),this.emit(d),this.#e.resolve(),this._process.removeAllListeners(),this.removeAllListeners();else throw new f(this.command)}};var vr=async(e,t=[],{filters:o,...r}={})=>{let i=C({args:t,options:r}),s=b,n=$(D(e,i.args,i.options),{command:e,method:s,filters:o??[]});return await n.untilOpen(),n};
var T=class extends Error{constructor(o,r){super(`Message listener on child process "${o}" timed out after ${r}ms.`);this.name="MessageTimeoutError",this.command=o,this.timeout=r;}};var P=class extends Error{constructor(o,r){super(`Open state listener on child process "${o}" timed out after ${r}ms.`);this.name="OpenTimeoutError",this.command=o,this.timeout=r;}};var I=class extends Error{constructor(o,r){super(`Encountered an error while configuring child process: ${JSON.stringify(o)}`,{cause:r});this.name="ProcessConfigurationError",this.config=o;}};var y=class extends Error{constructor(o,r){super(`Encountered an error executing child process ${o}: ${r}`);this.name="ProcessExecutionError",this.command=o;}};var f=class extends Error{constructor(o="at unspecified executable path"){super(`Encountered an error spawning child process ${o}.`);this.name="ProcessNotAvailableError",this.command=o;}};var k=class extends Error{constructor(o,r){super(`Encountered an error spawning child process ${o}: ${r}`);this.name="ProcessSpawnError",this.command=o;}};var N=class extends Error{constructor(o,r){super(`Encountered an error killing child process ${o}: ${r.message}`,{cause:r});this.name="ProcessTerminationError",this.command=o,this.error=r;}};var C=e=>{try{let t=(n="",p=[])=>[...[n,...p].map(E=>E.trim()).filter(E=>!!E)],o=(n={})=>({...process.env,...n}),r=({stdio:n,...p})=>({...p,stdio:n??[process.stdin,"pipe","pipe"],env:o(p.env)}),i=t(e.command,e.args),s=r(e.options);return {args:i,options:s}}catch(t){throw new I(e,t)}};var _=e=>new Promise(t=>setTimeout(t,e));var V=util.promisify(child_process.exec),D=child_process.spawn,Oo=child_process.fork;var Co=async(e,t=[],o={})=>{let r=C({command:e,args:t,options:o}),{stdout:i,stderr:s}=await V(r.args.join(" "),r.options);if(s)throw new y(e,s);return i??""};var [d,a,z,c,R,j,G,u]=["close","data","disconnect","error","exit","message","open","spawn"],Go=[d,a,z,c,R,j,G,u],_o=[d,R];var [J,b,Z,Q]=["exec","spawn","fork","kill"],ho=[J,b,Z,Q];var [q,ee,oe,re,te]=["string","object","number","boolean","bigint"],vo=[q,ee,oe,re,te];var [se,ne,ie,pe,ce,me,de,Se,ae,Ee,le,fe,ue,Oe,xe,ge,Te,Pe,Ie,ye,O,Ne,Ce,Re,Ge,_e,be,he,we,ve,Le,Ae,ke,Ve,De,Ue]=["SIGALRM","SIGBUS","SIGCHLD","SIGCONT","SIGFPE","SIGHUP","SIGILL","SIGINT","SIGIO","SIGIOT","SIGKILL","SIGPIPE","SIGPOLL","SIGPROF","SIGPWR","SIGQUIT","SIGSEGV","SIGSTKFLT","SIGSTOP","SIGSYS","SIGTERM","SIGTRAP","SIGTSTP","SIGTTIN","SIGTTOU","SIGUNUSED","SIGURG","SIGUSR1","SIGUSR2","SIGVTALRM","SIGWINCH","SIGXCPU","SIGXFSZ","SIGBREAK","SIGLOST","SIGINFO"],Ao=[se,ne,ie,pe,ce,me,de,Se,ae,Ee,le,fe,ue,Oe,xe,ge,Te,Pe,Ie,ye,O,Ne,Ce,Re,Ge,_e,be,he,we,ve,Le,Ae,ke,Ve,De,Ue];var [h,w,Fe,v]=["opening","opened","closing","closed"],Vo=[h,w,Fe,v];var [Me,$e,Be,Ke,We]=["overlapped","pipe","ignore","inherit","ipc"],Uo=[Me,$e,Be,Ke,We],[He,Xe,Ye,Fo]=["stdin","stdout","stderr","stdio"],Mo=[He],$o=[Xe,Ye];var Ko=e=>typeof e=="object"&&!!e&&Object.keys(e).includes("cmd");var ir=async(e,t={})=>{try{let{timeout:o,event:r,signal:i}={timeout:5e3,event:R,signal:O,...t};if(e.killed)return;if(e.killing)return Promise.race([e.killing,_(o)]);e.killing=Promise.race([new Promise(s=>{for(let n=0;n<100;n++)e.killed&&s();}),new Promise((s,n)=>{e.once(r,()=>{s();}),e.once(c,()=>{n();}),e.kill(i),e.killed&&s();}),_(o)]),await e.killing,e.removeAllListeners();}catch(o){throw new N(e.command,o)}};var U=e=>()=>new Promise((t,o)=>{e.killed&&t({code:void 0,signal:e.signalCode??void 0}),e.once(d,(r,i)=>{t({code:r,signal:i});}),e.once(c,r=>{o({error:r});});});var F=(e,t)=>(o,r=9e4)=>new Promise((i,s)=>{var S,x;let n=setTimeout(()=>{let l=new T(t??e.pid,r);console.warn(l.message),s(l);},r),p=(l,g)=>{s({code:l,signal:g});},E=l=>{s({error:l});},m=l=>{var L,A;let g=l.toString().trim();!o(g)||(clearTimeout(n),(L=e.stdout)==null||L.off(a,m),(A=e.stderr)==null||A.off(a,m),e.off(d,p),e.off(c,E),i(g));};(S=e.stdout)==null||S.on(a,m),(x=e.stderr)==null||x.on(a,m),e.once(d,p),e.once(c,E);});var M=(e,t)=>async o=>new Promise((r,i)=>{e.pid&&r(),e.killed&&i("Cannot await open on killed process.");let s=p=>{i(p);},n=()=>{e.removeListener(c,s),r();};e.once(c,s),e.once(u,n),o&&setTimeout(()=>{let p=new P(t??e.pid,o);console.warn(p.message),i(p);},o);});var $=(e,{command:t,method:o,filters:r})=>{let i=new timer.Timer,s=Object.assign(e,{command:t,method:o,timer:i,filters:r,killing:void 0,state:h,untilOpen:M(e,t),untilClose:U(e),untilMessage:F(e,t)});s.once(u,()=>{s.state=w,console.debug(`Process "${t}" opened.`);}),s.once(d,()=>{s.state=v,console.debug(`Process "${t}" closed.`);}),s.on(c,m=>{console.debug(`Process "${t}" error: ${m.message}`),s.killed||s.kill(O);});let n=m=>{let S=m.toString().trim();return !s.filters||s.filters.every(x=>!S.includes(x))?S:void 0},p=m=>{let S=n(m);S&&process.stdout.write(`${S}
`);},E=m=>{let S=n(m);S&&process.stderr.write(`${S}
`);};return s.stdout&&s.stdout.on(a,p),s.stderr&&s.stderr.on(a,E),s};var K=class extends je{constructor(){super(...arguments);this.#o=defer.defer();this.#e=defer.defer();this.#r=!1;this.#t=!1;}#o;#e;#r;#t;get command(){return this._command}get pid(){return this.process().pid}process(){if(!this._process)throw new f(this.command);return this._process}untilClose(){return this.#e.untilResolved()}_setOpen(o){return this.#r?this.#o.promise:(this.once(G,()=>this.#o.resolve()),o())}_setClose(o){return this.#t?this.#e.promise:(this.once(d,()=>this.#e.resolve()),o())}_completeOpen(){if(this._process)this.emit(G),this.#o.resolve();else throw new f(this.command)}_completeClose(){if(this._process)this._process.timer.stop(),this.emit(d),this.#e.resolve(),this._process.removeAllListeners(),this.removeAllListeners();else throw new f(this.command)}};var vr=async(e,t=[],{filters:o,...r}={})=>{let i=C({args:t,options:r}),s=b,n=$(D(e,i.args,i.options),{command:e,method:s,filters:o??[]});return await n.untilOpen(),n};

@@ -27,7 +27,7 @@ exports.BIGINT_TYPE = te;

exports.OBJECT_TYPE = ee;
exports.OpenTimeoutError = I;
exports.OpenTimeoutError = P;
exports.PROCESS_CLOSED_STATE = v;
exports.PROCESS_CLOSE_EVENT = d;
exports.PROCESS_CLOSING_STATE = Fe;
exports.PROCESS_DATA_EVENT = E;
exports.PROCESS_DATA_EVENT = a;
exports.PROCESS_DISCONNECT_EVENT = z;

@@ -41,3 +41,3 @@ exports.PROCESS_ERROR_EVENT = c;

exports.PROCESS_SPAWN_EVENT = u;
exports.ProcessConfigurationError = P;
exports.ProcessConfigurationError = I;
exports.ProcessExecutionError = y;

@@ -58,4 +58,4 @@ exports.ProcessManager = K;

exports.SIGINT = Se;
exports.SIGIO = Ee;
exports.SIGIOT = ae;
exports.SIGIO = ae;
exports.SIGIOT = Ee;
exports.SIGKILL = le;

@@ -69,4 +69,4 @@ exports.SIGLOST = De;

exports.SIGSEGV = Te;
exports.SIGSTKFLT = Ie;
exports.SIGSTOP = Pe;
exports.SIGSTKFLT = Pe;
exports.SIGSTOP = Ie;
exports.SIGSYS = ye;

@@ -115,2 +115,2 @@ exports.SIGTERM = O;

//# sourceMappingURL=out.js.map
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMvbWVzc2FnZS10aW1lb3V0LmVycm9yLnRzIiwiLi4vc3JjL2Vycm9ycy9vcGVuLXRpbWVvdXQuZXJyb3IudHMiLCIuLi9zcmMvZXJyb3JzL3Byb2Nlc3MtY29uZmlndXJhdGlvbi5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy1leGVjdXRpb24uZXJyb3IudHMiLCIuLi9zcmMvZXJyb3JzL3Byb2Nlc3Mtbm90LWF2YWlsYWJsZS5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy1zcGF3bi5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy10ZXJtaW5hdGlvbi5lcnJvci50cyIsIi4uL3NyYy9zdXBwb3J0L2NvbmZpZ3VyZS50cyIsIi4uL3NyYy9zdXBwb3J0L2RlbGF5LnRzIiwiLi4vc3JjL3N1cHBvcnQvdmVuZG9yLnRzIiwiLi4vc3JjL2NvcmUvZXhlYy50cyIsIi4uL3NyYy90eXBlcy9ldmVudHMudHMiLCIuLi9zcmMvdHlwZXMvbWV0aG9kcy50cyIsIi4uL3NyYy90eXBlcy9zZXJpYWxpemFibGUudHMiLCIuLi9zcmMvdHlwZXMvc2lnbmFscy50cyIsIi4uL3NyYy90eXBlcy9zdGF0ZXMudHMiLCIuLi9zcmMvdHlwZXMvc3RkaW8udHMiLCIuLi9zcmMvdHlwZXMvdmVuZG9yLnRzIiwiLi4vc3JjL2NvcmUva2lsbC50cyIsIi4uL3NyYy9jb3JlL21hbmFnZS50cyIsIi4uL3NyYy9wcm9taXNlcy9jbG9zZS50cyIsIi4uL3NyYy9wcm9taXNlcy9tZXNzYWdlLnRzIiwiLi4vc3JjL3Byb21pc2VzL29wZW4udHMiLCIuLi9zcmMvY29yZS9tYW5hZ2VyLnRzIiwiLi4vc3JjL2NvcmUvc3Bhd24udHMiXSwibmFtZXMiOlsiTWVzc2FnZVRpbWVvdXRFcnJvciIsImNvbW1hbmQiLCJ0aW1lb3V0IiwiT3BlblRpbWVvdXRFcnJvciIsIlByb2Nlc3NDb25maWd1cmF0aW9uRXJyb3IiLCJjb25maWciLCJlcnJvciIsIlByb2Nlc3NFeGVjdXRpb25FcnJvciIsInN0ZGVyciIsIlByb2Nlc3NOb3RBdmFpbGFibGVFcnJvciIsIlByb2Nlc3NTcGF3bkVycm9yIiwiUHJvY2Vzc1Rlcm1pbmF0aW9uRXJyb3IiLCJjb25maWd1cmUiLCJwYXJzZUFyZ3MiLCJhcmdzIiwidmFsdWUiLCJtZXJnZUVudiIsImVudiIsInBhcnNlT3B0aW9ucyIsInN0ZGlvIiwib3B0aW9ucyIsImRlbGF5IiwibXMiLCJyZXNvbHZlIiwiZXhlYyIsImZvcmsiLCJzcGF3biIsInByb21pc2lmeSIsIm5vZGVFeGVjIiwibm9kZVNwYXduIiwibm9kZUZvcmsiLCJzdGRvdXQiLCJQUk9DRVNTX0NMT1NFX0VWRU5UIiwiUFJPQ0VTU19EQVRBX0VWRU5UIiwiUFJPQ0VTU19ESVNDT05ORUNUX0VWRU5UIiwiUFJPQ0VTU19FUlJPUl9FVkVOVCIsIlBST0NFU1NfRVhJVF9FVkVOVCIsIlBST0NFU1NfTUVTU0FHRV9FVkVOVCIsIlBST0NFU1NfT1BFTl9FVkVOVCIsIlBST0NFU1NfU1BBV05fRVZFTlQiLCJwcm9jZXNzRXZlbnRzIiwiY2xvc2VFdmVudHMiLCJFWEVDIiwiU1BBV04iLCJGT1JLIiwiS0lMTCIsImV4ZWN1dGlvbk1ldGhvZHMiLCJTVFJJTkdfVFlQRSIsIk9CSkVDVF9UWVBFIiwiTlVNQkVSX1RZUEUiLCJCT09MRUFOX1RZUEUiLCJCSUdJTlRfVFlQRSIsInNlcmlhbGl6YWJsZVR5cGVzIiwiU0lHQUxSTSIsIlNJR0JVUyIsIlNJR0NITEQiLCJTSUdDT05UIiwiU0lHRlBFIiwiU0lHSFVQIiwiU0lHSUxMIiwiU0lHSU5UIiwiU0lHSU8iLCJTSUdJT1QiLCJTSUdLSUxMIiwiU0lHUElQRSIsIlNJR1BPTEwiLCJTSUdQUk9GIiwiU0lHUFdSIiwiU0lHUVVJVCIsIlNJR1NFR1YiLCJTSUdTVEtGTFQiLCJTSUdTVE9QIiwiU0lHU1lTIiwiU0lHVEVSTSIsIlNJR1RSQVAiLCJTSUdUU1RQIiwiU0lHVFRJTiIsIlNJR1RUT1UiLCJTSUdVTlVTRUQiLCJTSUdVUkciLCJTSUdVU1IxIiwiU0lHVVNSMiIsIlNJR1ZUQUxSTSIsIlNJR1dJTkNIIiwiU0lHWENQVSIsIlNJR1hGU1oiLCJTSUdCUkVBSyIsIlNJR0xPU1QiLCJTSUdJTkZPIiwic2lnbmFscyIsIlBST0NFU1NfT1BFTklOR19TVEFURSIsIlBST0NFU1NfT1BFTkVEX1NUQVRFIiwiUFJPQ0VTU19DTE9TSU5HX1NUQVRFIiwiUFJPQ0VTU19DTE9TRURfU1RBVEUiLCJwcm9jZXNzU3RhdGVzIiwiSU9fT1ZFUkxBUFBFRCIsIklPX1BJUEUiLCJJT19JR05PUkUiLCJJT19JTkhFUklUIiwiSU9fSVBDIiwiaW9UeXBlcyIsIlNURElOIiwiU1RET1VUIiwiU1RERVJSIiwiU1RESU8iLCJpbnB1dFR5cGVzIiwib3V0cHV0VHlwZXMiLCJpc1Byb2Nlc3NFcnJvciIsImtpbGwiLCJjaGlsZFByb2Nlc3MiLCJldmVudCIsInNpZ25hbCIsImkiLCJyZWplY3QiLCJUaW1lciIsInByb21pc2lmeUNsb3NlIiwiY29kZSIsInByb21pc2lmeU1lc3NhZ2UiLCJ2YWxpZGF0ZSIsIl9hIiwiX2IiLCJ0aW1lciIsIm9uQ2xvc2UiLCJvbkVycm9yIiwib25EYXRhIiwiZGF0YSIsIm1lc3NhZ2UiLCJwcm9taXNpZnlPcGVuIiwib25TcGF3biIsIm1hbmFnZSIsIm5hdGl2ZUNoaWxkUHJvY2VzcyIsIm1ldGhvZCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJvblN0ZG91dCIsIm9uU3RkZXJyIiwiRXZlbnRFbWl0dGVyIiwiZGVmZXIiLCJQcm9jZXNzTWFuYWdlciIsIiNvcGVuZXIiLCIjY2xvc2VyIiwiI2lzT3BlbmluZyIsIiNpc0Nsb3NpbmciLCJvcGVuIiwiY2xvc2UiXSwibWFwcGluZ3MiOiJBQUtPLElBQU1BLEVBQU4sY0FBa0MsS0FBTSxDQUl0QyxZQUFZQyxFQUFzQ0MsRUFBaUIsQ0FDeEUsTUFDRSxzQ0FBc0NELHNCQUE0QkMsTUFDcEUsRUFDQSxLQUFLLFFBQVVELEVBQ2YsS0FBSyxRQUFVQyxDQUNqQixDQUNGLEVD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Z2UgZG9lcyBub3QgcmV0dXJuIGZyb20gY2hpbGQgcHJvY2VzcyB3aXRoaW4gZ2l2ZW4gdGltZW91dC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXNzYWdlVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHB1YmxpYyByZWFkb25seSB0aW1lb3V0OiBudW1iZXJcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICBzdXBlcihcbiAgICAgIGBNZXNzYWdlIGxpc3RlbmVyIG9uIGNoaWxkIHByb2Nlc3MgXCIke2NvbW1hbmR9XCIgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tcy5gXG4gICAgKVxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gIH1cbn1cbiIsIi8qKlxuICogVGhyb3dzIHdoZW4gYSBjaGlsZCBwcm9jZXNzIGRvZXMgbm90IG9wZW4gd2l0aGluIGdpdmVuIHRpbWVvdXQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT3BlblRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdGltZW91dDogbnVtYmVyKSB7XG4gICAgc3VwZXIoXG4gICAgICBgT3BlbiBzdGF0ZSBsaXN0ZW5lciBvbiBjaGlsZCBwcm9jZXNzIFwiJHtjb21tYW5kfVwiIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXMuYFxuICAgIClcbiAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFByb2Nlc3NDb25maWcgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0NvbmZpZ3VyYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogUGFydGlhbDxQcm9jZXNzQ29uZmlnPE9wdGlvbnM+PlxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IFBhcnRpYWw8UHJvY2Vzc0NvbmZpZzxPcHRpb25zPj4sIGVycm9yOiBFcnJvcikge1xuICAgIHN1cGVyKFxuICAgICAgYEVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGNvbmZpZ3VyaW5nIGNoaWxkIHByb2Nlc3M6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKX1gLFxuICAgICAge1xuICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgIH1cbiAgICApXG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFByb2Nlc3NFeGVjdXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZ1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb21tYW5kOiBzdHJpbmcsIHN0ZGVycj86IHN0cmluZykge1xuICAgIHN1cGVyKGBFbmNvdW50ZXJlZCBhbiBlcnJvciBleGVjdXRpbmcgY2hpbGQgcHJvY2VzcyAke2NvbW1hbmR9OiAke3N0ZGVycn1gKVxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFByb2Nlc3NOb3RBdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZ1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb21tYW5kOiBzdHJpbmcgPSBcImF0IHVuc3BlY2lmaWVkIGV4ZWN1dGFibGUgcGF0aFwiKSB7XG4gICAgc3VwZXIoYEVuY291bnRlcmVkIGFuIGVycm9yIHNwYXduaW5nIGNoaWxkIHByb2Nlc3MgJHtjb21tYW5kfS5gKVxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFByb2Nlc3NTcGF3bkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZywgc3RkZXJyPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEVuY291bnRlcmVkIGFuIGVycm9yIHNwYXduaW5nIGNoaWxkIHByb2Nlc3MgJHtjb21tYW5kfTogJHtzdGRlcnJ9YClcbiAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kXG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBQcm9jZXNzVGVybWluYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IEVycm9yXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgZXJyb3I6IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBgRW5jb3VudGVyZWQgYW4gZXJyb3Iga2lsbGluZyBjaGlsZCBwcm9jZXNzICR7Y29tbWFuZH06ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgIClcbiAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kXG4gICAgdGhpcy5lcnJvciA9IGVycm9yXG4gIH1cbn1cbiIsImltcG9ydCB7IFByb2Nlc3NDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB0eXBlIHtcbiAgRXhlY09wdGlvbnMsXG4gIEZvcmtPcHRpb25zLFxuICBQcm9jZXNzQ29uZmlnLFxuICBQcm9jZXNzRW52LFxuICBTcGF3bk9wdGlvbnNcbn0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBQcmVwYXJlcyBjaGlsZCBwcm9jZXNzIGFyZ3VtZW50cyBhbmQgb3B0aW9ucyBwcmlvciB0byBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFVzZXIgaW5wdXQgYXMgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maWd1cmUgPSA8TyBleHRlbmRzIFNwYXduT3B0aW9ucyB8IEZvcmtPcHRpb25zIHwgRXhlY09wdGlvbnM+KFxuICBjb25maWc6IFByb2Nlc3NDb25maWc8Tz5cbik6IFByb2Nlc3NDb25maWc8Tz4gPT4ge1xuICB0cnkge1xuICAgIC8vIFN0cmlwcyBlbXB0eSBlbGVtZW50cyBhbmQgdHJpbXMgYXJncyBhcnJheS5cbiAgICBjb25zdCBwYXJzZUFyZ3MgPSAoY29tbWFuZDogc3RyaW5nID0gXCJcIiwgYXJnczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdID0+IFtcbiAgICAgIC4uLltjb21tYW5kLCAuLi5hcmdzXVxuICAgICAgICAubWFwKCh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlKVxuICAgIF1cblxuICAgIC8vIE1lcmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBjdXJyZW50IHByb2Nlc3Mgd2l0aCBhbnkgcHJvdmlkZWQgYnkgY2hpbGQgcHJvY2VzcyBvcHRpb25zLlxuICAgIGNvbnN0IG1lcmdlRW52ID0gKGVudjogUHJvY2Vzc0VudiA9IHt9KTogUHJvY2Vzc0VudiA9PiAoe1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5lbnZcbiAgICB9KVxuXG4gICAgLy8gTWVyZ2VzIHByb2Nlc3Mgb3B0aW9ucyB3aXRoIGN1cnJlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IDxPIGV4dGVuZHMgU3Bhd25PcHRpb25zIHwgRm9ya09wdGlvbnMgfCBFeGVjT3B0aW9ucz4oe1xuICAgICAgc3RkaW8sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTogTyk6IE8gPT5cbiAgICAgICh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0ZGlvOiBzdGRpbyA/PyBbcHJvY2Vzcy5zdGRpbiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgZW52OiBtZXJnZUVudihvcHRpb25zLmVudilcbiAgICAgIH0gYXMgTylcblxuICAgIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gcGFyc2VBcmdzKGNvbmZpZy5jb21tYW5kLCBjb25maWcuYXJncylcbiAgICBjb25zdCBvcHRpb25zOiBPID0gcGFyc2VPcHRpb25zKGNvbmZpZy5vcHRpb25zKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRpb25zXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQcm9jZXNzQ29uZmlndXJhdGlvbkVycm9yKGNvbmZpZywgZXJyb3IgYXMgRXJyb3IpXG4gIH1cbn1cbiIsIi8qKlxuICogU2ltcGxlIHRpbWVvdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1zIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT5cbiAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuIiwiaW1wb3J0IHsgZXhlYywgZm9yaywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIlxuXG5pbXBvcnQgdHlwZSB7IE5vZGVFeGVjLCBOb2RlRm9yaywgTm9kZVNwYXduIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBQcm9taXNpZmllZCBOb2RlIGV4ZWMgbWV0aG9kLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3Qgbm9kZUV4ZWM6IE5vZGVFeGVjID0gcHJvbWlzaWZ5KGV4ZWMpXG5cbi8qKlxuICogT3JpZ2luYWwgbm9kZSBzcGF3biBtZXRob2QuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBub2RlU3Bhd246IE5vZGVTcGF3biA9IHNwYXduXG5cbi8qKlxuICogT3JpZ2luYWwgbm9kZSBmb3JrIG1ldGhvZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IG5vZGVGb3JrOiBOb2RlRm9yayA9IGZvcmtcbiIsImltcG9ydCB7IFByb2Nlc3NFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIlxuaW1wb3J0IHsgY29uZmlndXJlLCBub2RlRXhlYyB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB0eXBlIHsgRXhlY09wdGlvbnMsIFByb2Nlc3NDb25maWcgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFByb3ZpZGUgYXN5bmMgY2hpbGQgcHJvY2VzcyBleGVjdXRvci5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhyb3dzIGVycm9yIG9uIGBzdGRlcnJgIG91dHB1dCB1bmxlc3Mgc3VwcHJlc3NlZC5cbiAqIElmIHByb2Nlc3MgaXMgbG9uZy1ydW5uaW5nLCBkbyBub3QgYXdhaXQgdGhlIFByb21pc2UuXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBjdXJyZW50IHByb2Nlc3MgYXJlIGluamVjdGVkIHRocm91Z2ggdG8gY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjID0gYXN5bmMgKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIENvbmZpZ3VyZSBhcmdzIGFuZCBvcHRpb25zLlxuICBjb25zdCBjb25maWc6IFByb2Nlc3NDb25maWc8RXhlY09wdGlvbnM+ID0gY29uZmlndXJlKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9uc1xuICB9KVxuXG4gIC8vIEF3YWl0IGNoaWxkIHByb2Nlc3MgZXhlY3V0aW9uLlxuICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCBub2RlRXhlYyhcbiAgICBjb25maWcuYXJncy5qb2luKGAgYCksXG4gICAgY29uZmlnLm9wdGlvbnNcbiAgKVxuXG4gIC8vIENoZWNrIHN0ZGVyciBmb3IgYW55IGVycm9yIG1lc3NhZ2VzLlxuICBpZiAoc3RkZXJyKSB7XG4gICAgdGhyb3cgbmV3IFByb2Nlc3NFeGVjdXRpb25FcnJvcihjb21tYW5kLCBzdGRlcnIpXG4gIH1cblxuICAvLyBSZXR1cm4gc3Rkb3V0LlxuICByZXR1cm4gc3Rkb3V0ID8/IFwiXCJcbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgW1xuICBQUk9DRVNTX0NMT1NFX0VWRU5ULFxuICBQUk9DRVNTX0RBVEFfRVZFTlQsXG4gIFBST0NFU1NfRElTQ09OTkVDVF9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVCxcbiAgUFJPQ0VTU19FWElUX0VWRU5ULFxuICBQUk9DRVNTX01FU1NBR0VfRVZFTlQsXG4gIFBST0NFU1NfT1BFTl9FVkVOVCxcbiAgUFJPQ0VTU19TUEFXTl9FVkVOVFxuXSA9IFtcbiAgXCJjbG9zZVwiLFxuICBcImRhdGFcIixcbiAgXCJkaXNjb25uZWN0XCIsXG4gIFwiZXJyb3JcIixcbiAgXCJleGl0XCIsXG4gIFwibWVzc2FnZVwiLFxuICBcIm9wZW5cIixcbiAgXCJzcGF3blwiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0V2ZW50cyA9IFtcbiAgUFJPQ0VTU19DTE9TRV9FVkVOVCxcbiAgUFJPQ0VTU19EQVRBX0VWRU5ULFxuICBQUk9DRVNTX0RJU0NPTk5FQ1RfRVZFTlQsXG4gIFBST0NFU1NfRVJST1JfRVZFTlQsXG4gIFBST0NFU1NfRVhJVF9FVkVOVCxcbiAgUFJPQ0VTU19NRVNTQUdFX0VWRU5ULFxuICBQUk9DRVNTX09QRU5fRVZFTlQsXG4gIFBST0NFU1NfU1BBV05fRVZFTlRcbl0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByb2Nlc3NFdmVudCA9IHR5cGVvZiBwcm9jZXNzRXZlbnRzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZUV2ZW50cyA9IFtQUk9DRVNTX0NMT1NFX0VWRU5ULCBQUk9DRVNTX0VYSVRfRVZFTlRdIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDbG9zZUV2ZW50ID0gdHlwZW9mIGNsb3NlRXZlbnRzW251bWJlcl1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgW0VYRUMsIFNQQVdOLCBGT1JLLCBLSUxMXSA9IFtcbiAgXCJleGVjXCIsXG4gIFwic3Bhd25cIixcbiAgXCJmb3JrXCIsXG4gIFwia2lsbFwiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZXhlY3V0aW9uTWV0aG9kcyA9IFtFWEVDLCBTUEFXTiwgRk9SSywgS0lMTF0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbk1ldGhvZCA9IHR5cGVvZiBleGVjdXRpb25NZXRob2RzW251bWJlcl1cbiIsIi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBbXG4gIFNUUklOR19UWVBFLFxuICBPQkpFQ1RfVFlQRSxcbiAgTlVNQkVSX1RZUEUsXG4gIEJPT0xFQU5fVFlQRSxcbiAgQklHSU5UX1RZUEVcbl0gPSBbXCJzdHJpbmdcIiwgXCJvYmplY3RcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiYmlnaW50XCJdIGFzIGNvbnN0XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemFibGVUeXBlcyA9IFtcbiAgU1RSSU5HX1RZUEUsXG4gIE9CSkVDVF9UWVBFLFxuICBOVU1CRVJfVFlQRSxcbiAgQk9PTEVBTl9UWVBFLFxuICBCSUdJTlRfVFlQRVxuXSBhcyBjb25zdFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemFibGVUeXBlID0gdHlwZW9mIHNlcmlhbGl6YWJsZVR5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVUeXBlcyB7XG4gIHN0cmluZzogc3RyaW5nXG4gIG9iamVjdDogb2JqZWN0XG4gIG51bWJlcjogbnVtYmVyXG4gIGJvb2xlYW46IGJvb2xlYW5cbiAgYmlnaW50OiBib29sZWFuXG59XG4iLCJleHBvcnQgY29uc3QgW1xuICBTSUdBTFJNLFxuICBTSUdCVVMsXG4gIFNJR0NITEQsXG4gIFNJR0NPTlQsXG4gIFNJR0ZQRSxcbiAgU0lHSFVQLFxuICBTSUdJTEwsXG4gIFNJR0lOVCxcbiAgU0lHSU8sXG4gIFNJR0lPVCxcbiAgU0lHS0lMTCxcbiAgU0lHUElQRSxcbiAgU0lHUE9MTCxcbiAgU0lHUFJPRixcbiAgU0lHUFdSLFxuICBTSUdRVUlULFxuICBTSUdTRUdWLFxuICBTSUdTVEtGTFQsXG4gIFNJR1NUT1AsXG4gIFNJR1NZUyxcbiAgU0lHVEVSTSxcbiAgU0lHVFJBUCxcbiAgU0lHVFNUUCxcbiAgU0lHVFRJTixcbiAgU0lHVFRPVSxcbiAgU0lHVU5VU0VELFxuICBTSUdVUkcsXG4gIFNJR1VTUjEsXG4gIFNJR1VTUjIsXG4gIFNJR1ZUQUxSTSxcbiAgU0lHV0lOQ0gsXG4gIFNJR1hDUFUsXG4gIFNJR1hGU1osXG4gIFNJR0JSRUFLLFxuICBTSUdMT1NULFxuICBTSUdJTkZPXG5dID0gW1xuICBcIlNJR0FMUk1cIixcbiAgXCJTSUdCVVNcIixcbiAgXCJTSUdDSExEXCIsXG4gIFwiU0lHQ09OVFwiLFxuICBcIlNJR0ZQRVwiLFxuICBcIlNJR0hVUFwiLFxuICBcIlNJR0lMTFwiLFxuICBcIlNJR0lOVFwiLFxuICBcIlNJR0lPXCIsXG4gIFwiU0lHSU9UXCIsXG4gIFwiU0lHS0lMTFwiLFxuICBcIlNJR1BJUEVcIixcbiAgXCJTSUdQT0xMXCIsXG4gIFwiU0lHUFJPRlwiLFxuICBcIlNJR1BXUlwiLFxuICBcIlNJR1FVSVRcIixcbiAgXCJTSUdTRUdWXCIsXG4gIFwiU0lHU1RLRkxUXCIsXG4gIFwiU0lHU1RPUFwiLFxuICBcIlNJR1NZU1wiLFxuICBcIlNJR1RFUk1cIixcbiAgXCJTSUdUUkFQXCIsXG4gIFwiU0lHVFNUUFwiLFxuICBcIlNJR1RUSU5cIixcbiAgXCJTSUdUVE9VXCIsXG4gIFwiU0lHVU5VU0VEXCIsXG4gIFwiU0lHVVJHXCIsXG4gIFwiU0lHVVNSMVwiLFxuICBcIlNJR1VTUjJcIixcbiAgXCJTSUdWVEFMUk1cIixcbiAgXCJTSUdXSU5DSFwiLFxuICBcIlNJR1hDUFVcIixcbiAgXCJTSUdYRlNaXCIsXG4gIFwiU0lHQlJFQUtcIixcbiAgXCJTSUdMT1NUXCIsXG4gIFwiU0lHSU5GT1wiXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzOiBSZWFkb25seTxOb2RlSlMuU2lnbmFsc1tdPiA9IFtcbiAgU0lHQUxSTSxcbiAgU0lHQlVTLFxuICBTSUdDSExELFxuICBTSUdDT05ULFxuICBTSUdGUEUsXG4gIFNJR0hVUCxcbiAgU0lHSUxMLFxuICBTSUdJTlQsXG4gIFNJR0lPLFxuICBTSUdJT1QsXG4gIFNJR0tJTEwsXG4gIFNJR1BJUEUsXG4gIFNJR1BPTEwsXG4gIFNJR1BST0YsXG4gIFNJR1BXUixcbiAgU0lHUVVJVCxcbiAgU0lHU0VHVixcbiAgU0lHU1RLRkxULFxuICBTSUdTVE9QLFxuICBTSUdTWVMsXG4gIFNJR1RFUk0sXG4gIFNJR1RSQVAsXG4gIFNJR1RTVFAsXG4gIFNJR1RUSU4sXG4gIFNJR1RUT1UsXG4gIFNJR1VOVVNFRCxcbiAgU0lHVVJHLFxuICBTSUdVU1IxLFxuICBTSUdVU1IyLFxuICBTSUdWVEFMUk0sXG4gIFNJR1dJTkNILFxuICBTSUdYQ1BVLFxuICBTSUdYRlNaLFxuICBTSUdCUkVBSyxcbiAgU0lHTE9TVCxcbiAgU0lHSU5GT1xuXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBTaWduYWwgPSB0eXBlb2Ygc2lnbmFsc1tudW1iZXJdXG4iLCJleHBvcnQgY29uc3QgW1xuICBQUk9DRVNTX09QRU5JTkdfU1RBVEUsXG4gIFBST0NFU1NfT1BFTkVEX1NUQVRFLFxuICBQUk9DRVNTX0NMT1NJTkdfU1RBVEUsXG4gIFBST0NFU1NfQ0xPU0VEX1NUQVRFXG5dID0gW1wib3BlbmluZ1wiLCBcIm9wZW5lZFwiLCBcImNsb3NpbmdcIiwgXCJjbG9zZWRcIl0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NTdGF0ZXMgPSBbXG4gIFBST0NFU1NfT1BFTklOR19TVEFURSxcbiAgUFJPQ0VTU19PUEVORURfU1RBVEUsXG4gIFBST0NFU1NfQ0xPU0lOR19TVEFURSxcbiAgUFJPQ0VTU19DTE9TRURfU1RBVEVcbl0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc1N0YXRlID0gdHlwZW9mIHByb2Nlc3NTdGF0ZXNbbnVtYmVyXVxuIiwiLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBbSU9fT1ZFUkxBUFBFRCwgSU9fUElQRSwgSU9fSUdOT1JFLCBJT19JTkhFUklULCBJT19JUENdID0gW1xuICBcIm92ZXJsYXBwZWRcIixcbiAgXCJwaXBlXCIsXG4gIFwiaWdub3JlXCIsXG4gIFwiaW5oZXJpdFwiLFxuICBcImlwY1wiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaW9UeXBlcyA9IFtcbiAgSU9fT1ZFUkxBUFBFRCxcbiAgSU9fUElQRSxcbiAgSU9fSUdOT1JFLFxuICBJT19JTkhFUklULFxuICBJT19JUENcbl0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIElPVHlwZSA9IHR5cGVvZiBpb1R5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBbU1RESU4sIFNURE9VVCwgU1RERVJSLCBTVERJT10gPSBbXG4gIFwic3RkaW5cIixcbiAgXCJzdGRvdXRcIixcbiAgXCJzdGRlcnJcIixcbiAgXCJzdGRpb1wiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaW5wdXRUeXBlcyA9IFtTVERJTl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvdXRwdXRUeXBlcyA9IFtTVERPVVQsIFNUREVSUl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0VHlwZSA9IHR5cGVvZiBpbnB1dFR5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE91dHB1dFR5cGUgPSB0eXBlb2Ygb3V0cHV0VHlwZXNbbnVtYmVyXVxuIiwiaW1wb3J0IHR5cGUgTm9kZSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCJcblxuaW1wb3J0IHR5cGUgeyBTVERFUlIsIFNURE9VVCB9IGZyb20gXCIuL3N0ZGlvXCJcblxuZXhwb3J0IHR5cGUgTm9kZUNoaWxkUHJvY2VzcyA9IE5vZGUuQ2hpbGRQcm9jZXNzXG5cbmV4cG9ydCB0eXBlIE5vZGVFeGVjT3B0aW9ucyA9IE5vZGUuRXhlY09wdGlvbnNcbmV4cG9ydCB0eXBlIE5vZGVTcGF3bk9wdGlvbnMgPSBOb2RlLlNwYXduT3B0aW9uc1xuZXhwb3J0IHR5cGUgTm9kZUZvcmtPcHRpb25zID0gTm9kZS5Gb3JrT3B0aW9uc1xuZXhwb3J0IHR5cGUgTm9kZVN0ZGlvT3B0aW9ucyA9IE5vZGUuU3RkaW9PcHRpb25zXG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6YWJsZSA9IHN0cmluZyB8IG9iamVjdCB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnRcblxuLyoqXG4gKiBTdHJpbmcgb3V0cHV0IGZyb20gY2hpbGQgcHJvY2VzcyBleGVjdXRpb24uXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NSZXN1bHQge1xuICBbU1RET1VUXT86IHN0cmluZ1xuICBbU1RERVJSXT86IHN0cmluZ1xufVxuXG4vKipcbiAqIENvbW1vbiBwcm9jZXNzLmVudiB2YWx1ZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFbnYge1xuICBUWj86IHN0cmluZ1xuICBOT0RFX0VOVj86IFwiZGV2ZWxvcG1lbnRcIiB8IFwidGVzdFwiIHwgXCJwcm9kdWN0aW9uXCJcblxuICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb2RlSlMgXCJleGVjXCIgY29tbWFuZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE5vZGVFeGVjID0gKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE5vZGVFeGVjT3B0aW9uc1xuKSA9PiBQcm9taXNlPFByb2Nlc3NSZXN1bHQ+XG5cbi8qKlxuICogTm9kZUpTIFwic3Bhd25cIiBjb21tYW5kLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTm9kZVNwYXduID0gKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogTm9kZVNwYXduT3B0aW9uc1xuKSA9PiBOb2RlQ2hpbGRQcm9jZXNzXG5cbi8qKlxuICogTm9kZUpTIFwiZm9ya1wiIGNvbW1hbmQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOb2RlRm9yayA9IChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gIG9wdGlvbnM6IE5vZGVGb3JrT3B0aW9uc1xuKSA9PiBOb2RlQ2hpbGRQcm9jZXNzXG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIHByb2Nlc3MgZXJyb3IuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gUG9zc2libGUgZXJyb3IgdmFsdWUgdG8gdGVzdC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBpc1Byb2Nlc3NFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGUuRXhlY0V4Y2VwdGlvbiA9PlxuICB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgISFlcnJvciAmJiBPYmplY3Qua2V5cyhlcnJvcikuaW5jbHVkZXMoXCJjbWRcIilcbiIsImltcG9ydCB7IFByb2Nlc3NUZXJtaW5hdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB7IFBST0NFU1NfRVJST1JfRVZFTlQsIFBST0NFU1NfRVhJVF9FVkVOVCwgU0lHVEVSTSB9IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcywgS2lsbE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFRlcm1pbmF0ZXMgYSBjaGlsZCBjaGlsZFByb2Nlc3MgYW5kIGF3YWl0cyBmb3IgYSBjbG9zZWQgc3RhdGUuXG4gKlxuICogQHJlbWFya3NcbiAqIFJlbW92ZXMgYW55IGxpc3RlbmVycyBhdHRhY2hlZCB0byB0aGUgY2hpbGRQcm9jZXNzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGtpbGwgPSBhc3luYyAoXG4gIGNoaWxkUHJvY2VzczogQ2hpbGRQcm9jZXNzLFxuICBvcHRpb25zOiBQYXJ0aWFsPEtpbGxPcHRpb25zPiA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHRpbWVvdXQsIGV2ZW50LCBzaWduYWwgfTogS2lsbE9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiA1MDAwLFxuICAgICAgZXZlbnQ6IFBST0NFU1NfRVhJVF9FVkVOVCxcbiAgICAgIHNpZ25hbDogU0lHVEVSTSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9jZXNzIGFscmVhZHkga2lsbGVkLCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkuXG4gICAgaWYgKGNoaWxkUHJvY2Vzcy5raWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGFscmVhZHkgYXdhaXRpbmcgYSBraWxsIGV2ZW50LCByZXR1cm4gcHJldmlvdXMgcHJvbWlzZSByYWNlLlxuICAgIGlmIChjaGlsZFByb2Nlc3Mua2lsbGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbY2hpbGRQcm9jZXNzLmtpbGxpbmcsIGRlbGF5KHRpbWVvdXQpXSlcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggdGhlIGZpcnN0IGtpbGwgcmFjZS5cbiAgICBjaGlsZFByb2Nlc3Mua2lsbGluZyA9IFByb21pc2UucmFjZShbXG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBQb2xsIGZvciBhIGtpbGxlZCBpbiBjYXNlIGV2ZW50IGlzIGFscmVhZHkgdHJpZ2dlcmVkLlxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICAgICAgICBpZiAoY2hpbGRQcm9jZXNzLmtpbGxlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gQXdhaXQgY2xvc2Ugb3IgZXhpdCBldmVudCBiZWZvcmUgcmVzb2x2aW5nLlxuICAgICAgICBjaGlsZFByb2Nlc3Mub25jZShldmVudCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEFib3J0IGVhcmx5IGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19FUlJPUl9FVkVOVCwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2VuZCB0ZXJtaW5hdGlvbiBzaWduYWwuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5raWxsKHNpZ25hbClcblxuICAgICAgICAvLyBSZXNvbHZlIGlmIHByb2Nlc3MgaXMgYWxyZWFkeSB0ZXJtaW5hdGVkIGJ5IHRoZSB0aW1lIGxpc3RlbmVycyBhcmUgYXR0YWNoZWQuXG4gICAgICAgIGlmIChjaGlsZFByb2Nlc3Mua2lsbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGVsYXkodGltZW91dClcbiAgICBdKVxuXG4gICAgYXdhaXQgY2hpbGRQcm9jZXNzLmtpbGxpbmdcblxuICAgIC8vIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBhZnRlciB0ZXJtaW5hdGlvbi5cbiAgICBjaGlsZFByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgUHJvY2Vzc1Rlcm1pbmF0aW9uRXJyb3IoY2hpbGRQcm9jZXNzLmNvbW1hbmQsIGVycm9yIGFzIEVycm9yKVxuICB9XG59XG4iLCJpbXBvcnQgeyBUaW1lciB9IGZyb20gXCJAbm9kZXN1aXRlL3RpbWVyXCJcbmltcG9ydCB0eXBlIHsgUGVyZm9ybWFuY2VUaW1lciB9IGZyb20gXCJAbm9kZXN1aXRlL3RpbWVyXCJcblxuaW1wb3J0IHsgcHJvbWlzaWZ5Q2xvc2UsIHByb21pc2lmeU1lc3NhZ2UsIHByb21pc2lmeU9wZW4gfSBmcm9tIFwiLi4vcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgUFJPQ0VTU19DTE9TRV9FVkVOVCxcbiAgUFJPQ0VTU19DTE9TRURfU1RBVEUsXG4gIFBST0NFU1NfREFUQV9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVCxcbiAgUFJPQ0VTU19PUEVORURfU1RBVEUsXG4gIFBST0NFU1NfT1BFTklOR19TVEFURSxcbiAgUFJPQ0VTU19TUEFXTl9FVkVOVCxcbiAgU0lHVEVSTVxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MsIE5vZGVDaGlsZFByb2Nlc3MgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gYXBwZW5kIHNldmVyYWwgbWFuYWdlbWVudCB0b29scyB0byBhIHNwYXduZWQgb3IgZm9ya2VkIHByb2Nlc3MuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIG9ubHkgaW5kaXJlY3RseSB2aWEgYHNwYXduYCBvciBgZm9ya2AuXG4gKlxuICogQHBhcmFtIG5hdGl2ZUNoaWxkUHJvY2VzcyAtIE5hdGl2ZSBjaGlsZCBwcm9jZXNzIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gY29tbWFuZCAtIENvbW1hbmQgbmFtZSBvciBleGVjdXRhYmxlIHBhdGggY2FsbGVkIGJ5IGBzcGF3bmAgb3IgYGZvcmtgLlxuICogQHBhcmFtIG1ldGhvZCAtIEV4ZWN1dGlvbiBtZXRob2QgKGBzcGF3bmAsIGBmb3JrYCkgdXNlZCB0byBzcGF3biB0aGUgcHJvY2Vzcy5cbiAqIEBwYXJhbSBmaWx0ZXJzIC0gU3RyaW5nIGZpbHRlcnMgdXNlZCB0byByZWR1Y2Ugc3Rkb3V0IGFuZCBzdGRlcnIgbm9pc2UuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5hZ2UgPSAoXG4gIG5hdGl2ZUNoaWxkUHJvY2VzczogTm9kZUNoaWxkUHJvY2VzcyxcbiAge1xuICAgIGNvbW1hbmQsXG4gICAgbWV0aG9kLFxuICAgIGZpbHRlcnNcbiAgfTogUGljazxDaGlsZFByb2Nlc3MsIFwiY29tbWFuZFwiIHwgXCJtZXRob2RcIiB8IFwiZmlsdGVyc1wiPlxuKTogQ2hpbGRQcm9jZXNzID0+IHtcbiAgLy8gSW5pdGlhbGl6ZSBhIHRpbWVyIHRvIHRyYWNrIGR1cmF0aW9uLlxuICBjb25zdCB0aW1lcjogUGVyZm9ybWFuY2VUaW1lciA9IG5ldyBUaW1lcigpXG5cbiAgLy8gQXR0YWNoIHRoZSBhZGRpdGlvbmFsIFwibWFuYWdlbWVudFwiIHByb3BlcnRpZXMgdG8gdGhlIGJhc2UgY2hpbGQgcHJvY2Vzcy5cbiAgY29uc3QgY2hpbGRQcm9jZXNzOiBDaGlsZFByb2Nlc3MgPSBPYmplY3QuYXNzaWduKG5hdGl2ZUNoaWxkUHJvY2Vzcywge1xuICAgIGNvbW1hbmQsXG4gICAgbWV0aG9kLFxuICAgIHRpbWVyLFxuICAgIGZpbHRlcnMsXG4gICAga2lsbGluZzogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBQUk9DRVNTX09QRU5JTkdfU1RBVEUsXG4gICAgdW50aWxPcGVuOiBwcm9taXNpZnlPcGVuKG5hdGl2ZUNoaWxkUHJvY2VzcywgY29tbWFuZCksXG4gICAgdW50aWxDbG9zZTogcHJvbWlzaWZ5Q2xvc2UobmF0aXZlQ2hpbGRQcm9jZXNzKSxcbiAgICB1bnRpbE1lc3NhZ2U6IHByb21pc2lmeU1lc3NhZ2UobmF0aXZlQ2hpbGRQcm9jZXNzLCBjb21tYW5kKVxuICB9KVxuXG4gIC8vIENoYW5nZSBzdGF0ZSBhbmQgbm90aWZ5IGRlYnVnZ2VyIG9uIHN0YXRlIGNoYW5nZXMuXG5cbiAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19TUEFXTl9FVkVOVCwgKCkgPT4ge1xuICAgIGNoaWxkUHJvY2Vzcy5zdGF0ZSA9IFBST0NFU1NfT1BFTkVEX1NUQVRFXG4gICAgY29uc29sZS5kZWJ1ZyhgUHJvY2VzcyBcIiR7Y29tbWFuZH1cIiBvcGVuZWQuYClcbiAgfSlcblxuICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0NMT1NFX0VWRU5ULCAoKSA9PiB7XG4gICAgY2hpbGRQcm9jZXNzLnN0YXRlID0gUFJPQ0VTU19DTE9TRURfU1RBVEVcbiAgICBjb25zb2xlLmRlYnVnKGBQcm9jZXNzIFwiJHtjb21tYW5kfVwiIGNsb3NlZC5gKVxuICB9KVxuXG4gIGNoaWxkUHJvY2Vzcy5vbihQUk9DRVNTX0VSUk9SX0VWRU5ULCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5kZWJ1ZyhgUHJvY2VzcyBcIiR7Y29tbWFuZH1cIiBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgaWYgKCFjaGlsZFByb2Nlc3Mua2lsbGVkKSB7XG4gICAgICBjaGlsZFByb2Nlc3Mua2lsbChTSUdURVJNKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmaWx0ZXIgPSAoZGF0YTogQnVmZmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgcmV0dXJuICFjaGlsZFByb2Nlc3MuZmlsdGVycyB8fFxuICAgICAgY2hpbGRQcm9jZXNzLmZpbHRlcnMuZXZlcnkoKGZpbHRlcikgPT4gIW1lc3NhZ2UuaW5jbHVkZXMoZmlsdGVyKSlcbiAgICAgID8gbWVzc2FnZVxuICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IG9uU3Rkb3V0ID0gKGRhdGE6IEJ1ZmZlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZpbHRlcihkYXRhKVxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHttZXNzYWdlfVxcbmApXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25TdGRlcnIgPSAoZGF0YTogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgY29uc3QgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZmlsdGVyKGRhdGEpXG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYClcbiAgICB9XG4gIH1cblxuICBpZiAoY2hpbGRQcm9jZXNzLnN0ZG91dCkge1xuICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQub24oUFJPQ0VTU19EQVRBX0VWRU5ULCBvblN0ZG91dClcbiAgfVxuXG4gIGlmIChjaGlsZFByb2Nlc3Muc3RkZXJyKSB7XG4gICAgY2hpbGRQcm9jZXNzLnN0ZGVyci5vbihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uU3RkZXJyKVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkUHJvY2Vzc1xufVxuIiwiaW1wb3J0IHsgUFJPQ0VTU19DTE9TRV9FVkVOVCwgUFJPQ0VTU19FUlJPUl9FVkVOVCB9IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IENsb3NlUmVhc29uLCBOb2RlQ2hpbGRQcm9jZXNzLCBTaWduYWwgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIEF3YWl0cyBhIGNsb3NlIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9taXNpZnlDbG9zZSA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MpID0+ICgpOiBQcm9taXNlPENsb3NlUmVhc29uPiA9PlxuICAgIG5ldyBQcm9taXNlPENsb3NlUmVhc29uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBJZiBwcm9jZXNzIGFscmVhZHkga2lsbGVkLCByZXNvbHZlIGltbWVkaWF0ZWx5LlxuICAgICAgaWYgKGNoaWxkUHJvY2Vzcy5raWxsZWQpIHtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgY29kZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHNpZ25hbDogY2hpbGRQcm9jZXNzLnNpZ25hbENvZGUgPz8gdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIExpc3RlbiBmb3IgY2xvc2UgZXZlbnQgYW5kIHJlc29sdmUgd2l0aCBwYXlsb2FkLlxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoXG4gICAgICAgIFBST0NFU1NfQ0xPU0VfRVZFTlQsXG4gICAgICAgIChjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQsIHNpZ25hbDogU2lnbmFsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgc2lnbmFsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICAvLyBBYm9ydCBvbiBlcnJvcnMuXG4gICAgICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0VSUk9SX0VWRU5ULCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiIsImltcG9ydCB7IE1lc3NhZ2VUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB7XG4gIFBST0NFU1NfQ0xPU0VfRVZFTlQsXG4gIFBST0NFU1NfREFUQV9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlQ2hpbGRQcm9jZXNzLCBTaWduYWwsIFZhbGlkYXRlIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBd2FpdHMgYSBzcGVjaWZpYyBtZXNzYWdlIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogSGFzIGEgZGVmYXVsdCB0aW1lb3V0IG9mIDkwcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKiBAcGFyYW0gY29tbWFuZCAtIE9wdGlvbmFsIG5hbWUgb2YgY29tbWFuZCBmb3IgZGVidWdnaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvbWlzaWZ5TWVzc2FnZSA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MsIGNvbW1hbmQ/OiBzdHJpbmcpID0+XG4gICh2YWxpZGF0ZTogVmFsaWRhdGUsIHRpbWVvdXQ6IG51bWJlciA9IDkwMDAwKTogUHJvbWlzZTxzdHJpbmc+ID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQsIHN0YXJ0IGEgdGltZXIgdG8gcmVqZWN0IHByb21pc2UgaWYgcmVhY2hlZC5cbiAgICAgIGNvbnN0IHRpbWVyOiBOb2RlSlMuVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3I6IEVycm9yID0gbmV3IE1lc3NhZ2VUaW1lb3V0RXJyb3IoXG4gICAgICAgICAgY29tbWFuZCA/PyBjaGlsZFByb2Nlc3MucGlkLFxuICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgKVxuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IubWVzc2FnZSlcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSwgdGltZW91dClcblxuICAgICAgLy8gQWJvcnQgb2JzZXJ2ZXIgaWYgcHJvY2VzcyBjbG9zZXMgYmVmb3JlIGEgbWF0Y2ggaXMgZm91bmQuXG4gICAgICBjb25zdCBvbkNsb3NlID0gKFxuICAgICAgICBjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIHNpZ25hbDogU2lnbmFsIHwgdW5kZWZpbmVkXG4gICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KHsgY29kZSwgc2lnbmFsIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIEFib3J0IG9ic2VydmVyIGlmIHByb2Nlc3MgZXJyb3JzIGJlZm9yZSBhIG1hdGNoIGlzIGZvdW5kLlxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBTZWFyY2ggbWVzc2FnZXMgYmFzZWQgb24gdmFsaWRhdGlvbiBmdW5jdGlvbi5cbiAgICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoaXMgbGlzdGVuZXIgdXBvbiByZXNvbHV0aW9uIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy5cbiAgICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhOiBCdWZmZXIpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAgIGlmICghdmFsaWRhdGUobWVzc2FnZSkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHRoZSByZWplY3Rpb24gdGltZW91dC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQ/Lm9mZihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uRGF0YSlcbiAgICAgICAgY2hpbGRQcm9jZXNzLnN0ZGVycj8ub2ZmKFBST0NFU1NfREFUQV9FVkVOVCwgb25EYXRhKVxuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5vZmYoUFJPQ0VTU19DTE9TRV9FVkVOVCwgb25DbG9zZSlcbiAgICAgICAgY2hpbGRQcm9jZXNzLm9mZihQUk9DRVNTX0VSUk9SX0VWRU5ULCBvbkVycm9yKVxuXG4gICAgICAgIHJlc29sdmUobWVzc2FnZSlcbiAgICAgIH1cblxuICAgICAgY2hpbGRQcm9jZXNzLnN0ZG91dD8ub24oUFJPQ0VTU19EQVRBX0VWRU5ULCBvbkRhdGEpXG4gICAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uRGF0YSlcblxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19DTE9TRV9FVkVOVCwgb25DbG9zZSlcbiAgICAgIGNoaWxkUHJvY2Vzcy5vbmNlKFBST0NFU1NfRVJST1JfRVZFTlQsIG9uRXJyb3IpXG4gICAgfSlcbiIsImltcG9ydCB7IE9wZW5UaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB7IFBST0NFU1NfRVJST1JfRVZFTlQsIFBST0NFU1NfU1BBV05fRVZFTlQgfSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBd2FpdHMgYSBgc3Bhd25gIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKiBAcGFyYW0gY29tbWFuZCAtIE9wdGlvbmFsIG5hbWUgb2YgY29tbWFuZCBmb3IgZGVidWdnaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvbWlzaWZ5T3BlbiA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MsIGNvbW1hbmQ/OiBzdHJpbmcpID0+XG4gIGFzeW5jICh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIElmIHByb2Nlc3MgYWxyZWFkeSBvcGVuLCByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAgICBpZiAoY2hpbGRQcm9jZXNzLnBpZCkge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IGF3YWl0IGtpbGxlZCBwcm9jZXNzZXMuXG4gICAgICBpZiAoY2hpbGRQcm9jZXNzLmtpbGxlZCkge1xuICAgICAgICByZWplY3QoYENhbm5vdCBhd2FpdCBvcGVuIG9uIGtpbGxlZCBwcm9jZXNzLmApXG4gICAgICB9XG5cbiAgICAgIC8vIEFib3J0IG9uIGVycm9ycyB3aGlsZSBzcGF3bmluZy5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3I/OiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIHNwYXduIGV2ZW50LlxuICAgICAgY29uc3Qgb25TcGF3biA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFib3J0IGxpc3RlbmVyLlxuICAgICAgICBjaGlsZFByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoUFJPQ0VTU19FUlJPUl9FVkVOVCwgb25FcnJvcilcblxuICAgICAgICAvLyBPbmNlIHByb2Nlc3MgaXMgc3Bhd25lZCwgY29udmVydCB0byBvYnNlcnZhYmxlLlxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsaXN0ZW5lcnMuXG4gICAgICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0VSUk9SX0VWRU5ULCBvbkVycm9yKVxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19TUEFXTl9FVkVOVCwgb25TcGF3bilcblxuICAgICAgLy8gSWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQsIGFib3J0IGlmIHJlYWNoZWQuXG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvcjogRXJyb3IgPSBuZXcgT3BlblRpbWVvdXRFcnJvcihcbiAgICAgICAgICAgIGNvbW1hbmQgPz8gY2hpbGRQcm9jZXNzLnBpZCxcbiAgICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc29sZS53YXJuKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LCB0aW1lb3V0KVxuICAgICAgfVxuICAgIH0pXG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJub2RlOmV2ZW50c1wiXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gXCJAbm9kZXN1aXRlL2RlZmVyXCJcbmltcG9ydCB0eXBlIHsgRGVmZXJyYWwgfSBmcm9tIFwiQG5vZGVzdWl0ZS9kZWZlclwiXG5cbmltcG9ydCB7IFByb2Nlc3NOb3RBdmFpbGFibGVFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIlxuaW1wb3J0IHsgUFJPQ0VTU19DTE9TRV9FVkVOVCwgUFJPQ0VTU19PUEVOX0VWRU5UIH0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBYnN0cmFjdCB1dGlsaXR5IHdyYXBwZXIgZm9yIGJ1aWxkaW5nIHByb2Nlc3MtYmFzZWQgY2xhc3Nlcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogSW5oZXJpdG9ycyBzaG91bGQgaW1wbGVtZW50IG93biBcIm9wZW5cIiBhbmQgXCJjbG9zZVwiIGxvZ2ljIHdoaWNoIGlzIHByb3ZpZGVkIHRvXG4gKiB0aGUgXCJzZXRPcGVuXCIgYW5kIFwic2V0Q2xvc2VcIiBoYW5kbGVycy5cbiAqXG4gKiBJbXBvcnRhbnRseSwgdG8gcmVsZWFzZSB0aGUgb3BlbmVyIGFuZCBjbG9zZXIgcHJvbWlzZXMsIHRoZSBcIm9wZW5cIiBhbmQgXCJjbG9zZVwiXG4gKiBsb2dpYyBzaG91bGQgZW1pdCB0aGUgYXBwcm9wcmlhdGUgcHJvY2VzcyBldmVudCB0byBzaWduYWwgcmVhZHkgc3RhdGUuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvY2Vzc01hbmFnZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogU3RhdGljIHJlZmVyZW5jZSB0byB0aGUgaW50ZW5kZWQgZXhlY3V0YWJsZSBwYXRoLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29tbWFuZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEludGVybmFsIGNoaWxkIHByb2Nlc3MuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9wcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWRcblxuICAvKipcbiAgICogRGVmZXJyZWQgcHJvbWlzZSB0byBwcmVzZW50IGlmIG9wZW5pbmcgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWd1bi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSAjb3BlbmVyOiBEZWZlcnJhbCA9IGRlZmVyKClcblxuICAvKipcbiAgICogRGVmZXJyZWQgcHJvbWlzZSB0byBwcmVzZW50IGlmIGNsb3NpbmcgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWd1bi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSAjY2xvc2VyOiBEZWZlcnJhbCA9IGRlZmVyKClcblxuICAvKipcbiAgICogRmxhZyB0byBhdm9pZCBtdWx0aXBsZSBvcGVuLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNpc09wZW5pbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGF2b2lkIG11bHRpcGxlIGNsb3Nlcy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICAjaXNDbG9zaW5nOiBib29sZWFuID0gZmFsc2VcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBleGVjdXRhYmxlIHBhdGggb2YgdGhlIHVuZGVybHlpbmcgY2hpbGQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGdldCBjb21tYW5kKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbW1hbmRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJvY2VzcyBpZCBvZiB0aGUgaW50ZXJuYWwgY2hpbGQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGdldCBwaWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCkucGlkXG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBpbnRlcm5hbCBjaGlsZCBwcm9jZXNzIGFuZCBhc3NlcnQgcmVhZHkgc3RhdGUuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBwcm9jZXNzKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgaWYgKCF0aGlzLl9wcm9jZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgUHJvY2Vzc05vdEF2YWlsYWJsZUVycm9yKHRoaXMuY29tbWFuZClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgdGhlIGRlZmVycmVkIGNsb3NlIGV2ZW50LlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwdWJsaWMgdW50aWxDbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jY2xvc2VyLnVudGlsUmVzb2x2ZWQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhpc3Rpbmcgb3BlbiBvciBzZXRzIGFuIG9wZW5pbmcgc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgaXMgdXNlZCB0byBzdGFjayBkdXBsaWNhdGUgb3BlbiBjYWxscyBpbnRvIHRoZSBzaW5nbGUgcHJvbWlzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX3NldE9wZW4ob3BlbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLiNpc09wZW5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLiNvcGVuZXIucHJvbWlzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uY2UoUFJPQ0VTU19PUEVOX0VWRU5ULCAoKSA9PiB0aGlzLiNvcGVuZXIucmVzb2x2ZSgpKVxuICAgICAgcmV0dXJuIG9wZW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4aXN0aW5nIGNsb3NlIG9yIHNldHMgYSBjbG9zaW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gc3RhY2sgZHVwbGljYXRlIGNsb3NlIGNhbGxzIGludG8gdGhlIHNpbmdsZSBwcm9taXNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfc2V0Q2xvc2UoY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy4jaXNDbG9zaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy4jY2xvc2VyLnByb21pc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbmNlKFBST0NFU1NfQ0xPU0VfRVZFTlQsICgpID0+IHRoaXMuI2Nsb3Nlci5yZXNvbHZlKCkpXG4gICAgICByZXR1cm4gY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIG9wZW5pbmcgcHJvY2VzcyBpZiBzdGFydGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29tcGxldGVPcGVuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcm9jZXNzKSB7XG4gICAgICB0aGlzLmVtaXQoUFJPQ0VTU19PUEVOX0VWRU5UKVxuICAgICAgdGhpcy4jb3BlbmVyLnJlc29sdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUHJvY2Vzc05vdEF2YWlsYWJsZUVycm9yKHRoaXMuY29tbWFuZClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGVzIHRoZSBjbG9zaW5nIHByb2Nlc3MgaWYgc3RhcnRlZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2NvbXBsZXRlQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Byb2Nlc3MpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3MudGltZXIuc3RvcCgpXG4gICAgICB0aGlzLmVtaXQoUFJPQ0VTU19DTE9TRV9FVkVOVClcbiAgICAgIHRoaXMuI2Nsb3Nlci5yZXNvbHZlKClcbiAgICAgIHRoaXMuX3Byb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFByb2Nlc3NOb3RBdmFpbGFibGVFcnJvcih0aGlzLmNvbW1hbmQpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBjb25maWd1cmUsIG5vZGVTcGF3biB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB7IFNQQVdOIH0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB7IG1hbmFnZSB9IGZyb20gXCIuL21hbmFnZVwiXG5pbXBvcnQgdHlwZSB7XG4gIENoaWxkUHJvY2VzcyxcbiAgRXhlY3V0aW9uTWV0aG9kLFxuICBQcm9jZXNzQ29uZmlnLFxuICBTcGF3bk9wdGlvbnNcbn0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBTcGF3bnMgYW4gb2JzZXJ2YWJsZSBjaGlsZCBwcm9jZXNzIGFuZCBhd2FpdHMgYSByZWFkeSBzdGF0ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogT3B0aW9uYWxseSBhdHRhY2hlcyBob29rcyB0byBhbnkgdmFsaWQgY2hpbGQgcHJvY2VzcyBldmVudC5cbiAqIEF1dG9tYXRpY2FsbHkgaW5qZWN0cyBwcm9jZXNzLmVudiBpbnRvIGVudiBvcHRpb25zLlxuICogRm9ya2VkIHByb2Nlc3NlcyBcImluaGVyaXRcIiBzdGRpbyByYXRoZXIgdGhhbiBcInBpcGVcIiBhcyBkZWZhdWx0LlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gY3VycmVudCBwcm9jZXNzIGFyZSBpbmplY3RlZCB0aHJvdWdoIHRvIGNoaWxkIHByb2Nlc3MuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3Bhd24gPSBhc3luYyAoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgeyBmaWx0ZXJzLCAuLi5vcHRpb25zIH06IFNwYXduT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPENoaWxkUHJvY2Vzcz4gPT4ge1xuICAvLyBDb25maWd1cmUgYXJncyBhbmQgb3B0aW9ucy5cbiAgY29uc3QgY29uZmlnOiBQcm9jZXNzQ29uZmlnPFNwYXduT3B0aW9ucz4gPSBjb25maWd1cmUoeyBhcmdzLCBvcHRpb25zIH0pXG4gIGNvbnN0IG1ldGhvZDogRXhlY3V0aW9uTWV0aG9kID0gU1BBV05cblxuICAvLyBTcGF3biBhIG5ldyBjaGlsZCBwcm9jZXNzLlxuICBjb25zdCBjaGlsZFByb2Nlc3M6IENoaWxkUHJvY2VzcyA9IG1hbmFnZShcbiAgICBub2RlU3Bhd24oY29tbWFuZCwgY29uZmlnLmFyZ3MsIGNvbmZpZy5vcHRpb25zKSxcbiAgICB7XG4gICAgICBjb21tYW5kLFxuICAgICAgbWV0aG9kLFxuICAgICAgZmlsdGVyczogZmlsdGVycyA/PyBbXVxuICAgIH1cbiAgKVxuXG4gIC8vIEF3YWl0IGNvbXBsZXRlZCBzcGF3biBldmVudC5cbiAgYXdhaXQgY2hpbGRQcm9jZXNzLnVudGlsT3BlbigpXG5cbiAgcmV0dXJuIGNoaWxkUHJvY2Vzc1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMvbWVzc2FnZS10aW1lb3V0LmVycm9yLnRzIiwiLi4vc3JjL2Vycm9ycy9vcGVuLXRpbWVvdXQuZXJyb3IudHMiLCIuLi9zcmMvZXJyb3JzL3Byb2Nlc3MtY29uZmlndXJhdGlvbi5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy1leGVjdXRpb24uZXJyb3IudHMiLCIuLi9zcmMvZXJyb3JzL3Byb2Nlc3Mtbm90LWF2YWlsYWJsZS5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy1zcGF3bi5lcnJvci50cyIsIi4uL3NyYy9lcnJvcnMvcHJvY2Vzcy10ZXJtaW5hdGlvbi5lcnJvci50cyIsIi4uL3NyYy9zdXBwb3J0L2NvbmZpZ3VyZS50cyIsIi4uL3NyYy9zdXBwb3J0L2RlbGF5LnRzIiwiLi4vc3JjL3N1cHBvcnQvdmVuZG9yLnRzIiwiLi4vc3JjL2NvcmUvZXhlYy50cyIsIi4uL3NyYy90eXBlcy9ldmVudHMudHMiLCIuLi9zcmMvdHlwZXMvbWV0aG9kcy50cyIsIi4uL3NyYy90eXBlcy9zZXJpYWxpemFibGUudHMiLCIuLi9zcmMvdHlwZXMvc2lnbmFscy50cyIsIi4uL3NyYy90eXBlcy9zdGF0ZXMudHMiLCIuLi9zcmMvdHlwZXMvc3RkaW8udHMiLCIuLi9zcmMvdHlwZXMvdmVuZG9yLnRzIiwiLi4vc3JjL2NvcmUva2lsbC50cyIsIi4uL3NyYy9jb3JlL21hbmFnZS50cyIsIi4uL3NyYy9wcm9taXNlcy9jbG9zZS50cyIsIi4uL3NyYy9wcm9taXNlcy9tZXNzYWdlLnRzIiwiLi4vc3JjL3Byb21pc2VzL29wZW4udHMiLCIuLi9zcmMvY29yZS9tYW5hZ2VyLnRzIiwiLi4vc3JjL2NvcmUvc3Bhd24udHMiXSwibmFtZXMiOlsiTWVzc2FnZVRpbWVvdXRFcnJvciIsImNvbW1hbmQiLCJ0aW1lb3V0IiwiT3BlblRpbWVvdXRFcnJvciIsIlByb2Nlc3NDb25maWd1cmF0aW9uRXJyb3IiLCJjb25maWciLCJlcnJvciIsIlByb2Nlc3NFeGVjdXRpb25FcnJvciIsInN0ZGVyciIsIlByb2Nlc3NOb3RBdmFpbGFibGVFcnJvciIsIlByb2Nlc3NTcGF3bkVycm9yIiwiUHJvY2Vzc1Rlcm1pbmF0aW9uRXJyb3IiLCJjb25maWd1cmUiLCJwYXJzZUFyZ3MiLCJhcmdzIiwidmFsdWUiLCJtZXJnZUVudiIsImVudiIsInBhcnNlT3B0aW9ucyIsInN0ZGlvIiwib3B0aW9ucyIsImRlbGF5IiwibXMiLCJyZXNvbHZlIiwiZXhlYyIsImZvcmsiLCJzcGF3biIsInByb21pc2lmeSIsIm5vZGVFeGVjIiwibm9kZVNwYXduIiwibm9kZUZvcmsiLCJzdGRvdXQiLCJQUk9DRVNTX0NMT1NFX0VWRU5UIiwiUFJPQ0VTU19EQVRBX0VWRU5UIiwiUFJPQ0VTU19ESVNDT05ORUNUX0VWRU5UIiwiUFJPQ0VTU19FUlJPUl9FVkVOVCIsIlBST0NFU1NfRVhJVF9FVkVOVCIsIlBST0NFU1NfTUVTU0FHRV9FVkVOVCIsIlBST0NFU1NfT1BFTl9FVkVOVCIsIlBST0NFU1NfU1BBV05fRVZFTlQiLCJwcm9jZXNzRXZlbnRzIiwiY2xvc2VFdmVudHMiLCJFWEVDIiwiU1BBV04iLCJGT1JLIiwiS0lMTCIsImV4ZWN1dGlvbk1ldGhvZHMiLCJTVFJJTkdfVFlQRSIsIk9CSkVDVF9UWVBFIiwiTlVNQkVSX1RZUEUiLCJCT09MRUFOX1RZUEUiLCJCSUdJTlRfVFlQRSIsInNlcmlhbGl6YWJsZVR5cGVzIiwiU0lHQUxSTSIsIlNJR0JVUyIsIlNJR0NITEQiLCJTSUdDT05UIiwiU0lHRlBFIiwiU0lHSFVQIiwiU0lHSUxMIiwiU0lHSU5UIiwiU0lHSU8iLCJTSUdJT1QiLCJTSUdLSUxMIiwiU0lHUElQRSIsIlNJR1BPTEwiLCJTSUdQUk9GIiwiU0lHUFdSIiwiU0lHUVVJVCIsIlNJR1NFR1YiLCJTSUdTVEtGTFQiLCJTSUdTVE9QIiwiU0lHU1lTIiwiU0lHVEVSTSIsIlNJR1RSQVAiLCJTSUdUU1RQIiwiU0lHVFRJTiIsIlNJR1RUT1UiLCJTSUdVTlVTRUQiLCJTSUdVUkciLCJTSUdVU1IxIiwiU0lHVVNSMiIsIlNJR1ZUQUxSTSIsIlNJR1dJTkNIIiwiU0lHWENQVSIsIlNJR1hGU1oiLCJTSUdCUkVBSyIsIlNJR0xPU1QiLCJTSUdJTkZPIiwic2lnbmFscyIsIlBST0NFU1NfT1BFTklOR19TVEFURSIsIlBST0NFU1NfT1BFTkVEX1NUQVRFIiwiUFJPQ0VTU19DTE9TSU5HX1NUQVRFIiwiUFJPQ0VTU19DTE9TRURfU1RBVEUiLCJwcm9jZXNzU3RhdGVzIiwiSU9fT1ZFUkxBUFBFRCIsIklPX1BJUEUiLCJJT19JR05PUkUiLCJJT19JTkhFUklUIiwiSU9fSVBDIiwiaW9UeXBlcyIsIlNURElOIiwiU1RET1VUIiwiU1RERVJSIiwiU1RESU8iLCJpbnB1dFR5cGVzIiwib3V0cHV0VHlwZXMiLCJpc1Byb2Nlc3NFcnJvciIsImtpbGwiLCJjaGlsZFByb2Nlc3MiLCJldmVudCIsInNpZ25hbCIsImkiLCJyZWplY3QiLCJUaW1lciIsInByb21pc2lmeUNsb3NlIiwiY29kZSIsInByb21pc2lmeU1lc3NhZ2UiLCJ2YWxpZGF0ZSIsIl9hIiwiX2IiLCJ0aW1lciIsIm9uQ2xvc2UiLCJvbkVycm9yIiwib25EYXRhIiwiZGF0YSIsIm1lc3NhZ2UiLCJwcm9taXNpZnlPcGVuIiwib25TcGF3biIsIm1hbmFnZSIsIm5hdGl2ZUNoaWxkUHJvY2VzcyIsIm1ldGhvZCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJvblN0ZG91dCIsIm9uU3RkZXJyIiwiRXZlbnRFbWl0dGVyIiwiZGVmZXIiLCJQcm9jZXNzTWFuYWdlciIsIiNvcGVuZXIiLCIjY2xvc2VyIiwiI2lzT3BlbmluZyIsIiNpc0Nsb3NpbmciLCJvcGVuIiwiY2xvc2UiXSwibWFwcGluZ3MiOiJBQUtPLElBQU1BLEVBQU4sY0FBa0MsS0FBTSxDQUl0QyxZQUFZQyxFQUFzQ0MsRUFBaUIsQ0FDeEUsTUFDRSxzQ0FBc0NELHNCQUE0QkMsTUFDcEUsRUFDQSxLQUFLLEtBQU8sc0JBQ1osS0FBSyxRQUFVRCxFQUNmLEtBQUssUUFB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LEdBQVcsQ0FBQyxDQUN2QixDQUNGLEVBR0EsYUFBTXZCLEVBQWEsVUFBVSxFQUV0QkEsQ0FDVCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhyb3dzIHdoZW4gYW4gYXdhaXRlZCBtZXNzYWdlIGRvZXMgbm90IHJldHVybiBmcm9tIGNoaWxkIHByb2Nlc3Mgd2l0aGluIGdpdmVuIHRpbWVvdXQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgTWVzc2FnZVRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdGltZW91dDogbnVtYmVyKSB7XG4gICAgc3VwZXIoXG4gICAgICBgTWVzc2FnZSBsaXN0ZW5lciBvbiBjaGlsZCBwcm9jZXNzIFwiJHtjb21tYW5kfVwiIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXMuYFxuICAgIClcbiAgICB0aGlzLm5hbWUgPSBcIk1lc3NhZ2VUaW1lb3V0RXJyb3JcIlxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gIH1cbn1cbiIsIi8qKlxuICogVGhyb3dzIHdoZW4gYSBjaGlsZCBwcm9jZXNzIGRvZXMgbm90IG9wZW4gd2l0aGluIGdpdmVuIHRpbWVvdXQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT3BlblRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdGltZW91dDogbnVtYmVyKSB7XG4gICAgc3VwZXIoXG4gICAgICBgT3BlbiBzdGF0ZSBsaXN0ZW5lciBvbiBjaGlsZCBwcm9jZXNzIFwiJHtjb21tYW5kfVwiIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXMuYFxuICAgIClcbiAgICB0aGlzLm5hbWUgPSBcIk9wZW5UaW1lb3V0RXJyb3JcIlxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgT3B0aW9ucywgUHJvY2Vzc0NvbmZpZyB9IGZyb20gXCIuLi90eXBlc1wiXG5cbmV4cG9ydCBjbGFzcyBQcm9jZXNzQ29uZmlndXJhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPFByb2Nlc3NDb25maWc8T3B0aW9ucz4+XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogUGFydGlhbDxQcm9jZXNzQ29uZmlnPE9wdGlvbnM+PiwgZXJyb3I6IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBgRW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgY29uZmlndXJpbmcgY2hpbGQgcHJvY2VzczogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uZmlnXG4gICAgICApfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiBlcnJvclxuICAgICAgfVxuICAgIClcbiAgICB0aGlzLm5hbWUgPSBcIlByb2Nlc3NDb25maWd1cmF0aW9uRXJyb3JcIlxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBQcm9jZXNzRXhlY3V0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb21tYW5kOiBzdHJpbmdcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZDogc3RyaW5nLCBzdGRlcnI/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihgRW5jb3VudGVyZWQgYW4gZXJyb3IgZXhlY3V0aW5nIGNoaWxkIHByb2Nlc3MgJHtjb21tYW5kfTogJHtzdGRlcnJ9YClcbiAgICB0aGlzLm5hbWUgPSBcIlByb2Nlc3NFeGVjdXRpb25FcnJvclwiXG4gICAgdGhpcy5jb21tYW5kID0gY29tbWFuZFxuICB9XG59XG4iLCJleHBvcnQgY2xhc3MgUHJvY2Vzc05vdEF2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyA9IFwiYXQgdW5zcGVjaWZpZWQgZXhlY3V0YWJsZSBwYXRoXCIpIHtcbiAgICBzdXBlcihgRW5jb3VudGVyZWQgYW4gZXJyb3Igc3Bhd25pbmcgY2hpbGQgcHJvY2VzcyAke2NvbW1hbmR9LmApXG4gICAgdGhpcy5uYW1lID0gXCJQcm9jZXNzTm90QXZhaWxhYmxlRXJyb3JcIlxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFByb2Nlc3NTcGF3bkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZywgc3RkZXJyPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEVuY291bnRlcmVkIGFuIGVycm9yIHNwYXduaW5nIGNoaWxkIHByb2Nlc3MgJHtjb21tYW5kfTogJHtzdGRlcnJ9YClcbiAgICB0aGlzLm5hbWUgPSBcIlByb2Nlc3NTcGF3bkVycm9yXCJcbiAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kXG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBQcm9jZXNzVGVybWluYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IEVycm9yXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgZXJyb3I6IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBgRW5jb3VudGVyZWQgYW4gZXJyb3Iga2lsbGluZyBjaGlsZCBwcm9jZXNzICR7Y29tbWFuZH06ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgIClcbiAgICB0aGlzLm5hbWUgPSBcIlByb2Nlc3NUZXJtaW5hdGlvbkVycm9yXCJcbiAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kXG4gICAgdGhpcy5lcnJvciA9IGVycm9yXG4gIH1cbn1cbiIsImltcG9ydCB7IFByb2Nlc3NDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB0eXBlIHtcbiAgRXhlY09wdGlvbnMsXG4gIEZvcmtPcHRpb25zLFxuICBQcm9jZXNzQ29uZmlnLFxuICBQcm9jZXNzRW52LFxuICBTcGF3bk9wdGlvbnNcbn0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBQcmVwYXJlcyBjaGlsZCBwcm9jZXNzIGFyZ3VtZW50cyBhbmQgb3B0aW9ucyBwcmlvciB0byBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFVzZXIgaW5wdXQgYXMgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maWd1cmUgPSA8TyBleHRlbmRzIFNwYXduT3B0aW9ucyB8IEZvcmtPcHRpb25zIHwgRXhlY09wdGlvbnM+KFxuICBjb25maWc6IFByb2Nlc3NDb25maWc8Tz5cbik6IFByb2Nlc3NDb25maWc8Tz4gPT4ge1xuICB0cnkge1xuICAgIC8vIFN0cmlwcyBlbXB0eSBlbGVtZW50cyBhbmQgdHJpbXMgYXJncyBhcnJheS5cbiAgICBjb25zdCBwYXJzZUFyZ3MgPSAoY29tbWFuZDogc3RyaW5nID0gXCJcIiwgYXJnczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdID0+IFtcbiAgICAgIC4uLltjb21tYW5kLCAuLi5hcmdzXVxuICAgICAgICAubWFwKCh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlKVxuICAgIF1cblxuICAgIC8vIE1lcmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBjdXJyZW50IHByb2Nlc3Mgd2l0aCBhbnkgcHJvdmlkZWQgYnkgY2hpbGQgcHJvY2VzcyBvcHRpb25zLlxuICAgIGNvbnN0IG1lcmdlRW52ID0gKGVudjogUHJvY2Vzc0VudiA9IHt9KTogUHJvY2Vzc0VudiA9PiAoe1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5lbnZcbiAgICB9KVxuXG4gICAgLy8gTWVyZ2VzIHByb2Nlc3Mgb3B0aW9ucyB3aXRoIGN1cnJlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IDxPIGV4dGVuZHMgU3Bhd25PcHRpb25zIHwgRm9ya09wdGlvbnMgfCBFeGVjT3B0aW9ucz4oe1xuICAgICAgc3RkaW8sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTogTyk6IE8gPT5cbiAgICAgICh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0ZGlvOiBzdGRpbyA/PyBbcHJvY2Vzcy5zdGRpbiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgZW52OiBtZXJnZUVudihvcHRpb25zLmVudilcbiAgICAgIH0gYXMgTylcblxuICAgIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gcGFyc2VBcmdzKGNvbmZpZy5jb21tYW5kLCBjb25maWcuYXJncylcbiAgICBjb25zdCBvcHRpb25zOiBPID0gcGFyc2VPcHRpb25zKGNvbmZpZy5vcHRpb25zKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRpb25zXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQcm9jZXNzQ29uZmlndXJhdGlvbkVycm9yKGNvbmZpZywgZXJyb3IgYXMgRXJyb3IpXG4gIH1cbn1cbiIsIi8qKlxuICogU2ltcGxlIHRpbWVvdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1zIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT5cbiAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuIiwiaW1wb3J0IHsgZXhlYywgZm9yaywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIlxuXG5pbXBvcnQgdHlwZSB7IE5vZGVFeGVjLCBOb2RlRm9yaywgTm9kZVNwYXduIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBQcm9taXNpZmllZCBOb2RlIGV4ZWMgbWV0aG9kLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3Qgbm9kZUV4ZWM6IE5vZGVFeGVjID0gcHJvbWlzaWZ5KGV4ZWMpXG5cbi8qKlxuICogT3JpZ2luYWwgbm9kZSBzcGF3biBtZXRob2QuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBub2RlU3Bhd246IE5vZGVTcGF3biA9IHNwYXduXG5cbi8qKlxuICogT3JpZ2luYWwgbm9kZSBmb3JrIG1ldGhvZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IG5vZGVGb3JrOiBOb2RlRm9yayA9IGZvcmtcbiIsImltcG9ydCB7IFByb2Nlc3NFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIlxuaW1wb3J0IHsgY29uZmlndXJlLCBub2RlRXhlYyB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB0eXBlIHsgRXhlY09wdGlvbnMsIFByb2Nlc3NDb25maWcgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFByb3ZpZGUgYXN5bmMgY2hpbGQgcHJvY2VzcyBleGVjdXRvci5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhyb3dzIGVycm9yIG9uIGBzdGRlcnJgIG91dHB1dCB1bmxlc3Mgc3VwcHJlc3NlZC5cbiAqIElmIHByb2Nlc3MgaXMgbG9uZy1ydW5uaW5nLCBkbyBub3QgYXdhaXQgdGhlIFByb21pc2UuXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBjdXJyZW50IHByb2Nlc3MgYXJlIGluamVjdGVkIHRocm91Z2ggdG8gY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjID0gYXN5bmMgKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIENvbmZpZ3VyZSBhcmdzIGFuZCBvcHRpb25zLlxuICBjb25zdCBjb25maWc6IFByb2Nlc3NDb25maWc8RXhlY09wdGlvbnM+ID0gY29uZmlndXJlKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9uc1xuICB9KVxuXG4gIC8vIEF3YWl0IGNoaWxkIHByb2Nlc3MgZXhlY3V0aW9uLlxuICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCBub2RlRXhlYyhcbiAgICBjb25maWcuYXJncy5qb2luKGAgYCksXG4gICAgY29uZmlnLm9wdGlvbnNcbiAgKVxuXG4gIC8vIENoZWNrIHN0ZGVyciBmb3IgYW55IGVycm9yIG1lc3NhZ2VzLlxuICBpZiAoc3RkZXJyKSB7XG4gICAgdGhyb3cgbmV3IFByb2Nlc3NFeGVjdXRpb25FcnJvcihjb21tYW5kLCBzdGRlcnIpXG4gIH1cblxuICAvLyBSZXR1cm4gc3Rkb3V0LlxuICByZXR1cm4gc3Rkb3V0ID8/IFwiXCJcbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgW1xuICBQUk9DRVNTX0NMT1NFX0VWRU5ULFxuICBQUk9DRVNTX0RBVEFfRVZFTlQsXG4gIFBST0NFU1NfRElTQ09OTkVDVF9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVCxcbiAgUFJPQ0VTU19FWElUX0VWRU5ULFxuICBQUk9DRVNTX01FU1NBR0VfRVZFTlQsXG4gIFBST0NFU1NfT1BFTl9FVkVOVCxcbiAgUFJPQ0VTU19TUEFXTl9FVkVOVFxuXSA9IFtcbiAgXCJjbG9zZVwiLFxuICBcImRhdGFcIixcbiAgXCJkaXNjb25uZWN0XCIsXG4gIFwiZXJyb3JcIixcbiAgXCJleGl0XCIsXG4gIFwibWVzc2FnZVwiLFxuICBcIm9wZW5cIixcbiAgXCJzcGF3blwiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0V2ZW50cyA9IFtcbiAgUFJPQ0VTU19DTE9TRV9FVkVOVCxcbiAgUFJPQ0VTU19EQVRBX0VWRU5ULFxuICBQUk9DRVNTX0RJU0NPTk5FQ1RfRVZFTlQsXG4gIFBST0NFU1NfRVJST1JfRVZFTlQsXG4gIFBST0NFU1NfRVhJVF9FVkVOVCxcbiAgUFJPQ0VTU19NRVNTQUdFX0VWRU5ULFxuICBQUk9DRVNTX09QRU5fRVZFTlQsXG4gIFBST0NFU1NfU1BBV05fRVZFTlRcbl0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByb2Nlc3NFdmVudCA9IHR5cGVvZiBwcm9jZXNzRXZlbnRzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZUV2ZW50cyA9IFtQUk9DRVNTX0NMT1NFX0VWRU5ULCBQUk9DRVNTX0VYSVRfRVZFTlRdIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDbG9zZUV2ZW50ID0gdHlwZW9mIGNsb3NlRXZlbnRzW251bWJlcl1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgW0VYRUMsIFNQQVdOLCBGT1JLLCBLSUxMXSA9IFtcbiAgXCJleGVjXCIsXG4gIFwic3Bhd25cIixcbiAgXCJmb3JrXCIsXG4gIFwia2lsbFwiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZXhlY3V0aW9uTWV0aG9kcyA9IFtFWEVDLCBTUEFXTiwgRk9SSywgS0lMTF0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbk1ldGhvZCA9IHR5cGVvZiBleGVjdXRpb25NZXRob2RzW251bWJlcl1cbiIsIi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBbXG4gIFNUUklOR19UWVBFLFxuICBPQkpFQ1RfVFlQRSxcbiAgTlVNQkVSX1RZUEUsXG4gIEJPT0xFQU5fVFlQRSxcbiAgQklHSU5UX1RZUEVcbl0gPSBbXCJzdHJpbmdcIiwgXCJvYmplY3RcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiYmlnaW50XCJdIGFzIGNvbnN0XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemFibGVUeXBlcyA9IFtcbiAgU1RSSU5HX1RZUEUsXG4gIE9CSkVDVF9UWVBFLFxuICBOVU1CRVJfVFlQRSxcbiAgQk9PTEVBTl9UWVBFLFxuICBCSUdJTlRfVFlQRVxuXSBhcyBjb25zdFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemFibGVUeXBlID0gdHlwZW9mIHNlcmlhbGl6YWJsZVR5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVUeXBlcyB7XG4gIHN0cmluZzogc3RyaW5nXG4gIG9iamVjdDogb2JqZWN0XG4gIG51bWJlcjogbnVtYmVyXG4gIGJvb2xlYW46IGJvb2xlYW5cbiAgYmlnaW50OiBib29sZWFuXG59XG4iLCJleHBvcnQgY29uc3QgW1xuICBTSUdBTFJNLFxuICBTSUdCVVMsXG4gIFNJR0NITEQsXG4gIFNJR0NPTlQsXG4gIFNJR0ZQRSxcbiAgU0lHSFVQLFxuICBTSUdJTEwsXG4gIFNJR0lOVCxcbiAgU0lHSU8sXG4gIFNJR0lPVCxcbiAgU0lHS0lMTCxcbiAgU0lHUElQRSxcbiAgU0lHUE9MTCxcbiAgU0lHUFJPRixcbiAgU0lHUFdSLFxuICBTSUdRVUlULFxuICBTSUdTRUdWLFxuICBTSUdTVEtGTFQsXG4gIFNJR1NUT1AsXG4gIFNJR1NZUyxcbiAgU0lHVEVSTSxcbiAgU0lHVFJBUCxcbiAgU0lHVFNUUCxcbiAgU0lHVFRJTixcbiAgU0lHVFRPVSxcbiAgU0lHVU5VU0VELFxuICBTSUdVUkcsXG4gIFNJR1VTUjEsXG4gIFNJR1VTUjIsXG4gIFNJR1ZUQUxSTSxcbiAgU0lHV0lOQ0gsXG4gIFNJR1hDUFUsXG4gIFNJR1hGU1osXG4gIFNJR0JSRUFLLFxuICBTSUdMT1NULFxuICBTSUdJTkZPXG5dID0gW1xuICBcIlNJR0FMUk1cIixcbiAgXCJTSUdCVVNcIixcbiAgXCJTSUdDSExEXCIsXG4gIFwiU0lHQ09OVFwiLFxuICBcIlNJR0ZQRVwiLFxuICBcIlNJR0hVUFwiLFxuICBcIlNJR0lMTFwiLFxuICBcIlNJR0lOVFwiLFxuICBcIlNJR0lPXCIsXG4gIFwiU0lHSU9UXCIsXG4gIFwiU0lHS0lMTFwiLFxuICBcIlNJR1BJUEVcIixcbiAgXCJTSUdQT0xMXCIsXG4gIFwiU0lHUFJPRlwiLFxuICBcIlNJR1BXUlwiLFxuICBcIlNJR1FVSVRcIixcbiAgXCJTSUdTRUdWXCIsXG4gIFwiU0lHU1RLRkxUXCIsXG4gIFwiU0lHU1RPUFwiLFxuICBcIlNJR1NZU1wiLFxuICBcIlNJR1RFUk1cIixcbiAgXCJTSUdUUkFQXCIsXG4gIFwiU0lHVFNUUFwiLFxuICBcIlNJR1RUSU5cIixcbiAgXCJTSUdUVE9VXCIsXG4gIFwiU0lHVU5VU0VEXCIsXG4gIFwiU0lHVVJHXCIsXG4gIFwiU0lHVVNSMVwiLFxuICBcIlNJR1VTUjJcIixcbiAgXCJTSUdWVEFMUk1cIixcbiAgXCJTSUdXSU5DSFwiLFxuICBcIlNJR1hDUFVcIixcbiAgXCJTSUdYRlNaXCIsXG4gIFwiU0lHQlJFQUtcIixcbiAgXCJTSUdMT1NUXCIsXG4gIFwiU0lHSU5GT1wiXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzOiBSZWFkb25seTxOb2RlSlMuU2lnbmFsc1tdPiA9IFtcbiAgU0lHQUxSTSxcbiAgU0lHQlVTLFxuICBTSUdDSExELFxuICBTSUdDT05ULFxuICBTSUdGUEUsXG4gIFNJR0hVUCxcbiAgU0lHSUxMLFxuICBTSUdJTlQsXG4gIFNJR0lPLFxuICBTSUdJT1QsXG4gIFNJR0tJTEwsXG4gIFNJR1BJUEUsXG4gIFNJR1BPTEwsXG4gIFNJR1BST0YsXG4gIFNJR1BXUixcbiAgU0lHUVVJVCxcbiAgU0lHU0VHVixcbiAgU0lHU1RLRkxULFxuICBTSUdTVE9QLFxuICBTSUdTWVMsXG4gIFNJR1RFUk0sXG4gIFNJR1RSQVAsXG4gIFNJR1RTVFAsXG4gIFNJR1RUSU4sXG4gIFNJR1RUT1UsXG4gIFNJR1VOVVNFRCxcbiAgU0lHVVJHLFxuICBTSUdVU1IxLFxuICBTSUdVU1IyLFxuICBTSUdWVEFMUk0sXG4gIFNJR1dJTkNILFxuICBTSUdYQ1BVLFxuICBTSUdYRlNaLFxuICBTSUdCUkVBSyxcbiAgU0lHTE9TVCxcbiAgU0lHSU5GT1xuXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBTaWduYWwgPSB0eXBlb2Ygc2lnbmFsc1tudW1iZXJdXG4iLCJleHBvcnQgY29uc3QgW1xuICBQUk9DRVNTX09QRU5JTkdfU1RBVEUsXG4gIFBST0NFU1NfT1BFTkVEX1NUQVRFLFxuICBQUk9DRVNTX0NMT1NJTkdfU1RBVEUsXG4gIFBST0NFU1NfQ0xPU0VEX1NUQVRFXG5dID0gW1wib3BlbmluZ1wiLCBcIm9wZW5lZFwiLCBcImNsb3NpbmdcIiwgXCJjbG9zZWRcIl0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NTdGF0ZXMgPSBbXG4gIFBST0NFU1NfT1BFTklOR19TVEFURSxcbiAgUFJPQ0VTU19PUEVORURfU1RBVEUsXG4gIFBST0NFU1NfQ0xPU0lOR19TVEFURSxcbiAgUFJPQ0VTU19DTE9TRURfU1RBVEVcbl0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc1N0YXRlID0gdHlwZW9mIHByb2Nlc3NTdGF0ZXNbbnVtYmVyXVxuIiwiLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBbSU9fT1ZFUkxBUFBFRCwgSU9fUElQRSwgSU9fSUdOT1JFLCBJT19JTkhFUklULCBJT19JUENdID0gW1xuICBcIm92ZXJsYXBwZWRcIixcbiAgXCJwaXBlXCIsXG4gIFwiaWdub3JlXCIsXG4gIFwiaW5oZXJpdFwiLFxuICBcImlwY1wiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaW9UeXBlcyA9IFtcbiAgSU9fT1ZFUkxBUFBFRCxcbiAgSU9fUElQRSxcbiAgSU9fSUdOT1JFLFxuICBJT19JTkhFUklULFxuICBJT19JUENcbl0gYXMgY29uc3RcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIElPVHlwZSA9IHR5cGVvZiBpb1R5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBbU1RESU4sIFNURE9VVCwgU1RERVJSLCBTVERJT10gPSBbXG4gIFwic3RkaW5cIixcbiAgXCJzdGRvdXRcIixcbiAgXCJzdGRlcnJcIixcbiAgXCJzdGRpb1wiXG5dIGFzIGNvbnN0XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaW5wdXRUeXBlcyA9IFtTVERJTl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvdXRwdXRUeXBlcyA9IFtTVERPVVQsIFNUREVSUl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0VHlwZSA9IHR5cGVvZiBpbnB1dFR5cGVzW251bWJlcl1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE91dHB1dFR5cGUgPSB0eXBlb2Ygb3V0cHV0VHlwZXNbbnVtYmVyXVxuIiwiaW1wb3J0IHR5cGUgTm9kZSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCJcblxuaW1wb3J0IHR5cGUgeyBTVERFUlIsIFNURE9VVCB9IGZyb20gXCIuL3N0ZGlvXCJcblxuZXhwb3J0IHR5cGUgTm9kZUNoaWxkUHJvY2VzcyA9IE5vZGUuQ2hpbGRQcm9jZXNzXG5cbmV4cG9ydCB0eXBlIE5vZGVFeGVjT3B0aW9ucyA9IE5vZGUuRXhlY09wdGlvbnNcbmV4cG9ydCB0eXBlIE5vZGVTcGF3bk9wdGlvbnMgPSBOb2RlLlNwYXduT3B0aW9uc1xuZXhwb3J0IHR5cGUgTm9kZUZvcmtPcHRpb25zID0gTm9kZS5Gb3JrT3B0aW9uc1xuZXhwb3J0IHR5cGUgTm9kZVN0ZGlvT3B0aW9ucyA9IE5vZGUuU3RkaW9PcHRpb25zXG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6YWJsZSA9IHN0cmluZyB8IG9iamVjdCB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnRcblxuLyoqXG4gKiBTdHJpbmcgb3V0cHV0IGZyb20gY2hpbGQgcHJvY2VzcyBleGVjdXRpb24uXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NSZXN1bHQge1xuICBbU1RET1VUXT86IHN0cmluZ1xuICBbU1RERVJSXT86IHN0cmluZ1xufVxuXG4vKipcbiAqIENvbW1vbiBwcm9jZXNzLmVudiB2YWx1ZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFbnYge1xuICBUWj86IHN0cmluZ1xuICBOT0RFX0VOVj86IFwiZGV2ZWxvcG1lbnRcIiB8IFwidGVzdFwiIHwgXCJwcm9kdWN0aW9uXCJcblxuICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb2RlSlMgXCJleGVjXCIgY29tbWFuZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE5vZGVFeGVjID0gKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE5vZGVFeGVjT3B0aW9uc1xuKSA9PiBQcm9taXNlPFByb2Nlc3NSZXN1bHQ+XG5cbi8qKlxuICogTm9kZUpTIFwic3Bhd25cIiBjb21tYW5kLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTm9kZVNwYXduID0gKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogTm9kZVNwYXduT3B0aW9uc1xuKSA9PiBOb2RlQ2hpbGRQcm9jZXNzXG5cbi8qKlxuICogTm9kZUpTIFwiZm9ya1wiIGNvbW1hbmQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOb2RlRm9yayA9IChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gIG9wdGlvbnM6IE5vZGVGb3JrT3B0aW9uc1xuKSA9PiBOb2RlQ2hpbGRQcm9jZXNzXG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIHByb2Nlc3MgZXJyb3IuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gUG9zc2libGUgZXJyb3IgdmFsdWUgdG8gdGVzdC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBpc1Byb2Nlc3NFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGUuRXhlY0V4Y2VwdGlvbiA9PlxuICB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgISFlcnJvciAmJiBPYmplY3Qua2V5cyhlcnJvcikuaW5jbHVkZXMoXCJjbWRcIilcbiIsImltcG9ydCB7IFByb2Nlc3NUZXJtaW5hdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB7IFBST0NFU1NfRVJST1JfRVZFTlQsIFBST0NFU1NfRVhJVF9FVkVOVCwgU0lHVEVSTSB9IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcywgS2lsbE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFRlcm1pbmF0ZXMgYSBjaGlsZCBjaGlsZFByb2Nlc3MgYW5kIGF3YWl0cyBmb3IgYSBjbG9zZWQgc3RhdGUuXG4gKlxuICogQHJlbWFya3NcbiAqIFJlbW92ZXMgYW55IGxpc3RlbmVycyBhdHRhY2hlZCB0byB0aGUgY2hpbGRQcm9jZXNzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGtpbGwgPSBhc3luYyAoXG4gIGNoaWxkUHJvY2VzczogQ2hpbGRQcm9jZXNzLFxuICBvcHRpb25zOiBQYXJ0aWFsPEtpbGxPcHRpb25zPiA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHRpbWVvdXQsIGV2ZW50LCBzaWduYWwgfTogS2lsbE9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiA1MDAwLFxuICAgICAgZXZlbnQ6IFBST0NFU1NfRVhJVF9FVkVOVCxcbiAgICAgIHNpZ25hbDogU0lHVEVSTSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9jZXNzIGFscmVhZHkga2lsbGVkLCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkuXG4gICAgaWYgKGNoaWxkUHJvY2Vzcy5raWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGFscmVhZHkgYXdhaXRpbmcgYSBraWxsIGV2ZW50LCByZXR1cm4gcHJldmlvdXMgcHJvbWlzZSByYWNlLlxuICAgIGlmIChjaGlsZFByb2Nlc3Mua2lsbGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbY2hpbGRQcm9jZXNzLmtpbGxpbmcsIGRlbGF5KHRpbWVvdXQpXSlcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggdGhlIGZpcnN0IGtpbGwgcmFjZS5cbiAgICBjaGlsZFByb2Nlc3Mua2lsbGluZyA9IFByb21pc2UucmFjZShbXG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBQb2xsIGZvciBhIGtpbGxlZCBpbiBjYXNlIGV2ZW50IGlzIGFscmVhZHkgdHJpZ2dlcmVkLlxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICAgICAgICBpZiAoY2hpbGRQcm9jZXNzLmtpbGxlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gQXdhaXQgY2xvc2Ugb3IgZXhpdCBldmVudCBiZWZvcmUgcmVzb2x2aW5nLlxuICAgICAgICBjaGlsZFByb2Nlc3Mub25jZShldmVudCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEFib3J0IGVhcmx5IGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19FUlJPUl9FVkVOVCwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2VuZCB0ZXJtaW5hdGlvbiBzaWduYWwuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5raWxsKHNpZ25hbClcblxuICAgICAgICAvLyBSZXNvbHZlIGlmIHByb2Nlc3MgaXMgYWxyZWFkeSB0ZXJtaW5hdGVkIGJ5IHRoZSB0aW1lIGxpc3RlbmVycyBhcmUgYXR0YWNoZWQuXG4gICAgICAgIGlmIChjaGlsZFByb2Nlc3Mua2lsbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGVsYXkodGltZW91dClcbiAgICBdKVxuXG4gICAgYXdhaXQgY2hpbGRQcm9jZXNzLmtpbGxpbmdcblxuICAgIC8vIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBhZnRlciB0ZXJtaW5hdGlvbi5cbiAgICBjaGlsZFByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgUHJvY2Vzc1Rlcm1pbmF0aW9uRXJyb3IoY2hpbGRQcm9jZXNzLmNvbW1hbmQsIGVycm9yIGFzIEVycm9yKVxuICB9XG59XG4iLCJpbXBvcnQgeyBUaW1lciB9IGZyb20gXCJAbm9kZXN1aXRlL3RpbWVyXCJcbmltcG9ydCB0eXBlIHsgUGVyZm9ybWFuY2VUaW1lciB9IGZyb20gXCJAbm9kZXN1aXRlL3RpbWVyXCJcblxuaW1wb3J0IHsgcHJvbWlzaWZ5Q2xvc2UsIHByb21pc2lmeU1lc3NhZ2UsIHByb21pc2lmeU9wZW4gfSBmcm9tIFwiLi4vcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgUFJPQ0VTU19DTE9TRV9FVkVOVCxcbiAgUFJPQ0VTU19DTE9TRURfU1RBVEUsXG4gIFBST0NFU1NfREFUQV9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVCxcbiAgUFJPQ0VTU19PUEVORURfU1RBVEUsXG4gIFBST0NFU1NfT1BFTklOR19TVEFURSxcbiAgUFJPQ0VTU19TUEFXTl9FVkVOVCxcbiAgU0lHVEVSTVxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MsIE5vZGVDaGlsZFByb2Nlc3MgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gYXBwZW5kIHNldmVyYWwgbWFuYWdlbWVudCB0b29scyB0byBhIHNwYXduZWQgb3IgZm9ya2VkIHByb2Nlc3MuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIG9ubHkgaW5kaXJlY3RseSB2aWEgYHNwYXduYCBvciBgZm9ya2AuXG4gKlxuICogQHBhcmFtIG5hdGl2ZUNoaWxkUHJvY2VzcyAtIE5hdGl2ZSBjaGlsZCBwcm9jZXNzIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gY29tbWFuZCAtIENvbW1hbmQgbmFtZSBvciBleGVjdXRhYmxlIHBhdGggY2FsbGVkIGJ5IGBzcGF3bmAgb3IgYGZvcmtgLlxuICogQHBhcmFtIG1ldGhvZCAtIEV4ZWN1dGlvbiBtZXRob2QgKGBzcGF3bmAsIGBmb3JrYCkgdXNlZCB0byBzcGF3biB0aGUgcHJvY2Vzcy5cbiAqIEBwYXJhbSBmaWx0ZXJzIC0gU3RyaW5nIGZpbHRlcnMgdXNlZCB0byByZWR1Y2Ugc3Rkb3V0IGFuZCBzdGRlcnIgbm9pc2UuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5hZ2UgPSAoXG4gIG5hdGl2ZUNoaWxkUHJvY2VzczogTm9kZUNoaWxkUHJvY2VzcyxcbiAge1xuICAgIGNvbW1hbmQsXG4gICAgbWV0aG9kLFxuICAgIGZpbHRlcnNcbiAgfTogUGljazxDaGlsZFByb2Nlc3MsIFwiY29tbWFuZFwiIHwgXCJtZXRob2RcIiB8IFwiZmlsdGVyc1wiPlxuKTogQ2hpbGRQcm9jZXNzID0+IHtcbiAgLy8gSW5pdGlhbGl6ZSBhIHRpbWVyIHRvIHRyYWNrIGR1cmF0aW9uLlxuICBjb25zdCB0aW1lcjogUGVyZm9ybWFuY2VUaW1lciA9IG5ldyBUaW1lcigpXG5cbiAgLy8gQXR0YWNoIHRoZSBhZGRpdGlvbmFsIFwibWFuYWdlbWVudFwiIHByb3BlcnRpZXMgdG8gdGhlIGJhc2UgY2hpbGQgcHJvY2Vzcy5cbiAgY29uc3QgY2hpbGRQcm9jZXNzOiBDaGlsZFByb2Nlc3MgPSBPYmplY3QuYXNzaWduKG5hdGl2ZUNoaWxkUHJvY2Vzcywge1xuICAgIGNvbW1hbmQsXG4gICAgbWV0aG9kLFxuICAgIHRpbWVyLFxuICAgIGZpbHRlcnMsXG4gICAga2lsbGluZzogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBQUk9DRVNTX09QRU5JTkdfU1RBVEUsXG4gICAgdW50aWxPcGVuOiBwcm9taXNpZnlPcGVuKG5hdGl2ZUNoaWxkUHJvY2VzcywgY29tbWFuZCksXG4gICAgdW50aWxDbG9zZTogcHJvbWlzaWZ5Q2xvc2UobmF0aXZlQ2hpbGRQcm9jZXNzKSxcbiAgICB1bnRpbE1lc3NhZ2U6IHByb21pc2lmeU1lc3NhZ2UobmF0aXZlQ2hpbGRQcm9jZXNzLCBjb21tYW5kKVxuICB9KVxuXG4gIC8vIENoYW5nZSBzdGF0ZSBhbmQgbm90aWZ5IGRlYnVnZ2VyIG9uIHN0YXRlIGNoYW5nZXMuXG5cbiAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19TUEFXTl9FVkVOVCwgKCkgPT4ge1xuICAgIGNoaWxkUHJvY2Vzcy5zdGF0ZSA9IFBST0NFU1NfT1BFTkVEX1NUQVRFXG4gICAgY29uc29sZS5kZWJ1ZyhgUHJvY2VzcyBcIiR7Y29tbWFuZH1cIiBvcGVuZWQuYClcbiAgfSlcblxuICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0NMT1NFX0VWRU5ULCAoKSA9PiB7XG4gICAgY2hpbGRQcm9jZXNzLnN0YXRlID0gUFJPQ0VTU19DTE9TRURfU1RBVEVcbiAgICBjb25zb2xlLmRlYnVnKGBQcm9jZXNzIFwiJHtjb21tYW5kfVwiIGNsb3NlZC5gKVxuICB9KVxuXG4gIGNoaWxkUHJvY2Vzcy5vbihQUk9DRVNTX0VSUk9SX0VWRU5ULCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5kZWJ1ZyhgUHJvY2VzcyBcIiR7Y29tbWFuZH1cIiBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgaWYgKCFjaGlsZFByb2Nlc3Mua2lsbGVkKSB7XG4gICAgICBjaGlsZFByb2Nlc3Mua2lsbChTSUdURVJNKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmaWx0ZXIgPSAoZGF0YTogQnVmZmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgcmV0dXJuICFjaGlsZFByb2Nlc3MuZmlsdGVycyB8fFxuICAgICAgY2hpbGRQcm9jZXNzLmZpbHRlcnMuZXZlcnkoKGZpbHRlcikgPT4gIW1lc3NhZ2UuaW5jbHVkZXMoZmlsdGVyKSlcbiAgICAgID8gbWVzc2FnZVxuICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IG9uU3Rkb3V0ID0gKGRhdGE6IEJ1ZmZlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZpbHRlcihkYXRhKVxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHttZXNzYWdlfVxcbmApXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25TdGRlcnIgPSAoZGF0YTogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgY29uc3QgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZmlsdGVyKGRhdGEpXG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYClcbiAgICB9XG4gIH1cblxuICBpZiAoY2hpbGRQcm9jZXNzLnN0ZG91dCkge1xuICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQub24oUFJPQ0VTU19EQVRBX0VWRU5ULCBvblN0ZG91dClcbiAgfVxuXG4gIGlmIChjaGlsZFByb2Nlc3Muc3RkZXJyKSB7XG4gICAgY2hpbGRQcm9jZXNzLnN0ZGVyci5vbihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uU3RkZXJyKVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkUHJvY2Vzc1xufVxuIiwiaW1wb3J0IHsgUFJPQ0VTU19DTE9TRV9FVkVOVCwgUFJPQ0VTU19FUlJPUl9FVkVOVCB9IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IENsb3NlUmVhc29uLCBOb2RlQ2hpbGRQcm9jZXNzLCBTaWduYWwgfSBmcm9tIFwiLi4vdHlwZXNcIlxuXG4vKipcbiAqIEF3YWl0cyBhIGNsb3NlIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9taXNpZnlDbG9zZSA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MpID0+ICgpOiBQcm9taXNlPENsb3NlUmVhc29uPiA9PlxuICAgIG5ldyBQcm9taXNlPENsb3NlUmVhc29uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBJZiBwcm9jZXNzIGFscmVhZHkga2lsbGVkLCByZXNvbHZlIGltbWVkaWF0ZWx5LlxuICAgICAgaWYgKGNoaWxkUHJvY2Vzcy5raWxsZWQpIHtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgY29kZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHNpZ25hbDogY2hpbGRQcm9jZXNzLnNpZ25hbENvZGUgPz8gdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIExpc3RlbiBmb3IgY2xvc2UgZXZlbnQgYW5kIHJlc29sdmUgd2l0aCBwYXlsb2FkLlxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoXG4gICAgICAgIFBST0NFU1NfQ0xPU0VfRVZFTlQsXG4gICAgICAgIChjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQsIHNpZ25hbDogU2lnbmFsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgc2lnbmFsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICAvLyBBYm9ydCBvbiBlcnJvcnMuXG4gICAgICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0VSUk9SX0VWRU5ULCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiIsImltcG9ydCB7IE1lc3NhZ2VUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB7XG4gIFBST0NFU1NfQ0xPU0VfRVZFTlQsXG4gIFBST0NFU1NfREFUQV9FVkVOVCxcbiAgUFJPQ0VTU19FUlJPUl9FVkVOVFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlQ2hpbGRQcm9jZXNzLCBTaWduYWwsIFZhbGlkYXRlIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBd2FpdHMgYSBzcGVjaWZpYyBtZXNzYWdlIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogSGFzIGEgZGVmYXVsdCB0aW1lb3V0IG9mIDkwcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKiBAcGFyYW0gY29tbWFuZCAtIE9wdGlvbmFsIG5hbWUgb2YgY29tbWFuZCBmb3IgZGVidWdnaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvbWlzaWZ5TWVzc2FnZSA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MsIGNvbW1hbmQ/OiBzdHJpbmcpID0+XG4gICh2YWxpZGF0ZTogVmFsaWRhdGUsIHRpbWVvdXQ6IG51bWJlciA9IDkwMDAwKTogUHJvbWlzZTxzdHJpbmc+ID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQsIHN0YXJ0IGEgdGltZXIgdG8gcmVqZWN0IHByb21pc2UgaWYgcmVhY2hlZC5cbiAgICAgIGNvbnN0IHRpbWVyOiBOb2RlSlMuVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3I6IEVycm9yID0gbmV3IE1lc3NhZ2VUaW1lb3V0RXJyb3IoXG4gICAgICAgICAgY29tbWFuZCA/PyBjaGlsZFByb2Nlc3MucGlkLFxuICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgKVxuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IubWVzc2FnZSlcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSwgdGltZW91dClcblxuICAgICAgLy8gQWJvcnQgb2JzZXJ2ZXIgaWYgcHJvY2VzcyBjbG9zZXMgYmVmb3JlIGEgbWF0Y2ggaXMgZm91bmQuXG4gICAgICBjb25zdCBvbkNsb3NlID0gKFxuICAgICAgICBjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIHNpZ25hbDogU2lnbmFsIHwgdW5kZWZpbmVkXG4gICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KHsgY29kZSwgc2lnbmFsIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIEFib3J0IG9ic2VydmVyIGlmIHByb2Nlc3MgZXJyb3JzIGJlZm9yZSBhIG1hdGNoIGlzIGZvdW5kLlxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBTZWFyY2ggbWVzc2FnZXMgYmFzZWQgb24gdmFsaWRhdGlvbiBmdW5jdGlvbi5cbiAgICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoaXMgbGlzdGVuZXIgdXBvbiByZXNvbHV0aW9uIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy5cbiAgICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhOiBCdWZmZXIpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAgIGlmICghdmFsaWRhdGUobWVzc2FnZSkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHRoZSByZWplY3Rpb24gdGltZW91dC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQ/Lm9mZihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uRGF0YSlcbiAgICAgICAgY2hpbGRQcm9jZXNzLnN0ZGVycj8ub2ZmKFBST0NFU1NfREFUQV9FVkVOVCwgb25EYXRhKVxuXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5vZmYoUFJPQ0VTU19DTE9TRV9FVkVOVCwgb25DbG9zZSlcbiAgICAgICAgY2hpbGRQcm9jZXNzLm9mZihQUk9DRVNTX0VSUk9SX0VWRU5ULCBvbkVycm9yKVxuXG4gICAgICAgIHJlc29sdmUobWVzc2FnZSlcbiAgICAgIH1cblxuICAgICAgY2hpbGRQcm9jZXNzLnN0ZG91dD8ub24oUFJPQ0VTU19EQVRBX0VWRU5ULCBvbkRhdGEpXG4gICAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbihQUk9DRVNTX0RBVEFfRVZFTlQsIG9uRGF0YSlcblxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19DTE9TRV9FVkVOVCwgb25DbG9zZSlcbiAgICAgIGNoaWxkUHJvY2Vzcy5vbmNlKFBST0NFU1NfRVJST1JfRVZFTlQsIG9uRXJyb3IpXG4gICAgfSlcbiIsImltcG9ydCB7IE9wZW5UaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCJcbmltcG9ydCB7IFBST0NFU1NfRVJST1JfRVZFTlQsIFBST0NFU1NfU1BBV05fRVZFTlQgfSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBd2FpdHMgYSBgc3Bhd25gIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRQcm9jZXNzIC0gU3Bhd25lZCBjaGlsZCBwcm9jZXNzIHRvIG1vbml0b3IuXG4gKiBAcGFyYW0gY29tbWFuZCAtIE9wdGlvbmFsIG5hbWUgb2YgY29tbWFuZCBmb3IgZGVidWdnaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvbWlzaWZ5T3BlbiA9XG4gIChjaGlsZFByb2Nlc3M6IE5vZGVDaGlsZFByb2Nlc3MsIGNvbW1hbmQ/OiBzdHJpbmcpID0+XG4gIGFzeW5jICh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIElmIHByb2Nlc3MgYWxyZWFkeSBvcGVuLCByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAgICBpZiAoY2hpbGRQcm9jZXNzLnBpZCkge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IGF3YWl0IGtpbGxlZCBwcm9jZXNzZXMuXG4gICAgICBpZiAoY2hpbGRQcm9jZXNzLmtpbGxlZCkge1xuICAgICAgICByZWplY3QoYENhbm5vdCBhd2FpdCBvcGVuIG9uIGtpbGxlZCBwcm9jZXNzLmApXG4gICAgICB9XG5cbiAgICAgIC8vIEFib3J0IG9uIGVycm9ycyB3aGlsZSBzcGF3bmluZy5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3I/OiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIHNwYXduIGV2ZW50LlxuICAgICAgY29uc3Qgb25TcGF3biA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFib3J0IGxpc3RlbmVyLlxuICAgICAgICBjaGlsZFByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoUFJPQ0VTU19FUlJPUl9FVkVOVCwgb25FcnJvcilcblxuICAgICAgICAvLyBPbmNlIHByb2Nlc3MgaXMgc3Bhd25lZCwgY29udmVydCB0byBvYnNlcnZhYmxlLlxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsaXN0ZW5lcnMuXG4gICAgICBjaGlsZFByb2Nlc3Mub25jZShQUk9DRVNTX0VSUk9SX0VWRU5ULCBvbkVycm9yKVxuICAgICAgY2hpbGRQcm9jZXNzLm9uY2UoUFJPQ0VTU19TUEFXTl9FVkVOVCwgb25TcGF3bilcblxuICAgICAgLy8gSWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQsIGFib3J0IGlmIHJlYWNoZWQuXG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvcjogRXJyb3IgPSBuZXcgT3BlblRpbWVvdXRFcnJvcihcbiAgICAgICAgICAgIGNvbW1hbmQgPz8gY2hpbGRQcm9jZXNzLnBpZCxcbiAgICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc29sZS53YXJuKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LCB0aW1lb3V0KVxuICAgICAgfVxuICAgIH0pXG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJub2RlOmV2ZW50c1wiXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gXCJAbm9kZXN1aXRlL2RlZmVyXCJcbmltcG9ydCB0eXBlIHsgRGVmZXJyYWwgfSBmcm9tIFwiQG5vZGVzdWl0ZS9kZWZlclwiXG5cbmltcG9ydCB7IFByb2Nlc3NOb3RBdmFpbGFibGVFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIlxuaW1wb3J0IHsgUFJPQ0VTU19DTE9TRV9FVkVOVCwgUFJPQ0VTU19PUEVOX0VWRU5UIH0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBBYnN0cmFjdCB1dGlsaXR5IHdyYXBwZXIgZm9yIGJ1aWxkaW5nIHByb2Nlc3MtYmFzZWQgY2xhc3Nlcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogSW5oZXJpdG9ycyBzaG91bGQgaW1wbGVtZW50IG93biBcIm9wZW5cIiBhbmQgXCJjbG9zZVwiIGxvZ2ljIHdoaWNoIGlzIHByb3ZpZGVkIHRvXG4gKiB0aGUgXCJzZXRPcGVuXCIgYW5kIFwic2V0Q2xvc2VcIiBoYW5kbGVycy5cbiAqXG4gKiBJbXBvcnRhbnRseSwgdG8gcmVsZWFzZSB0aGUgb3BlbmVyIGFuZCBjbG9zZXIgcHJvbWlzZXMsIHRoZSBcIm9wZW5cIiBhbmQgXCJjbG9zZVwiXG4gKiBsb2dpYyBzaG91bGQgZW1pdCB0aGUgYXBwcm9wcmlhdGUgcHJvY2VzcyBldmVudCB0byBzaWduYWwgcmVhZHkgc3RhdGUuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvY2Vzc01hbmFnZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogU3RhdGljIHJlZmVyZW5jZSB0byB0aGUgaW50ZW5kZWQgZXhlY3V0YWJsZSBwYXRoLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29tbWFuZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEludGVybmFsIGNoaWxkIHByb2Nlc3MuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9wcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWRcblxuICAvKipcbiAgICogRGVmZXJyZWQgcHJvbWlzZSB0byBwcmVzZW50IGlmIG9wZW5pbmcgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWd1bi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSAjb3BlbmVyOiBEZWZlcnJhbCA9IGRlZmVyKClcblxuICAvKipcbiAgICogRGVmZXJyZWQgcHJvbWlzZSB0byBwcmVzZW50IGlmIGNsb3NpbmcgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWd1bi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSAjY2xvc2VyOiBEZWZlcnJhbCA9IGRlZmVyKClcblxuICAvKipcbiAgICogRmxhZyB0byBhdm9pZCBtdWx0aXBsZSBvcGVuLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNpc09wZW5pbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGF2b2lkIG11bHRpcGxlIGNsb3Nlcy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICAjaXNDbG9zaW5nOiBib29sZWFuID0gZmFsc2VcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBleGVjdXRhYmxlIHBhdGggb2YgdGhlIHVuZGVybHlpbmcgY2hpbGQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGdldCBjb21tYW5kKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbW1hbmRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJvY2VzcyBpZCBvZiB0aGUgaW50ZXJuYWwgY2hpbGQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGdldCBwaWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCkucGlkXG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBpbnRlcm5hbCBjaGlsZCBwcm9jZXNzIGFuZCBhc3NlcnQgcmVhZHkgc3RhdGUuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBwcm9jZXNzKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgaWYgKCF0aGlzLl9wcm9jZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgUHJvY2Vzc05vdEF2YWlsYWJsZUVycm9yKHRoaXMuY29tbWFuZClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgdGhlIGRlZmVycmVkIGNsb3NlIGV2ZW50LlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwdWJsaWMgdW50aWxDbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jY2xvc2VyLnVudGlsUmVzb2x2ZWQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhpc3Rpbmcgb3BlbiBvciBzZXRzIGFuIG9wZW5pbmcgc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgaXMgdXNlZCB0byBzdGFjayBkdXBsaWNhdGUgb3BlbiBjYWxscyBpbnRvIHRoZSBzaW5nbGUgcHJvbWlzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX3NldE9wZW4ob3BlbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLiNpc09wZW5pbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLiNvcGVuZXIucHJvbWlzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uY2UoUFJPQ0VTU19PUEVOX0VWRU5ULCAoKSA9PiB0aGlzLiNvcGVuZXIucmVzb2x2ZSgpKVxuICAgICAgcmV0dXJuIG9wZW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4aXN0aW5nIGNsb3NlIG9yIHNldHMgYSBjbG9zaW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gc3RhY2sgZHVwbGljYXRlIGNsb3NlIGNhbGxzIGludG8gdGhlIHNpbmdsZSBwcm9taXNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfc2V0Q2xvc2UoY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy4jaXNDbG9zaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy4jY2xvc2VyLnByb21pc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbmNlKFBST0NFU1NfQ0xPU0VfRVZFTlQsICgpID0+IHRoaXMuI2Nsb3Nlci5yZXNvbHZlKCkpXG4gICAgICByZXR1cm4gY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIG9wZW5pbmcgcHJvY2VzcyBpZiBzdGFydGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29tcGxldGVPcGVuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcm9jZXNzKSB7XG4gICAgICB0aGlzLmVtaXQoUFJPQ0VTU19PUEVOX0VWRU5UKVxuICAgICAgdGhpcy4jb3BlbmVyLnJlc29sdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUHJvY2Vzc05vdEF2YWlsYWJsZUVycm9yKHRoaXMuY29tbWFuZClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGVzIHRoZSBjbG9zaW5nIHByb2Nlc3MgaWYgc3RhcnRlZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2NvbXBsZXRlQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Byb2Nlc3MpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3MudGltZXIuc3RvcCgpXG4gICAgICB0aGlzLmVtaXQoUFJPQ0VTU19DTE9TRV9FVkVOVClcbiAgICAgIHRoaXMuI2Nsb3Nlci5yZXNvbHZlKClcbiAgICAgIHRoaXMuX3Byb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFByb2Nlc3NOb3RBdmFpbGFibGVFcnJvcih0aGlzLmNvbW1hbmQpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBjb25maWd1cmUsIG5vZGVTcGF3biB9IGZyb20gXCIuLi9zdXBwb3J0XCJcbmltcG9ydCB7IFNQQVdOIH0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB7IG1hbmFnZSB9IGZyb20gXCIuL21hbmFnZVwiXG5pbXBvcnQgdHlwZSB7XG4gIENoaWxkUHJvY2VzcyxcbiAgRXhlY3V0aW9uTWV0aG9kLFxuICBQcm9jZXNzQ29uZmlnLFxuICBTcGF3bk9wdGlvbnNcbn0gZnJvbSBcIi4uL3R5cGVzXCJcblxuLyoqXG4gKiBTcGF3bnMgYW4gb2JzZXJ2YWJsZSBjaGlsZCBwcm9jZXNzIGFuZCBhd2FpdHMgYSByZWFkeSBzdGF0ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogT3B0aW9uYWxseSBhdHRhY2hlcyBob29rcyB0byBhbnkgdmFsaWQgY2hpbGQgcHJvY2VzcyBldmVudC5cbiAqIEF1dG9tYXRpY2FsbHkgaW5qZWN0cyBwcm9jZXNzLmVudiBpbnRvIGVudiBvcHRpb25zLlxuICogRm9ya2VkIHByb2Nlc3NlcyBcImluaGVyaXRcIiBzdGRpbyByYXRoZXIgdGhhbiBcInBpcGVcIiBhcyBkZWZhdWx0LlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gY3VycmVudCBwcm9jZXNzIGFyZSBpbmplY3RlZCB0aHJvdWdoIHRvIGNoaWxkIHByb2Nlc3MuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3Bhd24gPSBhc3luYyAoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgeyBmaWx0ZXJzLCAuLi5vcHRpb25zIH06IFNwYXduT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPENoaWxkUHJvY2Vzcz4gPT4ge1xuICAvLyBDb25maWd1cmUgYXJncyBhbmQgb3B0aW9ucy5cbiAgY29uc3QgY29uZmlnOiBQcm9jZXNzQ29uZmlnPFNwYXduT3B0aW9ucz4gPSBjb25maWd1cmUoeyBhcmdzLCBvcHRpb25zIH0pXG4gIGNvbnN0IG1ldGhvZDogRXhlY3V0aW9uTWV0aG9kID0gU1BBV05cblxuICAvLyBTcGF3biBhIG5ldyBjaGlsZCBwcm9jZXNzLlxuICBjb25zdCBjaGlsZFByb2Nlc3M6IENoaWxkUHJvY2VzcyA9IG1hbmFnZShcbiAgICBub2RlU3Bhd24oY29tbWFuZCwgY29uZmlnLmFyZ3MsIGNvbmZpZy5vcHRpb25zKSxcbiAgICB7XG4gICAgICBjb21tYW5kLFxuICAgICAgbWV0aG9kLFxuICAgICAgZmlsdGVyczogZmlsdGVycyA/PyBbXVxuICAgIH1cbiAgKVxuXG4gIC8vIEF3YWl0IGNvbXBsZXRlZCBzcGF3biBldmVudC5cbiAgYXdhaXQgY2hpbGRQcm9jZXNzLnVudGlsT3BlbigpXG5cbiAgcmV0dXJuIGNoaWxkUHJvY2Vzc1xufVxuIl19
{
"$schema": "https://json.schemastore.org/package",
"name": "@nodesuite/process",
"version": "0.3.26",
"version": "0.3.27",
"description": "Enhanced Node child-process management.",

@@ -29,4 +29,4 @@ "keywords": [

"tslib": "^2.4.1",
"@nodesuite/defer": "0.3.26",
"@nodesuite/timer": "0.3.26"
"@nodesuite/defer": "0.3.27",
"@nodesuite/timer": "0.3.27"
},

@@ -42,3 +42,3 @@ "devDependencies": {

"dpdm": "^3.10.0",
"eslint": "8.22.0",
"eslint": "8.32.0",
"npm-check-updates": "^15.3.4",

@@ -49,4 +49,4 @@ "npm-run-all": "^4.1.5",

"typescript": "4.7.4",
"@nodesuite/eslint-config": "0.3.26",
"@nodesuite/node-rig": "0.3.26"
"@nodesuite/eslint-config": "0.3.27",
"@nodesuite/node-rig": "0.3.27"
},

@@ -53,0 +53,0 @@ "engines": {

@@ -14,2 +14,3 @@ /**

)
this.name = "MessageTimeoutError"
this.command = command

@@ -16,0 +17,0 @@ this.timeout = timeout

@@ -14,2 +14,3 @@ /**

)
this.name = "OpenTimeoutError"
this.command = command

@@ -16,0 +17,0 @@ this.timeout = timeout

@@ -15,4 +15,5 @@ import type { Options, ProcessConfig } from "../types"

)
this.name = "ProcessConfigurationError"
this.config = config
}
}

@@ -6,4 +6,5 @@ export class ProcessExecutionError extends Error {

super(`Encountered an error executing child process ${command}: ${stderr}`)
this.name = "ProcessExecutionError"
this.command = command
}
}

@@ -6,4 +6,5 @@ export class ProcessNotAvailableError extends Error {

super(`Encountered an error spawning child process ${command}.`)
this.name = "ProcessNotAvailableError"
this.command = command
}
}

@@ -6,4 +6,5 @@ export class ProcessSpawnError extends Error {

super(`Encountered an error spawning child process ${command}: ${stderr}`)
this.name = "ProcessSpawnError"
this.command = command
}
}

@@ -10,2 +10,3 @@ export class ProcessTerminationError extends Error {

)
this.name = "ProcessTerminationError"
this.command = command

@@ -12,0 +13,0 @@ this.error = error

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc