From 6ea5c19a6f9e97e7ff9f98f2691c07a1159e607c Mon Sep 17 00:00:00 2001 From: Denys Date: Thu, 30 Jun 2022 12:44:03 +0300 Subject: [PATCH] chore(release): 5.0.1 --- CHANGELOG.md | 9 +++++++++ README.md | 2 +- dist/CHANGELOG.md | 9 +++++++++ dist/README.md | 2 +- dist/VERSION.md | 2 +- dist/declarations/client/index.d.ts | 18 ------------------ dist/mailjet.node.js | 4 ++-- dist/mailjet.node.js.LICENSE.txt | 2 +- dist/mailjet.web.js | 4 ++-- dist/mailjet.web.js.LICENSE.txt | 2 +- dist/package-lock.json | 2 +- dist/package.json | 2 +- docs/classes/client.default.html | 2 +- docs/classes/index.default.html | 2 +- docs/classes/request.default.html | 2 +- docs/enums/request_HttpMethods.default.html | 2 +- docs/index.html | 2 +- .../client_IClient.IClientParams.html | 2 +- .../request_IRequest.IRequestConfig.html | 2 +- .../request_IRequest.IRequestOptions.html | 2 +- .../types_api_Response.IAPILocalResponse.html | 2 +- .../types_api_Response.IAPIResponse.html | 2 +- docs/modules/client.html | 2 +- docs/modules/request_IRequest.html | 2 +- docs/modules/types.TArray.html | 2 +- docs/modules/types.TFunction.html | 2 +- docs/modules/types.TObject.html | 2 +- docs/modules/utils_isNil.html | 2 +- docs/modules/utils_isNull.html | 2 +- docs/modules/utils_isPureObject.html | 2 +- docs/modules/utils_isUndefined.html | 2 +- docs/modules/utils_setValueIfNotNil.html | 2 +- package-lock.json | 2 +- package.json | 2 +- 34 files changed, 51 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c4886c..bf69b90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [5.0.1](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v5.0.0...v5.0.1) (2022-06-30) + + +### Build changes + +* Add standard-version updater for README ([e615ff7](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/e615ff7cf7a07f224a4f542422b1c3bbd20179f7)) +* Add VersionBump script ([f2ed676](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/f2ed676134cd1dcf091fe766b7c76b2c12e625a4)) +* Move standard-version config from package.json to .versionrc.js ([122e4a5](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/122e4a5c7975773e891591cf4f3431a0e7cd77e1)) + ## [5.0.0](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v4.0.1...v5.0.0) (2022-06-24) diff --git a/README.md b/README.md index 2990615..0da29de 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # Mailjet JS [![Build Status](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs.svg?branch=master)](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs) -![Current Version](https://img.shields.io/badge/version-5.0.0-green.svg) +![Current Version](https://img.shields.io/badge/version-5.0.1-green.svg) ## Overview diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md index 4c4886c..bf69b90 100644 --- a/dist/CHANGELOG.md +++ b/dist/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [5.0.1](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v5.0.0...v5.0.1) (2022-06-30) + + +### Build changes + +* Add standard-version updater for README ([e615ff7](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/e615ff7cf7a07f224a4f542422b1c3bbd20179f7)) +* Add VersionBump script ([f2ed676](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/f2ed676134cd1dcf091fe766b7c76b2c12e625a4)) +* Move standard-version config from package.json to .versionrc.js ([122e4a5](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/122e4a5c7975773e891591cf4f3431a0e7cd77e1)) + ## [5.0.0](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v4.0.1...v5.0.0) (2022-06-24) diff --git a/dist/README.md b/dist/README.md index 2990615..0da29de 100644 --- a/dist/README.md +++ b/dist/README.md @@ -10,7 +10,7 @@ # Mailjet JS [![Build Status](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs.svg?branch=master)](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs) -![Current Version](https://img.shields.io/badge/version-5.0.0-green.svg) +![Current Version](https://img.shields.io/badge/version-5.0.1-green.svg) ## Overview diff --git a/dist/VERSION.md b/dist/VERSION.md index 28cbf7c..32f3eaa 100644 --- a/dist/VERSION.md +++ b/dist/VERSION.md @@ -1 +1 @@ -5.0.0 \ No newline at end of file +5.0.1 \ No newline at end of file diff --git a/dist/declarations/client/index.d.ts b/dist/declarations/client/index.d.ts index 6fa3ec7..1f16156 100644 --- a/dist/declarations/client/index.d.ts +++ b/dist/declarations/client/index.d.ts @@ -150,24 +150,6 @@ declare class Client { url: string; }; readonly contributors: string[]; - readonly "standard-version": { - commitUrlFormat: string; - compareUrlFormat: string; - types: ({ - type: string; - section: string; - hidden?: undefined; - } | { - type: string; - hidden: boolean; - section?: undefined; - })[]; - scripts: { - prerelease: string; - postchangelog: string; - posttag: string; - }; - }; }>; } export default Client; diff --git a/dist/mailjet.node.js b/dist/mailjet.node.js index ce02778..d0f8dfe 100644 --- a/dist/mailjet.node.js +++ b/dist/mailjet.node.js @@ -1,3 +1,3 @@ /*! For license information please see mailjet.node.js.LICENSE.txt */ -!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailjet=a():e.mailjet=a()}(this,(()=>{return e={9118:(e,a,i)=>{e.exports={parallel:i(9162),serial:i(1357),serialOrdered:i(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,i)=>{var n=i(9265);e.exports=function(e){var a=!1;return n((function(){a=!0})),function(i,o){a?e(i,o):n((function(){e(i,o)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,i)=>{var n=i(5912),o=i(7651);e.exports=function(e,a,i,s){var t=i.keyedList?i.keyedList[i.index]:i.index;i.jobs[t]=function(e,a,i,o){return 2==e.length?e(i,n(o)):e(i,a,n(o))}(a,t,e[t],(function(e,a){t in i.jobs&&(delete i.jobs[t],e?o(i):i.results[t]=a,s(e,i.results))}))}},4528:e=>{e.exports=function(e,a){var i=!Array.isArray(e),n={index:0,keyedList:i||a?Object.keys(e):null,jobs:{},results:i?{}:[],size:i?Object.keys(e).length:e.length};return a&&n.keyedList.sort(i?a:function(i,n){return a(e[i],e[n])}),n}},5353:(e,a,i)=>{var n=i(7651),o=i(5912);e.exports=function(e){Object.keys(this.jobs).length&&(this.index=this.size,n(this),o(e)(null,this.results))}},9162:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);e.exports=function(e,a,i){for(var t=o(e);t.index<(t.keyedList||e).length;)n(e,a,t,(function(e,a){e?i(e,a):0!==Object.keys(t.jobs).length||i(null,t.results)})),t.index++;return s.bind(t,i)}},1357:(e,a,i)=>{var n=i(9087);e.exports=function(e,a,i){return n(e,a,null,i)}},9087:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);function t(e,a){return ea?1:0}e.exports=function(e,a,i,t){var r=o(e,i);return n(e,a,r,(function i(o,s){o?t(o,s):(r.index++,r.index<(r.keyedList||e).length?n(e,a,r,i):t(null,r.results))})),s.bind(r,t)},e.exports.ascending=t,e.exports.descending=function(e,a){return-1*t(e,a)}},9669:(e,a,i)=>{e.exports=i(1609)},7970:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4097),t=i(5327),r=i(3685),c=i(5687),p=i(938).http,l=i(938).https,u=i(7310),m=i(9796),d=i(7288).version,f=i(7874),x=i(2648),v=i(644),h=/https:?/,b=["http:","https:","file:"];function g(e,a,i){if(e.hostname=a.host,e.host=a.host,e.port=a.port,e.path=i,a.auth){var n=Buffer.from(a.auth.username+":"+a.auth.password,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+n}e.beforeRedirect=function(e){e.headers.host=e.host,g(e,a,e.href)}}e.exports=function(e){return new Promise((function(a,i){var y;function w(){e.cancelToken&&e.cancelToken.unsubscribe(y),e.signal&&e.signal.removeEventListener("abort",y)}var j=function(e){w(),a(e)},k=!1,_=function(e){w(),k=!0,i(e)},E=e.data,O=e.headers,C={};if(Object.keys(O).forEach((function(e){C[e.toLowerCase()]=e})),"user-agent"in C?O[C["user-agent"]]||delete O[C["user-agent"]]:O["User-Agent"]="axios/"+d,n.isFormData(E)&&n.isFunction(E.getHeaders))Object.assign(O,E.getHeaders());else if(E&&!n.isStream(E)){if(Buffer.isBuffer(E));else if(n.isArrayBuffer(E))E=Buffer.from(new Uint8Array(E));else{if(!n.isString(E))return _(new x("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",x.ERR_BAD_REQUEST,e));E=Buffer.from(E,"utf-8")}if(e.maxBodyLength>-1&&E.length>e.maxBodyLength)return _(new x("Request body larger than maxBodyLength limit",x.ERR_BAD_REQUEST,e));C["content-length"]||(O["Content-Length"]=E.length)}var S=void 0;e.auth&&(S=(e.auth.username||"")+":"+(e.auth.password||""));var R=s(e.baseURL,e.url),A=u.parse(R),T=A.protocol||b[0];if(-1===b.indexOf(T))return _(new x("Unsupported protocol "+T,x.ERR_BAD_REQUEST,e));if(!S&&A.auth){var z=A.auth.split(":");S=(z[0]||"")+":"+(z[1]||"")}S&&C.authorization&&delete O[C.authorization];var N=h.test(T),B=N?e.httpsAgent:e.httpAgent;try{t(A.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){var q=new Error(a.message);q.config=e,q.url=e.url,q.exists=!0,_(q)}var P={path:t(A.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:O,agent:B,agents:{http:e.httpAgent,https:e.httpsAgent},auth:S};e.socketPath?P.socketPath=e.socketPath:(P.hostname=A.hostname,P.port=A.port);var F,L=e.proxy;if(!L&&!1!==L){var U=T.slice(0,-1)+"_proxy",D=process.env[U]||process.env[U.toUpperCase()];if(D){var I=u.parse(D),M=process.env.no_proxy||process.env.NO_PROXY,H=!0;if(M&&(H=!M.split(",").map((function(e){return e.trim()})).some((function(e){return!!e&&("*"===e||"."===e[0]&&A.hostname.substr(A.hostname.length-e.length)===e||A.hostname===e)}))),H&&(L={host:I.hostname,port:I.port,protocol:I.protocol},I.auth)){var V=I.auth.split(":");L.auth={username:V[0],password:V[1]}}}}L&&(P.headers.host=A.hostname+(A.port?":"+A.port:""),g(P,L,T+"//"+A.hostname+(A.port?":"+A.port:"")+P.path));var $=N&&(!L||h.test(L.protocol));e.transport?F=e.transport:0===e.maxRedirects?F=$?c:r:(e.maxRedirects&&(P.maxRedirects=e.maxRedirects),e.beforeRedirect&&(P.beforeRedirect=e.beforeRedirect),F=$?l:p),e.maxBodyLength>-1&&(P.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(P.insecureHTTPParser=e.insecureHTTPParser);var G=F.request(P,(function(a){if(!G.aborted){var i=a,s=a.req||G;if(204!==a.statusCode&&"HEAD"!==s.method&&!1!==e.decompress)switch(a.headers["content-encoding"]){case"gzip":case"compress":case"deflate":i=i.pipe(m.createUnzip()),delete a.headers["content-encoding"]}var t={status:a.statusCode,statusText:a.statusMessage,headers:a.headers,config:e,request:s};if("stream"===e.responseType)t.data=i,o(j,_,t);else{var r=[],c=0;i.on("data",(function(a){r.push(a),c+=a.length,e.maxContentLength>-1&&c>e.maxContentLength&&(k=!0,i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("aborted",(function(){k||(i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("error",(function(a){G.aborted||_(x.from(a,null,e,s))})),i.on("end",(function(){try{var a=1===r.length?r[0]:Buffer.concat(r);"arraybuffer"!==e.responseType&&(a=a.toString(e.responseEncoding),e.responseEncoding&&"utf8"!==e.responseEncoding||(a=n.stripBOM(a))),t.data=a}catch(a){_(x.from(a,null,e,t.request,t))}o(j,_,t)}))}}}));if(G.on("error",(function(a){_(x.from(a,null,e,G))})),G.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){var J=parseInt(e.timeout,10);if(isNaN(J))return void _(new x("error trying to parse `config.timeout` to int",x.ERR_BAD_OPTION_VALUE,e,G));G.setTimeout(J,(function(){G.abort();var a=e.transitional||f;_(new x("timeout of "+J+"ms exceeded",a.clarifyTimeoutError?x.ETIMEDOUT:x.ECONNABORTED,e,G))}))}(e.cancelToken||e.signal)&&(y=function(e){G.aborted||(G.abort(),_(!e||e&&e.type?new v:e))},e.cancelToken&&e.cancelToken.subscribe(y),e.signal&&(e.signal.aborted?y():e.signal.addEventListener("abort",y))),n.isStream(E)?E.on("error",(function(a){_(x.from(a,e,null,G))})).pipe(G):G.end(E)}))}},5448:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4372),t=i(5327),r=i(4097),c=i(4109),p=i(7985),l=i(7874),u=i(2648),m=i(644),d=i(205);e.exports=function(e){return new Promise((function(a,i){var f,x=e.data,v=e.headers,h=e.responseType;function b(){e.cancelToken&&e.cancelToken.unsubscribe(f),e.signal&&e.signal.removeEventListener("abort",f)}n.isFormData(x)&&n.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(y+":"+w)}var j=r(e.baseURL,e.url);function k(){if(g){var n="getAllResponseHeaders"in g?c(g.getAllResponseHeaders()):null,s={data:h&&"text"!==h&&"json"!==h?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){a(e),b()}),(function(e){i(e),b()}),s),g=null}}if(g.open(e.method.toUpperCase(),t(j,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=k:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(k)},g.onabort=function(){g&&(i(new u("Request aborted",u.ECONNABORTED,e,g)),g=null)},g.onerror=function(){i(new u("Network Error",u.ERR_NETWORK,e,g,g)),g=null},g.ontimeout=function(){var a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||l;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),i(new u(a,n.clarifyTimeoutError?u.ETIMEDOUT:u.ECONNABORTED,e,g)),g=null},n.isStandardBrowserEnv()){var _=(e.withCredentials||p(j))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;_&&(v[e.xsrfHeaderName]=_)}"setRequestHeader"in g&&n.forEach(v,(function(e,a){void 0===x&&"content-type"===a.toLowerCase()?delete v[a]:g.setRequestHeader(a,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),h&&"json"!==h&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(f=function(e){g&&(i(!e||e&&e.type?new m:e),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(f),e.signal&&(e.signal.aborted?f():e.signal.addEventListener("abort",f))),x||(x=null);var E=d(j);E&&-1===["http","https","file"].indexOf(E)?i(new u("Unsupported protocol "+E+":",u.ERR_BAD_REQUEST,e)):g.send(x)}))}},1609:(e,a,i)=>{"use strict";var n=i(4867),o=i(1849),s=i(321),t=i(7185),r=function e(a){var i=new s(a),r=o(s.prototype.request,i);return n.extend(r,s.prototype,i),n.extend(r,i),r.create=function(i){return e(t(a,i))},r}(i(5546));r.Axios=s,r.CanceledError=i(644),r.CancelToken=i(4972),r.isCancel=i(6502),r.VERSION=i(7288).version,r.toFormData=i(7675),r.AxiosError=i(2648),r.Cancel=r.CanceledError,r.all=function(e){return Promise.all(e)},r.spread=i(8713),r.isAxiosError=i(6268),e.exports=r,e.exports.default=r},4972:(e,a,i)=>{"use strict";var n=i(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var a;this.promise=new Promise((function(e){a=e}));var i=this;this.promise.then((function(e){if(i._listeners){var a,n=i._listeners.length;for(a=0;a{"use strict";var n=i(2648);function o(e){n.call(this,null==e?"canceled":e,n.ERR_CANCELED),this.name="CanceledError"}i(4867).inherits(o,n,{__CANCEL__:!0}),e.exports=o},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,a,i)=>{"use strict";var n=i(4867),o=i(5327),s=i(782),t=i(3572),r=i(7185),c=i(4097),p=i(4875),l=p.validators;function u(e){this.defaults=e,this.interceptors={request:new s,response:new s}}u.prototype.request=function(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},(a=r(this.defaults,a)).method?a.method=a.method.toLowerCase():this.defaults.method?a.method=this.defaults.method.toLowerCase():a.method="get";var i=a.transitional;void 0!==i&&p.assertOptions(i,{silentJSONParsing:l.transitional(l.boolean),forcedJSONParsing:l.transitional(l.boolean),clarifyTimeoutError:l.transitional(l.boolean)},!1);var n=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var s,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!o){var u=[t,void 0];for(Array.prototype.unshift.apply(u,n),u=u.concat(c),s=Promise.resolve(a);u.length;)s=s.then(u.shift(),u.shift());return s}for(var m=a;n.length;){var d=n.shift(),f=n.shift();try{m=d(m)}catch(e){f(e);break}}try{s=t(m)}catch(e){return Promise.reject(e)}for(;c.length;)s=s.then(c.shift(),c.shift());return s},u.prototype.getUri=function(e){e=r(this.defaults,e);var a=c(e.baseURL,e.url);return o(a,e.params,e.paramsSerializer)},n.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(a,i){return this.request(r(i||{},{method:e,url:a,data:(i||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){function a(a){return function(i,n,o){return this.request(r(o||{},{method:e,headers:a?{"Content-Type":"multipart/form-data"}:{},url:i,data:n}))}}u.prototype[e]=a(),u.prototype[e+"Form"]=a(!0)})),e.exports=u},2648:(e,a,i)=>{"use strict";var n=i(4867);function o(e,a,i,n,o){Error.call(this),this.message=e,this.name="AxiosError",a&&(this.code=a),i&&(this.config=i),n&&(this.request=n),o&&(this.response=o)}n.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var s=o.prototype,t={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){t[e]={value:e}})),Object.defineProperties(o,t),Object.defineProperty(s,"isAxiosError",{value:!0}),o.from=function(e,a,i,t,r,c){var p=Object.create(s);return n.toFlatObject(e,p,(function(e){return e!==Error.prototype})),o.call(p,e.message,a,i,t,r),p.name=e.name,c&&Object.assign(p,c),p},e.exports=o},782:(e,a,i)=>{"use strict";var n=i(4867);function o(){this.handlers=[]}o.prototype.use=function(e,a,i){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(a){null!==a&&e(a)}))},e.exports=o},4097:(e,a,i)=>{"use strict";var n=i(1793),o=i(7303);e.exports=function(e,a){return e&&!n(a)?o(e,a):a}},3572:(e,a,i)=>{"use strict";var n=i(4867),o=i(8527),s=i(6502),t=i(5546),r=i(644);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new r}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(a){delete e.headers[a]})),(e.adapter||t.adapter)(e).then((function(a){return c(e),a.data=o.call(e,a.data,a.headers,e.transformResponse),a}),(function(a){return s(a)||(c(e),a&&a.response&&(a.response.data=o.call(e,a.response.data,a.response.headers,e.transformResponse))),Promise.reject(a)}))}},7185:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||{};var i={};function o(e,a){return n.isPlainObject(e)&&n.isPlainObject(a)?n.merge(e,a):n.isPlainObject(a)?n.merge({},a):n.isArray(a)?a.slice():a}function s(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(e[i],a[i])}function t(e){if(!n.isUndefined(a[e]))return o(void 0,a[e])}function r(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(void 0,a[i])}function c(i){return i in a?o(e[i],a[i]):i in e?o(void 0,e[i]):void 0}var p={url:t,method:t,data:t,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:c};return n.forEach(Object.keys(e).concat(Object.keys(a)),(function(e){var a=p[e]||s,o=a(e);n.isUndefined(o)&&a!==c||(i[e]=o)})),i}},6026:(e,a,i)=>{"use strict";var n=i(2648);e.exports=function(e,a,i){var o=i.config.validateStatus;i.status&&o&&!o(i.status)?a(new n("Request failed with status code "+i.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i)):e(i)}},8527:(e,a,i)=>{"use strict";var n=i(4867),o=i(5546);e.exports=function(e,a,i){var s=this||o;return n.forEach(i,(function(i){e=i.call(s,e,a)})),e}},3784:(e,a,i)=>{e.exports=i(6882)},5546:(e,a,i)=>{"use strict";var n=i(4867),o=i(6016),s=i(2648),t=i(7874),r=i(7675),c={"Content-Type":"application/x-www-form-urlencoded"};function p(e,a){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=a)}var l,u={transitional:t,adapter:("undefined"!=typeof XMLHttpRequest?l=i(5448):"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)&&(l=i(7970)),l),transformRequest:[function(e,a){if(o(a,"Accept"),o(a,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e))return e;if(n.isArrayBufferView(e))return e.buffer;if(n.isURLSearchParams(e))return p(a,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var i,s=n.isObject(e),t=a&&a["Content-Type"];if((i=n.isFileList(e))||s&&"multipart/form-data"===t){var c=this.env&&this.env.FormData;return r(i?{"files[]":e}:e,c&&new c)}return s||"application/json"===t?(p(a,"application/json"),function(e,a,i){if(n.isString(e))try{return(a||JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var a=this.transitional||u.transitional,i=a&&a.silentJSONParsing,o=a&&a.forcedJSONParsing,t=!i&&"json"===this.responseType;if(t||o&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(t){if("SyntaxError"===e.name)throw s.from(e,s.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:i(3784)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){u.headers[e]=n.merge(c)})),e.exports=u},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,a){return function(){for(var i=new Array(arguments.length),n=0;n{"use strict";var n=i(4867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,a,i){if(!a)return e;var s;if(i)s=i(a);else if(n.isURLSearchParams(a))s=a.toString();else{var t=[];n.forEach(a,(function(e,a){null!=e&&(n.isArray(e)?a+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),t.push(o(a)+"="+o(e))})))})),s=t.join("&")}if(s){var r=e.indexOf("#");-1!==r&&(e=e.slice(0,r)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}},7303:e=>{"use strict";e.exports=function(e,a){return a?e.replace(/\/+$/,"")+"/"+a.replace(/^\/+/,""):e}},4372:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?{write:function(e,a,i,o,s,t){var r=[];r.push(e+"="+encodeURIComponent(a)),n.isNumber(i)&&r.push("expires="+new Date(i).toGMTString()),n.isString(o)&&r.push("path="+o),n.isString(s)&&r.push("domain="+s),!0===t&&r.push("secure"),document.cookie=r.join("; ")},read:function(e){var a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},7985:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?function(){var e,a=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function o(e){var n=e;return a&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=o(window.location.href),function(a){var i=n.isString(a)?o(a):a;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0}},6016:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){n.forEach(e,(function(i,n){n!==a&&n.toUpperCase()===a.toUpperCase()&&(e[a]=i,delete e[n])}))}},4109:(e,a,i)=>{"use strict";var n=i(4867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var a,i,s,t={};return e?(n.forEach(e.split("\n"),(function(e){if(s=e.indexOf(":"),a=n.trim(e.substr(0,s)).toLowerCase(),i=n.trim(e.substr(s+1)),a){if(t[a]&&o.indexOf(a)>=0)return;t[a]="set-cookie"===a?(t[a]?t[a]:[]).concat([i]):t[a]?t[a]+", "+i:i}})),t):t}},205:e=>{"use strict";e.exports=function(e){var a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(a){return e.apply(null,a)}}},7675:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||new FormData;var i=[];function o(e){return null===e?"":n.isDate(e)?e.toISOString():n.isArrayBuffer(e)||n.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(s,t){if(n.isPlainObject(s)||n.isArray(s)){if(-1!==i.indexOf(s))throw Error("Circular reference detected in "+t);i.push(s),n.forEach(s,(function(i,s){if(!n.isUndefined(i)){var r,c=t?t+"."+s:s;if(i&&!t&&"object"==typeof i)if(n.endsWith(s,"{}"))i=JSON.stringify(i);else if(n.endsWith(s,"[]")&&(r=n.toArray(i)))return void r.forEach((function(e){!n.isUndefined(e)&&a.append(c,o(e))}));e(i,c)}})),i.pop()}else a.append(t,o(s))}(e),a}},4875:(e,a,i)=>{"use strict";var n=i(7288).version,o=i(2648),s={};["object","boolean","number","function","string","symbol"].forEach((function(e,a){s[e]=function(i){return typeof i===e||"a"+(a<1?"n ":" ")+e}}));var t={};s.transitional=function(e,a,i){function s(e,a){return"[Axios v"+n+"] Transitional option '"+e+"'"+a+(i?". "+i:"")}return function(i,n,r){if(!1===e)throw new o(s(n," has been removed"+(a?" in "+a:"")),o.ERR_DEPRECATED);return a&&!t[n]&&(t[n]=!0,console.warn(s(n," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(i,n,r)}},e.exports={assertOptions:function(e,a,i){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),s=n.length;s-- >0;){var t=n[s],r=a[t];if(r){var c=e[t],p=void 0===c||r(c,t,e);if(!0!==p)throw new o("option "+t+" must be "+p,o.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new o("Unknown option "+t,o.ERR_BAD_OPTION)}},validators:s}},4867:(e,a,i)=>{"use strict";var n,o=i(1849),s=Object.prototype.toString,t=(n=Object.create(null),function(e){var a=s.call(e);return n[a]||(n[a]=a.slice(8,-1).toLowerCase())});function r(e){return e=e.toLowerCase(),function(a){return t(a)===e}}function c(e){return Array.isArray(e)}function p(e){return void 0===e}var l=r("ArrayBuffer");function u(e){return null!==e&&"object"==typeof e}function m(e){if("object"!==t(e))return!1;var a=Object.getPrototypeOf(e);return null===a||a===Object.prototype}var d=r("Date"),f=r("File"),x=r("Blob"),v=r("FileList");function h(e){return"[object Function]"===s.call(e)}var b=r("URLSearchParams");function g(e,a){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var i=0,n=e.length;i0;)t[s=n[o]]||(a[s]=e[s],t[s]=!0);e=Object.getPrototypeOf(e)}while(e&&(!i||i(e,a))&&e!==Object.prototype);return a},kindOf:t,kindOfTest:r,endsWith:function(e,a,i){e=String(e),(void 0===i||i>e.length)&&(i=e.length),i-=a.length;var n=e.indexOf(a,i);return-1!==n&&n===i},toArray:function(e){if(!e)return null;var a=e.length;if(p(a))return null;for(var i=new Array(a);a-- >0;)i[a]=e[a];return i},isTypedArray:w,isFileList:v}},1076:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i{"use strict";var i;Object.defineProperty(a,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(i||(i={})),a.default=i},4771:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i0&&o[o.length-1])||6!==s[0]&&2!==s[0])){t=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[x.default.Put,x.default.Post,x.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var a,i,n=this.client.getConfig(),o=null!==(a=this.config.host)&&void 0!==a?a:n.host,s=null!==(i=this.config.version)&&void 0!==i?i:n.version;return(0,u.default)(e.protocol,o,s,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,a="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||a?"DATA":this.subPath}var i="send"===this.resource,n=this.resource.indexOf("sms")>-1;return i||n?"":"REST"},e.prototype.makeRequest=function(a,i,n){var s,t={url:a,params:n,data:this.getRequestBody(i),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(a)},transformResponse:function(a){var i="string"==typeof a,n="json"===this.responseType;return a&&i&&n?e.parseToJSONb(a):a}};e.isBrowser()&&(t.headers["X-User-Agent"]=t.headers["User-Agent"]);var r=this.getCredentials();r.apiToken?t.headers.Authorization="Bearer ".concat(r.apiToken):t.auth={username:r.apiKey,password:r.apiSecret};var c=this.client.getConfig(),p=this.client.getOptions();p.timeout&&(t.timeout=p.timeout),p.proxy&&(t.proxy=p.proxy),p.headers&&Object.keys(p.headers).length>0&&(t.headers=o(o({},t.headers),p.headers));var l=null!==(s=this.config.output)&&void 0!==s?s:c.output;return l&&(t.responseType=l),p.maxBodyLength&&(t.maxBodyLength=p.maxBodyLength),p.maxContentLength&&(t.maxContentLength=p.maxContentLength),(0,d.default)(t)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(n(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,u.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,u.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,a,i){var n,o,s,t,r;return void 0===e&&(e={}),void 0===a&&(a={}),void 0===i&&(i=!0),c(this,void 0,void 0,(function(){var c,l,u,m,x,v,h,b,g,y;return p(this,(function(p){switch(p.label){case 0:if(c=this.buildFullUrl(),this.setBaseURL(this.resource),!i)return[2,{body:b=this.getRequestBody(e),params:a,url:c}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.makeRequest(c,e,a)];case 2:return[2,{response:l=p.sent(),body:l.data}];case 3:if((u=p.sent())instanceof d.AxiosError)throw(m=new Error).code=u.code,m.config=u.config,u.response?(x=u.response,v=x.status,h=x.statusText,b=x.data,m.response=u.response,m.statusCode=v,m.statusText=h,g=null!==(n=null==b?void 0:b.ErrorMessage)&&void 0!==n?n:u.message,m.originalMessage=g,m.message='Unsuccessful: Status Code: "'.concat(m.statusCode,'" Message: "').concat(g,'"'),b&&("string"==typeof(y=null===(r=null===(t=null===(s=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===s?void 0:s.Errors)||void 0===t?void 0:t[0])||void 0===r?void 0:r.ErrorMessage)&&(m.message+=";\n".concat(y)),(0,f.setValueIfNotNil)(m,"ErrorMessage",b.ErrorMessage),(0,f.setValueIfNotNil)(m,"ErrorCode",b.ErrorCode),(0,f.setValueIfNotNil)(m,"ErrorIdentifier",b.ErrorIdentifier),(0,f.setValueIfNotNil)(m,"ErrorRelatedTo",b.ErrorRelatedTo))):(m.response=null,m.statusCode=null,m.statusText=null,m.originalMessage=u.message,m.message='Unsuccessful: Error Code: "'.concat(m.code,'" Message: "').concat(u.message,'"')),m;throw u;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var a;try{a=h.parse(e)}catch(e){a={}}return a},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":n(window))},e.protocol="https://",e}();a.default=b},9006:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.setValueIfNotNil=a.isPureObject=a.isUndefined=a.isNull=a.isNil=void 0;var o=n(i(1808));a.isNil=o.default;var s=n(i(7376));a.isNull=s.default;var t=n(i(5034));a.isUndefined=t.default;var r=n(i(1818));a.isPureObject=r.default;var c=n(i(1190));a.setValueIfNotNil=c.default},1808:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=n(i(7376)),s=n(i(5034));a.default=function(e){return(0,s.default)(e)||(0,o.default)(e)}},7376:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return null===e}},1818:(e,a)=>{"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return"object"===i(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return void 0===e}},1190:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var s=o(i(1808)),t=o(i(7376));a.default=function(e,a,i){if("object"!==n(e)||(0,t.default)(e))throw Error('Argument "targetObject" is not object');if(!a)throw Error('Argument "path" is required');(0,s.default)(i)||(e[a]=i)}},4431:function(e,a,i){var n;!function(o){"use strict";var s,t=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,c=Math.floor,p="[BigNumber Error] ",l=p+"Number primitive has more than 15 significant digits: ",u=1e14,m=14,d=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,v=1e9;function h(e){var a=0|e;return e>0||e===a?a:a-1}function b(e){for(var a,i,n=1,o=e.length,s=e[0]+"";np^i?1:-1;for(r=(c=o.length)<(p=s.length)?c:p,t=0;ts[t]^i?1:-1;return c==p?0:c>p^i?1:-1}function y(e,a,i,n){if(ei||e!==c(e))throw Error(p+(n||"Argument")+("number"==typeof e?ei?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var a=e.c.length-1;return h(e.e/m)==a&&e.c[a]%2!=0}function j(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(a<0?"e":"e+")+a}function k(e,a,i){var n,o;if(a<0){for(o=i+".";++a;o+=i);e=o+e}else if(++a>(n=e.length)){for(o=i,a-=n;--a;o+=i);e+=o}else aF?h.c=h.e=null:e.e=10;u/=10,p++);return void(p>F?h.c=h.e=null:(h.e=p,h.c=[e]))}v=String(e)}else{if(!t.test(v=String(e)))return o(h,v,f);h.s=45==v.charCodeAt(0)?(v=v.slice(1),-1):1}(p=v.indexOf("."))>-1&&(v=v.replace(".","")),(u=v.search(/e/i))>0?(p<0&&(p=u),p+=+v.slice(u+1),v=v.substring(0,u)):p<0&&(p=v.length)}else{if(y(a,2,M.length,"Base"),10==a)return J(h=new H(e),z+h.e+1,N);if(v=String(e),f="number"==typeof e){if(0*e!=0)return o(h,v,f,a);if(h.s=1/e<0?(v=v.slice(1),-1):1,H.DEBUG&&v.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else h.s=45===v.charCodeAt(0)?(v=v.slice(1),-1):1;for(i=M.slice(0,a),p=u=0,x=v.length;up){p=x;continue}}else if(!r&&(v==v.toUpperCase()&&(v=v.toLowerCase())||v==v.toLowerCase()&&(v=v.toUpperCase()))){r=!0,u=-1,p=0;continue}return o(h,String(e),f,a)}f=!1,(p=(v=n(v,a,10,h.s)).indexOf("."))>-1?v=v.replace(".",""):p=v.length}for(u=0;48===v.charCodeAt(u);u++);for(x=v.length;48===v.charCodeAt(--x););if(v=v.slice(u,++x)){if(x-=u,f&&H.DEBUG&&x>15&&(e>d||e!==c(e)))throw Error(l+h.s*e);if((p=p-u-1)>F)h.c=h.e=null;else if(p=q)?j(c,t):k(c,t,"0");else if(s=(e=J(new H(e),a,i)).e,r=(c=b(e.c)).length,1==n||2==n&&(a<=s||s<=B)){for(;rr){if(--a>0)for(c+=".";a--;c+="0");}else if((a+=s-r)>0)for(s+1==r&&(c+=".");a--;c+="0");return e.s<0&&o?"-"+c:c}function $(e,a){for(var i,n=1,o=new H(e[0]);n=10;o/=10,n++);return(i=n+i*m-1)>F?e.c=e.e=null:i=10;p/=10,o++);if((s=a-o)<0)s+=m,t=a,x=(l=v[d=0])/h[o-t-1]%10|0;else if((d=r((s+1)/m))>=v.length){if(!n)break e;for(;v.length<=d;v.push(0));l=x=0,o=1,t=(s%=m)-m+1}else{for(l=p=v[d],o=1;p>=10;p/=10,o++);x=(t=(s%=m)-m+o)<0?0:l/h[o-t-1]%10|0}if(n=n||a<0||null!=v[d+1]||(t<0?l:l%h[o-t-1]),n=i<4?(x||n)&&(0==i||i==(e.s<0?3:2)):x>5||5==x&&(4==i||n||6==i&&(s>0?t>0?l/h[o-t]:0:v[d-1])%10&1||i==(e.s<0?8:7)),a<1||!v[0])return v.length=0,n?(a-=e.e+1,v[0]=h[(m-a%m)%m],e.e=-a||0):v[0]=e.e=0,e;if(0==s?(v.length=d,p=1,d--):(v.length=d+1,p=h[m-s],v[d]=t>0?c(l/h[o-t]%h[t])*p:0),n)for(;;){if(0==d){for(s=1,t=v[0];t>=10;t/=10,s++);for(t=v[0]+=p,p=1;t>=10;t/=10,p++);s!=p&&(e.e++,v[0]==u&&(v[0]=1));break}if(v[d]+=p,v[d]!=u)break;v[d--]=0,p=1}for(s=v.length;0===v[--s];v.pop());}e.e>F?e.c=e.e=null:e.e=q?j(a,i):k(a,i,"0"),e.s<0?"-"+a:a)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var a,i;if(null!=e){if("object"!=typeof e)throw Error(p+"Object expected: "+e);if(e.hasOwnProperty(a="DECIMAL_PLACES")&&(y(i=e[a],0,v,a),z=i),e.hasOwnProperty(a="ROUNDING_MODE")&&(y(i=e[a],0,8,a),N=i),e.hasOwnProperty(a="EXPONENTIAL_AT")&&((i=e[a])&&i.pop?(y(i[0],-v,0,a),y(i[1],0,v,a),B=i[0],q=i[1]):(y(i,-v,v,a),B=-(q=i<0?-i:i))),e.hasOwnProperty(a="RANGE"))if((i=e[a])&&i.pop)y(i[0],-v,-1,a),y(i[1],1,v,a),P=i[0],F=i[1];else{if(y(i,-v,v,a),!i)throw Error(p+a+" cannot be zero: "+i);P=-(F=i<0?-i:i)}if(e.hasOwnProperty(a="CRYPTO")){if((i=e[a])!==!!i)throw Error(p+a+" not true or false: "+i);if(i){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!i,Error(p+"crypto unavailable");L=i}else L=i}if(e.hasOwnProperty(a="MODULO_MODE")&&(y(i=e[a],0,9,a),U=i),e.hasOwnProperty(a="POW_PRECISION")&&(y(i=e[a],0,v,a),D=i),e.hasOwnProperty(a="FORMAT")){if("object"!=typeof(i=e[a]))throw Error(p+a+" not an object: "+i);I=i}if(e.hasOwnProperty(a="ALPHABET")){if("string"!=typeof(i=e[a])||/^.?$|[+\-.\s]|(.).*\1/.test(i))throw Error(p+a+" invalid: "+i);M=i}}return{DECIMAL_PLACES:z,ROUNDING_MODE:N,EXPONENTIAL_AT:[B,q],RANGE:[P,F],CRYPTO:L,MODULO_MODE:U,POW_PRECISION:D,FORMAT:I,ALPHABET:M}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var a,i,n=e.c,o=e.e,s=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===s||-1===s)&&o>=-v&&o<=v&&o===c(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((a=(o+1)%m)<1&&(a+=m),String(n[0]).length==a){for(a=0;a=u||i!==c(i))break e;if(0!==i)return!0}}}else if(null===n&&null===o&&(null===s||1===s||-1===s))return!0;throw Error(p+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return $(arguments,A.lt)},H.minimum=H.min=function(){return $(arguments,A.gt)},H.random=(s=9007199254740992,_=Math.random()*s&2097151?function(){return c(Math.random()*s)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var a,i,n,o,s,t=0,l=[],u=new H(T);if(null==e?e=z:y(e,0,v),o=r(e/m),L)if(crypto.getRandomValues){for(a=crypto.getRandomValues(new Uint32Array(o*=2));t>>11))>=9e15?(i=crypto.getRandomValues(new Uint32Array(2)),a[t]=i[0],a[t+1]=i[1]):(l.push(s%1e14),t+=2);t=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(p+"crypto unavailable");for(a=crypto.randomBytes(o*=7);t=9e15?crypto.randomBytes(7).copy(a,t):(l.push(s%1e14),t+=7);t=o/7}if(!L)for(;t=10;s/=10,t++);ti-1&&(null==t[o+1]&&(t[o+1]=0),t[o+1]+=t[o]/i|0,t[o]%=i)}return t.reverse()}return function(n,o,s,t,r){var c,p,l,u,m,d,f,x,v=n.indexOf("."),h=z,g=N;for(v>=0&&(u=D,D=0,n=n.replace(".",""),d=(x=new H(o)).pow(n.length-v),D=u,x.c=a(k(b(d.c),d.e,"0"),10,s,e),x.e=x.c.length),l=u=(f=a(n,o,s,r?(c=M,e):(c=e,M))).length;0==f[--u];f.pop());if(!f[0])return c.charAt(0);if(v<0?--l:(d.c=f,d.e=l,d.s=t,f=(d=i(d,x,h,g,s)).c,m=d.r,l=d.e),v=f[p=l+h+1],u=s/2,m=m||p<0||null!=f[p+1],m=g<4?(null!=v||m)&&(0==g||g==(d.s<0?3:2)):v>u||v==u&&(4==g||m||6==g&&1&f[p-1]||g==(d.s<0?8:7)),p<1||!f[0])n=m?k(c.charAt(1),-h,c.charAt(0)):c.charAt(0);else{if(f.length=p,m)for(--s;++f[--p]>s;)f[p]=0,p||(++l,f=[1].concat(f));for(u=f.length;!f[--u];);for(v=0,n="";v<=u;n+=c.charAt(f[v++]));n=k(n,l,c.charAt(0))}return n}}(),i=function(){function e(e,a,i){var n,o,s,t,r=0,c=e.length,p=a%x,l=a/x|0;for(e=e.slice();c--;)r=((o=p*(s=e[c]%x)+(n=l*s+(t=e[c]/x|0)*p)%x*x+r)/i|0)+(n/x|0)+l*t,e[c]=o%i;return r&&(e=[r].concat(e)),e}function a(e,a,i,n){var o,s;if(i!=n)s=i>n?1:-1;else for(o=s=0;oa[o]?1:-1;break}return s}function i(e,a,i,n){for(var o=0;i--;)e[i]-=o,o=e[i]1;e.splice(0,1));}return function(n,o,s,t,r){var p,l,d,f,x,v,b,g,y,w,j,k,_,E,O,C,S,R=n.s==o.s?1:-1,A=n.c,T=o.c;if(!(A&&A[0]&&T&&T[0]))return new H(n.s&&o.s&&(A?!T||A[0]!=T[0]:T)?A&&0==A[0]||!T?0*R:R/0:NaN);for(y=(g=new H(R)).c=[],R=s+(l=n.e-o.e)+1,r||(r=u,l=h(n.e/m)-h(o.e/m),R=R/m|0),d=0;T[d]==(A[d]||0);d++);if(T[d]>(A[d]||0)&&l--,R<0)y.push(1),f=!0;else{for(E=A.length,C=T.length,d=0,R+=2,(x=c(r/(T[0]+1)))>1&&(T=e(T,x,r),A=e(A,x,r),C=T.length,E=A.length),_=C,j=(w=A.slice(0,C)).length;j=r/2&&O++;do{if(x=0,(p=a(T,w,C,j))<0){if(k=w[0],C!=j&&(k=k*r+(w[1]||0)),(x=c(k/O))>1)for(x>=r&&(x=r-1),b=(v=e(T,x,r)).length,j=w.length;1==a(v,w,b,j);)x--,i(v,C=10;R/=10,d++);J(g,s+(g.e=d+l*m-1)+1,t,f)}else g.e=l,g.r=+f;return g}}(),E=/^(-?)0([xbo])(?=\w[\w.]*$)/i,O=/^([^.]+)\.$/,C=/^\.([^.]+)$/,S=/^-?(Infinity|NaN)$/,R=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,a,i,n){var o,s=i?a:a.replace(R,"");if(S.test(s))e.s=isNaN(s)?null:s<0?-1:1;else{if(!i&&(s=s.replace(E,(function(e,a,i){return o="x"==(i=i.toLowerCase())?16:"b"==i?2:8,n&&n!=o?e:a})),n&&(o=n,s=s.replace(O,"$1").replace(C,"0.$1")),a!=s))return new H(s,o);if(H.DEBUG)throw Error(p+"Not a"+(n?" base "+n:"")+" number: "+a);e.s=null}e.c=e.e=null},A.absoluteValue=A.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},A.comparedTo=function(e,a){return g(this,new H(e,a))},A.decimalPlaces=A.dp=function(e,a){var i,n,o,s=this;if(null!=e)return y(e,0,v),null==a?a=N:y(a,0,8),J(new H(s),e+s.e+1,a);if(!(i=s.c))return null;if(n=((o=i.length-1)-h(this.e/m))*m,o=i[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},A.dividedBy=A.div=function(e,a){return i(this,new H(e,a),z,N)},A.dividedToIntegerBy=A.idiv=function(e,a){return i(this,new H(e,a),0,1)},A.exponentiatedBy=A.pow=function(e,a){var i,n,o,s,t,l,u,d,f=this;if((e=new H(e)).c&&!e.isInteger())throw Error(p+"Exponent not an integer: "+K(e));if(null!=a&&(a=new H(a)),t=e.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!e.c||!e.c[0])return d=new H(Math.pow(+K(f),t?2-w(e):+K(e))),a?d.mod(a):d;if(l=e.s<0,a){if(a.c?!a.c[0]:!a.s)return new H(NaN);(n=!l&&f.isInteger()&&a.isInteger())&&(f=f.mod(a))}else{if(e.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||t&&f.c[1]>=24e7:f.c[0]<8e13||t&&f.c[0]<=9999975e7)))return s=f.s<0&&w(e)?-0:0,f.e>-1&&(s=1/s),new H(l?1/s:s);D&&(s=r(D/m+2))}for(t?(i=new H(.5),l&&(e.s=1),u=w(e)):u=(o=Math.abs(+K(e)))%2,d=new H(T);;){if(u){if(!(d=d.times(f)).c)break;s?d.c.length>s&&(d.c.length=s):n&&(d=d.mod(a))}if(o){if(0===(o=c(o/2)))break;u=o%2}else if(J(e=e.times(i),e.e+1,1),e.e>14)u=w(e);else{if(0==(o=+K(e)))break;u=o%2}f=f.times(f),s?f.c&&f.c.length>s&&(f.c.length=s):n&&(f=f.mod(a))}return n?d:(l&&(d=T.div(d)),a?d.mod(a):s?J(d,D,N,void 0):d)},A.integerValue=function(e){var a=new H(this);return null==e?e=N:y(e,0,8),J(a,a.e+1,e)},A.isEqualTo=A.eq=function(e,a){return 0===g(this,new H(e,a))},A.isFinite=function(){return!!this.c},A.isGreaterThan=A.gt=function(e,a){return g(this,new H(e,a))>0},A.isGreaterThanOrEqualTo=A.gte=function(e,a){return 1===(a=g(this,new H(e,a)))||0===a},A.isInteger=function(){return!!this.c&&h(this.e/m)>this.c.length-2},A.isLessThan=A.lt=function(e,a){return g(this,new H(e,a))<0},A.isLessThanOrEqualTo=A.lte=function(e,a){return-1===(a=g(this,new H(e,a)))||0===a},A.isNaN=function(){return!this.s},A.isNegative=function(){return this.s<0},A.isPositive=function(){return this.s>0},A.isZero=function(){return!!this.c&&0==this.c[0]},A.minus=function(e,a){var i,n,o,s,t=this,r=t.s;if(a=(e=new H(e,a)).s,!r||!a)return new H(NaN);if(r!=a)return e.s=-a,t.plus(e);var c=t.e/m,p=e.e/m,l=t.c,d=e.c;if(!c||!p){if(!l||!d)return l?(e.s=-a,e):new H(d?t:NaN);if(!l[0]||!d[0])return d[0]?(e.s=-a,e):new H(l[0]?t:3==N?-0:0)}if(c=h(c),p=h(p),l=l.slice(),r=c-p){for((s=r<0)?(r=-r,o=l):(p=c,o=d),o.reverse(),a=r;a--;o.push(0));o.reverse()}else for(n=(s=(r=l.length)<(a=d.length))?r:a,r=a=0;a0)for(;a--;l[i++]=0);for(a=u-1;n>r;){if(l[--n]=0;){for(i=0,f=k[o]%y,v=k[o]/y|0,s=o+(t=c);s>o;)i=((p=f*(p=j[--t]%y)+(r=v*p+(l=j[t]/y|0)*f)%y*y+b[s]+i)/g|0)+(r/y|0)+v*l,b[s--]=p%g;b[s]=i}return i?++n:b.splice(0,1),G(e,b,n)},A.negated=function(){var e=new H(this);return e.s=-e.s||null,e},A.plus=function(e,a){var i,n=this,o=n.s;if(a=(e=new H(e,a)).s,!o||!a)return new H(NaN);if(o!=a)return e.s=-a,n.minus(e);var s=n.e/m,t=e.e/m,r=n.c,c=e.c;if(!s||!t){if(!r||!c)return new H(o/0);if(!r[0]||!c[0])return c[0]?e:new H(r[0]?n:0*o)}if(s=h(s),t=h(t),r=r.slice(),o=s-t){for(o>0?(t=s,i=c):(o=-o,i=r),i.reverse();o--;i.push(0));i.reverse()}for((o=r.length)-(a=c.length)<0&&(i=c,c=r,r=i,a=o),o=0;a;)o=(r[--a]=r[a]+c[a]+o)/u|0,r[a]=u===r[a]?0:r[a]%u;return o&&(r=[o].concat(r),++t),G(e,r,t)},A.precision=A.sd=function(e,a){var i,n,o,s=this;if(null!=e&&e!==!!e)return y(e,1,v),null==a?a=N:y(a,0,8),J(new H(s),e,a);if(!(i=s.c))return null;if(n=(o=i.length-1)*m+1,o=i[o]){for(;o%10==0;o/=10,n--);for(o=i[0];o>=10;o/=10,n++);}return e&&s.e+1>n&&(n=s.e+1),n},A.shiftedBy=function(e){return y(e,-9007199254740991,d),this.times("1e"+e)},A.squareRoot=A.sqrt=function(){var e,a,n,o,s,t=this,r=t.c,c=t.s,p=t.e,l=z+4,u=new H("0.5");if(1!==c||!r||!r[0])return new H(!c||c<0&&(!r||r[0])?NaN:r?t:1/0);if(0==(c=Math.sqrt(+K(t)))||c==1/0?(((a=b(r)).length+p)%2==0&&(a+="0"),c=Math.sqrt(+a),p=h((p+1)/2)-(p<0||p%2),n=new H(a=c==1/0?"5e"+p:(a=c.toExponential()).slice(0,a.indexOf("e")+1)+p)):n=new H(c+""),n.c[0])for((c=(p=n.e)+l)<3&&(c=0);;)if(s=n,n=u.times(s.plus(i(t,s,l,1))),b(s.c).slice(0,c)===(a=b(n.c)).slice(0,c)){if(n.e0&&x>0){for(s=x%r||r,u=f.substr(0,s);s0&&(u+=l+f.slice(s)),d&&(u="-"+u)}n=m?u+(i.decimalSeparator||"")+((c=+i.fractionGroupSize)?m.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(i.fractionGroupSeparator||"")):m):u}return(i.prefix||"")+n+(i.suffix||"")},A.toFraction=function(e){var a,n,o,s,t,r,c,l,u,d,x,v,h=this,g=h.c;if(null!=e&&(!(c=new H(e)).isInteger()&&(c.c||1!==c.s)||c.lt(T)))throw Error(p+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+K(c));if(!g)return new H(h);for(a=new H(T),u=n=new H(T),o=l=new H(T),v=b(g),t=a.e=v.length-h.e-1,a.c[0]=f[(r=t%m)<0?m+r:r],e=!e||c.comparedTo(a)>0?t>0?a:u:c,r=F,F=1/0,c=new H(v),l.c[0]=0;d=i(c,a,0,1),1!=(s=n.plus(d.times(o))).comparedTo(e);)n=o,o=s,u=l.plus(d.times(s=u)),l=s,a=c.minus(d.times(s=a)),c=s;return s=i(e.minus(n),o,0,1),l=l.plus(s.times(u)),n=n.plus(s.times(o)),l.s=u.s=h.s,x=i(u,o,t*=2,N).minus(h).abs().comparedTo(i(l,n,t,N).minus(h).abs())<1?[u,o]:[l,n],F=r,x},A.toNumber=function(){return+K(this)},A.toPrecision=function(e,a){return null!=e&&y(e,1,v),V(this,e,a,2)},A.toString=function(e){var a,i=this,o=i.s,s=i.e;return null===s?o?(a="Infinity",o<0&&(a="-"+a)):a="NaN":(null==e?a=s<=B||s>=q?j(b(i.c),s):k(b(i.c),s,"0"):10===e?a=k(b((i=J(new H(i),z+s+1,N)).c),i.e,"0"):(y(e,2,M.length,"Base"),a=n(k(b(i.c),s,"0"),10,e,o,!0)),o<0&&i.c[0]&&(a="-"+a)),a},A.valueOf=A.toJSON=function(){return K(this)},A._isBigNumber=!0,null!=a&&H.set(a),H}(),s.default=s.BigNumber=s,void 0===(n=function(){return s}.call(a,i,a,e))||(e.exports=n)}()},9779:(e,a,i)=>{var n=i(3837),o=i(2781).Stream,s=i(3463);function t(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=t,n.inherits(t,o),t.create=function(e){var a=new this;for(var i in e=e||{})a[i]=e[i];return a},t.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},t.prototype.append=function(e){if(t.isStreamLike(e)){if(!(e instanceof s)){var a=s.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},t.prototype.pipe=function(e,a){return o.prototype.pipe.call(this,e,a),this.resume(),e},t.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},t.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){t.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},t.prototype._pipeNext=function(e){if(this._currentStream=e,t.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},t.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},t.prototype.write=function(e){this.emit("data",e)},t.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},t.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},t.prototype.end=function(){this._reset(),this.emit("end")},t.prototype.destroy=function(){this._reset(),this.emit("close")},t.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},t.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},t.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},t.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},9435:e=>{var a=1e3,i=60*a,n=60*i,o=24*n,s=7*o,t=365.25*o;function r(e,a,i,n){var o=a>=1.5*i;return Math.round(e/i)+" "+n+(o?"s":"")}e.exports=function(e,c){c=c||{};var p,l,u=typeof e;if("string"===u&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(r){var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*t;case"weeks":case"week":case"w":return c*s;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*n;case"minutes":case"minute":case"mins":case"min":case"m":return c*i;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}(e);if("number"===u&&isFinite(e))return c.long?(p=e,(l=Math.abs(p))>=o?r(p,l,o,"day"):l>=n?r(p,l,n,"hour"):l>=i?r(p,l,i,"minute"):l>=a?r(p,l,a,"second"):p+" ms"):function(e){var s=Math.abs(e);return s>=o?Math.round(e/o)+"d":s>=n?Math.round(e/n)+"h":s>=i?Math.round(e/i)+"m":s>=a?Math.round(e/a)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},1227:(e,a,i)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const i="color: "+this.color;a.splice(1,0,i,"color: inherit");let n=0,o=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(o=n))})),a.splice(o,0,i)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},a.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=i(2447)(a);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,i)=>{e.exports=function(e){function a(e){let i,o,s,t=null;function r(...e){if(!r.enabled)return;const n=r,o=Number(new Date),s=o-(i||o);n.diff=s,n.prev=i,n.curr=o,i=o,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let t=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((i,o)=>{if("%%"===i)return"%";t++;const s=a.formatters[o];if("function"==typeof s){const a=e[t];i=s.call(n,a),e.splice(t,1),t--}return i})),a.formatArgs.call(n,e),(n.log||a.log).apply(n,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=n,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==t?t:(o!==a.namespaces&&(o=a.namespaces,s=a.enabled(e)),s),set:e=>{t=e}}),"function"==typeof a.init&&a.init(r),r}function n(e,i){const n=a(this.namespace+(void 0===i?":":i)+e);return n.log=this.log,n}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){const e=[...a.names.map(o),...a.skips.map(o).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let i;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length;for(i=0;i{a[i]=e[i]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let i=0;for(let a=0;a{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=i(1227):e.exports=i(39)},39:(e,a,i)=>{const n=i(6224),o=i(3837);a.init=function(e){e.inspectOpts={};const i=Object.keys(a.inspectOpts);for(let n=0;n{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=i(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const i=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let n=process.env[a];return n=!!/^(yes|on|true|enabled)$/i.test(n)||!/^(no|off|false|disabled)$/i.test(n)&&("null"===n?null:Number(n)),e[i]=n,e}),{}),e.exports=i(2447)(a);const{formatters:s}=e.exports;s.o=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},s.O=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts)}},3463:(e,a,i)=>{var n=i(2781).Stream,o=i(3837);function s(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=s,o.inherits(s,n),s.create=function(e,a){var i=new this;for(var n in a=a||{})i[n]=a[n];i.source=e;var o=e.emit;return e.emit=function(){return i._handleEmit(arguments),o.apply(e,arguments)},e.on("error",(function(){})),i.pauseStream&&e.pause(),i},Object.defineProperty(s.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),s.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},s.prototype.resume=function(){this._released||this.release(),this.source.resume()},s.prototype.pause=function(){this.source.pause()},s.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},s.prototype.pipe=function(){var e=n.prototype.pipe.apply(this,arguments);return this.resume(),e},s.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},s.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,i)=>{var n;e.exports=function(){if(!n){try{n=i(5158)("follow-redirects")}catch(e){}"function"!=typeof n&&(n=function(){})}n.apply(null,arguments)}},938:(e,a,i)=>{var n=i(7310),o=n.URL,s=i(3685),t=i(5687),r=i(2781).Writable,c=i(9491),p=i(2261),l=["abort","aborted","connect","error","socket","timeout"],u=Object.create(null);l.forEach((function(e){u[e]=function(a,i,n){this._redirectable.emit(e,a,i,n)}}));var m=w("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),d=w("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),f=w("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=w("ERR_STREAM_WRITE_AFTER_END","write after end");function v(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var i=this;this._onNativeResponse=function(e){i._processResponse(e)},this._performRequest()}function h(e){var a={maxRedirects:21,maxBodyLength:10485760},i={};return Object.keys(e).forEach((function(s){var t=s+":",r=i[t]=e[s],l=a[s]=Object.create(r);Object.defineProperties(l,{request:{value:function(e,s,r){if("string"==typeof e){var l=e;try{e=g(new o(l))}catch(a){e=n.parse(l)}}else o&&e instanceof o?e=g(e):(r=s,s=e,e={protocol:t});return"function"==typeof s&&(r=s,s=null),(s=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,s)).nativeProtocols=i,c.equal(s.protocol,t,"protocol mismatch"),p("options",s),new v(s,r)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,i){var n=l.request(e,a,i);return n.end(),n},configurable:!0,enumerable:!0,writable:!0}})})),a}function b(){}function g(e){var a={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};return""!==e.port&&(a.port=Number(e.port)),a}function y(e,a){var i;for(var n in a)e.test(n)&&(i=a[n],delete a[n]);return null==i?void 0:String(i).trim()}function w(e,a){function i(e){Error.captureStackTrace(this,this.constructor),e?(this.message=a+": "+e.message,this.cause=e):this.message=a}return i.prototype=new Error,i.prototype.constructor=i,i.prototype.name="Error ["+e+"]",i.prototype.code=e,i}function j(e){for(var a of l)e.removeListener(a,u[a]);e.on("error",b),e.abort()}v.prototype=Object.create(r.prototype),v.prototype.abort=function(){j(this._currentRequest),this.emit("abort")},v.prototype.write=function(e,a,i){if(this._ending)throw new x;if(!("string"==typeof e||"object"==typeof e&&"length"in e))throw new TypeError("data should be a string, Buffer or Uint8Array");"function"==typeof a&&(i=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,i)):(this.emit("error",new f),this.abort()):i&&i()},v.prototype.end=function(e,a,i){if("function"==typeof e?(i=e,e=a=null):"function"==typeof a&&(i=a,a=null),e){var n=this,o=this._currentRequest;this.write(e,a,(function(){n._ended=!0,o.end(null,null,i)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,i)},v.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},v.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},v.prototype.setTimeout=function(e,a){var i=this;function n(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function o(a){i._timeout&&clearTimeout(i._timeout),i._timeout=setTimeout((function(){i.emit("timeout"),s()}),e),n(a)}function s(){i._timeout&&(clearTimeout(i._timeout),i._timeout=null),i.removeListener("abort",s),i.removeListener("error",s),i.removeListener("response",s),a&&i.removeListener("timeout",a),i.socket||i._currentRequest.removeListener("socket",o)}return a&&this.on("timeout",a),this.socket?o(this.socket):this._currentRequest.once("socket",o),this.on("socket",n),this.on("abort",s),this.on("error",s),this.on("response",s),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){v.prototype[e]=function(a,i){return this._currentRequest[e](a,i)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(v.prototype,e,{get:function(){return this._currentRequest[e]}})})),v.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},v.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(a){if(this._options.agents){var i=e.slice(0,-1);this._options.agent=this._options.agents[i]}var o=this._currentRequest=a.request(this._options,this._onNativeResponse);for(var s of(o._redirectable=this,l))o.on(s,u[s]);if(this._currentUrl=/^\//.test(this._options.path)?n.format(this._options):this._currentUrl=this._options.path,this._isRedirect){var t=0,r=this,c=this._requestBodyBuffers;!function e(a){if(o===r._currentRequest)if(a)r.emit("error",a);else if(t=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(j(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)this.emit("error",new d);else{var o,s=this._options.beforeRedirect;s&&(o=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var t=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],y(/^content-/i,this._options.headers));var r,c=y(/^host$/i,this._options.headers),l=n.parse(this._currentUrl),u=c||l.host,f=/^\w+:/.test(i)?this._currentUrl:n.format(Object.assign(l,{host:u}));try{r=n.resolve(f,i)}catch(e){return void this.emit("error",new m(e))}p("redirecting to",r),this._isRedirect=!0;var x=n.parse(r);if(Object.assign(this._options,x),(x.protocol!==l.protocol&&"https:"!==x.protocol||x.host!==u&&!function(e,a){const i=e.length-a.length-1;return i>0&&"."===e[i]&&e.endsWith(a)}(x.host,u))&&y(/^(?:authorization|cookie)$/i,this._options.headers),"function"==typeof s){var v={headers:e.headers,statusCode:a},h={url:f,method:t,headers:o};try{s(this._options,v,h)}catch(e){return void this.emit("error",e)}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new m(e))}}},e.exports=h({http:s,https:t}),e.exports.wrap=h},6882:(e,a,i)=>{var n=i(9779),o=i(3837),s=i(1017),t=i(3685),r=i(5687),c=i(7310).parse,p=i(7147),l=i(2781).Stream,u=i(983),m=i(9118),d=i(2275);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],n.call(this),e=e||{})this[a]=e[a]}e.exports=f,o.inherits(f,n),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,i){"string"==typeof(i=i||{})&&(i={filename:i});var s=n.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),o.isArray(a))this._error(new Error("Arrays are not supported."));else{var t=this._multiPartHeader(e,a,i),r=this._multiPartFooter();s(t),s(a),s(r),this._trackLength(t,a,i)}},f.prototype._trackLength=function(e,a,i){var n=0;null!=i.knownLength?n+=+i.knownLength:Buffer.isBuffer(a)?n=a.length:"string"==typeof a&&(n=Buffer.byteLength(a)),this._valueLength+=n,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof l)&&(i.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(i,n){var o;i?a(i):(o=n.size-(e.start?e.start:0),a(null,o))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(i){e.pause(),a(null,+i.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,i){if("string"==typeof i.header)return i.header;var n,o=this._getContentDisposition(a,i),s=this._getContentType(a,i),t="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(o||[]),"Content-Type":[].concat(s||[])};for(var c in"object"==typeof i.header&&d(r,i.header),r)r.hasOwnProperty(c)&&null!=(n=r[c])&&(Array.isArray(n)||(n=[n]),n.length&&(t+=c+": "+n.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+t+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var i,n;return"string"==typeof a.filepath?i=s.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?i=s.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=s.basename(e.client._httpMessage.path||"")),i&&(n='filename="'+i+'"'),n},f.prototype._getContentType=function(e,a){var i=a.contentType;return!i&&e.name&&(i=u.lookup(e.name)),!i&&e.path&&(i=u.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),i||!a.filepath&&!a.filename||(i=u.lookup(a.filepath||a.filename)),i||"object"!=typeof e||(i=f.DEFAULT_CONTENT_TYPE),i},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(i[a.toLowerCase()]=e[a]);return i},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),i=0,n=this._streams.length;i{e.exports=function(e,a){return Object.keys(a).forEach((function(i){e[i]=e[i]||a[i]})),e}},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const i=e.startsWith("-")?"":1===e.length?"-":"--",n=a.indexOf(i+e),o=a.indexOf("--");return-1!==n&&(-1===o||n{var n=i(4123).stringify,o=i(6813);e.exports=function(e){return{parse:o(e),stringify:n}},e.exports.parse=o(),e.exports.stringify=n},6813:(e,a,i)=>{var n=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,s=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var a={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(a.strict=!0),!0===e.storeAsString&&(a.storeAsString=!0),a.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,a.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);a.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);a.protoAction=e.protoAction}}var t,r,c,p,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=function(e){throw{name:"SyntaxError",message:e,at:t,text:c}},m=function(e){return e&&e!==r&&u("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(t),t+=1,r},d=function(){var e,o="";for("-"===r&&(o="-",m("-"));r>="0"&&r<="9";)o+=r,m();if("."===r)for(o+=".";m()&&r>="0"&&r<="9";)o+=r;if("e"===r||"E"===r)for(o+=r,m(),"-"!==r&&"+"!==r||(o+=r,m());r>="0"&&r<="9";)o+=r,m();if(e=+o,isFinite(e))return null==n&&(n=i(4431)),o.length>15?a.storeAsString?o:a.useNativeBigInt?BigInt(o):new n(o):a.alwaysParseAsBig?a.useNativeBigInt?BigInt(e):new n(e):e;u("Bad number")},f=function(){var e,a,i,n="";if('"'===r)for(var o=t;m();){if('"'===r)return t-1>o&&(n+=c.substring(o,t-1)),m(),n;if("\\"===r){if(t-1>o&&(n+=c.substring(o,t-1)),m(),"u"===r){for(i=0,a=0;a<4&&(e=parseInt(m(),16),isFinite(e));a+=1)i=16*i+e;n+=String.fromCharCode(i)}else{if("string"!=typeof l[r])break;n+=l[r]}o=t}}u("Bad string")},x=function(){for(;r&&r<=" ";)m()};return p=function(){switch(x(),r){case"{":return function(){var e,i=Object.create(null);if("{"===r){if(m("{"),x(),"}"===r)return m("}"),i;for(;r;){if(e=f(),x(),m(":"),!0===a.strict&&Object.hasOwnProperty.call(i,e)&&u('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===a.protoAction?u("Object contains forbidden prototype property"):"ignore"===a.protoAction?p():i[e]=p():!0===s.test(e)?"error"===a.constructorAction?u("Object contains forbidden constructor property"):"ignore"===a.constructorAction?p():i[e]=p():i[e]=p(),x(),"}"===r)return m("}"),i;m(","),x()}}u("Bad object")}();case"[":return function(){var e=[];if("["===r){if(m("["),x(),"]"===r)return m("]"),e;for(;r;){if(e.push(p()),x(),"]"===r)return m("]"),e;m(","),x()}}u("Bad array")}();case'"':return f();case"-":return d();default:return r>="0"&&r<="9"?d():function(){switch(r){case"t":return m("t"),m("r"),m("u"),m("e"),!0;case"f":return m("f"),m("a"),m("l"),m("s"),m("e"),!1;case"n":return m("n"),m("u"),m("l"),m("l"),null}u("Unexpected '"+r+"'")}()}},function(e,a){var i;return c=e+"",t=0,r=" ",i=p(),x(),r&&u("Syntax error"),"function"==typeof a?function e(i,n){var o,s=i[n];return s&&"object"==typeof s&&Object.keys(s).forEach((function(a){void 0!==(o=e(s,a))?s[a]=o:delete s[a]})),a.call(i,n,s)}({"":i},""):i}}},4123:(e,a,i)=>{var n=i(4431),o=e.exports;!function(){"use strict";var e,a,i,s=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,t={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function r(e){return s.lastIndex=0,s.test(e)?'"'+e.replace(s,(function(e){var a=t[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function c(o,s){var t,p,l,u,m,d=e,f=s[o],x=null!=f&&(f instanceof n||n.isBigNumber(f));switch(f&&"object"==typeof f&&"function"==typeof f.toJSON&&(f=f.toJSON(o)),"function"==typeof i&&(f=i.call(s,o,f)),typeof f){case"string":return x?f:r(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":case"bigint":return String(f);case"object":if(!f)return"null";if(e+=a,m=[],"[object Array]"===Object.prototype.toString.apply(f)){for(u=f.length,t=0;t{e.exports=i(3765)},983:(e,a,i)=>{"use strict";var n,o,s,t=i(5234),r=i(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),i=a&&t[a[1].toLowerCase()];return i&&i.charset?i.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=l,a.charsets={lookup:l},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var i=-1===e.indexOf("/")?a.lookup(e):e;if(!i)return!1;if(-1===i.indexOf("charset")){var n=a.charset(i);n&&(i+="; charset="+n.toLowerCase())}return i},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var i=c.exec(e),n=i&&a.extensions[i[1].toLowerCase()];return!(!n||!n.length)&&n[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var i=r("x."+e).toLowerCase().substr(1);return i&&a.types[i]||!1},a.types=Object.create(null),n=a.extensions,o=a.types,s=["nginx","apache",void 0,"iana"],Object.keys(t).forEach((function(e){var a=t[e],i=a.extensions;if(i&&i.length){n[e]=i;for(var r=0;rl||p===l&&"application/"===o[c].substr(0,12)))continue}o[c]=e}}}))},2130:(e,a,i)=>{"use strict";const n=i(2037),o=i(6560),s=process.env;let t;function r(e){const a=function(e){if(!1===t)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!e.isTTY&&!0!==t)return 0;const a=t?1:0;if("win32"===process.platform){const e=n.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in s)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in s))||"codeship"===s.CI_NAME?1:a;if("TEAMCITY_VERSION"in s)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if("truecolor"===s.COLORTERM)return 3;if("TERM_PROGRAM"in s){const e=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:(s.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}o("no-color")||o("no-colors")||o("color=false")?t=!1:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(t=!0),"FORCE_COLOR"in s&&(t=0===s.FORCE_COLOR.length||0!==parseInt(s.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,i){var n,o,s;s=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var i=e.shift();e[0]=i+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n0&&(o=o.replace(/^[\/]+/,"")),o=n0?"?":"")+t.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=s():void 0===(o="function"==typeof(n=s)?n.call(a,i,a,e):n)||(e.exports=o)},9491:e=>{"use strict";e.exports=require("assert")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},4147:e=>{"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"5.0.0","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"],"standard-version":{"commitUrlFormat":"https://github.com/mailjet/mailjet-apiv3-nodejs/commits/{{hash}}","compareUrlFormat":"https://github.com/mailjet/mailjet-apiv3-nodejs/compare/{{previousTag}}...{{currentTag}}","types":[{"type":"breaking","section":"Breaking changes"},{"type":"security","section":"Dependency changes for security"},{"type":"feature","section":"Added features"},{"type":"deprecate","section":"Deprecated features"},{"type":"remove","section":"Removed features"},{"type":"fix","section":"Bug Fixes"},{"type":"test","section":"Tests"},{"type":"build","section":"Build changes"},{"type":"docs","section":"Docs changes"},{"type":"other","section":"Other changes"},{"type":"chore","hidden":true}],"scripts":{"prerelease":"npm run build:release","postchangelog":"npm run build:prepublish && git add -A dist","posttag":"git push && git push --tags"}}}')}},a={},i=function i(n){var o=a[n];if(void 0!==o)return o.exports;var s=a[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}(8321),i=i.default;var e,a,i})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxRQUFRLGlDQ0F6QnBtQyxFQUFPRCxRQUFVcW1DLFFBQVEsOEJDQXpCcG1DLEVBQU9ELFFBQVVxbUMsUUFBUSw4QkNBekJwbUMsRUFBT0QsUUFBVXFtQyxRQUFRLCtCQ0F6QnBtQyxFQUFPRCxRQUFVcW1DLFFBQVEsK2huSkNDckJDLEVBQTJCLEdDRTNCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUJyL0IsSUFBakJzL0IsRUFDSCxPQUFPQSxFQUFhMW1DLFFBR3JCLElBQUlDLEVBQVNxbUMsRUFBeUJHLEdBQVksQ0FHakR6bUMsUUFBUyxJQU9WLE9BSEEybUMsRUFBb0JGLEdBQVVyMUIsS0FBS25SLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVN3bUMsR0FHcEV2bUMsRUFBT0QsUUNsQld3bUMsQ0FBb0Isa0J0Rk85QyxNcUZUSUYsRUNFQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3BhcmFsbGVsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2Vudi9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvY2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvcmVxdWVzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc051bGwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL3NldFZhbHVlSWZOb3ROaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL3BvcHVsYXRlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImFzc2VydFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwib3NcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidHR5XCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXJsXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXRpbFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInpsaWJcIiIsIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm1haWxqZXRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibWFpbGpldFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbnZhciBzdXBwb3J0ZWRQcm90b2NvbHMgPSBbICdodHRwOicsICdodHRwczonLCAnZmlsZTonIF07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh2YWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICByZWplY3RQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciBkYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgaGVhZGVyTmFtZXMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gc3RvcmVMb3dlck5hbWUobmFtZSkge1xuICAgICAgaGVhZGVyTmFtZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWU7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCd1c2VyLWFnZW50JyBpbiBoZWFkZXJOYW1lcykge1xuICAgICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgICBpZiAoIWhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV0pIHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV07XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIHVzZSBzcGVjaWZpZWQgdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICAgIGhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9ICdheGlvcy8nICsgVkVSU0lPTjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9mb3JtLWRhdGEgYXBpXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIGRhdGEuZ2V0SGVhZGVycygpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uLi5cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEgJiYgZGF0YS5sZW5ndGggPiBjb25maWcubWF4Qm9keUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBpZiAoIWhlYWRlck5hbWVzWydjb250ZW50LWxlbmd0aCddKSB7XG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgdmFyIGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZShmdWxsUGF0aCk7XG4gICAgdmFyIHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGggJiYgcGFyc2VkLmF1dGgpIHtcbiAgICAgIHZhciB1cmxBdXRoID0gcGFyc2VkLmF1dGguc3BsaXQoJzonKTtcbiAgICAgIHZhciB1cmxVc2VybmFtZSA9IHVybEF1dGhbMF0gfHwgJyc7XG4gICAgICB2YXIgdXJsUGFzc3dvcmQgPSB1cmxBdXRoWzFdIHx8ICcnO1xuICAgICAgYXV0aCA9IHVybFVzZXJuYW1lICsgJzonICsgdXJsUGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKGF1dGggJiYgaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbikge1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbl07XG4gICAgfVxuXG4gICAgdmFyIGlzSHR0cHNSZXF1ZXN0ID0gaXNIdHRwcy50ZXN0KHByb3RvY29sKTtcbiAgICB2YXIgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcblxuICAgIHRyeSB7XG4gICAgICBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB2YXIgY3VzdG9tRXJyID0gbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIGN1c3RvbUVyci5jb25maWcgPSBjb25maWc7XG4gICAgICBjdXN0b21FcnIudXJsID0gY29uZmlnLnVybDtcbiAgICAgIGN1c3RvbUVyci5leGlzdHMgPSB0cnVlO1xuICAgICAgcmVqZWN0KGN1c3RvbUVycik7XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyksXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhZ2VudHM6IHsgaHR0cDogY29uZmlnLmh0dHBBZ2VudCwgaHR0cHM6IGNvbmZpZy5odHRwc0FnZW50IH0sXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHZhciBub1Byb3h5RW52ID0gcHJvY2Vzcy5lbnYubm9fcHJveHkgfHwgcHJvY2Vzcy5lbnYuTk9fUFJPWFk7XG4gICAgICAgIHZhciBzaG91bGRQcm94eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKG5vUHJveHlFbnYpIHtcbiAgICAgICAgICB2YXIgbm9Qcm94eSA9IG5vUHJveHlFbnYuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzaG91bGRQcm94eSA9ICFub1Byb3h5LnNvbWUoZnVuY3Rpb24gcHJveHlNYXRjaChwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghcHJveHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnQgPT09ICcqJykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnRbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgIHBhcnNlZC5ob3N0bmFtZS5zdWJzdHIocGFyc2VkLmhvc3RuYW1lLmxlbmd0aCAtIHByb3h5RWxlbWVudC5sZW5ndGgpID09PSBwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQuaG9zdG5hbWUgPT09IHByb3h5RWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRQcm94eSkge1xuICAgICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgICAgaG9zdDogcGFyc2VkUHJveHlVcmwuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwYXJzZWRQcm94eVVybC5wb3J0LFxuICAgICAgICAgICAgcHJvdG9jb2w6IHBhcnNlZFByb3h5VXJsLnByb3RvY29sXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChwYXJzZWRQcm94eVVybC5hdXRoKSB7XG4gICAgICAgICAgICB2YXIgcHJveHlVcmxBdXRoID0gcGFyc2VkUHJveHlVcmwuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IHByb3h5VXJsQXV0aFswXSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHByb3h5VXJsQXV0aFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJyk7XG4gICAgICBzZXRQcm94eShvcHRpb25zLCBwcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgdmFyIGlzSHR0cHNQcm94eSA9IGlzSHR0cHNSZXF1ZXN0ICYmIChwcm94eSA/IGlzSHR0cHMudGVzdChwcm94eS5wcm90b2NvbCkgOiB0cnVlKTtcbiAgICBpZiAoY29uZmlnLnRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0ID0gY29uZmlnLnRyYW5zcG9ydDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMgPT09IDApIHtcbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNQcm94eSA/IGh0dHBzIDogaHR0cDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gY29uZmlnLmJlZm9yZVJlZGlyZWN0O1xuICAgICAgfVxuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Qm9keUxlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcikge1xuICAgICAgb3B0aW9ucy5pbnNlY3VyZUhUVFBQYXJzZXIgPSBjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICB2YXIgdG90YWxSZXNwb25zZUJ5dGVzID0gMDtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdG95KCkgZW1pdCBhYm9ydGVkIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHJlamVjdCgpIG9uIE5vZGUuanMgdjE2XG4gICAgICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdhYm9ydGVkJywgZnVuY3Rpb24gaGFuZGxlclN0cmVhbUFib3J0ZWQoKSB7XG4gICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlQnVmZmVyLmxlbmd0aCA9PT0gMSA/IHJlc3BvbnNlQnVmZmVyWzBdIDogQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcoY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcpO1xuICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscy5zdHJpcEJPTShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgdmFyIHRpbWVvdXQgPSBwYXJzZUludChjb25maWcudGltZW91dCwgMTApO1xuXG4gICAgICBpZiAoaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dCh0aW1lb3V0LCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ3RpbWVvdXQgb2YgJyArIHRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLFxuICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgZGF0YS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIGNvbmZpZywgbnVsbCwgcmVxKSk7XG4gICAgICB9KS5waXBlKHJlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuL3RyYW5zaXRpb25hbCcpO1xudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB2YXIgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXTtcblxuICAgIHZhciBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgKGlzT2JqZWN0UGF5bG9hZCAmJiBjb250ZW50VHlwZSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGEnKSkge1xuICAgICAgdmFyIF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuICAgICAgcmV0dXJuIHRvRm9ybURhdGEoaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSwgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdFBheWxvYWQgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiByZXF1aXJlKCcuL2Vudi9Gb3JtRGF0YScpXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjcuMlwiXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIHZhciBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgRm9ybURhdGEoKTtcblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGQoZGF0YSwgcGFyZW50S2V5KSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoZGF0YSkgfHwgdXRpbHMuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2YoZGF0YSkgIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhcmVudEtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZGF0YSk7XG5cbiAgICAgIHV0aWxzLmZvckVhY2goZGF0YSwgZnVuY3Rpb24gZWFjaCh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgIHZhciBhcnI7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmICFwYXJlbnRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgIXV0aWxzLmlzVW5kZWZpbmVkKGVsKSAmJiBmb3JtRGF0YS5hcHBlbmQoZnVsbEtleSwgY29udmVydFZhbHVlKGVsKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICB9KTtcblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIGNvbnZlcnRWYWx1ZShkYXRhKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLi9lbnYvZGF0YScpLnZlcnNpb247XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGtpbmRPZiA9IChmdW5jdGlvbihjYWNoZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmZ1bmN0aW9uIGtpbmRPZlRlc3QodHlwZSkge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gaXNLaW5kT2YodGhpbmcpIHtcbiAgICByZXR1cm4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHRoaW5nKSB7XG4gIHZhciBwYXR0ZXJuID0gJ1tvYmplY3QgRm9ybURhdGFdJztcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgdG9TdHJpbmcuY2FsbCh0aGluZykgPT09IHBhdHRlcm4gfHxcbiAgICAoaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gcGF0dGVybilcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdHMoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZmlsdGVyXVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiB0b0ZsYXRPYmplY3Qoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIpIHtcbiAgdmFyIHByb3BzO1xuICB2YXIgaTtcbiAgdmFyIHByb3A7XG4gIHZhciBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICghbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qXG4gKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICB2YXIgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh0aGluZykge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgdmFyIGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmIChpc1VuZGVmaW5lZChpKSkgcmV0dXJuIG51bGw7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBpc1R5cGVkQXJyYXkgPSAoZnVuY3Rpb24oVHlwZWRBcnJheSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTSxcbiAgaW5oZXJpdHM6IGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3Q6IHRvRmxhdE9iamVjdCxcbiAga2luZE9mOiBraW5kT2YsXG4gIGtpbmRPZlRlc3Q6IGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoOiBlbmRzV2l0aCxcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3Q6IGlzRmlsZUxpc3Rcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG5pbXBvcnQge1xuICBpc1B1cmVPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG59IGZyb20gJ0B1dGlscy9pbmRleCc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IElDbGllbnRQYXJhbXMgfSBmcm9tICcuL0lDbGllbnQnO1xuaW1wb3J0IHsgSVJlcXVlc3RDb25maWcsIElSZXF1ZXN0T3B0aW9ucywgVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyB9IGZyb20gJy4uL3JlcXVlc3QvSVJlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBUQ2xpZW50Q29ubmVjdFBhcmFtcyA9IFBpY2s8SUNsaWVudFBhcmFtcywgJ2NvbmZpZycgfCAnb3B0aW9ucyc+O1xuXG5jbGFzcyBDbGllbnQge1xuICBwcml2YXRlIHZlcnNpb24hOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25maWchOiBJUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogSVJlcXVlc3RPcHRpb25zO1xuXG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVNlY3JldD86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXQodGhpcy5jbG9uZVBhcmFtcyhwYXJhbXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWNrYWdlVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldEFQSUtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJU2VjcmV0KCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlY3JldDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkdldCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcG9zdChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlB1dCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuRGVsZXRlLCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdChwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZWRQYXJhbXMgPSB7IC4uLnBhcmFtcyB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb25maWcpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5jb25maWcgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5jb25maWcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMub3B0aW9ucykge1xuICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5vcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5ID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZmlnKGN1c3RvbUNvbmZpZzogUGFydGlhbDxJUmVxdWVzdENvbmZpZz4gfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21Db25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY3VzdG9tQ29uZmlnXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uQ2xpZW50LmNvbmZpZyB9O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdob3N0JywgY3VzdG9tQ29uZmlnLmhvc3QpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdvdXRwdXQnLCBjdXN0b21Db25maWcub3V0cHV0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAndmVyc2lvbicsIGN1c3RvbUNvbmZpZy52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogVENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaUtleSwgYXBpU2VjcmV0LCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNtc0Nvbm5lY3QoYXBpVG9rZW46IHN0cmluZywgcGFyYW1zPzogVENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaVRva2VuLCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZzogUmVhZG9ubHk8SVJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbn1cblxuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBzZXRWYWx1ZUlmTm90TmlsIH0gZnJvbSAnQHV0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJ0BjdXN0b20vdHlwZXMnO1xuaW1wb3J0IHsgSUFQSUxvY2FsUmVzcG9uc2UsIElBUElSZXNwb25zZSB9IGZyb20gJ0BtYWlsamV0L3R5cGVzL2FwaS9SZXNwb25zZSc7XG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9IdHRwTWV0aG9kcyc7XG5pbXBvcnQge1xuICBJUmVxdWVzdENvbmZpZyxcbiAgVFJlcXVlc3REYXRhLFxuICBUUmVxdWVzdFBhcmFtcyxcbiAgVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgVFJlcXVlc3RBeGlvc0NvbmZpZyxcbiAgVFN1YlBhdGgsXG59IGZyb20gJy4vSVJlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IENsaWVudCBmcm9tICcuLi9jbGllbnQnO1xuLypvdGhlciovXG5cbnR5cGUgVFVua25vd25SZWMgPSBUT2JqZWN0LlRVbmtub3duUmVjXG5cbmNvbnN0IEpTT05iID0gSlNPTkJpZ0ludCh7IHN0b3JlQXNTdHJpbmc6IHRydWUgfSk7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogSHR0cE1ldGhvZHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPElSZXF1ZXN0Q29uZmlnPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc3ViUGF0aDogVFN1YlBhdGg7XG4gIHByaXZhdGUgYWN0aW9uUGF0aDogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHJlc291cmNlOiBzdHJpbmcsXG4gICAgY29uZmlnPzogVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKCEoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImNsaWVudFwiIG11c3QgYmUgaW5zdGFuY2Ugb2YgQ2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEh0dHBNZXRob2RzKS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibWV0aG9kXCIgbXVzdCBiZSBvbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZHM6IGdldCwgcG9zdCwgcHV0LCBkZWxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInJlc291cmNlXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMudXJsID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG51bGw7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBgbWFpbGpldC1hcGktdjMtbm9kZWpzLyR7dGhpcy5jbGllbnQuZ2V0UGFja2FnZVZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlUb2tlbjogdGhpcy5jbGllbnQuZ2V0QVBJVG9rZW4oKSxcbiAgICAgIGFwaUtleTogdGhpcy5jbGllbnQuZ2V0QVBJS2V5KCksXG4gICAgICBhcGlTZWNyZXQ6IHRoaXMuY2xpZW50LmdldEFQSVNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidXJsXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3RleHQ6cGxhaW4nKSA+IC0xXG4gICAgICA/ICd0ZXh0L3BsYWluJ1xuICAgICAgOiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3RCb2R5KGRhdGE6IFRSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiBbXG4gICAgICBIdHRwTWV0aG9kcy5QdXQsXG4gICAgICBIdHRwTWV0aG9kcy5Qb3N0LFxuICAgICAgSHR0cE1ldGhvZHMuRGVsZXRlLFxuICAgIF0uaW5jbHVkZXModGhpcy5tZXRob2QpID8gZGF0YSA6IHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bGxVcmwoKSB7XG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcuaG9zdCA/PyBjbGllbnRDb25maWcuaG9zdDtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5jb25maWcudmVyc2lvbiA/PyBjbGllbnRDb25maWcudmVyc2lvbjtcblxuICAgIHJldHVybiB1cmxKb2luKFJlcXVlc3QucHJvdG9jb2wsIGhvc3QsIHZlcnNpb24sIHRoaXMuc3ViUGF0aCwgdGhpcy51cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YlBhdGgoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY29uc3QgaXNDb250YWN0TGlzdFdpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnY29udGFjdHNsaXN0JyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgY29uc3QgaXNCYXRjaEpvYldpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnYmF0Y2hqb2InICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcblxuICAgICAgcmV0dXJuIChpc0NvbnRhY3RMaXN0V2l0aENTViB8fCBpc0JhdGNoSm9iV2l0aENTVikgPyAnREFUQScgOiB0aGlzLnN1YlBhdGg7XG4gICAgfVxuICAgIGNvbnN0IGlzU2VuZFJlc291cmNlID0gdGhpcy5yZXNvdXJjZSA9PT0gJ3NlbmQnO1xuICAgIGNvbnN0IHJlc291cmNlQ29udGFpblNNUyA9IHRoaXMucmVzb3VyY2UuaW5kZXhPZignc21zJykgPiAtMTtcblxuICAgIHJldHVybiAoIWlzU2VuZFJlc291cmNlICYmICFyZXNvdXJjZUNvbnRhaW5TTVMpID8gJ1JFU1QnIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXF1ZXN0KHVybDogc3RyaW5nLCBkYXRhOiBUUmVxdWVzdERhdGEsIHBhcmFtczogVFJlcXVlc3RQYXJhbXMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MjcmVxdWVzdC1jb25maWdcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnOiBUUmVxdWVzdEF4aW9zQ29uZmlnID0ge1xuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgZGF0YTogdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKSxcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiB0aGlzLmdldFVzZXJBZ2VudCgpLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogdGhpcy5nZXRDb250ZW50VHlwZSh1cmwpLFxuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybVJlc3BvbnNlKHJlc3BvbnNlRGF0YTogdW5rbm93bikge1xuICAgICAgICBjb25zdCBkYXRhSXNTdHJpbmcgPSB0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJztcbiAgICAgICAgY29uc3QgaXNKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIGRhdGFJc1N0cmluZyAmJiBpc0pTT05SZXF1ZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gUmVxdWVzdC5wYXJzZVRvSlNPTmIocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGE7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBCUk9XU0VSIFNJREVcbiAgICBpZiAoUmVxdWVzdC5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydYLVVzZXItQWdlbnQnXSA9IHJlcXVlc3RDb25maWcuaGVhZGVyc1snVXNlci1BZ2VudCddO1xuICAgIH1cblxuICAgIC8vIEFVVEhcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKTtcblxuICAgIGlmIChjcmVkZW50aWFscy5hcGlUb2tlbikge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y3JlZGVudGlhbHMuYXBpVG9rZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdENvbmZpZy5hdXRoID0ge1xuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLmFwaVNlY3JldCBhcyBzdHJpbmcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9QVElPTlNcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gdGhpcy5jbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgLy8gMS4gVGltZW91dFxuICAgIGlmIChjbGllbnRPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcudGltZW91dCA9IGNsaWVudE9wdGlvbnMudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyAyLiBQcm94eVxuICAgIGlmIChjbGllbnRPcHRpb25zLnByb3h5KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnByb3h5ID0gY2xpZW50T3B0aW9ucy5wcm94eTtcbiAgICB9XG5cbiAgICAvLyAzLiBIZWFkZXJzXG4gICAgaWYgKGNsaWVudE9wdGlvbnMuaGVhZGVycyAmJiBPYmplY3Qua2V5cyhjbGllbnRPcHRpb25zLmhlYWRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ucmVxdWVzdENvbmZpZy5oZWFkZXJzLFxuICAgICAgICAuLi5jbGllbnRPcHRpb25zLmhlYWRlcnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDQuIE91dHB1dFxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuY29uZmlnLm91dHB1dCA/PyBjbGllbnRDb25maWcub3V0cHV0O1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucmVzcG9uc2VUeXBlID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDUuIE1heCByZXF1ZXN0IGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Qm9keUxlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA2LiBNYXggcmVzcG9uc2UgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhDb250ZW50TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFzZVVSTChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVybCA9IGJhc2VVcmwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidmFsdWVcIiBtdXN0IGJlIHN0cmluZyBvciBudW1iZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJuYW1lXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvblBhdGggPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY2FzZSAnY3N2ZGF0YSc6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3N2ZXJyb3InOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZlcnJvci90ZXh0OmNzdic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHRoaXMuYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGE+KFxuICAgIGRhdGE/OiBUUmVxdWVzdERhdGEsXG4gICAgcGFyYW1zPzogVFJlcXVlc3RQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiB0cnVlLFxuICApOiBQcm9taXNlPElBUElSZXNwb25zZTxUQm9keT4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGEsIFRQYXJhbXMgZXh0ZW5kcyBUVW5rbm93blJlYz4oXG4gICAgZGF0YT86IFRCb2R5LFxuICAgIHBhcmFtcz86IFRQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiBmYWxzZSxcbiAgKTogUHJvbWlzZTxJQVBJTG9jYWxSZXNwb25zZTxUQm9keSwgVFBhcmFtcz4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGEsIFRQYXJhbXMgZXh0ZW5kcyBUVW5rbm93blJlYz4oXG4gICAgZGF0YTogVFJlcXVlc3REYXRhIHwgVEJvZHkgPSB7fSxcbiAgICBwYXJhbXM6IFRSZXF1ZXN0UGFyYW1zIHwgVFBhcmFtcyA9IHt9LFxuICAgIHBlcmZvcm1BUElDYWxsID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxJQVBJUmVzcG9uc2U8VEJvZHk+IHwgSUFQSUxvY2FsUmVzcG9uc2U8VEJvZHksIFRQYXJhbXM+PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEZ1bGxVcmwoKTtcbiAgICB0aGlzLnNldEJhc2VVUkwodGhpcy5yZXNvdXJjZSk7XG5cbiAgICBpZiAoIXBlcmZvcm1BUElDYWxsKSB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB1cmwsXG4gICAgICB9IGFzIElBUElMb2NhbFJlc3BvbnNlPFRCb2R5LCBUUGFyYW1zPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KHVybCwgZGF0YSwgcGFyYW1zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoKTtcblxuICAgICAgICBlcnJvci5jb2RlID0gZXJyLmNvZGU7XG4gICAgICAgIGVycm9yLmNvbmZpZyA9IGVyci5jb25maWc7XG5cbiAgICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgIH0gPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBzdGF0dXM7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBib2R5Py5FcnJvck1lc3NhZ2UgPz8gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBTdGF0dXMgQ29kZTogXCIke2Vycm9yLnN0YXR1c0NvZGV9XCIgTWVzc2FnZTogXCIke2Vycm9yTWVzc2FnZX1cImA7XG5cbiAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2VuZC1pbi1idWxrXG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGJvZHkuTWVzc2FnZXM/LlswXT8uRXJyb3JzPy5bMF0/LkVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVsbE1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYDtcXG4ke2Z1bGxNZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHYzLjEgY2FzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2FuZGJveC1tb2RlXG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JNZXNzYWdlJywgYm9keS5FcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yQ29kZScsIGJvZHkuRXJyb3JDb2RlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvcklkZW50aWZpZXInLCBib2R5LkVycm9ySWRlbnRpZmllcik7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JSZWxhdGVkVG8nLCBib2R5LkVycm9yUmVsYXRlZFRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IG51bGw7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogRXJyb3IgQ29kZTogXCIke2Vycm9yLmNvZGV9XCIgTWVzc2FnZTogXCIke2Vyci5tZXNzYWdlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm90b2NvbCA9ICdodHRwczovLycgYXMgY29uc3Q7XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZVRvSlNPTmIodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInRleHRcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGxldCBib2R5O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gSlNPTmIucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYm9keSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcblxuZXhwb3J0IHtcbiAgaXNOaWwsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTmlsKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1B1cmVPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1B1cmVPYmplY3Q7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICdAY3VzdG9tL3R5cGVzJztcbi8qdXRpbHMqL1xuaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVJZk5vdE5pbChcbiAgdGFyZ2V0T2JqZWN0OiBUT2JqZWN0LlRVbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBBTFBIQUJFVCA9IHY7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgaW52YWxpZDogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE9iamVjdCBleHBlY3RlZDoge3Z9J1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkOiAnICsgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgREVDSU1BTF9QTEFDRVM6IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgIFJPVU5ESU5HX01PREU6IFJPVU5ESU5HX01PREUsXHJcbiAgICAgICAgRVhQT05FTlRJQUxfQVQ6IFtUT19FWFBfTkVHLCBUT19FWFBfUE9TXSxcclxuICAgICAgICBSQU5HRTogW01JTl9FWFAsIE1BWF9FWFBdLFxyXG4gICAgICAgIENSWVBUTzogQ1JZUFRPLFxyXG4gICAgICAgIE1PRFVMT19NT0RFOiBNT0RVTE9fTU9ERSxcclxuICAgICAgICBQT1dfUFJFQ0lTSU9OOiBQT1dfUFJFQ0lTSU9OLFxyXG4gICAgICAgIEZPUk1BVDogRk9STUFULFxyXG4gICAgICAgIEFMUEhBQkVUOiBBTFBIQUJFVFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHYgaXMgYSBCaWdOdW1iZXIgaW5zdGFuY2UsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogSWYgQmlnTnVtYmVyLkRFQlVHIGlzIHRydWUsIHRocm93IGlmIGEgQmlnTnVtYmVyIGluc3RhbmNlIGlzIG5vdCB3ZWxsLWZvcm1lZC5cclxuICAgICAqXHJcbiAgICAgKiB2IHthbnl9XHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEludmFsaWQgQmlnTnVtYmVyOiB7dn0nXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5pc0JpZ051bWJlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIGlmICghdiB8fCB2Ll9pc0JpZ051bWJlciAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoIUJpZ051bWJlci5ERUJVRykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICB2YXIgaSwgbixcclxuICAgICAgICBjID0gdi5jLFxyXG4gICAgICAgIGUgPSB2LmUsXHJcbiAgICAgICAgcyA9IHYucztcclxuXHJcbiAgICAgIG91dDogaWYgKHt9LnRvU3RyaW5nLmNhbGwoYykgPT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cclxuICAgICAgICBpZiAoKHMgPT09IDEgfHwgcyA9PT0gLTEpICYmIGUgPj0gLU1BWCAmJiBlIDw9IE1BWCAmJiBlID09PSBtYXRoZmxvb3IoZSkpIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyB6ZXJvLCB0aGUgQmlnTnVtYmVyIHZhbHVlIG11c3QgYmUgemVyby5cclxuICAgICAgICAgIGlmIChjWzBdID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChlID09PSAwICYmIGMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgY1swXSBzaG91bGQgaGF2ZSwgYmFzZWQgb24gdGhlIGV4cG9uZW50LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChpIDwgMSkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICAgICAgLy9pZiAoTWF0aC5jZWlsKE1hdGgubG9nKGNbMF0gKyAxKSAvIE1hdGguTE4xMCkgPT0gaSkge1xyXG4gICAgICAgICAgaWYgKFN0cmluZyhjWzBdKS5sZW5ndGggPT0gaSkge1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBuID0gY1tpXTtcclxuICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBCQVNFIHx8IG4gIT09IG1hdGhmbG9vcihuKSkgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYXN0IGVsZW1lbnQgY2Fubm90IGJlIHplcm8sIHVubGVzcyBpdCBpcyB0aGUgb25seSBlbGVtZW50LlxyXG4gICAgICAgICAgICBpZiAobiAhPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5maW5pdHkvTmFOXHJcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gbnVsbCAmJiBlID09PSBudWxsICYmIChzID09PSBudWxsIHx8IHMgPT09IDEgfHwgcyA9PT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0ludmFsaWQgQmlnTnVtYmVyOiAnICsgdik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5tYXhpbXVtID0gQmlnTnVtYmVyLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5sdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5ndCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG1ldGhvZCkge1xyXG4gICAgICB2YXIgbixcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICBtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG5cclxuICAgICAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgICAgICBpZiAoIW4ucykge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsKG0sIG4pKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgciA9IHIgfHwgc2QgPCAwIHx8XHJcblxyXG4gICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gIG4gJSBwb3dzMTBbZCAtIGogLSAxXSAgcmV0dXJucyBhbGwgZGlnaXRzIG9mIG4gdG8gdGhlIHJpZ2h0XHJcbiAgICAgICAgICAvLyBvZiB0aGUgZGlnaXQgYXQgaiwgZS5nLiBpZiBuIGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbiBnaXZlcyA3MTQuXHJcbiAgICAgICAgICAgeGNbbmkgKyAxXSAhPSBudWxsIHx8IChqIDwgMCA/IG4gOiBuICUgcG93czEwW2QgLSBqIC0gMV0pO1xyXG5cclxuICAgICAgICAgIHIgPSBybSA8IDRcclxuICAgICAgICAgICA/IChyZCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC5cclxuICAgICAgICAgICAgKChpID4gMCA/IGogPiAwID8gbiAvIHBvd3MxMFtkIC0gal0gOiAwIDogeGNbbmkgLSAxXSkgJSAxMCkgJiAxIHx8XHJcbiAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgICAgaWYgKHNkIDwgMSB8fCAheGNbMF0pIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgc2QgdG8gZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHBvd3MxMFsoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFXTtcclxuICAgICAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHguZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgZGlnaXRzLlxyXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaTtcclxuICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIG5pLS07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaSArIDE7XHJcbiAgICAgICAgICAgIGsgPSBwb3dzMTBbTE9HX0JBU0UgLSBpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEUuZy4gNTY3MDAgYmVjb21lcyA1NjAwMCBpZiA3IGlzIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4uXHJcbiAgICAgICAgICAgIHhjW25pXSA9IGogPiAwID8gbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGpdICUgcG93czEwW2pdKSAqIGsgOiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICAgICAgaWYgKG5pID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4Y1swXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSB4Y1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuICAgICAgICAgICAgICAgIGogPSB4Y1swXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrID0gMTsgaiA+PSAxMDsgaiAvPSAxMCwgaysrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gaykge1xyXG4gICAgICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHhjWzBdID09IEJBU0UpIHhjWzBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeGNbbmldICs9IGs7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGNbbmldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgeGNbbmktLV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChpID0geGMubGVuZ3RoOyB4Y1stLWldID09PSAwOyB4Yy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz8gSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz8gWmVyby5cclxuICAgICAgICB9IGVsc2UgaWYgKHguZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB2YWx1ZU9mKG4pIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcblxyXG4gICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgZSlcclxuICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gUFJPVE9UWVBFL0lOU1RBTkNFIE1FVEhPRFNcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAoeC5zIDwgMCkgeC5zID0gMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuXHJcbiAgICAgKiAgIDEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAtMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIDAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLFxyXG4gICAgICogICBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICovXHJcbiAgICBQLmNvbXBhcmVkVG8gPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBkcCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGVcclxuICAgICAqIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIGRwIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2YgZHAgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzOiBpbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgbiA9ICgodiA9IGMubGVuZ3RoIC0gMSkgLSBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkpICogTE9HX0JBU0U7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IG51bWJlci5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcbiAgICAgIGlmIChuIDwgMCkgbiA9IDA7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAvIDAgPSBJXHJcbiAgICAgKiAgbiAvIE4gPSBOXHJcbiAgICAgKiAgbiAvIEkgPSAwXHJcbiAgICAgKiAgMCAvIG4gPSAwXHJcbiAgICAgKiAgMCAvIDAgPSBOXHJcbiAgICAgKiAgMCAvIE4gPSBOXHJcbiAgICAgKiAgMCAvIEkgPSAwXHJcbiAgICAgKiAgTiAvIG4gPSBOXHJcbiAgICAgKiAgTiAvIDAgPSBOXHJcbiAgICAgKiAgTiAvIE4gPSBOXHJcbiAgICAgKiAgTiAvIEkgPSBOXHJcbiAgICAgKiAgSSAvIG4gPSBJXHJcbiAgICAgKiAgSSAvIDAgPSBJXHJcbiAgICAgKiAgSSAvIE4gPSBOXHJcbiAgICAgKiAgSSAvIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZEJ5ID0gUC5kaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIERFQ0lNQUxfUExBQ0VTLCBST1VORElOR19NT0RFKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciBieSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuaWRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgMCwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBleHBvbmVudGlhdGVkIGJ5IG4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbSBpcyBwcmVzZW50LCByZXR1cm4gdGhlIHJlc3VsdCBtb2R1bG8gbS5cclxuICAgICAqIElmIG4gaXMgbmVnYXRpdmUgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICogSWYgUE9XX1BSRUNJU0lPTiBpcyBub24temVybyBhbmQgbSBpcyBub3QgcHJlc2VudCwgcm91bmQgdG8gUE9XX1BSRUNJU0lPTiB1c2luZyBST1VORElOR19NT0RFLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2R1bGFyIHBvd2VyIG9wZXJhdGlvbiB3b3JrcyBlZmZpY2llbnRseSB3aGVuIHgsIG4sIGFuZCBtIGFyZSBpbnRlZ2Vycywgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHguZXhwb25lbnRpYXRlZEJ5KG4pLm1vZHVsbyhtKSB3aXRoIGEgUE9XX1BSRUNJU0lPTiBvZiAwLlxyXG4gICAgICpcclxuICAgICAqIG4ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgZXhwb25lbnQuIEFuIGludGVnZXIuXHJcbiAgICAgKiBbbV0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgbW9kdWx1cy5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gRXhwb25lbnQgbm90IGFuIGludGVnZXI6IHtufSdcclxuICAgICAqL1xyXG4gICAgUC5leHBvbmVudGlhdGVkQnkgPSBQLnBvdyA9IGZ1bmN0aW9uIChuLCBtKSB7XHJcbiAgICAgIHZhciBoYWxmLCBpc01vZEV4cCwgaSwgaywgbW9yZSwgbklzQmlnLCBuSXNOZWcsIG5Jc09kZCwgeSxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG5cclxuICAgICAgLy8gQWxsb3cgTmFOIGFuZCDCsUluZmluaXR5LCBidXQgbm90IG90aGVyIG5vbi1pbnRlZ2Vycy5cclxuICAgICAgaWYgKG4uYyAmJiAhbi5pc0ludGVnZXIoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICcgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG0gIT0gbnVsbCkgbSA9IG5ldyBCaWdOdW1iZXIobSk7XHJcblxyXG4gICAgICAvLyBFeHBvbmVudCBvZiBNQVhfU0FGRV9JTlRFR0VSIGlzIDE1LlxyXG4gICAgICBuSXNCaWcgPSBuLmUgPiAxNDtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgTmFOLCDCsUluZmluaXR5LCDCsTAgb3IgwrExLCBvciBuIGlzIMKxSW5maW5pdHksIE5hTiBvciDCsTAuXHJcbiAgICAgIGlmICgheC5jIHx8ICF4LmNbMF0gfHwgeC5jWzBdID09IDEgJiYgIXguZSAmJiB4LmMubGVuZ3RoID09IDEgfHwgIW4uYyB8fCAhbi5jWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YgcG93IHdoZW4geCBpcyBuZWdhdGl2ZSBkZXBlbmRzIG9uIHRoZSBldmVubmVzcyBvZiBuLlxyXG4gICAgICAgIC8vIElmICtuIG92ZXJmbG93cyB0byDCsUluZmluaXR5LCB0aGUgZXZlbm5lc3Mgb2YgbiB3b3VsZCBiZSBub3QgYmUga25vd24uXHJcbiAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoTWF0aC5wb3coK3ZhbHVlT2YoeCksIG5Jc0JpZyA/IDIgLSBpc09kZChuKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkgdCA9IHhjLCB4YyA9IHljLCB5YyA9IHQsIHkucyA9IC15LnM7XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkgemMgPSB4YywgeGMgPSB5YywgeWMgPSB6YywgaSA9IHhjTCwgeGNMID0geWNMLCB5Y0wgPSBpO1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IHhjTCArIHljTCwgemMgPSBbXTsgaS0tOyB6Yy5wdXNoKDApKTtcclxuXHJcbiAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICBzcXJ0QmFzZSA9IFNRUlRfQkFTRTtcclxuXHJcbiAgICAgIGZvciAoaSA9IHljTDsgLS1pID49IDA7KSB7XHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICAgICAgeWxvID0geWNbaV0gJSBzcXJ0QmFzZTtcclxuICAgICAgICB5aGkgPSB5Y1tpXSAvIHNxcnRCYXNlIHwgMDtcclxuXHJcbiAgICAgICAgZm9yIChrID0geGNMLCBqID0gaSArIGs7IGogPiBpOykge1xyXG4gICAgICAgICAgeGxvID0geGNbLS1rXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgICAgeGhpID0geGNba10gLyBzcXJ0QmFzZSB8IDA7XHJcbiAgICAgICAgICBtID0geWhpICogeGxvICsgeGhpICogeWxvO1xyXG4gICAgICAgICAgeGxvID0geWxvICogeGxvICsgKChtICUgc3FydEJhc2UpICogc3FydEJhc2UpICsgemNbal0gKyBjO1xyXG4gICAgICAgICAgYyA9ICh4bG8gLyBiYXNlIHwgMCkgKyAobSAvIHNxcnRCYXNlIHwgMCkgKyB5aGkgKiB4aGk7XHJcbiAgICAgICAgICB6Y1tqLS1dID0geGxvICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHpjW2pdID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGMpIHtcclxuICAgICAgICArK2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgemMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHpjLCBlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBuZWdhdGVkLFxyXG4gICAgICogaS5lLiBtdWx0aXBsaWVkIGJ5IC0xLlxyXG4gICAgICovXHJcbiAgICBQLm5lZ2F0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgeC5zID0gLXgucyB8fCBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiArIDAgPSBuXHJcbiAgICAgKiAgbiArIE4gPSBOXHJcbiAgICAgKiAgbiArIEkgPSBJXHJcbiAgICAgKiAgMCArIG4gPSBuXHJcbiAgICAgKiAgMCArIDAgPSAwXHJcbiAgICAgKiAgMCArIE4gPSBOXHJcbiAgICAgKiAgMCArIEkgPSBJXHJcbiAgICAgKiAgTiArIG4gPSBOXHJcbiAgICAgKiAgTiArIDAgPSBOXHJcbiAgICAgKiAgTiArIE4gPSBOXHJcbiAgICAgKiAgTiArIEkgPSBOXHJcbiAgICAgKiAgSSArIG4gPSBJXHJcbiAgICAgKiAgSSArIDAgPSBJXHJcbiAgICAgKiAgSSArIE4gPSBOXHJcbiAgICAgKiAgSSArIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcGx1cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5wbHVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBuZXcgQmlnTnVtYmVyKGEgLyAwKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHJldHVybiB5Y1swXSA/IHkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6IGEgKiAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG4gICAgICAgIGlmIChhID4gMCkge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yICg7IGEtLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYSA9IHhjLmxlbmd0aDtcclxuICAgICAgYiA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIFBvaW50IHhjIHRvIHRoZSBsb25nZXIgYXJyYXksIGFuZCBiIHRvIHRoZSBzaG9ydGVyIGxlbmd0aC5cclxuICAgICAgaWYgKGEgLSBiIDwgMCkgdCA9IHljLCB5YyA9IHhjLCB4YyA9IHQsIGIgPSBhO1xyXG5cclxuICAgICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWMubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGMgY2FuIGJlIGlnbm9yZWQuXHJcbiAgICAgIGZvciAoYSA9IDA7IGI7KSB7XHJcbiAgICAgICAgYSA9ICh4Y1stLWJdID0geGNbYl0gKyB5Y1tiXSArIGEpIC8gQkFTRSB8IDA7XHJcbiAgICAgICAgeGNbYl0gPSBCQVNFID09PSB4Y1tiXSA/IDAgOiB4Y1tiXSAlIEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgeGMgPSBbYV0uY29uY2F0KHhjKTtcclxuICAgICAgICArK3llO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwXHJcbiAgICAgIC8vIHllID0gTUFYX0VYUCArIDEgcG9zc2libGVcclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIHNkIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZlxyXG4gICAgICogdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqIElmIHNkIGlzIHRydWUgaW5jbHVkZSBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgc2QgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBzZCB7bnVtYmVyfGJvb2xlYW59IG51bWJlcjogc2lnbmlmaWNhbnQgZGlnaXRzOiBpbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW46IHdoZXRoZXIgdG8gY291bnQgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zOiB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKHNkICE9IG51bGwgJiYgc2QgIT09ICEhc2QpIHtcclxuICAgICAgICBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgc2QsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICB2ID0gYy5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gdiAqIExPR19CQVNFICsgMTtcclxuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkge1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICh2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgbisrKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNkICYmIHguZSArIDEgPiBuKSBuID0geC5lICsgMTtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHNoaWZ0ZWQgYnkgayBwbGFjZXNcclxuICAgICAqIChwb3dlcnMgb2YgMTApLiBTaGlmdCB0byB0aGUgcmlnaHQgaWYgbiA+IDAsIGFuZCB0byB0aGUgbGVmdCBpZiBuIDwgMC5cclxuICAgICAqXHJcbiAgICAgKiBrIHtudW1iZXJ9IEludGVnZXIsIC1NQVhfU0FGRV9JTlRFR0VSIHRvIE1BWF9TQUZFX0lOVEVHRVIgaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7a30nXHJcbiAgICAgKi9cclxuICAgIFAuc2hpZnRlZEJ5ID0gZnVuY3Rpb24gKGspIHtcclxuICAgICAgaW50Q2hlY2soaywgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICByZXR1cm4gdGhpcy50aW1lcygnMWUnICsgayk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIHNxcnQoLW4pID0gIE5cclxuICAgICAqICBzcXJ0KE4pID0gIE5cclxuICAgICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICAgKiAgc3FydChJKSA9ICBJXHJcbiAgICAgKiAgc3FydCgwKSA9ICAwXHJcbiAgICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlcixcclxuICAgICAqIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBtLCBuLCByLCByZXAsIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYyA9IHguYyxcclxuICAgICAgICBzID0geC5zLFxyXG4gICAgICAgIGUgPSB4LmUsXHJcbiAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyArIDQsXHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoJzAuNScpO1xyXG5cclxuICAgICAgLy8gTmVnYXRpdmUvTmFOL0luZmluaXR5L3plcm8/XHJcbiAgICAgIGlmIChzICE9PSAxIHx8ICFjIHx8ICFjWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoIXMgfHwgcyA8IDAgJiYgKCFjIHx8IGNbMF0pID8gTmFOIDogYyA/IHggOiAxIC8gMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICAgIHMgPSBNYXRoLnNxcnQoK3ZhbHVlT2YoeCkpO1xyXG5cclxuICAgICAgLy8gTWF0aC5zcXJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9IGNvZWZmVG9TdHJpbmcoYyk7XHJcbiAgICAgICAgaWYgKChuLmxlbmd0aCArIGUpICUgMiA9PSAwKSBuICs9ICcwJztcclxuICAgICAgICBzID0gTWF0aC5zcXJ0KCtuKTtcclxuICAgICAgICBlID0gYml0Rmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICAgIG4gPSAnNWUnICsgZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihzICsgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgemVyby5cclxuICAgICAgLy8gciBjb3VsZCBiZSB6ZXJvIGlmIE1JTl9FWFAgaXMgY2hhbmdlZCBhZnRlciB0aGUgdGhpcyB2YWx1ZSB3YXMgY3JlYXRlZC5cclxuICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIGRpdmlzaW9uIGJ5IHplcm8gKHgvdCkgYW5kIGhlbmNlIEluZmluaXR5IGJlbG93LCB3aGljaCB3b3VsZCBjYXVzZVxyXG4gICAgICAvLyBjb2VmZlRvU3RyaW5nIHRvIHRocm93LlxyXG4gICAgICBpZiAoci5jWzBdKSB7XHJcbiAgICAgICAgZSA9IHIuZTtcclxuICAgICAgICBzID0gZSArIGRwO1xyXG4gICAgICAgIGlmIChzIDwgMykgcyA9IDA7XHJcblxyXG4gICAgICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgICAgICBmb3IgKDsgOykge1xyXG4gICAgICAgICAgdCA9IHI7XHJcbiAgICAgICAgICByID0gaGFsZi50aW1lcyh0LnBsdXMoZGl2KHgsIHQsIGRwLCAxKSkpO1xyXG5cclxuICAgICAgICAgIGlmIChjb2VmZlRvU3RyaW5nKHQuYykuc2xpY2UoMCwgcykgPT09IChuID0gY29lZmZUb1N0cmluZyhyLmMpKS5zbGljZSgwLCBzKSkge1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG9mIHIgbWF5IGhlcmUgYmUgb25lIGxlc3MgdGhhbiB0aGUgZmluYWwgcmVzdWx0IGV4cG9uZW50LFxyXG4gICAgICAgICAgICAvLyBlLmcgMC4wMDA5OTk5IChlLTQpIC0tPiAwLjAwMSAoZS0zKSwgc28gYWRqdXN0IHMgc28gdGhlIHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgaW5kZXhlZCBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgIGlmIChyLmUgPCBlKSAtLXM7XHJcbiAgICAgICAgICAgIG4gPSBuLnNsaWNlKHMgLSAzLCBzICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIDk5OTkgb3IgNDk5OSAoaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5KSBjb250aW51ZSB0aGVcclxuICAgICAgICAgICAgLy8gaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGVcclxuICAgICAgICAgICAgICAvLyBleGFjdCByZXN1bHQgYXMgdGhlIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICAgICAgcm91bmQodCwgdC5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkcCArPSA0O1xyXG4gICAgICAgICAgICAgIHMgKz0gNDtcclxuICAgICAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgZXhhY3RcclxuICAgICAgICAgICAgICAvLyByZXN1bHQuIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAxKTtcclxuICAgICAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAxLCBST1VORElOR19NT0RFLCBtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBhbmRcclxuICAgICAqIHJvdW5kZWQgdXNpbmcgUk9VTkRJTkdfTU9ERSB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGluZ1xyXG4gICAgICogdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IGFzIHdpdGggSmF2YVNjcmlwdCdzIG51bWJlciB0eXBlLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLFxyXG4gICAgICogYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHAgPSBkcCArIHRoaXMuZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kZWRcclxuICAgICAqIHVzaW5nIHJtIG9yIFJPVU5ESU5HX01PREUgdG8gZHAgZGVjaW1hbCBwbGFjZXMsIGFuZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9wZXJ0aWVzXHJcbiAgICAgKiBvZiB0aGUgZm9ybWF0IG9yIEZPUk1BVCBvYmplY3QgKHNlZSBCaWdOdW1iZXIuc2V0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9ybWF0dGluZyBvYmplY3QgbWF5IGNvbnRhaW4gc29tZSBvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMgc2hvd24gYmVsb3cuXHJcbiAgICAgKlxyXG4gICAgICogRk9STUFUID0ge1xyXG4gICAgICogICBwcmVmaXg6ICcnLFxyXG4gICAgICogICBncm91cFNpemU6IDMsXHJcbiAgICAgKiAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAqICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAqICAgc3VmZml4OiAnJ1xyXG4gICAgICogfTtcclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbZm9ybWF0XSB7b2JqZWN0fSBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZSBGT1JNQVQgcGJqZWN0IGFib3ZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IHtmb3JtYXR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRm9ybWF0ID0gZnVuY3Rpb24gKGRwLCBybSwgZm9ybWF0KSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcclxuICAgICAgICBpZiAoZHAgIT0gbnVsbCAmJiBybSAmJiB0eXBlb2Ygcm0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IHJtO1xyXG4gICAgICAgICAgcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZHAgJiYgdHlwZW9mIGRwID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkcDtcclxuICAgICAgICAgIGRwID0gcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBGT1JNQVQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICcgKyBmb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHIgPSB4LnRvRml4ZWQoZHAsIHJtKTtcclxuXHJcbiAgICAgIGlmICh4LmMpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgIGFyciA9IHN0ci5zcGxpdCgnLicpLFxyXG4gICAgICAgICAgZzEgPSArZm9ybWF0Lmdyb3VwU2l6ZSxcclxuICAgICAgICAgIGcyID0gK2Zvcm1hdC5zZWNvbmRhcnlHcm91cFNpemUsXHJcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IGZvcm1hdC5ncm91cFNlcGFyYXRvciB8fCAnJyxcclxuICAgICAgICAgIGludFBhcnQgPSBhcnJbMF0sXHJcbiAgICAgICAgICBmcmFjdGlvblBhcnQgPSBhcnJbMV0sXHJcbiAgICAgICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgICAgICBpbnREaWdpdHMgPSBpc05lZyA/IGludFBhcnQuc2xpY2UoMSkgOiBpbnRQYXJ0LFxyXG4gICAgICAgICAgbGVuID0gaW50RGlnaXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGcyKSBpID0gZzEsIGcxID0gZzIsIGcyID0gaSwgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgRGVsYXllZFN0cmVhbSA9IHJlcXVpcmUoJ2RlbGF5ZWQtc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tYmluZWRTdHJlYW07XG5mdW5jdGlvbiBDb21iaW5lZFN0cmVhbSgpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAyICogMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW1zID0gdHJ1ZTtcblxuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG59XG51dGlsLmluaGVyaXRzKENvbWJpbmVkU3RyZWFtLCBTdHJlYW0pO1xuXG5Db21iaW5lZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBjb21iaW5lZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgY29tYmluZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFN0cmVhbTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICByZXR1cm4gKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnYm9vbGVhbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdudW1iZXInKVxuICAgICYmICghQnVmZmVyLmlzQnVmZmVyKHN0cmVhbSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG5cbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIERlbGF5ZWRTdHJlYW0pKSB7XG4gICAgICB2YXIgbmV3U3RyZWFtID0gRGVsYXllZFN0cmVhbS5jcmVhdGUoc3RyZWFtLCB7XG4gICAgICAgIG1heERhdGFTaXplOiBJbmZpbml0eSxcbiAgICAgICAgcGF1c2VTdHJlYW06IHRoaXMucGF1c2VTdHJlYW1zLFxuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgc3RyZWFtID0gbmV3U3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuXG4gICAgaWYgKHRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zdHJlYW1zLnB1c2goc3RyZWFtKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwodGhpcywgZGVzdCwgb3B0aW9ucyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9nZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuXG4gIGlmICh0aGlzLl9pbnNpZGVMb29wKSB7XG4gICAgdGhpcy5fcGVuZGluZ05leHQgPSB0cnVlO1xuICAgIHJldHVybjsgLy8gZGVmZXIgY2FsbFxuICB9XG5cbiAgdGhpcy5faW5zaWRlTG9vcCA9IHRydWU7XG4gIHRyeSB7XG4gICAgZG8ge1xuICAgICAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlYWxHZXROZXh0KCk7XG4gICAgfSB3aGlsZSAodGhpcy5fcGVuZGluZ05leHQpO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZWFsR2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3RyZWFtcy5zaGlmdCgpO1xuXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0U3RyZWFtID0gc3RyZWFtO1xuICBnZXRTdHJlYW0oZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICAgIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9waXBlTmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gc3RyZWFtO1xuXG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIHN0cmVhbS5vbignZW5kJywgdGhpcy5fZ2V0TmV4dC5iaW5kKHRoaXMpKTtcbiAgICBzdHJlYW0ucGlwZSh0aGlzLCB7ZW5kOiBmYWxzZX0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHN0cmVhbTtcbiAgdGhpcy53cml0ZSh2YWx1ZSk7XG4gIHRoaXMuX2dldE5leHQoKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRXJyb3JzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuX2VtaXRFcnJvcihlcnIpO1xuICB9KTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UoKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX2dldE5leHQoKTtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSgpO1xuICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2VuZCcpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdXBkYXRlRGF0YVNpemUoKTtcbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJztcbiAgdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3VwZGF0ZURhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtLmRhdGFTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5kYXRhU2l6ZSArPSBzdHJlYW0uZGF0YVNpemU7XG4gIH0pO1xuXG4gIGlmICh0aGlzLl9jdXJyZW50U3RyZWFtICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemUpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemU7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnNsaWNlKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIENyZWF0ZSBoYW5kbGVycyB0aGF0IHBhc3MgZXZlbnRzIGZyb20gbmF0aXZlIHJlcXVlc3RzXG52YXIgZXZlbnRzID0gW1wiYWJvcnRcIiwgXCJhYm9ydGVkXCIsIFwiY29ubmVjdFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXTtcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9O1xufSk7XG5cbi8vIEVycm9yIHR5cGVzIHdpdGggY29kZXNcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCJcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgc2VsZi5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGFib3J0UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIHRoaXMuZW1pdChcImFib3J0XCIpO1xufTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBXcml0aW5nIGlzIG5vdCBhbGxvd2VkIGlmIGVuZCBoYXMgYmVlbiBjYWxsZWRcbiAgaWYgKHRoaXMuX2VuZGluZykge1xuICAgIHRocm93IG5ldyBXcml0ZUFmdGVyRW5kRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGFuZCBzaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiBkYXRhKSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yKCkpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGlmIG5lZWRlZCBhbmQgZW5kXG4gIGlmICghZGF0YSkge1xuICAgIHRoaXMuX2VuZGVkID0gdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3VycmVudFJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdDtcbiAgICB0aGlzLndyaXRlKGRhdGEsIGVuY29kaW5nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9lbmRlZCA9IHRydWU7XG4gICAgICBjdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2VuZGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8vIFNldHMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3Quc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbn07XG5cbi8vIENsZWFycyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlSGVhZGVyKG5hbWUpO1xufTtcblxuLy8gR2xvYmFsIHRpbWVvdXQgZm9yIGFsbCB1bmRlcmx5aW5nIHJlcXVlc3RzXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG1zZWNzLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gRGVzdHJveXMgdGhlIHNvY2tldCBvbiB0aW1lb3V0XG4gIGZ1bmN0aW9uIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KSB7XG4gICAgc29ja2V0LnNldFRpbWVvdXQobXNlY3MpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICAgIHNvY2tldC5hZGRMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICB9XG5cbiAgLy8gU2V0cyB1cCBhIHRpbWVyIHRvIHRyaWdnZXIgYSB0aW1lb3V0IGV2ZW50XG4gIGZ1bmN0aW9uIHN0YXJ0VGltZXIoc29ja2V0KSB7XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICB9XG4gICAgc2VsZi5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5lbWl0KFwidGltZW91dFwiKTtcbiAgICAgIGNsZWFyVGltZXIoKTtcbiAgICB9LCBtc2Vjcyk7XG4gICAgZGVzdHJveU9uVGltZW91dChzb2NrZXQpO1xuICB9XG5cbiAgLy8gU3RvcHMgYSB0aW1lb3V0IGZyb20gdHJpZ2dlcmluZ1xuICBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgIC8vIENsZWFyIHRoZSB0aW1lb3V0XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICAgIHNlbGYuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIGFsbCBhdHRhY2hlZCBsaXN0ZW5lcnNcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLnNvY2tldCkge1xuICAgICAgc2VsZi5fY3VycmVudFJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQXR0YWNoIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBTdGFydCB0aGUgdGltZXIgaWYgb3Igd2hlbiB0aGUgc29ja2V0IGlzIG9wZW5lZFxuICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICBzdGFydFRpbWVyKHRoaXMuc29ja2V0KTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbmNlKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgb24gZXZlbnRzXG4gIHRoaXMub24oXCJzb2NrZXRcIiwgZGVzdHJveU9uVGltZW91dCk7XG4gIHRoaXMub24oXCJhYm9ydFwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImZsdXNoSGVhZGVyc1wiLCBcImdldEhlYWRlclwiLFxuICBcInNldE5vRGVsYXlcIiwgXCJzZXRTb2NrZXRLZWVwQWxpdmVcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9zYW5pdGl6ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAvLyBFbnN1cmUgaGVhZGVycyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQ29tcGxldGUgdGhlIFVSTCBvYmplY3Qgd2hlbiBuZWNlc3NhcnlcbiAgaWYgKCFvcHRpb25zLnBhdGhuYW1lICYmIG9wdGlvbnMucGF0aCkge1xuICAgIHZhciBzZWFyY2hQb3MgPSBvcHRpb25zLnBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFBvcyA8IDApIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoMCwgc2VhcmNoUG9zKTtcbiAgICAgIG9wdGlvbnMuc2VhcmNoID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZyhzZWFyY2hQb3MpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLyBFeGVjdXRlcyB0aGUgbmV4dCBuYXRpdmUgcmVxdWVzdCAoaW5pdGlhbCBvciByZWRpcmVjdClcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wZXJmb3JtUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gTG9hZCB0aGUgbmF0aXZlIHByb3RvY29sXG4gIHZhciBwcm90b2NvbCA9IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gIHZhciBuYXRpdmVQcm90b2NvbCA9IHRoaXMuX29wdGlvbnMubmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXTtcbiAgaWYgKCFuYXRpdmVQcm90b2NvbCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBwcm90b2NvbCBcIiArIHByb3RvY29sKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB1c2UgdGhlIGFnZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3RvY29sXG4gIC8vIChIVFRQIGFuZCBIVFRQUyB1c2UgZGlmZmVyZW50IHR5cGVzIG9mIGFnZW50cylcbiAgaWYgKHRoaXMuX29wdGlvbnMuYWdlbnRzKSB7XG4gICAgdmFyIHNjaGVtZSA9IHByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLl9vcHRpb25zLmFnZW50ID0gdGhpcy5fb3B0aW9ucy5hZ2VudHNbc2NoZW1lXTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgbmF0aXZlIHJlcXVlc3QgYW5kIHNldCB1cCBpdHMgZXZlbnQgaGFuZGxlcnNcbiAgdmFyIHJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdCA9XG4gICAgICAgIG5hdGl2ZVByb3RvY29sLnJlcXVlc3QodGhpcy5fb3B0aW9ucywgdGhpcy5fb25OYXRpdmVSZXNwb25zZSk7XG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3Qub24oZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzDCpzUuMy4xOiBXaGVuIG1ha2luZyBhIHJlcXVlc3QgZGlyZWN0bHkgdG8gYW4gb3JpZ2luIHNlcnZlciwgW+KApl1cbiAgLy8gYSBjbGllbnQgTVVTVCBzZW5kIG9ubHkgdGhlIGFic29sdXRlIHBhdGggW+KApl0gYXMgdGhlIHJlcXVlc3QtdGFyZ2V0LlxuICB0aGlzLl9jdXJyZW50VXJsID0gL15cXC8vLnRlc3QodGhpcy5fb3B0aW9ucy5wYXRoKSA/XG4gICAgdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKSA6XG4gICAgLy8gV2hlbiBtYWtpbmcgYSByZXF1ZXN0IHRvIGEgcHJveHksIFvigKZdXG4gICAgLy8gYSBjbGllbnQgTVVTVCBzZW5kIHRoZSB0YXJnZXQgVVJJIGluIGFic29sdXRlLWZvcm0gW+KApl0uXG4gICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMuX29wdGlvbnMucGF0aDtcblxuICAvLyBFbmQgYSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgLy8gKFRoZSBmaXJzdCByZXF1ZXN0IG11c3QgYmUgZW5kZWQgZXhwbGljaXRseSB3aXRoIFJlZGlyZWN0YWJsZVJlcXVlc3QjZW5kKVxuICBpZiAodGhpcy5faXNSZWRpcmVjdCkge1xuICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IGVudGl0eSBhbmQgZW5kXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycztcbiAgICAoZnVuY3Rpb24gd3JpdGVOZXh0KGVycm9yKSB7XG4gICAgICAvLyBPbmx5IHdyaXRlIGlmIHRoaXMgcmVxdWVzdCBoYXMgbm90IGJlZW4gcmVkaXJlY3RlZCB5ZXRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocmVxdWVzdCA9PT0gc2VsZi5fY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgLy8gUmVwb3J0IGFueSB3cml0ZSBlcnJvcnNcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0ZSB0aGUgbmV4dCBidWZmZXIgaWYgdGhlcmUgYXJlIHN0aWxsIGxlZnRcbiAgICAgICAgZWxzZSBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICghcmVxdWVzdC5maW5pc2hlZCkge1xuICAgICAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QgaWYgYGVuZGAgaGFzIGJlZW4gY2FsbGVkIG9uIHVzXG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2VuZGVkKSB7XG4gICAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgdmFyIHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuXG4gIC8vIElmIHRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gIHZhciBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMubG9jYXRpb247XG4gIGlmICghbG9jYXRpb24gfHwgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgPT09IGZhbHNlIHx8XG4gICAgICBzdGF0dXNDb2RlIDwgMzAwIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSByZXNwb25zZSBpcyBhIHJlZGlyZWN0LCBzbyBhYm9ydCB0aGUgY3VycmVudCByZXF1ZXN0XG4gIGFib3J0UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFN0b3JlIHRoZSByZXF1ZXN0IGhlYWRlcnMgaWYgYXBwbGljYWJsZVxuICB2YXIgcmVxdWVzdEhlYWRlcnM7XG4gIHZhciBiZWZvcmVSZWRpcmVjdCA9IHRoaXMuX29wdGlvbnMuYmVmb3JlUmVkaXJlY3Q7XG4gIGlmIChiZWZvcmVSZWRpcmVjdCkge1xuICAgIHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAvLyBUaGUgSG9zdCBoZWFkZXIgd2FzIHNldCBieSBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0XG4gICAgICBIb3N0OiByZXNwb25zZS5yZXEuZ2V0SGVhZGVyKFwiaG9zdFwiKSxcbiAgICB9LCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gIC8vIGNhcmUgZm9yIG1ldGhvZHMgbm90IGtub3duIHRvIGJlIHNhZmUsIFvigKZdXG4gIC8vIFJGQzcyMzHCpzYuNC4y4oCTMzogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgYSB1c2VyIGFnZW50IE1BWSBjaGFuZ2VcbiAgLy8gdGhlIHJlcXVlc3QgbWV0aG9kIGZyb20gUE9TVCB0byBHRVQgZm9yIHRoZSBzdWJzZXF1ZW50IHJlcXVlc3QuXG4gIHZhciBtZXRob2QgPSB0aGlzLl9vcHRpb25zLm1ldGhvZDtcbiAgaWYgKChzdGF0dXNDb2RlID09PSAzMDEgfHwgc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiB0aGlzLl9vcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHxcbiAgICAgIC8vIFJGQzcyMzHCpzYuNC40OiBUaGUgMzAzIChTZWUgT3RoZXIpIHN0YXR1cyBjb2RlIGluZGljYXRlcyB0aGF0XG4gICAgICAvLyB0aGUgc2VydmVyIGlzIHJlZGlyZWN0aW5nIHRoZSB1c2VyIGFnZW50IHRvIGEgZGlmZmVyZW50IHJlc291cmNlIFvigKZdXG4gICAgICAvLyBBIHVzZXIgYWdlbnQgY2FuIHBlcmZvcm0gYSByZXRyaWV2YWwgcmVxdWVzdCB0YXJnZXRpbmcgdGhhdCBVUklcbiAgICAgIC8vIChhIEdFVCBvciBIRUFEIHJlcXVlc3QgaWYgdXNpbmcgSFRUUCkgW+KApl1cbiAgICAgIChzdGF0dXNDb2RlID09PSAzMDMpICYmICEvXig/OkdFVHxIRUFEKSQvLnRlc3QodGhpcy5fb3B0aW9ucy5tZXRob2QpKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5tZXRob2QgPSBcIkdFVFwiO1xuICAgIC8vIERyb3AgYSBwb3NzaWJsZSBlbnRpdHkgYW5kIGhlYWRlcnMgcmVsYXRlZCB0byBpdFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmNvbnRlbnQtL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICB2YXIgY3VycmVudEhvc3RIZWFkZXIgPSByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15ob3N0JC9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuXG4gIC8vIElmIHRoZSByZWRpcmVjdCBpcyByZWxhdGl2ZSwgY2Fycnkgb3ZlciB0aGUgaG9zdCBvZiB0aGUgbGFzdCByZXF1ZXN0XG4gIHZhciBjdXJyZW50VXJsUGFydHMgPSB1cmwucGFyc2UodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBVUkwgb2YgdGhlIHJlZGlyZWN0aW9uXG4gIHZhciByZWRpcmVjdFVybDtcbiAgdHJ5IHtcbiAgICByZWRpcmVjdFVybCA9IHVybC5yZXNvbHZlKGN1cnJlbnRVcmwsIGxvY2F0aW9uKTtcbiAgfVxuICBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgUmVkaXJlY3Rpb25FcnJvcihjYXVzZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwpO1xuICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgdmFyIHJlZGlyZWN0VXJsUGFydHMgPSB1cmwucGFyc2UocmVkaXJlY3RVcmwpO1xuICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHJlZGlyZWN0VXJsUGFydHMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybFBhcnRzLnByb3RvY29sICE9PSBjdXJyZW50VXJsUGFydHMucHJvdG9jb2wgJiZcbiAgICAgcmVkaXJlY3RVcmxQYXJ0cy5wcm90b2NvbCAhPT0gXCJodHRwczpcIiB8fFxuICAgICByZWRpcmVjdFVybFBhcnRzLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybFBhcnRzLmhvc3QsIGN1cnJlbnRIb3N0KSkge1xuICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXig/OmF1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAodHlwZW9mIGJlZm9yZVJlZGlyZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGJlZm9yZVJlZGlyZWN0KHRoaXMuX29wdGlvbnMsIHJlc3BvbnNlRGV0YWlscywgcmVxdWVzdERldGFpbHMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdHJ5IHtcbiAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuICB9XG4gIGNhdGNoIChjYXVzZSkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBSZWRpcmVjdGlvbkVycm9yKGNhdXNlKSk7XG4gIH1cbn07XG5cbi8vIFdyYXBzIHRoZSBrZXkvdmFsdWUgb2JqZWN0IG9mIHByb3RvY29scyB3aXRoIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHlcbmZ1bmN0aW9uIHdyYXAocHJvdG9jb2xzKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZ3NcbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgbWF4UmVkaXJlY3RzOiAyMSxcbiAgICBtYXhCb2R5TGVuZ3RoOiAxMCAqIDEwMjQgKiAxMDI0LFxuICB9O1xuXG4gIC8vIFdyYXAgZWFjaCBwcm90b2NvbFxuICB2YXIgbmF0aXZlUHJvdG9jb2xzID0ge307XG4gIE9iamVjdC5rZXlzKHByb3RvY29scykuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lKSB7XG4gICAgdmFyIHByb3RvY29sID0gc2NoZW1lICsgXCI6XCI7XG4gICAgdmFyIG5hdGl2ZVByb3RvY29sID0gbmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXSA9IHByb3RvY29sc1tzY2hlbWVdO1xuICAgIHZhciB3cmFwcGVkUHJvdG9jb2wgPSBleHBvcnRzW3NjaGVtZV0gPSBPYmplY3QuY3JlYXRlKG5hdGl2ZVByb3RvY29sKTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIHJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAvLyBQYXJzZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciB1cmxTdHIgPSBpbnB1dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhuZXcgVVJMKHVybFN0cikpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlucHV0ID0gdXJsLnBhcnNlKHVybFN0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFVSTCAmJiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKGlucHV0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBpbnB1dDtcbiAgICAgICAgaW5wdXQgPSB7IHByb3RvY29sOiBwcm90b2NvbCB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1heFJlZGlyZWN0czogZXhwb3J0cy5tYXhSZWRpcmVjdHMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgIH0sIGlucHV0LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMubmF0aXZlUHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzO1xuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBub29wKCkgeyAvKiBlbXB0eSAqLyB9XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanNcbmZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmxPYmplY3QpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgcHJvdG9jb2w6IHVybE9iamVjdC5wcm90b2NvbCxcbiAgICBob3N0bmFtZTogdXJsT2JqZWN0Lmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpID9cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDpcbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZSxcbiAgICBoYXNoOiB1cmxPYmplY3QuaGFzaCxcbiAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgcGF0aG5hbWU6IHVybE9iamVjdC5wYXRobmFtZSxcbiAgICBwYXRoOiB1cmxPYmplY3QucGF0aG5hbWUgKyB1cmxPYmplY3Quc2VhcmNoLFxuICAgIGhyZWY6IHVybE9iamVjdC5ocmVmLFxuICB9O1xuICBpZiAodXJsT2JqZWN0LnBvcnQgIT09IFwiXCIpIHtcbiAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIodXJsT2JqZWN0LnBvcnQpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRjaGluZ0hlYWRlcnMocmVnZXgsIGhlYWRlcnMpIHtcbiAgdmFyIGxhc3RWYWx1ZTtcbiAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICBpZiAocmVnZXgudGVzdChoZWFkZXIpKSB7XG4gICAgICBsYXN0VmFsdWUgPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGxhc3RWYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFzdFZhbHVlID09PSBcInVuZGVmaW5lZFwiKSA/XG4gICAgdW5kZWZpbmVkIDogU3RyaW5nKGxhc3RWYWx1ZSkudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IoY2F1c2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICBpZiAoIWNhdXNlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZSArIFwiOiBcIiArIGNhdXNlLm1lc3NhZ2U7XG4gICAgICB0aGlzLmNhdXNlID0gY2F1c2U7XG4gICAgfVxuICB9XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLm5hbWUgPSBcIkVycm9yIFtcIiArIGNvZGUgKyBcIl1cIjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGFib3J0UmVxdWVzdChyZXF1ZXN0KSB7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gIHJlcXVlc3QuYWJvcnQoKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJkb21haW4oc3ViZG9tYWluLCBkb21haW4pIHtcbiAgY29uc3QgZG90ID0gc3ViZG9tYWluLmxlbmd0aCAtIGRvbWFpbi5sZW5ndGggLSAxO1xuICByZXR1cm4gZG90ID4gMCAmJiBzdWJkb21haW5bZG90XSA9PT0gXCIuXCIgJiYgc3ViZG9tYWluLmVuZHNXaXRoKGRvbWFpbik7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmVhbSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5KSB7XG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwidmFyIGpzb25fc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5LmpzJykuc3RyaW5naWZ5O1xudmFyIGpzb25fcGFyc2UgICAgID0gcmVxdWlyZSgnLi9saWIvcGFyc2UuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuICB7XG4gICAgICAgIHBhcnNlOiBqc29uX3BhcnNlKG9wdGlvbnMpLFxuICAgICAgICBzdHJpbmdpZnk6IGpzb25fc3RyaW5naWZ5XG4gICAgfVxufTtcbi8vY3JlYXRlIHRoZSBkZWZhdWx0IG1ldGhvZCBtZW1iZXJzIHdpdGggbm8gb3B0aW9ucyBhcHBsaWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBqc29uX3BhcnNlKCk7XG5tb2R1bGUuZXhwb3J0cy5zdHJpbmdpZnkgPSBqc29uX3N0cmluZ2lmeTtcbiIsInZhciBCaWdOdW1iZXIgPSBudWxsO1xuXG4vLyByZWdleHB4cyBleHRyYWN0ZWQgZnJvbVxuLy8gKGMpIEJTRC0zLUNsYXVzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zhc3RpZnkvc2VjdXJlLWpzb24tcGFyc2UvZ3JhcGhzL2NvbnRyaWJ1dG9ycyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy9ib3VybmUvZ3JhcGhzL2NvbnRyaWJ1dG9yc1xuXG5jb25zdCBzdXNwZWN0UHJvdG9SeCA9IC8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvO1xuY29uc3Qgc3VzcGVjdENvbnN0cnVjdG9yUnggPSAvKD86Y3xcXFxcdTAwNjMpKD86b3xcXFxcdTAwNltGZl0pKD86bnxcXFxcdTAwNltFZV0pKD86c3xcXFxcdTAwNzMpKD86dHxcXFxcdTAwNzQpKD86cnxcXFxcdTAwNzIpKD86dXxcXFxcdTAwNzUpKD86Y3xcXFxcdTAwNjMpKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86cnxcXFxcdTAwNzIpLztcblxuLypcbiAgICBqc29uX3BhcnNlLmpzXG4gICAgMjAxMi0wNi0yMFxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEganNvbl9wYXJzZSBmdW5jdGlvbi5cbiAgICBEdXJpbmcgY3JlYXRlIHlvdSBjYW4gKG9wdGlvbmFsbHkpIHNwZWNpZnkgc29tZSBiZWhhdmlvdXJhbCBzd2l0Y2hlc1xuXG4gICAgICAgIHJlcXVpcmUoJ2pzb24tYmlnaW50Jykob3B0aW9ucylcblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIG9wdGlvbnMgcGFyYW1ldGVyIGhvbGRzIHN3aXRjaGVzIHRoYXQgZHJpdmUgY2VydGFpblxuICAgICAgICAgICAgYXNwZWN0cyBvZiB0aGUgcGFyc2luZyBwcm9jZXNzOlxuICAgICAgICAgICAgKiBvcHRpb25zLnN0cmljdCA9IHRydWUgd2lsbCB3YXJuIGFib3V0IGR1cGxpY2F0ZS1rZXkgdXNhZ2UgaW4gdGhlIGpzb24uXG4gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IChzdHJpY3QgPSBmYWxzZSkgd2lsbCBzaWxlbnRseSBpZ25vcmUgdGhvc2UgYW5kIG92ZXJ3cml0ZVxuICAgICAgICAgICAgICB2YWx1ZXMgZm9yIGtleXMgdGhhdCBhcmUgaW4gZHVwbGljYXRlIHVzZS5cblxuICAgIFRoZSByZXN1bHRpbmcgZnVuY3Rpb24gZm9sbG93cyB0aGlzIHNpZ25hdHVyZTpcbiAgICAgICAganNvbl9wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IGpzb25fcGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG4qL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXFwiXCIsIFwiXFwvXCIsIFwiXFxcXFwiLCBhdCwgYiwgY2FsbCwgY2hhckF0LCBmLCBmcm9tQ2hhckNvZGUsXG4gICAgaGFzT3duUHJvcGVydHksIG1lc3NhZ2UsIG4sIG5hbWUsIHByb3RvdHlwZSwgcHVzaCwgciwgdCwgdGV4dFxuKi9cblxudmFyIGpzb25fcGFyc2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBhcnNlIGEgSlNPTiB0ZXh0LCBwcm9kdWNpbmcgYSBKYXZhU2NyaXB0XG4gIC8vIGRhdGEgc3RydWN0dXJlLiBJdCBpcyBhIHNpbXBsZSwgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLiBJdCBkb2VzIG5vdCB1c2VcbiAgLy8gZXZhbCBvciByZWd1bGFyIGV4cHJlc3Npb25zLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIG1vZGVsIGZvciBpbXBsZW1lbnRpbmdcbiAgLy8gYSBKU09OIHBhcnNlciBpbiBvdGhlciBsYW5ndWFnZXMuXG5cbiAgLy8gV2UgYXJlIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAvLyBnbG9iYWwgdmFyaWFibGVzLlxuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyBvbmUgY2FuIG92ZXJyaWRlIGJ5IHBhc3Npbmcgb3B0aW9ucyB0byB0aGUgcGFyc2UoKVxuICB2YXIgX29wdGlvbnMgPSB7XG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gbm90IGJlaW5nIHN0cmljdCBtZWFucyBkbyBub3QgZ2VuZXJhdGUgc3ludGF4IGVycm9ycyBmb3IgXCJkdXBsaWNhdGUga2V5XCJcbiAgICBzdG9yZUFzU3RyaW5nOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHN0b3JlZCBhcyBCaWdOdW1iZXIgKGRlZmF1bHQpIG9yIGEgc3RyaW5nXG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciBhbGwgbnVtYmVycyBzaG91bGQgYmUgQmlnXG4gICAgdXNlTmF0aXZlQmlnSW50OiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgQmlnSW50IGluc3RlYWQgb2YgYmlnbnVtYmVyLmpzXG4gICAgcHJvdG9BY3Rpb246ICdlcnJvcicsXG4gICAgY29uc3RydWN0b3JBY3Rpb246ICdlcnJvcicsXG4gIH07XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbnMsIHRoZW4gdXNlIHRoZW0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgX29wdGlvbnNcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdHJpY3QgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdG9yZUFzU3RyaW5nID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9XG4gICAgICBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPT09IHRydWUgPyBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgOiBmYWxzZTtcbiAgICBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPVxuICAgICAgb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPT09IHRydWUgPyBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9IG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b0FjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMucHJvdG9BY3Rpb24gPSBvcHRpb25zLnByb3RvQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIHByb3RvQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLnByb3RvQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICdcIic6ICdcIicsXG4gICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICcvJzogJy8nLFxuICAgICAgYjogJ1xcYicsXG4gICAgICBmOiAnXFxmJyxcbiAgICAgIG46ICdcXG4nLFxuICAgICAgcjogJ1xccicsXG4gICAgICB0OiAnXFx0JyxcbiAgICB9LFxuICAgIHRleHQsXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cblxuICAgICAgdGhyb3cge1xuICAgICAgICBuYW1lOiAnU3ludGF4RXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICBhdDogYXQsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cblxuICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgIGF0ICs9IDE7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgbmV4dCgnLScpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICBlcnJvcignQmFkIG51bWJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEJpZ051bWJlciA9PSBudWxsKSBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcbiAgICAgICAgLy9pZiAobnVtYmVyID4gOTAwNzE5OTI1NDc0MDk5MiB8fCBudW1iZXIgPCAtOTAwNzE5OTI1NDc0MDk5MilcbiAgICAgICAgLy8gQmlnbnVtYmVyIGhhcyBzdHJpY3RlciBjaGVjazogZXZlcnl0aGluZyB3aXRoIGxlbmd0aCA+IDE1IGRpZ2l0cyBkaXNhbGxvd2VkXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMTUpXG4gICAgICAgICAgcmV0dXJuIF9vcHRpb25zLnN0b3JlQXNTdHJpbmdcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQoc3RyaW5nKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHN0cmluZyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gIV9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWdcbiAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQobnVtYmVyKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKG51bWJlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgICAgdmFyIGhleCxcbiAgICAgICAgaSxcbiAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgIHVmZmZmO1xuXG4gICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICB2YXIgc3RhcnRBdCA9IGF0O1xuICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgc3RyaW5nJyk7XG4gICAgfSxcbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG4gICAgdmFsdWUsIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgYXJyYXknKTtcbiAgICB9LFxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgdmFyIGtleSxcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgbmV4dCgneycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfb3B0aW9ucy5zdHJpY3QgPT09IHRydWUgJiZcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1c3BlY3RQcm90b1J4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHN1c3BlY3RDb25zdHJ1Y3RvclJ4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIGNvbnN0cnVjdG9yIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgb2JqZWN0Jyk7XG4gICAgfTtcblxuICB2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuICAvLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0ZXh0ID0gc291cmNlICsgJyc7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgIGVycm9yKCdTeW50YXggZXJyb3InKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgICAgdmFyIGssXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSkoeyAnJzogcmVzdWx0IH0sICcnKVxuICAgICAgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25fcGFyc2U7XG4iLCJ2YXIgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG5cbi8qXG4gICAganNvbjIuanNcbiAgICAyMDEzLTA1LTI2XG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgU2VlIGh0dHA6Ly93d3cuSlNPTi5vcmcvanMuaHRtbFxuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmluZ2lmeVxuICAgIGFuZCBwYXJzZS5cblxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKVxuICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LlxuXG4gICAgICAgICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMuIEl0IGNhbiBiZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuXG4gICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXFx0JyBvciAnJm5ic3A7JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxldmVsLlxuXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZS5cblxuICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT05cbiAgICAgICAgICAgIG1ldGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBzZXJpYWxpemU6IGl0IHJldHVybnMgdGhlXG4gICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBtZXRob2RcbiAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZVxuICAgICAgICAgICAgYm91bmQgdG8gdGhlIHZhbHVlXG5cbiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy5cblxuICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUgcGFzc2VkIHRoZVxuICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nXG4gICAgICAgICAgICBvYmplY3QuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZVxuICAgICAgICAgICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhlIG1lbWJlciB3aWxsXG4gICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLlxuXG4gICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gaXQgd2lsbCBiZVxuICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0c1xuICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3JcbiAgICAgICAgICAgIGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3VjaCB2YWx1ZXMgaW4gb2JqZWN0cyB3aWxsIGJlXG4gICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2VcbiAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVzLlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNhdGlvbiBvZiB0aGVcbiAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVkIHdpdGggbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXRcbiAgICAgICAgICAgIGVhc2llciB0byByZWFkLlxuXG4gICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsXG4gICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlblxuICAgICAgICAgICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiZVwiLHtcInBsdXJpYnVzXCI6XCJ1bnVtXCJ9XSdcblxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1xcdCcpO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1xcblxcdFwiZVwiLFxcblxcdHtcXG5cXHRcXHRcInBsdXJpYnVzXCI6IFwidW51bVwiXFxuXFx0fVxcbl0nXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgP1xuICAgICAgICAgICAgICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKVwiXSdcblxuXG4gICAgICAgIEpTT04ucGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgnW1wiRGF0ZSgwOS8wOS8yMDAxKVwiXScsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDUpID09PSAnRGF0ZSgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgtMSkgPT09ICcpJykge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFsdWUuc2xpY2UoNSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cbiovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHJlZ2V4cDogdHJ1ZSAqL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXGJcIiwgXCJcXHRcIiwgXCJcXG5cIiwgXCJcXGZcIiwgXCJcXHJcIiwgXCJcXFwiXCIsIEpTT04sIFwiXFxcXFwiLCBhcHBseSxcbiAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRDSG91cnMsXG4gICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLFxuICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBwYXJzZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LFxuICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2ZcbiovXG5cblxuLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gV2UgY3JlYXRlIHRoZVxuLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcgZ2xvYmFsIHZhcmlhYmxlcy5cblxudmFyIEpTT04gPSBtb2R1bGUuZXhwb3J0cztcblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgIH1cblxuICAgIHZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBnYXAsXG4gICAgICAgIGluZGVudCxcbiAgICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVwO1xuXG5cbiAgICBmdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcblxuLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbi8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuLy8gc2VxdWVuY2VzLlxuXG4gICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgOiAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICAgICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcblxuLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuXG4gICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgICAgIHBhcnRpYWwsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldLFxuICAgICAgICAgICAgaXNCaWdOdW1iZXIgPSB2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlciB8fCBCaWdOdW1iZXIuaXNCaWdOdW1iZXIodmFsdWUpKTtcblxuLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgICAgICB9XG5cbi8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuXG4vLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChpc0JpZ051bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdudW1iZXInOlxuXG4vLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cblxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICBjYXNlICdiaWdpbnQnOlxuXG4vLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4vLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG5cbi8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yXG4vLyBudWxsLlxuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG5cbi8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBpbiBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jyxcbi8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLlxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLlxuXG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuXG4vLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXG4vLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyXG4vLyBmb3Igbm9uLUpTT04gdmFsdWVzLlxuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kIHdyYXAgdGhlbSBpblxuLy8gYnJhY2tldHMuXG5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnW10nXG4gICAgICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcFtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4vLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ3t9J1xuICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgPyAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9J1xuICAgICAgICAgICAgICAgIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICB9XG5cbi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHN0cmluZ2lmeSBtZXRob2QsIGdpdmUgaXQgb25lLlxuXG4gICAgaWYgKHR5cGVvZiBKU09OLnN0cmluZ2lmeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBKU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG5cbi8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWxcbi8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvblxuLy8gdGhhdCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNlbGVjdCB0aGUga2V5cy5cbi8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHByb3ZpZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW5cbi8vIHByb2R1Y2UgdGV4dCB0aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLlxuXG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGdhcCA9ICcnO1xuICAgICAgICAgICAgaW5kZW50ID0gJyc7XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbi8vIG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4vLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuXG4gICAgICAgICAgICByZXAgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cblxuICAgICAgICAgICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAyMiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMyMSk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsInBhcmFsbGVsIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsImNsZWFuIiwia2V5Iiwiam9icyIsInN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJiaW5kIiwiZGVmZXIiLCJjYWxsYmFjayIsImlzQXN5bmMiLCJlcnIiLCJyZXN1bHQiLCJmbiIsIm5leHRUaWNrIiwic2V0SW1tZWRpYXRlIiwicHJvY2VzcyIsInNldFRpbWVvdXQiLCJhc3luYyIsImFib3J0IiwibGlzdCIsIml0ZXJhdG9yIiwiaW5kZXgiLCJpdGVtIiwibGVuZ3RoIiwicnVuSm9iIiwiZXJyb3IiLCJvdXRwdXQiLCJyZXN1bHRzIiwic29ydE1ldGhvZCIsImlzTmFtZWRMaXN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaW5pdFN0YXRlIiwia2V5ZWRMaXN0Iiwic2l6ZSIsInNvcnQiLCJhIiwiYiIsIml0ZXJhdGUiLCJ0ZXJtaW5hdG9yIiwiYXNjZW5kaW5nIiwiaXRlcmF0b3JIYW5kbGVyIiwiZGVzY2VuZGluZyIsInV0aWxzIiwic2V0dGxlIiwiYnVpbGRGdWxsUGF0aCIsImJ1aWxkVVJMIiwiaHR0cCIsImh0dHBzIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwidXJsIiwiemxpYiIsIlZFUlNJT04iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwiaXNIdHRwcyIsInN1cHBvcnRlZFByb3RvY29scyIsInNldFByb3h5Iiwib3B0aW9ucyIsInByb3h5IiwibG9jYXRpb24iLCJob3N0bmFtZSIsImhvc3QiLCJwb3J0IiwicGF0aCIsImF1dGgiLCJiYXNlNjQiLCJCdWZmZXIiLCJmcm9tIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInRvU3RyaW5nIiwiaGVhZGVycyIsImJlZm9yZVJlZGlyZWN0IiwicmVkaXJlY3Rpb24iLCJocmVmIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmVQcm9taXNlIiwicmVqZWN0UHJvbWlzZSIsIm9uQ2FuY2VsZWQiLCJkb25lIiwiY2FuY2VsVG9rZW4iLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJyZXNvbHZlIiwidmFsdWUiLCJyZWplY3RlZCIsInJlamVjdCIsImRhdGEiLCJoZWFkZXJOYW1lcyIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImlzRm9ybURhdGEiLCJpc0Z1bmN0aW9uIiwiZ2V0SGVhZGVycyIsImFzc2lnbiIsImlzU3RyZWFtIiwiaXNCdWZmZXIiLCJpc0FycmF5QnVmZmVyIiwiVWludDhBcnJheSIsImlzU3RyaW5nIiwiRVJSX0JBRF9SRVFVRVNUIiwibWF4Qm9keUxlbmd0aCIsInVuZGVmaW5lZCIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsInBhcnNlZCIsInBhcnNlIiwicHJvdG9jb2wiLCJpbmRleE9mIiwidXJsQXV0aCIsInNwbGl0IiwiYXV0aG9yaXphdGlvbiIsImlzSHR0cHNSZXF1ZXN0IiwidGVzdCIsImFnZW50IiwiaHR0cHNBZ2VudCIsImh0dHBBZ2VudCIsInBhcmFtcyIsInBhcmFtc1NlcmlhbGl6ZXIiLCJyZXBsYWNlIiwiY3VzdG9tRXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiZXhpc3RzIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJhZ2VudHMiLCJzb2NrZXRQYXRoIiwidHJhbnNwb3J0IiwicHJveHlFbnYiLCJzbGljZSIsInByb3h5VXJsIiwiZW52IiwicGFyc2VkUHJveHlVcmwiLCJub1Byb3h5RW52Iiwibm9fcHJveHkiLCJOT19QUk9YWSIsInNob3VsZFByb3h5IiwibWFwIiwicyIsInRyaW0iLCJzb21lIiwicHJveHlFbGVtZW50Iiwic3Vic3RyIiwicHJveHlVcmxBdXRoIiwiaXNIdHRwc1Byb3h5IiwibWF4UmVkaXJlY3RzIiwiaW5zZWN1cmVIVFRQUGFyc2VyIiwicmVxIiwicmVxdWVzdCIsInJlcyIsImFib3J0ZWQiLCJzdHJlYW0iLCJsYXN0UmVxdWVzdCIsInN0YXR1c0NvZGUiLCJkZWNvbXByZXNzIiwicGlwZSIsImNyZWF0ZVVuemlwIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlQnVmZmVyIiwidG90YWxSZXNwb25zZUJ5dGVzIiwib24iLCJjaHVuayIsInB1c2giLCJtYXhDb250ZW50TGVuZ3RoIiwiZGVzdHJveSIsIkVSUl9CQURfUkVTUE9OU0UiLCJyZXNwb25zZURhdGEiLCJjb25jYXQiLCJyZXNwb25zZUVuY29kaW5nIiwic3RyaXBCT00iLCJzb2NrZXQiLCJzZXRLZWVwQWxpdmUiLCJ0aW1lb3V0IiwicGFyc2VJbnQiLCJpc05hTiIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsIkVDT05OQUJPUlRFRCIsImNhbmNlbCIsInR5cGUiLCJzdWJzY3JpYmUiLCJhZGRFdmVudExpc3RlbmVyIiwiZW5kIiwiY29va2llcyIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInBhcnNlUHJvdG9jb2wiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJYTUxIdHRwUmVxdWVzdCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwib25hYm9ydCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ4c3JmQ29va2llTmFtZSIsInJlYWQiLCJ4c3JmSGVhZGVyTmFtZSIsInZhbCIsInNldFJlcXVlc3RIZWFkZXIiLCJpc1VuZGVmaW5lZCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJzZW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiY3JlYXRlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwidG9Gb3JtRGF0YSIsIkNhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiaXNBeGlvc0Vycm9yIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJwcm9taXNlIiwidG9rZW4iLCJ0aGVuIiwiX2xpc3RlbmVycyIsImkiLCJsIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsInNwbGljZSIsInNvdXJjZSIsImMiLCJjYWxsIiwiRVJSX0NBTkNFTEVEIiwiaW5oZXJpdHMiLCJfX0NBTkNFTF9fIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsImRlZmF1bHRzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicnVuV2hlbiIsInN5bmNocm9ub3VzIiwidW5zaGlmdCIsImZ1bGZpbGxlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiYXBwbHkiLCJzaGlmdCIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImNvZGUiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiZGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJvYmoiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwiaWQiLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwibWVyZ2UiLCJjb21tb24iLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwidmFsaWRhdGVTdGF0dXMiLCJNYXRoIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNGaWxlTGlzdCIsImlzT2JqZWN0UGF5bG9hZCIsImlzT2JqZWN0IiwiY29udGVudFR5cGUiLCJfRm9ybURhdGEiLCJGb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsIkpTT04iLCJlIiwic3RyaW5naWZ5Iiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJ0aGlzQXJnIiwiYXJncyIsImFyZ3VtZW50cyIsImVuY29kZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInYiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImpvaW4iLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJpc051bWJlciIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsImRvY3VtZW50IiwibWF0Y2giLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJwYXlsb2FkIiwib3JpZ2luVVJMIiwibXNpZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJzZWFyY2giLCJoYXNoIiwicGF0aG5hbWUiLCJjaGFyQXQiLCJ3aW5kb3ciLCJyZXF1ZXN0VVJMIiwibm9ybWFsaXplZE5hbWUiLCJpZ25vcmVEdXBsaWNhdGVPZiIsImxpbmUiLCJleGVjIiwiYXJyIiwiZm9ybURhdGEiLCJjb252ZXJ0VmFsdWUiLCJpc1R5cGVkQXJyYXkiLCJCbG9iIiwiYnVpbGQiLCJwYXJlbnRLZXkiLCJmdWxsS2V5IiwiZW5kc1dpdGgiLCJ0b0FycmF5IiwiZWwiLCJhcHBlbmQiLCJwb3AiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT04iLCJjYWNoZSIsImtpbmRPZiIsInN0ciIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5IiwiVHlwZWRBcnJheSIsImNvbnN0cnVjdG9yIiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicHJvZHVjdCIsImFzc2lnblZhbHVlIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwibGFzdEluZGV4IiwiaXNQdXJlT2JqZWN0IiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwiYXBpS2V5IiwiYXBpU2VjcmV0IiwiYXBpVG9rZW4iLCJyZXNvdXJjZSIsInJlcXVlc3RfMSIsIkh0dHBNZXRob2RzXzEiLCJHZXQiLCJQb3N0IiwiUHV0IiwiRGVsZXRlIiwicGFja2FnZUpTT04iLCJzZXRDb25maWciLCJzZXRPcHRpb25zIiwidG9rZW5Db25uZWN0U3RyYXRlZ3kiLCJiYXNpY0Nvbm5lY3RTdHJhdGVneSIsImNsb25lZFBhcmFtcyIsIl9fYXNzaWduIiwiY3VzdG9tQ29uZmlnIiwic2V0VmFsdWVJZk5vdE5pbCIsImZyZWV6ZSIsInBhY2thZ2VfanNvbl8xIiwiaW5kZXhfMSIsImluZGV4XzIiLCJfX2V4dGVuZHMiLCJNYWlsamV0IiwiSHR0cE1ldGhvZHMiLCJKU09OYiIsInN0b3JlQXNTdHJpbmciLCJjbGllbnQiLCJjbGllbnRfMSIsInZhbHVlcyIsImluY2x1ZGVzIiwic3ViUGF0aCIsImJ1aWxkU3ViUGF0aCIsImFjdGlvblBhdGgiLCJSZXF1ZXN0IiwiZ2V0UGFja2FnZVZlcnNpb24iLCJnZXRBUElUb2tlbiIsImdldEFQSUtleSIsImdldEFQSVNlY3JldCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsIl9hIiwiX2IiLCJpc0NvbnRhY3RMaXN0V2l0aENTViIsImlzQmF0Y2hKb2JXaXRoQ1NWIiwiaXNTZW5kUmVzb3VyY2UiLCJyZXNvdXJjZUNvbnRhaW5TTVMiLCJyZXF1ZXN0Q29uZmlnIiwiZ2V0UmVxdWVzdEJvZHkiLCJnZXRVc2VyQWdlbnQiLCJnZXRDb250ZW50VHlwZSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsImJhc2VVcmwiLCJwZXJmb3JtQVBJQ2FsbCIsImJ1aWxkRnVsbFVybCIsInNldEJhc2VVUkwiLCJib2R5IiwibWFrZVJlcXVlc3QiLCJfZyIsImF4aW9zXzEiLCJlcnJfMSIsIl9mIiwic3RhdHVzXzEiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJvcmlnaW5hbE1lc3NhZ2UiLCJmdWxsTWVzc2FnZSIsIk1lc3NhZ2VzIiwiX2MiLCJFcnJvcnMiLCJfZCIsIl9lIiwiRXJyb3JDb2RlIiwiRXJyb3JJZGVudGlmaWVyIiwiRXJyb3JSZWxhdGVkVG8iLCJ0ZXh0IiwiaXNOaWxfMSIsImlzTnVsbF8xIiwiaXNVbmRlZmluZWRfMSIsImlzUHVyZU9iamVjdF8xIiwic2V0VmFsdWVJZk5vdE5pbF8xIiwidGFyZ2V0T2JqZWN0IiwiZ2xvYmFsT2JqZWN0IiwiQmlnTnVtYmVyIiwiaXNOdW1lcmljIiwibWF0aGNlaWwiLCJjZWlsIiwibWF0aGZsb29yIiwiYmlnbnVtYmVyRXJyb3IiLCJ0b29NYW55RGlnaXRzIiwiQkFTRSIsIkxPR19CQVNFIiwiTUFYX1NBRkVfSU5URUdFUiIsIlBPV1NfVEVOIiwiU1FSVF9CQVNFIiwiTUFYIiwiYml0Rmxvb3IiLCJuIiwiY29lZmZUb1N0cmluZyIsInoiLCJqIiwiciIsImNvbXBhcmUiLCJ4IiwieSIsInhjIiwieWMiLCJrIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJpc09kZCIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkUG9pbnQiLCJsZW4iLCJ6cyIsImNsb25lIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwiZm9ybWF0Iiwicm0iLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJtIiwibm9ybWFsaXNlIiwic2QiLCJkIiwibmkiLCJyZCIsInBvd3MxMCIsIm91dCIsIlJPVU5EX1VQIiwiUk9VTkRfRE9XTiIsIlJPVU5EX0NFSUwiLCJST1VORF9GTE9PUiIsIlJPVU5EX0hBTEZfVVAiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9IQUxGX0NFSUwiLCJST1VORF9IQUxGX0ZMT09SIiwiRVVDTElEIiwic2V0IiwicCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwicDEiLCJwMiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJ0aW1lcyIsImludGVnZXJWYWx1ZSIsImlzRXF1YWxUbyIsImVxIiwiaXNGaW5pdGUiLCJpc0dyZWF0ZXJUaGFuIiwiaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyIsImd0ZSIsImlzTGVzc1RoYW4iLCJpc0xlc3NUaGFuT3JFcXVhbFRvIiwibHRlIiwiaXNOZWdhdGl2ZSIsImlzUG9zaXRpdmUiLCJpc1plcm8iLCJtaW51cyIsInQiLCJ4TFR5IiwieGUiLCJ5ZSIsIm1vZHVsbyIsIm11bHRpcGxpZWRCeSIsInhjTCIsInljTCIsInlsbyIsInloaSIsInpjIiwic3FydEJhc2UiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2hpZnRlZEJ5Iiwic3F1YXJlUm9vdCIsInNxcnQiLCJyZXAiLCJ0b0ZpeGVkIiwidG9Gb3JtYXQiLCJnMSIsImcyIiwiaW50UGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnIiwiaW50RGlnaXRzIiwidG9GcmFjdGlvbiIsIm1kIiwiZDAiLCJkMSIsImQyIiwiZXhwIiwibjAiLCJuMSIsInRvTnVtYmVyIiwidG9QcmVjaXNpb24iLCJ1dGlsIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsIkNvbWJpbmVkU3RyZWFtIiwid3JpdGFibGUiLCJyZWFkYWJsZSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfc3RyZWFtcyIsIl9jdXJyZW50U3RyZWFtIiwiX2luc2lkZUxvb3AiLCJfcGVuZGluZ05leHQiLCJjb21iaW5lZFN0cmVhbSIsIm9wdGlvbiIsImlzU3RyZWFtTGlrZSIsIm5ld1N0cmVhbSIsIkluZmluaXR5IiwicGF1c2VTdHJlYW0iLCJfY2hlY2tEYXRhU2l6ZSIsIl9oYW5kbGVFcnJvcnMiLCJwYXVzZSIsImRlc3QiLCJyZXN1bWUiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsInNlbGYiLCJfZW1pdEVycm9yIiwiZW1pdCIsIl9yZXNldCIsIl91cGRhdGVEYXRhU2l6ZSIsInciLCJwbHVyYWwiLCJtcyIsIm1zQWJzIiwiaXNQbHVyYWwiLCJwYXJzZUZsb2F0IiwibG9uZyIsImZtdFNob3J0IiwiZm9ybWF0QXJncyIsInVzZUNvbG9ycyIsIm5hbWVzcGFjZSIsImh1bWFuaXplIiwiZGlmZiIsImNvbG9yIiwibGFzdEMiLCJzYXZlIiwibmFtZXNwYWNlcyIsInN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsImxvYWQiLCJnZXRJdGVtIiwiX19ud2pzIiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJXZWJraXRBcHBlYXJhbmNlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwiJDEiLCJsb2NhbFN0b3JhZ2UiLCJsb2NhbHN0b3JhZ2UiLCJ3YXJuZWQiLCJjb2xvcnMiLCJsb2ciLCJkZWJ1ZyIsImZvcm1hdHRlcnMiLCJjcmVhdGVEZWJ1ZyIsInByZXZUaW1lIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIk51bWJlciIsInByZXYiLCJjb2VyY2UiLCJmb3JtYXR0ZXIiLCJzZWxlY3RDb2xvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJnZXQiLCJkZWxpbWl0ZXIiLCJuZXdEZWJ1ZyIsInRvTmFtZXNwYWNlIiwicmVnZXhwIiwiZGVmYXVsdCIsImRpc2FibGUiLCJuYW1lcyIsInNraXBzIiwiZW5hYmxlIiwiYnJvd3NlciIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJCb29sZWFuIiwiaXNhdHR5IiwiZmQiLCJkZXByZWNhdGUiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJyZWR1Y2UiLCJfIiwibyIsImluc3BlY3QiLCJPIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsInNldEVuY29kaW5nIiwicmVsZWFzZSIsIl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCIsIlVSTCIsIldyaXRhYmxlIiwiYXNzZXJ0IiwiZXZlbnRzIiwiZXZlbnRIYW5kbGVycyIsImV2ZW50IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX3JlZGlyZWN0YWJsZSIsIlJlZGlyZWN0aW9uRXJyb3IiLCJjcmVhdGVFcnJvclR5cGUiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIlJlZGlyZWN0YWJsZVJlcXVlc3QiLCJyZXNwb25zZUNhbGxiYWNrIiwiX3Nhbml0aXplT3B0aW9ucyIsIl9vcHRpb25zIiwiX2VuZGVkIiwiX2VuZGluZyIsIl9yZWRpcmVjdENvdW50IiwiX3JlZGlyZWN0cyIsIl9yZXF1ZXN0Qm9keUxlbmd0aCIsIl9yZXF1ZXN0Qm9keUJ1ZmZlcnMiLCJfb25OYXRpdmVSZXNwb25zZSIsIl9wcm9jZXNzUmVzcG9uc2UiLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibmF0aXZlUHJvdG9jb2xzIiwic2NoZW1lIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJpbnB1dCIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0Iiwic3RhcnRzV2l0aCIsInJlbW92ZU1hdGNoaW5nSGVhZGVycyIsInJlZ2V4IiwibGFzdFZhbHVlIiwiaGVhZGVyIiwiZGVmYXVsdE1lc3NhZ2UiLCJDdXN0b21FcnJvciIsImNhdXNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJhYm9ydFJlcXVlc3QiLCJyZW1vdmVMaXN0ZW5lciIsIl9jdXJyZW50UmVxdWVzdCIsImVuY29kaW5nIiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJhZGRMaXN0ZW5lciIsInN0YXJ0VGltZXIiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFyVGltZXIiLCJvbmNlIiwicHJvcGVydHkiLCJzZWFyY2hQb3MiLCJfY3VycmVudFVybCIsIl9pc1JlZGlyZWN0IiwiYnVmZmVycyIsIndyaXRlTmV4dCIsImZpbmlzaGVkIiwidHJhY2tSZWRpcmVjdHMiLCJmb2xsb3dSZWRpcmVjdHMiLCJyZXNwb25zZVVybCIsInJlZGlyZWN0cyIsIkhvc3QiLCJnZXRIZWFkZXIiLCJyZWRpcmVjdFVybCIsImN1cnJlbnRIb3N0SGVhZGVyIiwiY3VycmVudFVybFBhcnRzIiwiY3VycmVudEhvc3QiLCJjdXJyZW50VXJsIiwicmVkaXJlY3RVcmxQYXJ0cyIsInN1YmRvbWFpbiIsImRvdCIsImlzU3ViZG9tYWluIiwicmVzcG9uc2VEZXRhaWxzIiwicmVxdWVzdERldGFpbHMiLCJwYXJzZVVybCIsImZzIiwibWltZSIsImFzeW5ja2l0IiwicG9wdWxhdGUiLCJfb3ZlcmhlYWRMZW5ndGgiLCJfdmFsdWVMZW5ndGgiLCJfdmFsdWVzVG9NZWFzdXJlIiwiTElORV9CUkVBSyIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJieXRlTGVuZ3RoIiwiX2xlbmd0aFJldHJpZXZlciIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsIl9nZXRDb250ZW50VHlwZSIsImNvbnRlbnRzIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwibmV4dCIsIl9sYXN0Qm91bmRhcnkiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwic2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImFsbG9jIiwiZ2V0TGVuZ3RoU3luYyIsImhhc0tub3duTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwiY2IiLCJzdWJtaXQiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJkc3QiLCJzcmMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJqc29uX3N0cmluZ2lmeSIsImpzb25fcGFyc2UiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4Iiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJzdHJpbmciLCJCaWdJbnQiLCJoZXgiLCJ1ZmZmZiIsInN0YXJ0QXQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwib3MiLCJoYXNGbGFnIiwiZm9yY2VDb2xvciIsImdldFN1cHBvcnRMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJDSV9OQU1FIiwiVEVBTUNJVFlfVkVSU0lPTiIsIkNPTE9SVEVSTSIsIlRFUk1fUFJPR1JBTV9WRVJTSU9OIiwiVEVSTV9QUk9HUkFNIiwiVEVSTSIsImhhc0Jhc2ljIiwiaGFzMjU2IiwiaGFzMTZtIiwidHJhbnNsYXRlTGV2ZWwiLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJmaXJzdCIsImNvbXBvbmVudCIsImRlZmluaXRpb24iLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailjet=a():e.mailjet=a()}(this,(()=>{return e={9118:(e,a,i)=>{e.exports={parallel:i(9162),serial:i(1357),serialOrdered:i(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,i)=>{var n=i(9265);e.exports=function(e){var a=!1;return n((function(){a=!0})),function(i,o){a?e(i,o):n((function(){e(i,o)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,i)=>{var n=i(5912),o=i(7651);e.exports=function(e,a,i,s){var t=i.keyedList?i.keyedList[i.index]:i.index;i.jobs[t]=function(e,a,i,o){return 2==e.length?e(i,n(o)):e(i,a,n(o))}(a,t,e[t],(function(e,a){t in i.jobs&&(delete i.jobs[t],e?o(i):i.results[t]=a,s(e,i.results))}))}},4528:e=>{e.exports=function(e,a){var i=!Array.isArray(e),n={index:0,keyedList:i||a?Object.keys(e):null,jobs:{},results:i?{}:[],size:i?Object.keys(e).length:e.length};return a&&n.keyedList.sort(i?a:function(i,n){return a(e[i],e[n])}),n}},5353:(e,a,i)=>{var n=i(7651),o=i(5912);e.exports=function(e){Object.keys(this.jobs).length&&(this.index=this.size,n(this),o(e)(null,this.results))}},9162:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);e.exports=function(e,a,i){for(var t=o(e);t.index<(t.keyedList||e).length;)n(e,a,t,(function(e,a){e?i(e,a):0!==Object.keys(t.jobs).length||i(null,t.results)})),t.index++;return s.bind(t,i)}},1357:(e,a,i)=>{var n=i(9087);e.exports=function(e,a,i){return n(e,a,null,i)}},9087:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);function t(e,a){return ea?1:0}e.exports=function(e,a,i,t){var r=o(e,i);return n(e,a,r,(function i(o,s){o?t(o,s):(r.index++,r.index<(r.keyedList||e).length?n(e,a,r,i):t(null,r.results))})),s.bind(r,t)},e.exports.ascending=t,e.exports.descending=function(e,a){return-1*t(e,a)}},9669:(e,a,i)=>{e.exports=i(1609)},7970:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4097),t=i(5327),r=i(3685),c=i(5687),p=i(938).http,l=i(938).https,u=i(7310),m=i(9796),d=i(7288).version,f=i(7874),x=i(2648),v=i(644),h=/https:?/,b=["http:","https:","file:"];function g(e,a,i){if(e.hostname=a.host,e.host=a.host,e.port=a.port,e.path=i,a.auth){var n=Buffer.from(a.auth.username+":"+a.auth.password,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+n}e.beforeRedirect=function(e){e.headers.host=e.host,g(e,a,e.href)}}e.exports=function(e){return new Promise((function(a,i){var y;function w(){e.cancelToken&&e.cancelToken.unsubscribe(y),e.signal&&e.signal.removeEventListener("abort",y)}var j=function(e){w(),a(e)},k=!1,_=function(e){w(),k=!0,i(e)},E=e.data,O=e.headers,C={};if(Object.keys(O).forEach((function(e){C[e.toLowerCase()]=e})),"user-agent"in C?O[C["user-agent"]]||delete O[C["user-agent"]]:O["User-Agent"]="axios/"+d,n.isFormData(E)&&n.isFunction(E.getHeaders))Object.assign(O,E.getHeaders());else if(E&&!n.isStream(E)){if(Buffer.isBuffer(E));else if(n.isArrayBuffer(E))E=Buffer.from(new Uint8Array(E));else{if(!n.isString(E))return _(new x("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",x.ERR_BAD_REQUEST,e));E=Buffer.from(E,"utf-8")}if(e.maxBodyLength>-1&&E.length>e.maxBodyLength)return _(new x("Request body larger than maxBodyLength limit",x.ERR_BAD_REQUEST,e));C["content-length"]||(O["Content-Length"]=E.length)}var S=void 0;e.auth&&(S=(e.auth.username||"")+":"+(e.auth.password||""));var R=s(e.baseURL,e.url),A=u.parse(R),T=A.protocol||b[0];if(-1===b.indexOf(T))return _(new x("Unsupported protocol "+T,x.ERR_BAD_REQUEST,e));if(!S&&A.auth){var z=A.auth.split(":");S=(z[0]||"")+":"+(z[1]||"")}S&&C.authorization&&delete O[C.authorization];var N=h.test(T),q=N?e.httpsAgent:e.httpAgent;try{t(A.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){var B=new Error(a.message);B.config=e,B.url=e.url,B.exists=!0,_(B)}var P={path:t(A.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:O,agent:q,agents:{http:e.httpAgent,https:e.httpsAgent},auth:S};e.socketPath?P.socketPath=e.socketPath:(P.hostname=A.hostname,P.port=A.port);var F,L=e.proxy;if(!L&&!1!==L){var U=T.slice(0,-1)+"_proxy",D=process.env[U]||process.env[U.toUpperCase()];if(D){var I=u.parse(D),M=process.env.no_proxy||process.env.NO_PROXY,H=!0;if(M&&(H=!M.split(",").map((function(e){return e.trim()})).some((function(e){return!!e&&("*"===e||"."===e[0]&&A.hostname.substr(A.hostname.length-e.length)===e||A.hostname===e)}))),H&&(L={host:I.hostname,port:I.port,protocol:I.protocol},I.auth)){var V=I.auth.split(":");L.auth={username:V[0],password:V[1]}}}}L&&(P.headers.host=A.hostname+(A.port?":"+A.port:""),g(P,L,T+"//"+A.hostname+(A.port?":"+A.port:"")+P.path));var $=N&&(!L||h.test(L.protocol));e.transport?F=e.transport:0===e.maxRedirects?F=$?c:r:(e.maxRedirects&&(P.maxRedirects=e.maxRedirects),e.beforeRedirect&&(P.beforeRedirect=e.beforeRedirect),F=$?l:p),e.maxBodyLength>-1&&(P.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(P.insecureHTTPParser=e.insecureHTTPParser);var G=F.request(P,(function(a){if(!G.aborted){var i=a,s=a.req||G;if(204!==a.statusCode&&"HEAD"!==s.method&&!1!==e.decompress)switch(a.headers["content-encoding"]){case"gzip":case"compress":case"deflate":i=i.pipe(m.createUnzip()),delete a.headers["content-encoding"]}var t={status:a.statusCode,statusText:a.statusMessage,headers:a.headers,config:e,request:s};if("stream"===e.responseType)t.data=i,o(j,_,t);else{var r=[],c=0;i.on("data",(function(a){r.push(a),c+=a.length,e.maxContentLength>-1&&c>e.maxContentLength&&(k=!0,i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("aborted",(function(){k||(i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("error",(function(a){G.aborted||_(x.from(a,null,e,s))})),i.on("end",(function(){try{var a=1===r.length?r[0]:Buffer.concat(r);"arraybuffer"!==e.responseType&&(a=a.toString(e.responseEncoding),e.responseEncoding&&"utf8"!==e.responseEncoding||(a=n.stripBOM(a))),t.data=a}catch(a){_(x.from(a,null,e,t.request,t))}o(j,_,t)}))}}}));if(G.on("error",(function(a){_(x.from(a,null,e,G))})),G.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){var J=parseInt(e.timeout,10);if(isNaN(J))return void _(new x("error trying to parse `config.timeout` to int",x.ERR_BAD_OPTION_VALUE,e,G));G.setTimeout(J,(function(){G.abort();var a=e.transitional||f;_(new x("timeout of "+J+"ms exceeded",a.clarifyTimeoutError?x.ETIMEDOUT:x.ECONNABORTED,e,G))}))}(e.cancelToken||e.signal)&&(y=function(e){G.aborted||(G.abort(),_(!e||e&&e.type?new v:e))},e.cancelToken&&e.cancelToken.subscribe(y),e.signal&&(e.signal.aborted?y():e.signal.addEventListener("abort",y))),n.isStream(E)?E.on("error",(function(a){_(x.from(a,e,null,G))})).pipe(G):G.end(E)}))}},5448:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4372),t=i(5327),r=i(4097),c=i(4109),p=i(7985),l=i(7874),u=i(2648),m=i(644),d=i(205);e.exports=function(e){return new Promise((function(a,i){var f,x=e.data,v=e.headers,h=e.responseType;function b(){e.cancelToken&&e.cancelToken.unsubscribe(f),e.signal&&e.signal.removeEventListener("abort",f)}n.isFormData(x)&&n.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(y+":"+w)}var j=r(e.baseURL,e.url);function k(){if(g){var n="getAllResponseHeaders"in g?c(g.getAllResponseHeaders()):null,s={data:h&&"text"!==h&&"json"!==h?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){a(e),b()}),(function(e){i(e),b()}),s),g=null}}if(g.open(e.method.toUpperCase(),t(j,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=k:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(k)},g.onabort=function(){g&&(i(new u("Request aborted",u.ECONNABORTED,e,g)),g=null)},g.onerror=function(){i(new u("Network Error",u.ERR_NETWORK,e,g,g)),g=null},g.ontimeout=function(){var a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||l;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),i(new u(a,n.clarifyTimeoutError?u.ETIMEDOUT:u.ECONNABORTED,e,g)),g=null},n.isStandardBrowserEnv()){var _=(e.withCredentials||p(j))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;_&&(v[e.xsrfHeaderName]=_)}"setRequestHeader"in g&&n.forEach(v,(function(e,a){void 0===x&&"content-type"===a.toLowerCase()?delete v[a]:g.setRequestHeader(a,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),h&&"json"!==h&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(f=function(e){g&&(i(!e||e&&e.type?new m:e),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(f),e.signal&&(e.signal.aborted?f():e.signal.addEventListener("abort",f))),x||(x=null);var E=d(j);E&&-1===["http","https","file"].indexOf(E)?i(new u("Unsupported protocol "+E+":",u.ERR_BAD_REQUEST,e)):g.send(x)}))}},1609:(e,a,i)=>{"use strict";var n=i(4867),o=i(1849),s=i(321),t=i(7185),r=function e(a){var i=new s(a),r=o(s.prototype.request,i);return n.extend(r,s.prototype,i),n.extend(r,i),r.create=function(i){return e(t(a,i))},r}(i(5546));r.Axios=s,r.CanceledError=i(644),r.CancelToken=i(4972),r.isCancel=i(6502),r.VERSION=i(7288).version,r.toFormData=i(7675),r.AxiosError=i(2648),r.Cancel=r.CanceledError,r.all=function(e){return Promise.all(e)},r.spread=i(8713),r.isAxiosError=i(6268),e.exports=r,e.exports.default=r},4972:(e,a,i)=>{"use strict";var n=i(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var a;this.promise=new Promise((function(e){a=e}));var i=this;this.promise.then((function(e){if(i._listeners){var a,n=i._listeners.length;for(a=0;a{"use strict";var n=i(2648);function o(e){n.call(this,null==e?"canceled":e,n.ERR_CANCELED),this.name="CanceledError"}i(4867).inherits(o,n,{__CANCEL__:!0}),e.exports=o},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,a,i)=>{"use strict";var n=i(4867),o=i(5327),s=i(782),t=i(3572),r=i(7185),c=i(4097),p=i(4875),l=p.validators;function u(e){this.defaults=e,this.interceptors={request:new s,response:new s}}u.prototype.request=function(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},(a=r(this.defaults,a)).method?a.method=a.method.toLowerCase():this.defaults.method?a.method=this.defaults.method.toLowerCase():a.method="get";var i=a.transitional;void 0!==i&&p.assertOptions(i,{silentJSONParsing:l.transitional(l.boolean),forcedJSONParsing:l.transitional(l.boolean),clarifyTimeoutError:l.transitional(l.boolean)},!1);var n=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var s,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!o){var u=[t,void 0];for(Array.prototype.unshift.apply(u,n),u=u.concat(c),s=Promise.resolve(a);u.length;)s=s.then(u.shift(),u.shift());return s}for(var m=a;n.length;){var d=n.shift(),f=n.shift();try{m=d(m)}catch(e){f(e);break}}try{s=t(m)}catch(e){return Promise.reject(e)}for(;c.length;)s=s.then(c.shift(),c.shift());return s},u.prototype.getUri=function(e){e=r(this.defaults,e);var a=c(e.baseURL,e.url);return o(a,e.params,e.paramsSerializer)},n.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(a,i){return this.request(r(i||{},{method:e,url:a,data:(i||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){function a(a){return function(i,n,o){return this.request(r(o||{},{method:e,headers:a?{"Content-Type":"multipart/form-data"}:{},url:i,data:n}))}}u.prototype[e]=a(),u.prototype[e+"Form"]=a(!0)})),e.exports=u},2648:(e,a,i)=>{"use strict";var n=i(4867);function o(e,a,i,n,o){Error.call(this),this.message=e,this.name="AxiosError",a&&(this.code=a),i&&(this.config=i),n&&(this.request=n),o&&(this.response=o)}n.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var s=o.prototype,t={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){t[e]={value:e}})),Object.defineProperties(o,t),Object.defineProperty(s,"isAxiosError",{value:!0}),o.from=function(e,a,i,t,r,c){var p=Object.create(s);return n.toFlatObject(e,p,(function(e){return e!==Error.prototype})),o.call(p,e.message,a,i,t,r),p.name=e.name,c&&Object.assign(p,c),p},e.exports=o},782:(e,a,i)=>{"use strict";var n=i(4867);function o(){this.handlers=[]}o.prototype.use=function(e,a,i){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(a){null!==a&&e(a)}))},e.exports=o},4097:(e,a,i)=>{"use strict";var n=i(1793),o=i(7303);e.exports=function(e,a){return e&&!n(a)?o(e,a):a}},3572:(e,a,i)=>{"use strict";var n=i(4867),o=i(8527),s=i(6502),t=i(5546),r=i(644);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new r}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(a){delete e.headers[a]})),(e.adapter||t.adapter)(e).then((function(a){return c(e),a.data=o.call(e,a.data,a.headers,e.transformResponse),a}),(function(a){return s(a)||(c(e),a&&a.response&&(a.response.data=o.call(e,a.response.data,a.response.headers,e.transformResponse))),Promise.reject(a)}))}},7185:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||{};var i={};function o(e,a){return n.isPlainObject(e)&&n.isPlainObject(a)?n.merge(e,a):n.isPlainObject(a)?n.merge({},a):n.isArray(a)?a.slice():a}function s(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(e[i],a[i])}function t(e){if(!n.isUndefined(a[e]))return o(void 0,a[e])}function r(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(void 0,a[i])}function c(i){return i in a?o(e[i],a[i]):i in e?o(void 0,e[i]):void 0}var p={url:t,method:t,data:t,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:c};return n.forEach(Object.keys(e).concat(Object.keys(a)),(function(e){var a=p[e]||s,o=a(e);n.isUndefined(o)&&a!==c||(i[e]=o)})),i}},6026:(e,a,i)=>{"use strict";var n=i(2648);e.exports=function(e,a,i){var o=i.config.validateStatus;i.status&&o&&!o(i.status)?a(new n("Request failed with status code "+i.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i)):e(i)}},8527:(e,a,i)=>{"use strict";var n=i(4867),o=i(5546);e.exports=function(e,a,i){var s=this||o;return n.forEach(i,(function(i){e=i.call(s,e,a)})),e}},3784:(e,a,i)=>{e.exports=i(6882)},5546:(e,a,i)=>{"use strict";var n=i(4867),o=i(6016),s=i(2648),t=i(7874),r=i(7675),c={"Content-Type":"application/x-www-form-urlencoded"};function p(e,a){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=a)}var l,u={transitional:t,adapter:("undefined"!=typeof XMLHttpRequest?l=i(5448):"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)&&(l=i(7970)),l),transformRequest:[function(e,a){if(o(a,"Accept"),o(a,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e))return e;if(n.isArrayBufferView(e))return e.buffer;if(n.isURLSearchParams(e))return p(a,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var i,s=n.isObject(e),t=a&&a["Content-Type"];if((i=n.isFileList(e))||s&&"multipart/form-data"===t){var c=this.env&&this.env.FormData;return r(i?{"files[]":e}:e,c&&new c)}return s||"application/json"===t?(p(a,"application/json"),function(e,a,i){if(n.isString(e))try{return(a||JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var a=this.transitional||u.transitional,i=a&&a.silentJSONParsing,o=a&&a.forcedJSONParsing,t=!i&&"json"===this.responseType;if(t||o&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(t){if("SyntaxError"===e.name)throw s.from(e,s.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:i(3784)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){u.headers[e]=n.merge(c)})),e.exports=u},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,a){return function(){for(var i=new Array(arguments.length),n=0;n{"use strict";var n=i(4867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,a,i){if(!a)return e;var s;if(i)s=i(a);else if(n.isURLSearchParams(a))s=a.toString();else{var t=[];n.forEach(a,(function(e,a){null!=e&&(n.isArray(e)?a+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),t.push(o(a)+"="+o(e))})))})),s=t.join("&")}if(s){var r=e.indexOf("#");-1!==r&&(e=e.slice(0,r)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}},7303:e=>{"use strict";e.exports=function(e,a){return a?e.replace(/\/+$/,"")+"/"+a.replace(/^\/+/,""):e}},4372:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?{write:function(e,a,i,o,s,t){var r=[];r.push(e+"="+encodeURIComponent(a)),n.isNumber(i)&&r.push("expires="+new Date(i).toGMTString()),n.isString(o)&&r.push("path="+o),n.isString(s)&&r.push("domain="+s),!0===t&&r.push("secure"),document.cookie=r.join("; ")},read:function(e){var a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},7985:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?function(){var e,a=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function o(e){var n=e;return a&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=o(window.location.href),function(a){var i=n.isString(a)?o(a):a;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0}},6016:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){n.forEach(e,(function(i,n){n!==a&&n.toUpperCase()===a.toUpperCase()&&(e[a]=i,delete e[n])}))}},4109:(e,a,i)=>{"use strict";var n=i(4867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var a,i,s,t={};return e?(n.forEach(e.split("\n"),(function(e){if(s=e.indexOf(":"),a=n.trim(e.substr(0,s)).toLowerCase(),i=n.trim(e.substr(s+1)),a){if(t[a]&&o.indexOf(a)>=0)return;t[a]="set-cookie"===a?(t[a]?t[a]:[]).concat([i]):t[a]?t[a]+", "+i:i}})),t):t}},205:e=>{"use strict";e.exports=function(e){var a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(a){return e.apply(null,a)}}},7675:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||new FormData;var i=[];function o(e){return null===e?"":n.isDate(e)?e.toISOString():n.isArrayBuffer(e)||n.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(s,t){if(n.isPlainObject(s)||n.isArray(s)){if(-1!==i.indexOf(s))throw Error("Circular reference detected in "+t);i.push(s),n.forEach(s,(function(i,s){if(!n.isUndefined(i)){var r,c=t?t+"."+s:s;if(i&&!t&&"object"==typeof i)if(n.endsWith(s,"{}"))i=JSON.stringify(i);else if(n.endsWith(s,"[]")&&(r=n.toArray(i)))return void r.forEach((function(e){!n.isUndefined(e)&&a.append(c,o(e))}));e(i,c)}})),i.pop()}else a.append(t,o(s))}(e),a}},4875:(e,a,i)=>{"use strict";var n=i(7288).version,o=i(2648),s={};["object","boolean","number","function","string","symbol"].forEach((function(e,a){s[e]=function(i){return typeof i===e||"a"+(a<1?"n ":" ")+e}}));var t={};s.transitional=function(e,a,i){function s(e,a){return"[Axios v"+n+"] Transitional option '"+e+"'"+a+(i?". "+i:"")}return function(i,n,r){if(!1===e)throw new o(s(n," has been removed"+(a?" in "+a:"")),o.ERR_DEPRECATED);return a&&!t[n]&&(t[n]=!0,console.warn(s(n," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(i,n,r)}},e.exports={assertOptions:function(e,a,i){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),s=n.length;s-- >0;){var t=n[s],r=a[t];if(r){var c=e[t],p=void 0===c||r(c,t,e);if(!0!==p)throw new o("option "+t+" must be "+p,o.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new o("Unknown option "+t,o.ERR_BAD_OPTION)}},validators:s}},4867:(e,a,i)=>{"use strict";var n,o=i(1849),s=Object.prototype.toString,t=(n=Object.create(null),function(e){var a=s.call(e);return n[a]||(n[a]=a.slice(8,-1).toLowerCase())});function r(e){return e=e.toLowerCase(),function(a){return t(a)===e}}function c(e){return Array.isArray(e)}function p(e){return void 0===e}var l=r("ArrayBuffer");function u(e){return null!==e&&"object"==typeof e}function m(e){if("object"!==t(e))return!1;var a=Object.getPrototypeOf(e);return null===a||a===Object.prototype}var d=r("Date"),f=r("File"),x=r("Blob"),v=r("FileList");function h(e){return"[object Function]"===s.call(e)}var b=r("URLSearchParams");function g(e,a){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var i=0,n=e.length;i0;)t[s=n[o]]||(a[s]=e[s],t[s]=!0);e=Object.getPrototypeOf(e)}while(e&&(!i||i(e,a))&&e!==Object.prototype);return a},kindOf:t,kindOfTest:r,endsWith:function(e,a,i){e=String(e),(void 0===i||i>e.length)&&(i=e.length),i-=a.length;var n=e.indexOf(a,i);return-1!==n&&n===i},toArray:function(e){if(!e)return null;var a=e.length;if(p(a))return null;for(var i=new Array(a);a-- >0;)i[a]=e[a];return i},isTypedArray:w,isFileList:v}},1076:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i{"use strict";var i;Object.defineProperty(a,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(i||(i={})),a.default=i},4771:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i0&&o[o.length-1])||6!==s[0]&&2!==s[0])){t=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[x.default.Put,x.default.Post,x.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var a,i,n=this.client.getConfig(),o=null!==(a=this.config.host)&&void 0!==a?a:n.host,s=null!==(i=this.config.version)&&void 0!==i?i:n.version;return(0,u.default)(e.protocol,o,s,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,a="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||a?"DATA":this.subPath}var i="send"===this.resource,n=this.resource.indexOf("sms")>-1;return i||n?"":"REST"},e.prototype.makeRequest=function(a,i,n){var s,t={url:a,params:n,data:this.getRequestBody(i),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(a)},transformResponse:function(a){var i="string"==typeof a,n="json"===this.responseType;return a&&i&&n?e.parseToJSONb(a):a}};e.isBrowser()&&(t.headers["X-User-Agent"]=t.headers["User-Agent"]);var r=this.getCredentials();r.apiToken?t.headers.Authorization="Bearer ".concat(r.apiToken):t.auth={username:r.apiKey,password:r.apiSecret};var c=this.client.getConfig(),p=this.client.getOptions();p.timeout&&(t.timeout=p.timeout),p.proxy&&(t.proxy=p.proxy),p.headers&&Object.keys(p.headers).length>0&&(t.headers=o(o({},t.headers),p.headers));var l=null!==(s=this.config.output)&&void 0!==s?s:c.output;return l&&(t.responseType=l),p.maxBodyLength&&(t.maxBodyLength=p.maxBodyLength),p.maxContentLength&&(t.maxContentLength=p.maxContentLength),(0,d.default)(t)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(n(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,u.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,u.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,a,i){var n,o,s,t,r;return void 0===e&&(e={}),void 0===a&&(a={}),void 0===i&&(i=!0),c(this,void 0,void 0,(function(){var c,l,u,m,x,v,h,b,g,y;return p(this,(function(p){switch(p.label){case 0:if(c=this.buildFullUrl(),this.setBaseURL(this.resource),!i)return[2,{body:b=this.getRequestBody(e),params:a,url:c}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.makeRequest(c,e,a)];case 2:return[2,{response:l=p.sent(),body:l.data}];case 3:if((u=p.sent())instanceof d.AxiosError)throw(m=new Error).code=u.code,m.config=u.config,u.response?(x=u.response,v=x.status,h=x.statusText,b=x.data,m.response=u.response,m.statusCode=v,m.statusText=h,g=null!==(n=null==b?void 0:b.ErrorMessage)&&void 0!==n?n:u.message,m.originalMessage=g,m.message='Unsuccessful: Status Code: "'.concat(m.statusCode,'" Message: "').concat(g,'"'),b&&("string"==typeof(y=null===(r=null===(t=null===(s=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===s?void 0:s.Errors)||void 0===t?void 0:t[0])||void 0===r?void 0:r.ErrorMessage)&&(m.message+=";\n".concat(y)),(0,f.setValueIfNotNil)(m,"ErrorMessage",b.ErrorMessage),(0,f.setValueIfNotNil)(m,"ErrorCode",b.ErrorCode),(0,f.setValueIfNotNil)(m,"ErrorIdentifier",b.ErrorIdentifier),(0,f.setValueIfNotNil)(m,"ErrorRelatedTo",b.ErrorRelatedTo))):(m.response=null,m.statusCode=null,m.statusText=null,m.originalMessage=u.message,m.message='Unsuccessful: Error Code: "'.concat(m.code,'" Message: "').concat(u.message,'"')),m;throw u;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var a;try{a=h.parse(e)}catch(e){a={}}return a},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":n(window))},e.protocol="https://",e}();a.default=b},9006:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.setValueIfNotNil=a.isPureObject=a.isUndefined=a.isNull=a.isNil=void 0;var o=n(i(1808));a.isNil=o.default;var s=n(i(7376));a.isNull=s.default;var t=n(i(5034));a.isUndefined=t.default;var r=n(i(1818));a.isPureObject=r.default;var c=n(i(1190));a.setValueIfNotNil=c.default},1808:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=n(i(7376)),s=n(i(5034));a.default=function(e){return(0,s.default)(e)||(0,o.default)(e)}},7376:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return null===e}},1818:(e,a)=>{"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return"object"===i(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return void 0===e}},1190:function(e,a,i){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var s=o(i(1808)),t=o(i(7376));a.default=function(e,a,i){if("object"!==n(e)||(0,t.default)(e))throw Error('Argument "targetObject" is not object');if(!a)throw Error('Argument "path" is required');(0,s.default)(i)||(e[a]=i)}},4431:function(e,a,i){var n;!function(o){"use strict";var s,t=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,c=Math.floor,p="[BigNumber Error] ",l=p+"Number primitive has more than 15 significant digits: ",u=1e14,m=14,d=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,v=1e9;function h(e){var a=0|e;return e>0||e===a?a:a-1}function b(e){for(var a,i,n=1,o=e.length,s=e[0]+"";np^i?1:-1;for(r=(c=o.length)<(p=s.length)?c:p,t=0;ts[t]^i?1:-1;return c==p?0:c>p^i?1:-1}function y(e,a,i,n){if(ei||e!==c(e))throw Error(p+(n||"Argument")+("number"==typeof e?ei?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var a=e.c.length-1;return h(e.e/m)==a&&e.c[a]%2!=0}function j(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(a<0?"e":"e+")+a}function k(e,a,i){var n,o;if(a<0){for(o=i+".";++a;o+=i);e=o+e}else if(++a>(n=e.length)){for(o=i,a-=n;--a;o+=i);e+=o}else aF?h.c=h.e=null:e.e=10;u/=10,p++);return void(p>F?h.c=h.e=null:(h.e=p,h.c=[e]))}v=String(e)}else{if(!t.test(v=String(e)))return o(h,v,f);h.s=45==v.charCodeAt(0)?(v=v.slice(1),-1):1}(p=v.indexOf("."))>-1&&(v=v.replace(".","")),(u=v.search(/e/i))>0?(p<0&&(p=u),p+=+v.slice(u+1),v=v.substring(0,u)):p<0&&(p=v.length)}else{if(y(a,2,M.length,"Base"),10==a)return J(h=new H(e),z+h.e+1,N);if(v=String(e),f="number"==typeof e){if(0*e!=0)return o(h,v,f,a);if(h.s=1/e<0?(v=v.slice(1),-1):1,H.DEBUG&&v.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else h.s=45===v.charCodeAt(0)?(v=v.slice(1),-1):1;for(i=M.slice(0,a),p=u=0,x=v.length;up){p=x;continue}}else if(!r&&(v==v.toUpperCase()&&(v=v.toLowerCase())||v==v.toLowerCase()&&(v=v.toUpperCase()))){r=!0,u=-1,p=0;continue}return o(h,String(e),f,a)}f=!1,(p=(v=n(v,a,10,h.s)).indexOf("."))>-1?v=v.replace(".",""):p=v.length}for(u=0;48===v.charCodeAt(u);u++);for(x=v.length;48===v.charCodeAt(--x););if(v=v.slice(u,++x)){if(x-=u,f&&H.DEBUG&&x>15&&(e>d||e!==c(e)))throw Error(l+h.s*e);if((p=p-u-1)>F)h.c=h.e=null;else if(p=B)?j(c,t):k(c,t,"0");else if(s=(e=J(new H(e),a,i)).e,r=(c=b(e.c)).length,1==n||2==n&&(a<=s||s<=q)){for(;rr){if(--a>0)for(c+=".";a--;c+="0");}else if((a+=s-r)>0)for(s+1==r&&(c+=".");a--;c+="0");return e.s<0&&o?"-"+c:c}function $(e,a){for(var i,n=1,o=new H(e[0]);n=10;o/=10,n++);return(i=n+i*m-1)>F?e.c=e.e=null:i=10;p/=10,o++);if((s=a-o)<0)s+=m,t=a,x=(l=v[d=0])/h[o-t-1]%10|0;else if((d=r((s+1)/m))>=v.length){if(!n)break e;for(;v.length<=d;v.push(0));l=x=0,o=1,t=(s%=m)-m+1}else{for(l=p=v[d],o=1;p>=10;p/=10,o++);x=(t=(s%=m)-m+o)<0?0:l/h[o-t-1]%10|0}if(n=n||a<0||null!=v[d+1]||(t<0?l:l%h[o-t-1]),n=i<4?(x||n)&&(0==i||i==(e.s<0?3:2)):x>5||5==x&&(4==i||n||6==i&&(s>0?t>0?l/h[o-t]:0:v[d-1])%10&1||i==(e.s<0?8:7)),a<1||!v[0])return v.length=0,n?(a-=e.e+1,v[0]=h[(m-a%m)%m],e.e=-a||0):v[0]=e.e=0,e;if(0==s?(v.length=d,p=1,d--):(v.length=d+1,p=h[m-s],v[d]=t>0?c(l/h[o-t]%h[t])*p:0),n)for(;;){if(0==d){for(s=1,t=v[0];t>=10;t/=10,s++);for(t=v[0]+=p,p=1;t>=10;t/=10,p++);s!=p&&(e.e++,v[0]==u&&(v[0]=1));break}if(v[d]+=p,v[d]!=u)break;v[d--]=0,p=1}for(s=v.length;0===v[--s];v.pop());}e.e>F?e.c=e.e=null:e.e=B?j(a,i):k(a,i,"0"),e.s<0?"-"+a:a)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var a,i;if(null!=e){if("object"!=typeof e)throw Error(p+"Object expected: "+e);if(e.hasOwnProperty(a="DECIMAL_PLACES")&&(y(i=e[a],0,v,a),z=i),e.hasOwnProperty(a="ROUNDING_MODE")&&(y(i=e[a],0,8,a),N=i),e.hasOwnProperty(a="EXPONENTIAL_AT")&&((i=e[a])&&i.pop?(y(i[0],-v,0,a),y(i[1],0,v,a),q=i[0],B=i[1]):(y(i,-v,v,a),q=-(B=i<0?-i:i))),e.hasOwnProperty(a="RANGE"))if((i=e[a])&&i.pop)y(i[0],-v,-1,a),y(i[1],1,v,a),P=i[0],F=i[1];else{if(y(i,-v,v,a),!i)throw Error(p+a+" cannot be zero: "+i);P=-(F=i<0?-i:i)}if(e.hasOwnProperty(a="CRYPTO")){if((i=e[a])!==!!i)throw Error(p+a+" not true or false: "+i);if(i){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!i,Error(p+"crypto unavailable");L=i}else L=i}if(e.hasOwnProperty(a="MODULO_MODE")&&(y(i=e[a],0,9,a),U=i),e.hasOwnProperty(a="POW_PRECISION")&&(y(i=e[a],0,v,a),D=i),e.hasOwnProperty(a="FORMAT")){if("object"!=typeof(i=e[a]))throw Error(p+a+" not an object: "+i);I=i}if(e.hasOwnProperty(a="ALPHABET")){if("string"!=typeof(i=e[a])||/^.?$|[+\-.\s]|(.).*\1/.test(i))throw Error(p+a+" invalid: "+i);M=i}}return{DECIMAL_PLACES:z,ROUNDING_MODE:N,EXPONENTIAL_AT:[q,B],RANGE:[P,F],CRYPTO:L,MODULO_MODE:U,POW_PRECISION:D,FORMAT:I,ALPHABET:M}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var a,i,n=e.c,o=e.e,s=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===s||-1===s)&&o>=-v&&o<=v&&o===c(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((a=(o+1)%m)<1&&(a+=m),String(n[0]).length==a){for(a=0;a=u||i!==c(i))break e;if(0!==i)return!0}}}else if(null===n&&null===o&&(null===s||1===s||-1===s))return!0;throw Error(p+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return $(arguments,A.lt)},H.minimum=H.min=function(){return $(arguments,A.gt)},H.random=(s=9007199254740992,_=Math.random()*s&2097151?function(){return c(Math.random()*s)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var a,i,n,o,s,t=0,l=[],u=new H(T);if(null==e?e=z:y(e,0,v),o=r(e/m),L)if(crypto.getRandomValues){for(a=crypto.getRandomValues(new Uint32Array(o*=2));t>>11))>=9e15?(i=crypto.getRandomValues(new Uint32Array(2)),a[t]=i[0],a[t+1]=i[1]):(l.push(s%1e14),t+=2);t=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(p+"crypto unavailable");for(a=crypto.randomBytes(o*=7);t=9e15?crypto.randomBytes(7).copy(a,t):(l.push(s%1e14),t+=7);t=o/7}if(!L)for(;t=10;s/=10,t++);ti-1&&(null==t[o+1]&&(t[o+1]=0),t[o+1]+=t[o]/i|0,t[o]%=i)}return t.reverse()}return function(n,o,s,t,r){var c,p,l,u,m,d,f,x,v=n.indexOf("."),h=z,g=N;for(v>=0&&(u=D,D=0,n=n.replace(".",""),d=(x=new H(o)).pow(n.length-v),D=u,x.c=a(k(b(d.c),d.e,"0"),10,s,e),x.e=x.c.length),l=u=(f=a(n,o,s,r?(c=M,e):(c=e,M))).length;0==f[--u];f.pop());if(!f[0])return c.charAt(0);if(v<0?--l:(d.c=f,d.e=l,d.s=t,f=(d=i(d,x,h,g,s)).c,m=d.r,l=d.e),v=f[p=l+h+1],u=s/2,m=m||p<0||null!=f[p+1],m=g<4?(null!=v||m)&&(0==g||g==(d.s<0?3:2)):v>u||v==u&&(4==g||m||6==g&&1&f[p-1]||g==(d.s<0?8:7)),p<1||!f[0])n=m?k(c.charAt(1),-h,c.charAt(0)):c.charAt(0);else{if(f.length=p,m)for(--s;++f[--p]>s;)f[p]=0,p||(++l,f=[1].concat(f));for(u=f.length;!f[--u];);for(v=0,n="";v<=u;n+=c.charAt(f[v++]));n=k(n,l,c.charAt(0))}return n}}(),i=function(){function e(e,a,i){var n,o,s,t,r=0,c=e.length,p=a%x,l=a/x|0;for(e=e.slice();c--;)r=((o=p*(s=e[c]%x)+(n=l*s+(t=e[c]/x|0)*p)%x*x+r)/i|0)+(n/x|0)+l*t,e[c]=o%i;return r&&(e=[r].concat(e)),e}function a(e,a,i,n){var o,s;if(i!=n)s=i>n?1:-1;else for(o=s=0;oa[o]?1:-1;break}return s}function i(e,a,i,n){for(var o=0;i--;)e[i]-=o,o=e[i]1;e.splice(0,1));}return function(n,o,s,t,r){var p,l,d,f,x,v,b,g,y,w,j,k,_,E,O,C,S,R=n.s==o.s?1:-1,A=n.c,T=o.c;if(!(A&&A[0]&&T&&T[0]))return new H(n.s&&o.s&&(A?!T||A[0]!=T[0]:T)?A&&0==A[0]||!T?0*R:R/0:NaN);for(y=(g=new H(R)).c=[],R=s+(l=n.e-o.e)+1,r||(r=u,l=h(n.e/m)-h(o.e/m),R=R/m|0),d=0;T[d]==(A[d]||0);d++);if(T[d]>(A[d]||0)&&l--,R<0)y.push(1),f=!0;else{for(E=A.length,C=T.length,d=0,R+=2,(x=c(r/(T[0]+1)))>1&&(T=e(T,x,r),A=e(A,x,r),C=T.length,E=A.length),_=C,j=(w=A.slice(0,C)).length;j=r/2&&O++;do{if(x=0,(p=a(T,w,C,j))<0){if(k=w[0],C!=j&&(k=k*r+(w[1]||0)),(x=c(k/O))>1)for(x>=r&&(x=r-1),b=(v=e(T,x,r)).length,j=w.length;1==a(v,w,b,j);)x--,i(v,C=10;R/=10,d++);J(g,s+(g.e=d+l*m-1)+1,t,f)}else g.e=l,g.r=+f;return g}}(),E=/^(-?)0([xbo])(?=\w[\w.]*$)/i,O=/^([^.]+)\.$/,C=/^\.([^.]+)$/,S=/^-?(Infinity|NaN)$/,R=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,a,i,n){var o,s=i?a:a.replace(R,"");if(S.test(s))e.s=isNaN(s)?null:s<0?-1:1;else{if(!i&&(s=s.replace(E,(function(e,a,i){return o="x"==(i=i.toLowerCase())?16:"b"==i?2:8,n&&n!=o?e:a})),n&&(o=n,s=s.replace(O,"$1").replace(C,"0.$1")),a!=s))return new H(s,o);if(H.DEBUG)throw Error(p+"Not a"+(n?" base "+n:"")+" number: "+a);e.s=null}e.c=e.e=null},A.absoluteValue=A.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},A.comparedTo=function(e,a){return g(this,new H(e,a))},A.decimalPlaces=A.dp=function(e,a){var i,n,o,s=this;if(null!=e)return y(e,0,v),null==a?a=N:y(a,0,8),J(new H(s),e+s.e+1,a);if(!(i=s.c))return null;if(n=((o=i.length-1)-h(this.e/m))*m,o=i[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},A.dividedBy=A.div=function(e,a){return i(this,new H(e,a),z,N)},A.dividedToIntegerBy=A.idiv=function(e,a){return i(this,new H(e,a),0,1)},A.exponentiatedBy=A.pow=function(e,a){var i,n,o,s,t,l,u,d,f=this;if((e=new H(e)).c&&!e.isInteger())throw Error(p+"Exponent not an integer: "+K(e));if(null!=a&&(a=new H(a)),t=e.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!e.c||!e.c[0])return d=new H(Math.pow(+K(f),t?2-w(e):+K(e))),a?d.mod(a):d;if(l=e.s<0,a){if(a.c?!a.c[0]:!a.s)return new H(NaN);(n=!l&&f.isInteger()&&a.isInteger())&&(f=f.mod(a))}else{if(e.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||t&&f.c[1]>=24e7:f.c[0]<8e13||t&&f.c[0]<=9999975e7)))return s=f.s<0&&w(e)?-0:0,f.e>-1&&(s=1/s),new H(l?1/s:s);D&&(s=r(D/m+2))}for(t?(i=new H(.5),l&&(e.s=1),u=w(e)):u=(o=Math.abs(+K(e)))%2,d=new H(T);;){if(u){if(!(d=d.times(f)).c)break;s?d.c.length>s&&(d.c.length=s):n&&(d=d.mod(a))}if(o){if(0===(o=c(o/2)))break;u=o%2}else if(J(e=e.times(i),e.e+1,1),e.e>14)u=w(e);else{if(0==(o=+K(e)))break;u=o%2}f=f.times(f),s?f.c&&f.c.length>s&&(f.c.length=s):n&&(f=f.mod(a))}return n?d:(l&&(d=T.div(d)),a?d.mod(a):s?J(d,D,N,void 0):d)},A.integerValue=function(e){var a=new H(this);return null==e?e=N:y(e,0,8),J(a,a.e+1,e)},A.isEqualTo=A.eq=function(e,a){return 0===g(this,new H(e,a))},A.isFinite=function(){return!!this.c},A.isGreaterThan=A.gt=function(e,a){return g(this,new H(e,a))>0},A.isGreaterThanOrEqualTo=A.gte=function(e,a){return 1===(a=g(this,new H(e,a)))||0===a},A.isInteger=function(){return!!this.c&&h(this.e/m)>this.c.length-2},A.isLessThan=A.lt=function(e,a){return g(this,new H(e,a))<0},A.isLessThanOrEqualTo=A.lte=function(e,a){return-1===(a=g(this,new H(e,a)))||0===a},A.isNaN=function(){return!this.s},A.isNegative=function(){return this.s<0},A.isPositive=function(){return this.s>0},A.isZero=function(){return!!this.c&&0==this.c[0]},A.minus=function(e,a){var i,n,o,s,t=this,r=t.s;if(a=(e=new H(e,a)).s,!r||!a)return new H(NaN);if(r!=a)return e.s=-a,t.plus(e);var c=t.e/m,p=e.e/m,l=t.c,d=e.c;if(!c||!p){if(!l||!d)return l?(e.s=-a,e):new H(d?t:NaN);if(!l[0]||!d[0])return d[0]?(e.s=-a,e):new H(l[0]?t:3==N?-0:0)}if(c=h(c),p=h(p),l=l.slice(),r=c-p){for((s=r<0)?(r=-r,o=l):(p=c,o=d),o.reverse(),a=r;a--;o.push(0));o.reverse()}else for(n=(s=(r=l.length)<(a=d.length))?r:a,r=a=0;a0)for(;a--;l[i++]=0);for(a=u-1;n>r;){if(l[--n]=0;){for(i=0,f=k[o]%y,v=k[o]/y|0,s=o+(t=c);s>o;)i=((p=f*(p=j[--t]%y)+(r=v*p+(l=j[t]/y|0)*f)%y*y+b[s]+i)/g|0)+(r/y|0)+v*l,b[s--]=p%g;b[s]=i}return i?++n:b.splice(0,1),G(e,b,n)},A.negated=function(){var e=new H(this);return e.s=-e.s||null,e},A.plus=function(e,a){var i,n=this,o=n.s;if(a=(e=new H(e,a)).s,!o||!a)return new H(NaN);if(o!=a)return e.s=-a,n.minus(e);var s=n.e/m,t=e.e/m,r=n.c,c=e.c;if(!s||!t){if(!r||!c)return new H(o/0);if(!r[0]||!c[0])return c[0]?e:new H(r[0]?n:0*o)}if(s=h(s),t=h(t),r=r.slice(),o=s-t){for(o>0?(t=s,i=c):(o=-o,i=r),i.reverse();o--;i.push(0));i.reverse()}for((o=r.length)-(a=c.length)<0&&(i=c,c=r,r=i,a=o),o=0;a;)o=(r[--a]=r[a]+c[a]+o)/u|0,r[a]=u===r[a]?0:r[a]%u;return o&&(r=[o].concat(r),++t),G(e,r,t)},A.precision=A.sd=function(e,a){var i,n,o,s=this;if(null!=e&&e!==!!e)return y(e,1,v),null==a?a=N:y(a,0,8),J(new H(s),e,a);if(!(i=s.c))return null;if(n=(o=i.length-1)*m+1,o=i[o]){for(;o%10==0;o/=10,n--);for(o=i[0];o>=10;o/=10,n++);}return e&&s.e+1>n&&(n=s.e+1),n},A.shiftedBy=function(e){return y(e,-9007199254740991,d),this.times("1e"+e)},A.squareRoot=A.sqrt=function(){var e,a,n,o,s,t=this,r=t.c,c=t.s,p=t.e,l=z+4,u=new H("0.5");if(1!==c||!r||!r[0])return new H(!c||c<0&&(!r||r[0])?NaN:r?t:1/0);if(0==(c=Math.sqrt(+K(t)))||c==1/0?(((a=b(r)).length+p)%2==0&&(a+="0"),c=Math.sqrt(+a),p=h((p+1)/2)-(p<0||p%2),n=new H(a=c==1/0?"5e"+p:(a=c.toExponential()).slice(0,a.indexOf("e")+1)+p)):n=new H(c+""),n.c[0])for((c=(p=n.e)+l)<3&&(c=0);;)if(s=n,n=u.times(s.plus(i(t,s,l,1))),b(s.c).slice(0,c)===(a=b(n.c)).slice(0,c)){if(n.e0&&x>0){for(s=x%r||r,u=f.substr(0,s);s0&&(u+=l+f.slice(s)),d&&(u="-"+u)}n=m?u+(i.decimalSeparator||"")+((c=+i.fractionGroupSize)?m.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(i.fractionGroupSeparator||"")):m):u}return(i.prefix||"")+n+(i.suffix||"")},A.toFraction=function(e){var a,n,o,s,t,r,c,l,u,d,x,v,h=this,g=h.c;if(null!=e&&(!(c=new H(e)).isInteger()&&(c.c||1!==c.s)||c.lt(T)))throw Error(p+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+K(c));if(!g)return new H(h);for(a=new H(T),u=n=new H(T),o=l=new H(T),v=b(g),t=a.e=v.length-h.e-1,a.c[0]=f[(r=t%m)<0?m+r:r],e=!e||c.comparedTo(a)>0?t>0?a:u:c,r=F,F=1/0,c=new H(v),l.c[0]=0;d=i(c,a,0,1),1!=(s=n.plus(d.times(o))).comparedTo(e);)n=o,o=s,u=l.plus(d.times(s=u)),l=s,a=c.minus(d.times(s=a)),c=s;return s=i(e.minus(n),o,0,1),l=l.plus(s.times(u)),n=n.plus(s.times(o)),l.s=u.s=h.s,x=i(u,o,t*=2,N).minus(h).abs().comparedTo(i(l,n,t,N).minus(h).abs())<1?[u,o]:[l,n],F=r,x},A.toNumber=function(){return+K(this)},A.toPrecision=function(e,a){return null!=e&&y(e,1,v),V(this,e,a,2)},A.toString=function(e){var a,i=this,o=i.s,s=i.e;return null===s?o?(a="Infinity",o<0&&(a="-"+a)):a="NaN":(null==e?a=s<=q||s>=B?j(b(i.c),s):k(b(i.c),s,"0"):10===e?a=k(b((i=J(new H(i),z+s+1,N)).c),i.e,"0"):(y(e,2,M.length,"Base"),a=n(k(b(i.c),s,"0"),10,e,o,!0)),o<0&&i.c[0]&&(a="-"+a)),a},A.valueOf=A.toJSON=function(){return K(this)},A._isBigNumber=!0,null!=a&&H.set(a),H}(),s.default=s.BigNumber=s,void 0===(n=function(){return s}.call(a,i,a,e))||(e.exports=n)}()},9779:(e,a,i)=>{var n=i(3837),o=i(2781).Stream,s=i(3463);function t(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=t,n.inherits(t,o),t.create=function(e){var a=new this;for(var i in e=e||{})a[i]=e[i];return a},t.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},t.prototype.append=function(e){if(t.isStreamLike(e)){if(!(e instanceof s)){var a=s.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},t.prototype.pipe=function(e,a){return o.prototype.pipe.call(this,e,a),this.resume(),e},t.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},t.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){t.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},t.prototype._pipeNext=function(e){if(this._currentStream=e,t.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},t.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},t.prototype.write=function(e){this.emit("data",e)},t.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},t.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},t.prototype.end=function(){this._reset(),this.emit("end")},t.prototype.destroy=function(){this._reset(),this.emit("close")},t.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},t.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},t.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},t.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},9435:e=>{var a=1e3,i=60*a,n=60*i,o=24*n,s=7*o,t=365.25*o;function r(e,a,i,n){var o=a>=1.5*i;return Math.round(e/i)+" "+n+(o?"s":"")}e.exports=function(e,c){c=c||{};var p,l,u=typeof e;if("string"===u&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(r){var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*t;case"weeks":case"week":case"w":return c*s;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*n;case"minutes":case"minute":case"mins":case"min":case"m":return c*i;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}(e);if("number"===u&&isFinite(e))return c.long?(p=e,(l=Math.abs(p))>=o?r(p,l,o,"day"):l>=n?r(p,l,n,"hour"):l>=i?r(p,l,i,"minute"):l>=a?r(p,l,a,"second"):p+" ms"):function(e){var s=Math.abs(e);return s>=o?Math.round(e/o)+"d":s>=n?Math.round(e/n)+"h":s>=i?Math.round(e/i)+"m":s>=a?Math.round(e/a)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},1227:(e,a,i)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const i="color: "+this.color;a.splice(1,0,i,"color: inherit");let n=0,o=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(o=n))})),a.splice(o,0,i)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},a.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=i(2447)(a);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,i)=>{e.exports=function(e){function a(e){let i,o,s,t=null;function r(...e){if(!r.enabled)return;const n=r,o=Number(new Date),s=o-(i||o);n.diff=s,n.prev=i,n.curr=o,i=o,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let t=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((i,o)=>{if("%%"===i)return"%";t++;const s=a.formatters[o];if("function"==typeof s){const a=e[t];i=s.call(n,a),e.splice(t,1),t--}return i})),a.formatArgs.call(n,e),(n.log||a.log).apply(n,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=n,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==t?t:(o!==a.namespaces&&(o=a.namespaces,s=a.enabled(e)),s),set:e=>{t=e}}),"function"==typeof a.init&&a.init(r),r}function n(e,i){const n=a(this.namespace+(void 0===i?":":i)+e);return n.log=this.log,n}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){const e=[...a.names.map(o),...a.skips.map(o).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let i;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length;for(i=0;i{a[i]=e[i]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let i=0;for(let a=0;a{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=i(1227):e.exports=i(39)},39:(e,a,i)=>{const n=i(6224),o=i(3837);a.init=function(e){e.inspectOpts={};const i=Object.keys(a.inspectOpts);for(let n=0;n{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=i(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const i=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let n=process.env[a];return n=!!/^(yes|on|true|enabled)$/i.test(n)||!/^(no|off|false|disabled)$/i.test(n)&&("null"===n?null:Number(n)),e[i]=n,e}),{}),e.exports=i(2447)(a);const{formatters:s}=e.exports;s.o=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},s.O=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts)}},3463:(e,a,i)=>{var n=i(2781).Stream,o=i(3837);function s(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=s,o.inherits(s,n),s.create=function(e,a){var i=new this;for(var n in a=a||{})i[n]=a[n];i.source=e;var o=e.emit;return e.emit=function(){return i._handleEmit(arguments),o.apply(e,arguments)},e.on("error",(function(){})),i.pauseStream&&e.pause(),i},Object.defineProperty(s.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),s.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},s.prototype.resume=function(){this._released||this.release(),this.source.resume()},s.prototype.pause=function(){this.source.pause()},s.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},s.prototype.pipe=function(){var e=n.prototype.pipe.apply(this,arguments);return this.resume(),e},s.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},s.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,i)=>{var n;e.exports=function(){if(!n){try{n=i(5158)("follow-redirects")}catch(e){}"function"!=typeof n&&(n=function(){})}n.apply(null,arguments)}},938:(e,a,i)=>{var n=i(7310),o=n.URL,s=i(3685),t=i(5687),r=i(2781).Writable,c=i(9491),p=i(2261),l=["abort","aborted","connect","error","socket","timeout"],u=Object.create(null);l.forEach((function(e){u[e]=function(a,i,n){this._redirectable.emit(e,a,i,n)}}));var m=w("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),d=w("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),f=w("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=w("ERR_STREAM_WRITE_AFTER_END","write after end");function v(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var i=this;this._onNativeResponse=function(e){i._processResponse(e)},this._performRequest()}function h(e){var a={maxRedirects:21,maxBodyLength:10485760},i={};return Object.keys(e).forEach((function(s){var t=s+":",r=i[t]=e[s],l=a[s]=Object.create(r);Object.defineProperties(l,{request:{value:function(e,s,r){if("string"==typeof e){var l=e;try{e=g(new o(l))}catch(a){e=n.parse(l)}}else o&&e instanceof o?e=g(e):(r=s,s=e,e={protocol:t});return"function"==typeof s&&(r=s,s=null),(s=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,s)).nativeProtocols=i,c.equal(s.protocol,t,"protocol mismatch"),p("options",s),new v(s,r)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,i){var n=l.request(e,a,i);return n.end(),n},configurable:!0,enumerable:!0,writable:!0}})})),a}function b(){}function g(e){var a={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};return""!==e.port&&(a.port=Number(e.port)),a}function y(e,a){var i;for(var n in a)e.test(n)&&(i=a[n],delete a[n]);return null==i?void 0:String(i).trim()}function w(e,a){function i(e){Error.captureStackTrace(this,this.constructor),e?(this.message=a+": "+e.message,this.cause=e):this.message=a}return i.prototype=new Error,i.prototype.constructor=i,i.prototype.name="Error ["+e+"]",i.prototype.code=e,i}function j(e){for(var a of l)e.removeListener(a,u[a]);e.on("error",b),e.abort()}v.prototype=Object.create(r.prototype),v.prototype.abort=function(){j(this._currentRequest),this.emit("abort")},v.prototype.write=function(e,a,i){if(this._ending)throw new x;if(!("string"==typeof e||"object"==typeof e&&"length"in e))throw new TypeError("data should be a string, Buffer or Uint8Array");"function"==typeof a&&(i=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,i)):(this.emit("error",new f),this.abort()):i&&i()},v.prototype.end=function(e,a,i){if("function"==typeof e?(i=e,e=a=null):"function"==typeof a&&(i=a,a=null),e){var n=this,o=this._currentRequest;this.write(e,a,(function(){n._ended=!0,o.end(null,null,i)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,i)},v.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},v.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},v.prototype.setTimeout=function(e,a){var i=this;function n(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function o(a){i._timeout&&clearTimeout(i._timeout),i._timeout=setTimeout((function(){i.emit("timeout"),s()}),e),n(a)}function s(){i._timeout&&(clearTimeout(i._timeout),i._timeout=null),i.removeListener("abort",s),i.removeListener("error",s),i.removeListener("response",s),a&&i.removeListener("timeout",a),i.socket||i._currentRequest.removeListener("socket",o)}return a&&this.on("timeout",a),this.socket?o(this.socket):this._currentRequest.once("socket",o),this.on("socket",n),this.on("abort",s),this.on("error",s),this.on("response",s),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){v.prototype[e]=function(a,i){return this._currentRequest[e](a,i)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(v.prototype,e,{get:function(){return this._currentRequest[e]}})})),v.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},v.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(a){if(this._options.agents){var i=e.slice(0,-1);this._options.agent=this._options.agents[i]}var o=this._currentRequest=a.request(this._options,this._onNativeResponse);for(var s of(o._redirectable=this,l))o.on(s,u[s]);if(this._currentUrl=/^\//.test(this._options.path)?n.format(this._options):this._currentUrl=this._options.path,this._isRedirect){var t=0,r=this,c=this._requestBodyBuffers;!function e(a){if(o===r._currentRequest)if(a)r.emit("error",a);else if(t=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(j(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)this.emit("error",new d);else{var o,s=this._options.beforeRedirect;s&&(o=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var t=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],y(/^content-/i,this._options.headers));var r,c=y(/^host$/i,this._options.headers),l=n.parse(this._currentUrl),u=c||l.host,f=/^\w+:/.test(i)?this._currentUrl:n.format(Object.assign(l,{host:u}));try{r=n.resolve(f,i)}catch(e){return void this.emit("error",new m(e))}p("redirecting to",r),this._isRedirect=!0;var x=n.parse(r);if(Object.assign(this._options,x),(x.protocol!==l.protocol&&"https:"!==x.protocol||x.host!==u&&!function(e,a){const i=e.length-a.length-1;return i>0&&"."===e[i]&&e.endsWith(a)}(x.host,u))&&y(/^(?:authorization|cookie)$/i,this._options.headers),"function"==typeof s){var v={headers:e.headers,statusCode:a},h={url:f,method:t,headers:o};try{s(this._options,v,h)}catch(e){return void this.emit("error",e)}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new m(e))}}},e.exports=h({http:s,https:t}),e.exports.wrap=h},6882:(e,a,i)=>{var n=i(9779),o=i(3837),s=i(1017),t=i(3685),r=i(5687),c=i(7310).parse,p=i(7147),l=i(2781).Stream,u=i(983),m=i(9118),d=i(2275);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],n.call(this),e=e||{})this[a]=e[a]}e.exports=f,o.inherits(f,n),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,i){"string"==typeof(i=i||{})&&(i={filename:i});var s=n.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),o.isArray(a))this._error(new Error("Arrays are not supported."));else{var t=this._multiPartHeader(e,a,i),r=this._multiPartFooter();s(t),s(a),s(r),this._trackLength(t,a,i)}},f.prototype._trackLength=function(e,a,i){var n=0;null!=i.knownLength?n+=+i.knownLength:Buffer.isBuffer(a)?n=a.length:"string"==typeof a&&(n=Buffer.byteLength(a)),this._valueLength+=n,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof l)&&(i.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(i,n){var o;i?a(i):(o=n.size-(e.start?e.start:0),a(null,o))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(i){e.pause(),a(null,+i.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,i){if("string"==typeof i.header)return i.header;var n,o=this._getContentDisposition(a,i),s=this._getContentType(a,i),t="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(o||[]),"Content-Type":[].concat(s||[])};for(var c in"object"==typeof i.header&&d(r,i.header),r)r.hasOwnProperty(c)&&null!=(n=r[c])&&(Array.isArray(n)||(n=[n]),n.length&&(t+=c+": "+n.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+t+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var i,n;return"string"==typeof a.filepath?i=s.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?i=s.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=s.basename(e.client._httpMessage.path||"")),i&&(n='filename="'+i+'"'),n},f.prototype._getContentType=function(e,a){var i=a.contentType;return!i&&e.name&&(i=u.lookup(e.name)),!i&&e.path&&(i=u.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),i||!a.filepath&&!a.filename||(i=u.lookup(a.filepath||a.filename)),i||"object"!=typeof e||(i=f.DEFAULT_CONTENT_TYPE),i},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(i[a.toLowerCase()]=e[a]);return i},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),i=0,n=this._streams.length;i{e.exports=function(e,a){return Object.keys(a).forEach((function(i){e[i]=e[i]||a[i]})),e}},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const i=e.startsWith("-")?"":1===e.length?"-":"--",n=a.indexOf(i+e),o=a.indexOf("--");return-1!==n&&(-1===o||n{var n=i(4123).stringify,o=i(6813);e.exports=function(e){return{parse:o(e),stringify:n}},e.exports.parse=o(),e.exports.stringify=n},6813:(e,a,i)=>{var n=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,s=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var a={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(a.strict=!0),!0===e.storeAsString&&(a.storeAsString=!0),a.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,a.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);a.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);a.protoAction=e.protoAction}}var t,r,c,p,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=function(e){throw{name:"SyntaxError",message:e,at:t,text:c}},m=function(e){return e&&e!==r&&u("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(t),t+=1,r},d=function(){var e,o="";for("-"===r&&(o="-",m("-"));r>="0"&&r<="9";)o+=r,m();if("."===r)for(o+=".";m()&&r>="0"&&r<="9";)o+=r;if("e"===r||"E"===r)for(o+=r,m(),"-"!==r&&"+"!==r||(o+=r,m());r>="0"&&r<="9";)o+=r,m();if(e=+o,isFinite(e))return null==n&&(n=i(4431)),o.length>15?a.storeAsString?o:a.useNativeBigInt?BigInt(o):new n(o):a.alwaysParseAsBig?a.useNativeBigInt?BigInt(e):new n(e):e;u("Bad number")},f=function(){var e,a,i,n="";if('"'===r)for(var o=t;m();){if('"'===r)return t-1>o&&(n+=c.substring(o,t-1)),m(),n;if("\\"===r){if(t-1>o&&(n+=c.substring(o,t-1)),m(),"u"===r){for(i=0,a=0;a<4&&(e=parseInt(m(),16),isFinite(e));a+=1)i=16*i+e;n+=String.fromCharCode(i)}else{if("string"!=typeof l[r])break;n+=l[r]}o=t}}u("Bad string")},x=function(){for(;r&&r<=" ";)m()};return p=function(){switch(x(),r){case"{":return function(){var e,i=Object.create(null);if("{"===r){if(m("{"),x(),"}"===r)return m("}"),i;for(;r;){if(e=f(),x(),m(":"),!0===a.strict&&Object.hasOwnProperty.call(i,e)&&u('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===a.protoAction?u("Object contains forbidden prototype property"):"ignore"===a.protoAction?p():i[e]=p():!0===s.test(e)?"error"===a.constructorAction?u("Object contains forbidden constructor property"):"ignore"===a.constructorAction?p():i[e]=p():i[e]=p(),x(),"}"===r)return m("}"),i;m(","),x()}}u("Bad object")}();case"[":return function(){var e=[];if("["===r){if(m("["),x(),"]"===r)return m("]"),e;for(;r;){if(e.push(p()),x(),"]"===r)return m("]"),e;m(","),x()}}u("Bad array")}();case'"':return f();case"-":return d();default:return r>="0"&&r<="9"?d():function(){switch(r){case"t":return m("t"),m("r"),m("u"),m("e"),!0;case"f":return m("f"),m("a"),m("l"),m("s"),m("e"),!1;case"n":return m("n"),m("u"),m("l"),m("l"),null}u("Unexpected '"+r+"'")}()}},function(e,a){var i;return c=e+"",t=0,r=" ",i=p(),x(),r&&u("Syntax error"),"function"==typeof a?function e(i,n){var o,s=i[n];return s&&"object"==typeof s&&Object.keys(s).forEach((function(a){void 0!==(o=e(s,a))?s[a]=o:delete s[a]})),a.call(i,n,s)}({"":i},""):i}}},4123:(e,a,i)=>{var n=i(4431),o=e.exports;!function(){"use strict";var e,a,i,s=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,t={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function r(e){return s.lastIndex=0,s.test(e)?'"'+e.replace(s,(function(e){var a=t[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function c(o,s){var t,p,l,u,m,d=e,f=s[o],x=null!=f&&(f instanceof n||n.isBigNumber(f));switch(f&&"object"==typeof f&&"function"==typeof f.toJSON&&(f=f.toJSON(o)),"function"==typeof i&&(f=i.call(s,o,f)),typeof f){case"string":return x?f:r(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":case"bigint":return String(f);case"object":if(!f)return"null";if(e+=a,m=[],"[object Array]"===Object.prototype.toString.apply(f)){for(u=f.length,t=0;t{e.exports=i(3765)},983:(e,a,i)=>{"use strict";var n,o,s,t=i(5234),r=i(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),i=a&&t[a[1].toLowerCase()];return i&&i.charset?i.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=l,a.charsets={lookup:l},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var i=-1===e.indexOf("/")?a.lookup(e):e;if(!i)return!1;if(-1===i.indexOf("charset")){var n=a.charset(i);n&&(i+="; charset="+n.toLowerCase())}return i},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var i=c.exec(e),n=i&&a.extensions[i[1].toLowerCase()];return!(!n||!n.length)&&n[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var i=r("x."+e).toLowerCase().substr(1);return i&&a.types[i]||!1},a.types=Object.create(null),n=a.extensions,o=a.types,s=["nginx","apache",void 0,"iana"],Object.keys(t).forEach((function(e){var a=t[e],i=a.extensions;if(i&&i.length){n[e]=i;for(var r=0;rl||p===l&&"application/"===o[c].substr(0,12)))continue}o[c]=e}}}))},2130:(e,a,i)=>{"use strict";const n=i(2037),o=i(6560),s=process.env;let t;function r(e){const a=function(e){if(!1===t)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!e.isTTY&&!0!==t)return 0;const a=t?1:0;if("win32"===process.platform){const e=n.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in s)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in s))||"codeship"===s.CI_NAME?1:a;if("TEAMCITY_VERSION"in s)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if("truecolor"===s.COLORTERM)return 3;if("TERM_PROGRAM"in s){const e=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:(s.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}o("no-color")||o("no-colors")||o("color=false")?t=!1:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(t=!0),"FORCE_COLOR"in s&&(t=0===s.FORCE_COLOR.length||0!==parseInt(s.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,i){var n,o,s;s=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var i=e.shift();e[0]=i+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n0&&(o=o.replace(/^[\/]+/,"")),o=n0?"?":"")+t.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=s():void 0===(o="function"==typeof(n=s)?n.call(a,i,a,e):n)||(e.exports=o)},9491:e=>{"use strict";e.exports=require("assert")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},4147:e=>{"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"5.0.1","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},a={},i=function i(n){var o=a[n];if(void 0!==o)return o.exports;var s=a[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}(8321),i=i.default;var e,a,i})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxRQUFRLGlDQ0F6QnBtQyxFQUFPRCxRQUFVcW1DLFFBQVEsOEJDQXpCcG1DLEVBQU9ELFFBQVVxbUMsUUFBUSw4QkNBekJwbUMsRUFBT0QsUUFBVXFtQyxRQUFRLCtCQ0F6QnBtQyxFQUFPRCxRQUFVcW1DLFFBQVEsOHJsSkNDckJDLEVBQTJCLEdDRTNCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUJyL0IsSUFBakJzL0IsRUFDSCxPQUFPQSxFQUFhMW1DLFFBR3JCLElBQUlDLEVBQVNxbUMsRUFBeUJHLEdBQVksQ0FHakR6bUMsUUFBUyxJQU9WLE9BSEEybUMsRUFBb0JGLEdBQVVyMUIsS0FBS25SLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVN3bUMsR0FHcEV2bUMsRUFBT0QsUUNsQld3bUMsQ0FBb0Isa0J0Rk85QyxNcUZUSUYsRUNFQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3BhcmFsbGVsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2Vudi9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvY2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvcmVxdWVzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc051bGwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL3NldFZhbHVlSWZOb3ROaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL3BvcHVsYXRlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImFzc2VydFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwib3NcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidHR5XCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXJsXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXRpbFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInpsaWJcIiIsIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm1haWxqZXRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibWFpbGpldFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbnZhciBzdXBwb3J0ZWRQcm90b2NvbHMgPSBbICdodHRwOicsICdodHRwczonLCAnZmlsZTonIF07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh2YWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICByZWplY3RQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciBkYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgaGVhZGVyTmFtZXMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gc3RvcmVMb3dlck5hbWUobmFtZSkge1xuICAgICAgaGVhZGVyTmFtZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWU7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCd1c2VyLWFnZW50JyBpbiBoZWFkZXJOYW1lcykge1xuICAgICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgICBpZiAoIWhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV0pIHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV07XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIHVzZSBzcGVjaWZpZWQgdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICAgIGhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9ICdheGlvcy8nICsgVkVSU0lPTjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9mb3JtLWRhdGEgYXBpXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIGRhdGEuZ2V0SGVhZGVycygpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uLi5cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEgJiYgZGF0YS5sZW5ndGggPiBjb25maWcubWF4Qm9keUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBpZiAoIWhlYWRlck5hbWVzWydjb250ZW50LWxlbmd0aCddKSB7XG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgdmFyIGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZShmdWxsUGF0aCk7XG4gICAgdmFyIHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGggJiYgcGFyc2VkLmF1dGgpIHtcbiAgICAgIHZhciB1cmxBdXRoID0gcGFyc2VkLmF1dGguc3BsaXQoJzonKTtcbiAgICAgIHZhciB1cmxVc2VybmFtZSA9IHVybEF1dGhbMF0gfHwgJyc7XG4gICAgICB2YXIgdXJsUGFzc3dvcmQgPSB1cmxBdXRoWzFdIHx8ICcnO1xuICAgICAgYXV0aCA9IHVybFVzZXJuYW1lICsgJzonICsgdXJsUGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKGF1dGggJiYgaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbikge1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbl07XG4gICAgfVxuXG4gICAgdmFyIGlzSHR0cHNSZXF1ZXN0ID0gaXNIdHRwcy50ZXN0KHByb3RvY29sKTtcbiAgICB2YXIgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcblxuICAgIHRyeSB7XG4gICAgICBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB2YXIgY3VzdG9tRXJyID0gbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIGN1c3RvbUVyci5jb25maWcgPSBjb25maWc7XG4gICAgICBjdXN0b21FcnIudXJsID0gY29uZmlnLnVybDtcbiAgICAgIGN1c3RvbUVyci5leGlzdHMgPSB0cnVlO1xuICAgICAgcmVqZWN0KGN1c3RvbUVycik7XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyksXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhZ2VudHM6IHsgaHR0cDogY29uZmlnLmh0dHBBZ2VudCwgaHR0cHM6IGNvbmZpZy5odHRwc0FnZW50IH0sXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHZhciBub1Byb3h5RW52ID0gcHJvY2Vzcy5lbnYubm9fcHJveHkgfHwgcHJvY2Vzcy5lbnYuTk9fUFJPWFk7XG4gICAgICAgIHZhciBzaG91bGRQcm94eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKG5vUHJveHlFbnYpIHtcbiAgICAgICAgICB2YXIgbm9Qcm94eSA9IG5vUHJveHlFbnYuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzaG91bGRQcm94eSA9ICFub1Byb3h5LnNvbWUoZnVuY3Rpb24gcHJveHlNYXRjaChwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghcHJveHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnQgPT09ICcqJykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnRbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgIHBhcnNlZC5ob3N0bmFtZS5zdWJzdHIocGFyc2VkLmhvc3RuYW1lLmxlbmd0aCAtIHByb3h5RWxlbWVudC5sZW5ndGgpID09PSBwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQuaG9zdG5hbWUgPT09IHByb3h5RWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRQcm94eSkge1xuICAgICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgICAgaG9zdDogcGFyc2VkUHJveHlVcmwuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwYXJzZWRQcm94eVVybC5wb3J0LFxuICAgICAgICAgICAgcHJvdG9jb2w6IHBhcnNlZFByb3h5VXJsLnByb3RvY29sXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChwYXJzZWRQcm94eVVybC5hdXRoKSB7XG4gICAgICAgICAgICB2YXIgcHJveHlVcmxBdXRoID0gcGFyc2VkUHJveHlVcmwuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IHByb3h5VXJsQXV0aFswXSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHByb3h5VXJsQXV0aFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJyk7XG4gICAgICBzZXRQcm94eShvcHRpb25zLCBwcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgdmFyIGlzSHR0cHNQcm94eSA9IGlzSHR0cHNSZXF1ZXN0ICYmIChwcm94eSA/IGlzSHR0cHMudGVzdChwcm94eS5wcm90b2NvbCkgOiB0cnVlKTtcbiAgICBpZiAoY29uZmlnLnRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0ID0gY29uZmlnLnRyYW5zcG9ydDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMgPT09IDApIHtcbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNQcm94eSA/IGh0dHBzIDogaHR0cDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gY29uZmlnLmJlZm9yZVJlZGlyZWN0O1xuICAgICAgfVxuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Qm9keUxlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcikge1xuICAgICAgb3B0aW9ucy5pbnNlY3VyZUhUVFBQYXJzZXIgPSBjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICB2YXIgdG90YWxSZXNwb25zZUJ5dGVzID0gMDtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdG95KCkgZW1pdCBhYm9ydGVkIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHJlamVjdCgpIG9uIE5vZGUuanMgdjE2XG4gICAgICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdhYm9ydGVkJywgZnVuY3Rpb24gaGFuZGxlclN0cmVhbUFib3J0ZWQoKSB7XG4gICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlQnVmZmVyLmxlbmd0aCA9PT0gMSA/IHJlc3BvbnNlQnVmZmVyWzBdIDogQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcoY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcpO1xuICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscy5zdHJpcEJPTShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgdmFyIHRpbWVvdXQgPSBwYXJzZUludChjb25maWcudGltZW91dCwgMTApO1xuXG4gICAgICBpZiAoaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dCh0aW1lb3V0LCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ3RpbWVvdXQgb2YgJyArIHRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLFxuICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgZGF0YS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIGNvbmZpZywgbnVsbCwgcmVxKSk7XG4gICAgICB9KS5waXBlKHJlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuL3RyYW5zaXRpb25hbCcpO1xudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB2YXIgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXTtcblxuICAgIHZhciBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgKGlzT2JqZWN0UGF5bG9hZCAmJiBjb250ZW50VHlwZSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGEnKSkge1xuICAgICAgdmFyIF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuICAgICAgcmV0dXJuIHRvRm9ybURhdGEoaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSwgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdFBheWxvYWQgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiByZXF1aXJlKCcuL2Vudi9Gb3JtRGF0YScpXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjcuMlwiXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIHZhciBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgRm9ybURhdGEoKTtcblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGQoZGF0YSwgcGFyZW50S2V5KSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoZGF0YSkgfHwgdXRpbHMuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2YoZGF0YSkgIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhcmVudEtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZGF0YSk7XG5cbiAgICAgIHV0aWxzLmZvckVhY2goZGF0YSwgZnVuY3Rpb24gZWFjaCh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgIHZhciBhcnI7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmICFwYXJlbnRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgIXV0aWxzLmlzVW5kZWZpbmVkKGVsKSAmJiBmb3JtRGF0YS5hcHBlbmQoZnVsbEtleSwgY29udmVydFZhbHVlKGVsKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICB9KTtcblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIGNvbnZlcnRWYWx1ZShkYXRhKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLi9lbnYvZGF0YScpLnZlcnNpb247XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGtpbmRPZiA9IChmdW5jdGlvbihjYWNoZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmZ1bmN0aW9uIGtpbmRPZlRlc3QodHlwZSkge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gaXNLaW5kT2YodGhpbmcpIHtcbiAgICByZXR1cm4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHRoaW5nKSB7XG4gIHZhciBwYXR0ZXJuID0gJ1tvYmplY3QgRm9ybURhdGFdJztcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgdG9TdHJpbmcuY2FsbCh0aGluZykgPT09IHBhdHRlcm4gfHxcbiAgICAoaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gcGF0dGVybilcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdHMoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZmlsdGVyXVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiB0b0ZsYXRPYmplY3Qoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIpIHtcbiAgdmFyIHByb3BzO1xuICB2YXIgaTtcbiAgdmFyIHByb3A7XG4gIHZhciBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICghbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qXG4gKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICB2YXIgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh0aGluZykge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgdmFyIGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmIChpc1VuZGVmaW5lZChpKSkgcmV0dXJuIG51bGw7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBpc1R5cGVkQXJyYXkgPSAoZnVuY3Rpb24oVHlwZWRBcnJheSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTSxcbiAgaW5oZXJpdHM6IGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3Q6IHRvRmxhdE9iamVjdCxcbiAga2luZE9mOiBraW5kT2YsXG4gIGtpbmRPZlRlc3Q6IGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoOiBlbmRzV2l0aCxcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3Q6IGlzRmlsZUxpc3Rcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG5pbXBvcnQge1xuICBpc1B1cmVPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG59IGZyb20gJ0B1dGlscy9pbmRleCc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IElDbGllbnRQYXJhbXMgfSBmcm9tICcuL0lDbGllbnQnO1xuaW1wb3J0IHsgSVJlcXVlc3RDb25maWcsIElSZXF1ZXN0T3B0aW9ucywgVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyB9IGZyb20gJy4uL3JlcXVlc3QvSVJlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBUQ2xpZW50Q29ubmVjdFBhcmFtcyA9IFBpY2s8SUNsaWVudFBhcmFtcywgJ2NvbmZpZycgfCAnb3B0aW9ucyc+O1xuXG5jbGFzcyBDbGllbnQge1xuICBwcml2YXRlIHZlcnNpb24hOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25maWchOiBJUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogSVJlcXVlc3RPcHRpb25zO1xuXG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVNlY3JldD86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXQodGhpcy5jbG9uZVBhcmFtcyhwYXJhbXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWNrYWdlVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldEFQSUtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJU2VjcmV0KCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlY3JldDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkdldCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcG9zdChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlB1dCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuRGVsZXRlLCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdChwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IElDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZWRQYXJhbXMgPSB7IC4uLnBhcmFtcyB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb25maWcpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5jb25maWcgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5jb25maWcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMub3B0aW9ucykge1xuICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5vcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5ID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZmlnKGN1c3RvbUNvbmZpZzogUGFydGlhbDxJUmVxdWVzdENvbmZpZz4gfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21Db25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY3VzdG9tQ29uZmlnXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uQ2xpZW50LmNvbmZpZyB9O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdob3N0JywgY3VzdG9tQ29uZmlnLmhvc3QpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdvdXRwdXQnLCBjdXN0b21Db25maWcub3V0cHV0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAndmVyc2lvbicsIGN1c3RvbUNvbmZpZy52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogVENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaUtleSwgYXBpU2VjcmV0LCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNtc0Nvbm5lY3QoYXBpVG9rZW46IHN0cmluZywgcGFyYW1zPzogVENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaVRva2VuLCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZzogUmVhZG9ubHk8SVJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbn1cblxuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBzZXRWYWx1ZUlmTm90TmlsIH0gZnJvbSAnQHV0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJ0BjdXN0b20vdHlwZXMnO1xuaW1wb3J0IHsgSUFQSUxvY2FsUmVzcG9uc2UsIElBUElSZXNwb25zZSB9IGZyb20gJ0BtYWlsamV0L3R5cGVzL2FwaS9SZXNwb25zZSc7XG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9IdHRwTWV0aG9kcyc7XG5pbXBvcnQge1xuICBJUmVxdWVzdENvbmZpZyxcbiAgVFJlcXVlc3REYXRhLFxuICBUUmVxdWVzdFBhcmFtcyxcbiAgVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgVFJlcXVlc3RBeGlvc0NvbmZpZyxcbiAgVFN1YlBhdGgsXG59IGZyb20gJy4vSVJlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IENsaWVudCBmcm9tICcuLi9jbGllbnQnO1xuLypvdGhlciovXG5cbnR5cGUgVFVua25vd25SZWMgPSBUT2JqZWN0LlRVbmtub3duUmVjXG5cbmNvbnN0IEpTT05iID0gSlNPTkJpZ0ludCh7IHN0b3JlQXNTdHJpbmc6IHRydWUgfSk7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogSHR0cE1ldGhvZHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPElSZXF1ZXN0Q29uZmlnPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc3ViUGF0aDogVFN1YlBhdGg7XG4gIHByaXZhdGUgYWN0aW9uUGF0aDogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHJlc291cmNlOiBzdHJpbmcsXG4gICAgY29uZmlnPzogVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKCEoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImNsaWVudFwiIG11c3QgYmUgaW5zdGFuY2Ugb2YgQ2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEh0dHBNZXRob2RzKS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibWV0aG9kXCIgbXVzdCBiZSBvbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZHM6IGdldCwgcG9zdCwgcHV0LCBkZWxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInJlc291cmNlXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMudXJsID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG51bGw7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBgbWFpbGpldC1hcGktdjMtbm9kZWpzLyR7dGhpcy5jbGllbnQuZ2V0UGFja2FnZVZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlUb2tlbjogdGhpcy5jbGllbnQuZ2V0QVBJVG9rZW4oKSxcbiAgICAgIGFwaUtleTogdGhpcy5jbGllbnQuZ2V0QVBJS2V5KCksXG4gICAgICBhcGlTZWNyZXQ6IHRoaXMuY2xpZW50LmdldEFQSVNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidXJsXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3RleHQ6cGxhaW4nKSA+IC0xXG4gICAgICA/ICd0ZXh0L3BsYWluJ1xuICAgICAgOiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3RCb2R5KGRhdGE6IFRSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiBbXG4gICAgICBIdHRwTWV0aG9kcy5QdXQsXG4gICAgICBIdHRwTWV0aG9kcy5Qb3N0LFxuICAgICAgSHR0cE1ldGhvZHMuRGVsZXRlLFxuICAgIF0uaW5jbHVkZXModGhpcy5tZXRob2QpID8gZGF0YSA6IHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bGxVcmwoKSB7XG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcuaG9zdCA/PyBjbGllbnRDb25maWcuaG9zdDtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5jb25maWcudmVyc2lvbiA/PyBjbGllbnRDb25maWcudmVyc2lvbjtcblxuICAgIHJldHVybiB1cmxKb2luKFJlcXVlc3QucHJvdG9jb2wsIGhvc3QsIHZlcnNpb24sIHRoaXMuc3ViUGF0aCwgdGhpcy51cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YlBhdGgoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY29uc3QgaXNDb250YWN0TGlzdFdpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnY29udGFjdHNsaXN0JyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgY29uc3QgaXNCYXRjaEpvYldpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnYmF0Y2hqb2InICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcblxuICAgICAgcmV0dXJuIChpc0NvbnRhY3RMaXN0V2l0aENTViB8fCBpc0JhdGNoSm9iV2l0aENTVikgPyAnREFUQScgOiB0aGlzLnN1YlBhdGg7XG4gICAgfVxuICAgIGNvbnN0IGlzU2VuZFJlc291cmNlID0gdGhpcy5yZXNvdXJjZSA9PT0gJ3NlbmQnO1xuICAgIGNvbnN0IHJlc291cmNlQ29udGFpblNNUyA9IHRoaXMucmVzb3VyY2UuaW5kZXhPZignc21zJykgPiAtMTtcblxuICAgIHJldHVybiAoIWlzU2VuZFJlc291cmNlICYmICFyZXNvdXJjZUNvbnRhaW5TTVMpID8gJ1JFU1QnIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXF1ZXN0KHVybDogc3RyaW5nLCBkYXRhOiBUUmVxdWVzdERhdGEsIHBhcmFtczogVFJlcXVlc3RQYXJhbXMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MjcmVxdWVzdC1jb25maWdcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnOiBUUmVxdWVzdEF4aW9zQ29uZmlnID0ge1xuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgZGF0YTogdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKSxcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiB0aGlzLmdldFVzZXJBZ2VudCgpLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogdGhpcy5nZXRDb250ZW50VHlwZSh1cmwpLFxuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybVJlc3BvbnNlKHJlc3BvbnNlRGF0YTogdW5rbm93bikge1xuICAgICAgICBjb25zdCBkYXRhSXNTdHJpbmcgPSB0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJztcbiAgICAgICAgY29uc3QgaXNKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIGRhdGFJc1N0cmluZyAmJiBpc0pTT05SZXF1ZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gUmVxdWVzdC5wYXJzZVRvSlNPTmIocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGE7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBCUk9XU0VSIFNJREVcbiAgICBpZiAoUmVxdWVzdC5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydYLVVzZXItQWdlbnQnXSA9IHJlcXVlc3RDb25maWcuaGVhZGVyc1snVXNlci1BZ2VudCddO1xuICAgIH1cblxuICAgIC8vIEFVVEhcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKTtcblxuICAgIGlmIChjcmVkZW50aWFscy5hcGlUb2tlbikge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y3JlZGVudGlhbHMuYXBpVG9rZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdENvbmZpZy5hdXRoID0ge1xuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLmFwaVNlY3JldCBhcyBzdHJpbmcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9QVElPTlNcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gdGhpcy5jbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgLy8gMS4gVGltZW91dFxuICAgIGlmIChjbGllbnRPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcudGltZW91dCA9IGNsaWVudE9wdGlvbnMudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyAyLiBQcm94eVxuICAgIGlmIChjbGllbnRPcHRpb25zLnByb3h5KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnByb3h5ID0gY2xpZW50T3B0aW9ucy5wcm94eTtcbiAgICB9XG5cbiAgICAvLyAzLiBIZWFkZXJzXG4gICAgaWYgKGNsaWVudE9wdGlvbnMuaGVhZGVycyAmJiBPYmplY3Qua2V5cyhjbGllbnRPcHRpb25zLmhlYWRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ucmVxdWVzdENvbmZpZy5oZWFkZXJzLFxuICAgICAgICAuLi5jbGllbnRPcHRpb25zLmhlYWRlcnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDQuIE91dHB1dFxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuY29uZmlnLm91dHB1dCA/PyBjbGllbnRDb25maWcub3V0cHV0O1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucmVzcG9uc2VUeXBlID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDUuIE1heCByZXF1ZXN0IGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Qm9keUxlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA2LiBNYXggcmVzcG9uc2UgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhDb250ZW50TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFzZVVSTChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVybCA9IGJhc2VVcmwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidmFsdWVcIiBtdXN0IGJlIHN0cmluZyBvciBudW1iZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJuYW1lXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvblBhdGggPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY2FzZSAnY3N2ZGF0YSc6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3N2ZXJyb3InOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZlcnJvci90ZXh0OmNzdic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHRoaXMuYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGE+KFxuICAgIGRhdGE/OiBUUmVxdWVzdERhdGEsXG4gICAgcGFyYW1zPzogVFJlcXVlc3RQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiB0cnVlLFxuICApOiBQcm9taXNlPElBUElSZXNwb25zZTxUQm9keT4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGEsIFRQYXJhbXMgZXh0ZW5kcyBUVW5rbm93blJlYz4oXG4gICAgZGF0YT86IFRCb2R5LFxuICAgIHBhcmFtcz86IFRQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiBmYWxzZSxcbiAgKTogUHJvbWlzZTxJQVBJTG9jYWxSZXNwb25zZTxUQm9keSwgVFBhcmFtcz4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VEJvZHkgZXh0ZW5kcyBUUmVxdWVzdERhdGEsIFRQYXJhbXMgZXh0ZW5kcyBUVW5rbm93blJlYz4oXG4gICAgZGF0YTogVFJlcXVlc3REYXRhIHwgVEJvZHkgPSB7fSxcbiAgICBwYXJhbXM6IFRSZXF1ZXN0UGFyYW1zIHwgVFBhcmFtcyA9IHt9LFxuICAgIHBlcmZvcm1BUElDYWxsID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxJQVBJUmVzcG9uc2U8VEJvZHk+IHwgSUFQSUxvY2FsUmVzcG9uc2U8VEJvZHksIFRQYXJhbXM+PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEZ1bGxVcmwoKTtcbiAgICB0aGlzLnNldEJhc2VVUkwodGhpcy5yZXNvdXJjZSk7XG5cbiAgICBpZiAoIXBlcmZvcm1BUElDYWxsKSB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB1cmwsXG4gICAgICB9IGFzIElBUElMb2NhbFJlc3BvbnNlPFRCb2R5LCBUUGFyYW1zPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KHVybCwgZGF0YSwgcGFyYW1zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoKTtcblxuICAgICAgICBlcnJvci5jb2RlID0gZXJyLmNvZGU7XG4gICAgICAgIGVycm9yLmNvbmZpZyA9IGVyci5jb25maWc7XG5cbiAgICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgIH0gPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBzdGF0dXM7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBib2R5Py5FcnJvck1lc3NhZ2UgPz8gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBTdGF0dXMgQ29kZTogXCIke2Vycm9yLnN0YXR1c0NvZGV9XCIgTWVzc2FnZTogXCIke2Vycm9yTWVzc2FnZX1cImA7XG5cbiAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2VuZC1pbi1idWxrXG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGJvZHkuTWVzc2FnZXM/LlswXT8uRXJyb3JzPy5bMF0/LkVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVsbE1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYDtcXG4ke2Z1bGxNZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHYzLjEgY2FzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2FuZGJveC1tb2RlXG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JNZXNzYWdlJywgYm9keS5FcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yQ29kZScsIGJvZHkuRXJyb3JDb2RlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvcklkZW50aWZpZXInLCBib2R5LkVycm9ySWRlbnRpZmllcik7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JSZWxhdGVkVG8nLCBib2R5LkVycm9yUmVsYXRlZFRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IG51bGw7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogRXJyb3IgQ29kZTogXCIke2Vycm9yLmNvZGV9XCIgTWVzc2FnZTogXCIke2Vyci5tZXNzYWdlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm90b2NvbCA9ICdodHRwczovLycgYXMgY29uc3Q7XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZVRvSlNPTmIodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInRleHRcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGxldCBib2R5O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gSlNPTmIucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYm9keSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcblxuZXhwb3J0IHtcbiAgaXNOaWwsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTmlsKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1B1cmVPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1B1cmVPYmplY3Q7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICdAY3VzdG9tL3R5cGVzJztcbi8qdXRpbHMqL1xuaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVJZk5vdE5pbChcbiAgdGFyZ2V0T2JqZWN0OiBUT2JqZWN0LlRVbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBBTFBIQUJFVCA9IHY7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgaW52YWxpZDogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE9iamVjdCBleHBlY3RlZDoge3Z9J1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkOiAnICsgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgREVDSU1BTF9QTEFDRVM6IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgIFJPVU5ESU5HX01PREU6IFJPVU5ESU5HX01PREUsXHJcbiAgICAgICAgRVhQT05FTlRJQUxfQVQ6IFtUT19FWFBfTkVHLCBUT19FWFBfUE9TXSxcclxuICAgICAgICBSQU5HRTogW01JTl9FWFAsIE1BWF9FWFBdLFxyXG4gICAgICAgIENSWVBUTzogQ1JZUFRPLFxyXG4gICAgICAgIE1PRFVMT19NT0RFOiBNT0RVTE9fTU9ERSxcclxuICAgICAgICBQT1dfUFJFQ0lTSU9OOiBQT1dfUFJFQ0lTSU9OLFxyXG4gICAgICAgIEZPUk1BVDogRk9STUFULFxyXG4gICAgICAgIEFMUEhBQkVUOiBBTFBIQUJFVFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHYgaXMgYSBCaWdOdW1iZXIgaW5zdGFuY2UsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogSWYgQmlnTnVtYmVyLkRFQlVHIGlzIHRydWUsIHRocm93IGlmIGEgQmlnTnVtYmVyIGluc3RhbmNlIGlzIG5vdCB3ZWxsLWZvcm1lZC5cclxuICAgICAqXHJcbiAgICAgKiB2IHthbnl9XHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEludmFsaWQgQmlnTnVtYmVyOiB7dn0nXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5pc0JpZ051bWJlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIGlmICghdiB8fCB2Ll9pc0JpZ051bWJlciAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoIUJpZ051bWJlci5ERUJVRykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICB2YXIgaSwgbixcclxuICAgICAgICBjID0gdi5jLFxyXG4gICAgICAgIGUgPSB2LmUsXHJcbiAgICAgICAgcyA9IHYucztcclxuXHJcbiAgICAgIG91dDogaWYgKHt9LnRvU3RyaW5nLmNhbGwoYykgPT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cclxuICAgICAgICBpZiAoKHMgPT09IDEgfHwgcyA9PT0gLTEpICYmIGUgPj0gLU1BWCAmJiBlIDw9IE1BWCAmJiBlID09PSBtYXRoZmxvb3IoZSkpIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyB6ZXJvLCB0aGUgQmlnTnVtYmVyIHZhbHVlIG11c3QgYmUgemVyby5cclxuICAgICAgICAgIGlmIChjWzBdID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChlID09PSAwICYmIGMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgY1swXSBzaG91bGQgaGF2ZSwgYmFzZWQgb24gdGhlIGV4cG9uZW50LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChpIDwgMSkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICAgICAgLy9pZiAoTWF0aC5jZWlsKE1hdGgubG9nKGNbMF0gKyAxKSAvIE1hdGguTE4xMCkgPT0gaSkge1xyXG4gICAgICAgICAgaWYgKFN0cmluZyhjWzBdKS5sZW5ndGggPT0gaSkge1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBuID0gY1tpXTtcclxuICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBCQVNFIHx8IG4gIT09IG1hdGhmbG9vcihuKSkgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYXN0IGVsZW1lbnQgY2Fubm90IGJlIHplcm8sIHVubGVzcyBpdCBpcyB0aGUgb25seSBlbGVtZW50LlxyXG4gICAgICAgICAgICBpZiAobiAhPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5maW5pdHkvTmFOXHJcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gbnVsbCAmJiBlID09PSBudWxsICYmIChzID09PSBudWxsIHx8IHMgPT09IDEgfHwgcyA9PT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0ludmFsaWQgQmlnTnVtYmVyOiAnICsgdik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5tYXhpbXVtID0gQmlnTnVtYmVyLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5sdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5ndCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG1ldGhvZCkge1xyXG4gICAgICB2YXIgbixcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICBtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG5cclxuICAgICAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgICAgICBpZiAoIW4ucykge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsKG0sIG4pKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgciA9IHIgfHwgc2QgPCAwIHx8XHJcblxyXG4gICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gIG4gJSBwb3dzMTBbZCAtIGogLSAxXSAgcmV0dXJucyBhbGwgZGlnaXRzIG9mIG4gdG8gdGhlIHJpZ2h0XHJcbiAgICAgICAgICAvLyBvZiB0aGUgZGlnaXQgYXQgaiwgZS5nLiBpZiBuIGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbiBnaXZlcyA3MTQuXHJcbiAgICAgICAgICAgeGNbbmkgKyAxXSAhPSBudWxsIHx8IChqIDwgMCA/IG4gOiBuICUgcG93czEwW2QgLSBqIC0gMV0pO1xyXG5cclxuICAgICAgICAgIHIgPSBybSA8IDRcclxuICAgICAgICAgICA/IChyZCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC5cclxuICAgICAgICAgICAgKChpID4gMCA/IGogPiAwID8gbiAvIHBvd3MxMFtkIC0gal0gOiAwIDogeGNbbmkgLSAxXSkgJSAxMCkgJiAxIHx8XHJcbiAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgICAgaWYgKHNkIDwgMSB8fCAheGNbMF0pIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgc2QgdG8gZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHBvd3MxMFsoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFXTtcclxuICAgICAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHguZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgZGlnaXRzLlxyXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaTtcclxuICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIG5pLS07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaSArIDE7XHJcbiAgICAgICAgICAgIGsgPSBwb3dzMTBbTE9HX0JBU0UgLSBpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEUuZy4gNTY3MDAgYmVjb21lcyA1NjAwMCBpZiA3IGlzIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4uXHJcbiAgICAgICAgICAgIHhjW25pXSA9IGogPiAwID8gbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGpdICUgcG93czEwW2pdKSAqIGsgOiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICAgICAgaWYgKG5pID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4Y1swXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSB4Y1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuICAgICAgICAgICAgICAgIGogPSB4Y1swXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrID0gMTsgaiA+PSAxMDsgaiAvPSAxMCwgaysrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gaykge1xyXG4gICAgICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHhjWzBdID09IEJBU0UpIHhjWzBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeGNbbmldICs9IGs7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGNbbmldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgeGNbbmktLV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChpID0geGMubGVuZ3RoOyB4Y1stLWldID09PSAwOyB4Yy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz8gSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz8gWmVyby5cclxuICAgICAgICB9IGVsc2UgaWYgKHguZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB2YWx1ZU9mKG4pIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcblxyXG4gICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgZSlcclxuICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gUFJPVE9UWVBFL0lOU1RBTkNFIE1FVEhPRFNcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAoeC5zIDwgMCkgeC5zID0gMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuXHJcbiAgICAgKiAgIDEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAtMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIDAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLFxyXG4gICAgICogICBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICovXHJcbiAgICBQLmNvbXBhcmVkVG8gPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBkcCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGVcclxuICAgICAqIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIGRwIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2YgZHAgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzOiBpbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgbiA9ICgodiA9IGMubGVuZ3RoIC0gMSkgLSBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkpICogTE9HX0JBU0U7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IG51bWJlci5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcbiAgICAgIGlmIChuIDwgMCkgbiA9IDA7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAvIDAgPSBJXHJcbiAgICAgKiAgbiAvIE4gPSBOXHJcbiAgICAgKiAgbiAvIEkgPSAwXHJcbiAgICAgKiAgMCAvIG4gPSAwXHJcbiAgICAgKiAgMCAvIDAgPSBOXHJcbiAgICAgKiAgMCAvIE4gPSBOXHJcbiAgICAgKiAgMCAvIEkgPSAwXHJcbiAgICAgKiAgTiAvIG4gPSBOXHJcbiAgICAgKiAgTiAvIDAgPSBOXHJcbiAgICAgKiAgTiAvIE4gPSBOXHJcbiAgICAgKiAgTiAvIEkgPSBOXHJcbiAgICAgKiAgSSAvIG4gPSBJXHJcbiAgICAgKiAgSSAvIDAgPSBJXHJcbiAgICAgKiAgSSAvIE4gPSBOXHJcbiAgICAgKiAgSSAvIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZEJ5ID0gUC5kaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIERFQ0lNQUxfUExBQ0VTLCBST1VORElOR19NT0RFKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciBieSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuaWRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgMCwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBleHBvbmVudGlhdGVkIGJ5IG4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbSBpcyBwcmVzZW50LCByZXR1cm4gdGhlIHJlc3VsdCBtb2R1bG8gbS5cclxuICAgICAqIElmIG4gaXMgbmVnYXRpdmUgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICogSWYgUE9XX1BSRUNJU0lPTiBpcyBub24temVybyBhbmQgbSBpcyBub3QgcHJlc2VudCwgcm91bmQgdG8gUE9XX1BSRUNJU0lPTiB1c2luZyBST1VORElOR19NT0RFLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2R1bGFyIHBvd2VyIG9wZXJhdGlvbiB3b3JrcyBlZmZpY2llbnRseSB3aGVuIHgsIG4sIGFuZCBtIGFyZSBpbnRlZ2Vycywgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHguZXhwb25lbnRpYXRlZEJ5KG4pLm1vZHVsbyhtKSB3aXRoIGEgUE9XX1BSRUNJU0lPTiBvZiAwLlxyXG4gICAgICpcclxuICAgICAqIG4ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgZXhwb25lbnQuIEFuIGludGVnZXIuXHJcbiAgICAgKiBbbV0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgbW9kdWx1cy5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gRXhwb25lbnQgbm90IGFuIGludGVnZXI6IHtufSdcclxuICAgICAqL1xyXG4gICAgUC5leHBvbmVudGlhdGVkQnkgPSBQLnBvdyA9IGZ1bmN0aW9uIChuLCBtKSB7XHJcbiAgICAgIHZhciBoYWxmLCBpc01vZEV4cCwgaSwgaywgbW9yZSwgbklzQmlnLCBuSXNOZWcsIG5Jc09kZCwgeSxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG5cclxuICAgICAgLy8gQWxsb3cgTmFOIGFuZCDCsUluZmluaXR5LCBidXQgbm90IG90aGVyIG5vbi1pbnRlZ2Vycy5cclxuICAgICAgaWYgKG4uYyAmJiAhbi5pc0ludGVnZXIoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICcgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG0gIT0gbnVsbCkgbSA9IG5ldyBCaWdOdW1iZXIobSk7XHJcblxyXG4gICAgICAvLyBFeHBvbmVudCBvZiBNQVhfU0FGRV9JTlRFR0VSIGlzIDE1LlxyXG4gICAgICBuSXNCaWcgPSBuLmUgPiAxNDtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgTmFOLCDCsUluZmluaXR5LCDCsTAgb3IgwrExLCBvciBuIGlzIMKxSW5maW5pdHksIE5hTiBvciDCsTAuXHJcbiAgICAgIGlmICgheC5jIHx8ICF4LmNbMF0gfHwgeC5jWzBdID09IDEgJiYgIXguZSAmJiB4LmMubGVuZ3RoID09IDEgfHwgIW4uYyB8fCAhbi5jWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YgcG93IHdoZW4geCBpcyBuZWdhdGl2ZSBkZXBlbmRzIG9uIHRoZSBldmVubmVzcyBvZiBuLlxyXG4gICAgICAgIC8vIElmICtuIG92ZXJmbG93cyB0byDCsUluZmluaXR5LCB0aGUgZXZlbm5lc3Mgb2YgbiB3b3VsZCBiZSBub3QgYmUga25vd24uXHJcbiAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoTWF0aC5wb3coK3ZhbHVlT2YoeCksIG5Jc0JpZyA/IDIgLSBpc09kZChuKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkgdCA9IHhjLCB4YyA9IHljLCB5YyA9IHQsIHkucyA9IC15LnM7XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkgemMgPSB4YywgeGMgPSB5YywgeWMgPSB6YywgaSA9IHhjTCwgeGNMID0geWNMLCB5Y0wgPSBpO1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IHhjTCArIHljTCwgemMgPSBbXTsgaS0tOyB6Yy5wdXNoKDApKTtcclxuXHJcbiAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICBzcXJ0QmFzZSA9IFNRUlRfQkFTRTtcclxuXHJcbiAgICAgIGZvciAoaSA9IHljTDsgLS1pID49IDA7KSB7XHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICAgICAgeWxvID0geWNbaV0gJSBzcXJ0QmFzZTtcclxuICAgICAgICB5aGkgPSB5Y1tpXSAvIHNxcnRCYXNlIHwgMDtcclxuXHJcbiAgICAgICAgZm9yIChrID0geGNMLCBqID0gaSArIGs7IGogPiBpOykge1xyXG4gICAgICAgICAgeGxvID0geGNbLS1rXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgICAgeGhpID0geGNba10gLyBzcXJ0QmFzZSB8IDA7XHJcbiAgICAgICAgICBtID0geWhpICogeGxvICsgeGhpICogeWxvO1xyXG4gICAgICAgICAgeGxvID0geWxvICogeGxvICsgKChtICUgc3FydEJhc2UpICogc3FydEJhc2UpICsgemNbal0gKyBjO1xyXG4gICAgICAgICAgYyA9ICh4bG8gLyBiYXNlIHwgMCkgKyAobSAvIHNxcnRCYXNlIHwgMCkgKyB5aGkgKiB4aGk7XHJcbiAgICAgICAgICB6Y1tqLS1dID0geGxvICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHpjW2pdID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGMpIHtcclxuICAgICAgICArK2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgemMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHpjLCBlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBuZWdhdGVkLFxyXG4gICAgICogaS5lLiBtdWx0aXBsaWVkIGJ5IC0xLlxyXG4gICAgICovXHJcbiAgICBQLm5lZ2F0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgeC5zID0gLXgucyB8fCBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiArIDAgPSBuXHJcbiAgICAgKiAgbiArIE4gPSBOXHJcbiAgICAgKiAgbiArIEkgPSBJXHJcbiAgICAgKiAgMCArIG4gPSBuXHJcbiAgICAgKiAgMCArIDAgPSAwXHJcbiAgICAgKiAgMCArIE4gPSBOXHJcbiAgICAgKiAgMCArIEkgPSBJXHJcbiAgICAgKiAgTiArIG4gPSBOXHJcbiAgICAgKiAgTiArIDAgPSBOXHJcbiAgICAgKiAgTiArIE4gPSBOXHJcbiAgICAgKiAgTiArIEkgPSBOXHJcbiAgICAgKiAgSSArIG4gPSBJXHJcbiAgICAgKiAgSSArIDAgPSBJXHJcbiAgICAgKiAgSSArIE4gPSBOXHJcbiAgICAgKiAgSSArIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcGx1cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5wbHVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBuZXcgQmlnTnVtYmVyKGEgLyAwKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHJldHVybiB5Y1swXSA/IHkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6IGEgKiAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG4gICAgICAgIGlmIChhID4gMCkge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yICg7IGEtLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYSA9IHhjLmxlbmd0aDtcclxuICAgICAgYiA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIFBvaW50IHhjIHRvIHRoZSBsb25nZXIgYXJyYXksIGFuZCBiIHRvIHRoZSBzaG9ydGVyIGxlbmd0aC5cclxuICAgICAgaWYgKGEgLSBiIDwgMCkgdCA9IHljLCB5YyA9IHhjLCB4YyA9IHQsIGIgPSBhO1xyXG5cclxuICAgICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWMubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGMgY2FuIGJlIGlnbm9yZWQuXHJcbiAgICAgIGZvciAoYSA9IDA7IGI7KSB7XHJcbiAgICAgICAgYSA9ICh4Y1stLWJdID0geGNbYl0gKyB5Y1tiXSArIGEpIC8gQkFTRSB8IDA7XHJcbiAgICAgICAgeGNbYl0gPSBCQVNFID09PSB4Y1tiXSA/IDAgOiB4Y1tiXSAlIEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgeGMgPSBbYV0uY29uY2F0KHhjKTtcclxuICAgICAgICArK3llO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwXHJcbiAgICAgIC8vIHllID0gTUFYX0VYUCArIDEgcG9zc2libGVcclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIHNkIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZlxyXG4gICAgICogdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqIElmIHNkIGlzIHRydWUgaW5jbHVkZSBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgc2QgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBzZCB7bnVtYmVyfGJvb2xlYW59IG51bWJlcjogc2lnbmlmaWNhbnQgZGlnaXRzOiBpbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW46IHdoZXRoZXIgdG8gY291bnQgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zOiB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKHNkICE9IG51bGwgJiYgc2QgIT09ICEhc2QpIHtcclxuICAgICAgICBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgc2QsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICB2ID0gYy5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gdiAqIExPR19CQVNFICsgMTtcclxuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkge1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICh2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgbisrKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNkICYmIHguZSArIDEgPiBuKSBuID0geC5lICsgMTtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHNoaWZ0ZWQgYnkgayBwbGFjZXNcclxuICAgICAqIChwb3dlcnMgb2YgMTApLiBTaGlmdCB0byB0aGUgcmlnaHQgaWYgbiA+IDAsIGFuZCB0byB0aGUgbGVmdCBpZiBuIDwgMC5cclxuICAgICAqXHJcbiAgICAgKiBrIHtudW1iZXJ9IEludGVnZXIsIC1NQVhfU0FGRV9JTlRFR0VSIHRvIE1BWF9TQUZFX0lOVEVHRVIgaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7a30nXHJcbiAgICAgKi9cclxuICAgIFAuc2hpZnRlZEJ5ID0gZnVuY3Rpb24gKGspIHtcclxuICAgICAgaW50Q2hlY2soaywgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICByZXR1cm4gdGhpcy50aW1lcygnMWUnICsgayk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIHNxcnQoLW4pID0gIE5cclxuICAgICAqICBzcXJ0KE4pID0gIE5cclxuICAgICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICAgKiAgc3FydChJKSA9ICBJXHJcbiAgICAgKiAgc3FydCgwKSA9ICAwXHJcbiAgICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlcixcclxuICAgICAqIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBtLCBuLCByLCByZXAsIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYyA9IHguYyxcclxuICAgICAgICBzID0geC5zLFxyXG4gICAgICAgIGUgPSB4LmUsXHJcbiAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyArIDQsXHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoJzAuNScpO1xyXG5cclxuICAgICAgLy8gTmVnYXRpdmUvTmFOL0luZmluaXR5L3plcm8/XHJcbiAgICAgIGlmIChzICE9PSAxIHx8ICFjIHx8ICFjWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoIXMgfHwgcyA8IDAgJiYgKCFjIHx8IGNbMF0pID8gTmFOIDogYyA/IHggOiAxIC8gMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICAgIHMgPSBNYXRoLnNxcnQoK3ZhbHVlT2YoeCkpO1xyXG5cclxuICAgICAgLy8gTWF0aC5zcXJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9IGNvZWZmVG9TdHJpbmcoYyk7XHJcbiAgICAgICAgaWYgKChuLmxlbmd0aCArIGUpICUgMiA9PSAwKSBuICs9ICcwJztcclxuICAgICAgICBzID0gTWF0aC5zcXJ0KCtuKTtcclxuICAgICAgICBlID0gYml0Rmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICAgIG4gPSAnNWUnICsgZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihzICsgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgemVyby5cclxuICAgICAgLy8gciBjb3VsZCBiZSB6ZXJvIGlmIE1JTl9FWFAgaXMgY2hhbmdlZCBhZnRlciB0aGUgdGhpcyB2YWx1ZSB3YXMgY3JlYXRlZC5cclxuICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIGRpdmlzaW9uIGJ5IHplcm8gKHgvdCkgYW5kIGhlbmNlIEluZmluaXR5IGJlbG93LCB3aGljaCB3b3VsZCBjYXVzZVxyXG4gICAgICAvLyBjb2VmZlRvU3RyaW5nIHRvIHRocm93LlxyXG4gICAgICBpZiAoci5jWzBdKSB7XHJcbiAgICAgICAgZSA9IHIuZTtcclxuICAgICAgICBzID0gZSArIGRwO1xyXG4gICAgICAgIGlmIChzIDwgMykgcyA9IDA7XHJcblxyXG4gICAgICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgICAgICBmb3IgKDsgOykge1xyXG4gICAgICAgICAgdCA9IHI7XHJcbiAgICAgICAgICByID0gaGFsZi50aW1lcyh0LnBsdXMoZGl2KHgsIHQsIGRwLCAxKSkpO1xyXG5cclxuICAgICAgICAgIGlmIChjb2VmZlRvU3RyaW5nKHQuYykuc2xpY2UoMCwgcykgPT09IChuID0gY29lZmZUb1N0cmluZyhyLmMpKS5zbGljZSgwLCBzKSkge1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG9mIHIgbWF5IGhlcmUgYmUgb25lIGxlc3MgdGhhbiB0aGUgZmluYWwgcmVzdWx0IGV4cG9uZW50LFxyXG4gICAgICAgICAgICAvLyBlLmcgMC4wMDA5OTk5IChlLTQpIC0tPiAwLjAwMSAoZS0zKSwgc28gYWRqdXN0IHMgc28gdGhlIHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgaW5kZXhlZCBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgIGlmIChyLmUgPCBlKSAtLXM7XHJcbiAgICAgICAgICAgIG4gPSBuLnNsaWNlKHMgLSAzLCBzICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIDk5OTkgb3IgNDk5OSAoaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5KSBjb250aW51ZSB0aGVcclxuICAgICAgICAgICAgLy8gaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGVcclxuICAgICAgICAgICAgICAvLyBleGFjdCByZXN1bHQgYXMgdGhlIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICAgICAgcm91bmQodCwgdC5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkcCArPSA0O1xyXG4gICAgICAgICAgICAgIHMgKz0gNDtcclxuICAgICAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgZXhhY3RcclxuICAgICAgICAgICAgICAvLyByZXN1bHQuIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAxKTtcclxuICAgICAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAxLCBST1VORElOR19NT0RFLCBtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBhbmRcclxuICAgICAqIHJvdW5kZWQgdXNpbmcgUk9VTkRJTkdfTU9ERSB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGluZ1xyXG4gICAgICogdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IGFzIHdpdGggSmF2YVNjcmlwdCdzIG51bWJlciB0eXBlLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLFxyXG4gICAgICogYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHAgPSBkcCArIHRoaXMuZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kZWRcclxuICAgICAqIHVzaW5nIHJtIG9yIFJPVU5ESU5HX01PREUgdG8gZHAgZGVjaW1hbCBwbGFjZXMsIGFuZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9wZXJ0aWVzXHJcbiAgICAgKiBvZiB0aGUgZm9ybWF0IG9yIEZPUk1BVCBvYmplY3QgKHNlZSBCaWdOdW1iZXIuc2V0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9ybWF0dGluZyBvYmplY3QgbWF5IGNvbnRhaW4gc29tZSBvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMgc2hvd24gYmVsb3cuXHJcbiAgICAgKlxyXG4gICAgICogRk9STUFUID0ge1xyXG4gICAgICogICBwcmVmaXg6ICcnLFxyXG4gICAgICogICBncm91cFNpemU6IDMsXHJcbiAgICAgKiAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAqICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAqICAgc3VmZml4OiAnJ1xyXG4gICAgICogfTtcclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbZm9ybWF0XSB7b2JqZWN0fSBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZSBGT1JNQVQgcGJqZWN0IGFib3ZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IHtmb3JtYXR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRm9ybWF0ID0gZnVuY3Rpb24gKGRwLCBybSwgZm9ybWF0KSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcclxuICAgICAgICBpZiAoZHAgIT0gbnVsbCAmJiBybSAmJiB0eXBlb2Ygcm0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IHJtO1xyXG4gICAgICAgICAgcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZHAgJiYgdHlwZW9mIGRwID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkcDtcclxuICAgICAgICAgIGRwID0gcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBGT1JNQVQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICcgKyBmb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHIgPSB4LnRvRml4ZWQoZHAsIHJtKTtcclxuXHJcbiAgICAgIGlmICh4LmMpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgIGFyciA9IHN0ci5zcGxpdCgnLicpLFxyXG4gICAgICAgICAgZzEgPSArZm9ybWF0Lmdyb3VwU2l6ZSxcclxuICAgICAgICAgIGcyID0gK2Zvcm1hdC5zZWNvbmRhcnlHcm91cFNpemUsXHJcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IGZvcm1hdC5ncm91cFNlcGFyYXRvciB8fCAnJyxcclxuICAgICAgICAgIGludFBhcnQgPSBhcnJbMF0sXHJcbiAgICAgICAgICBmcmFjdGlvblBhcnQgPSBhcnJbMV0sXHJcbiAgICAgICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgICAgICBpbnREaWdpdHMgPSBpc05lZyA/IGludFBhcnQuc2xpY2UoMSkgOiBpbnRQYXJ0LFxyXG4gICAgICAgICAgbGVuID0gaW50RGlnaXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGcyKSBpID0gZzEsIGcxID0gZzIsIGcyID0gaSwgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgRGVsYXllZFN0cmVhbSA9IHJlcXVpcmUoJ2RlbGF5ZWQtc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tYmluZWRTdHJlYW07XG5mdW5jdGlvbiBDb21iaW5lZFN0cmVhbSgpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAyICogMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW1zID0gdHJ1ZTtcblxuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG59XG51dGlsLmluaGVyaXRzKENvbWJpbmVkU3RyZWFtLCBTdHJlYW0pO1xuXG5Db21iaW5lZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBjb21iaW5lZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgY29tYmluZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFN0cmVhbTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICByZXR1cm4gKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnYm9vbGVhbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdudW1iZXInKVxuICAgICYmICghQnVmZmVyLmlzQnVmZmVyKHN0cmVhbSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG5cbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIERlbGF5ZWRTdHJlYW0pKSB7XG4gICAgICB2YXIgbmV3U3RyZWFtID0gRGVsYXllZFN0cmVhbS5jcmVhdGUoc3RyZWFtLCB7XG4gICAgICAgIG1heERhdGFTaXplOiBJbmZpbml0eSxcbiAgICAgICAgcGF1c2VTdHJlYW06IHRoaXMucGF1c2VTdHJlYW1zLFxuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgc3RyZWFtID0gbmV3U3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuXG4gICAgaWYgKHRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zdHJlYW1zLnB1c2goc3RyZWFtKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwodGhpcywgZGVzdCwgb3B0aW9ucyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9nZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuXG4gIGlmICh0aGlzLl9pbnNpZGVMb29wKSB7XG4gICAgdGhpcy5fcGVuZGluZ05leHQgPSB0cnVlO1xuICAgIHJldHVybjsgLy8gZGVmZXIgY2FsbFxuICB9XG5cbiAgdGhpcy5faW5zaWRlTG9vcCA9IHRydWU7XG4gIHRyeSB7XG4gICAgZG8ge1xuICAgICAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlYWxHZXROZXh0KCk7XG4gICAgfSB3aGlsZSAodGhpcy5fcGVuZGluZ05leHQpO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZWFsR2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3RyZWFtcy5zaGlmdCgpO1xuXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0U3RyZWFtID0gc3RyZWFtO1xuICBnZXRTdHJlYW0oZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICAgIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9waXBlTmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gc3RyZWFtO1xuXG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIHN0cmVhbS5vbignZW5kJywgdGhpcy5fZ2V0TmV4dC5iaW5kKHRoaXMpKTtcbiAgICBzdHJlYW0ucGlwZSh0aGlzLCB7ZW5kOiBmYWxzZX0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHN0cmVhbTtcbiAgdGhpcy53cml0ZSh2YWx1ZSk7XG4gIHRoaXMuX2dldE5leHQoKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRXJyb3JzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuX2VtaXRFcnJvcihlcnIpO1xuICB9KTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UoKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX2dldE5leHQoKTtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSgpO1xuICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2VuZCcpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdXBkYXRlRGF0YVNpemUoKTtcbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJztcbiAgdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3VwZGF0ZURhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtLmRhdGFTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5kYXRhU2l6ZSArPSBzdHJlYW0uZGF0YVNpemU7XG4gIH0pO1xuXG4gIGlmICh0aGlzLl9jdXJyZW50U3RyZWFtICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemUpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemU7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnNsaWNlKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIENyZWF0ZSBoYW5kbGVycyB0aGF0IHBhc3MgZXZlbnRzIGZyb20gbmF0aXZlIHJlcXVlc3RzXG52YXIgZXZlbnRzID0gW1wiYWJvcnRcIiwgXCJhYm9ydGVkXCIsIFwiY29ubmVjdFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXTtcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9O1xufSk7XG5cbi8vIEVycm9yIHR5cGVzIHdpdGggY29kZXNcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCJcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgc2VsZi5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGFib3J0UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIHRoaXMuZW1pdChcImFib3J0XCIpO1xufTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBXcml0aW5nIGlzIG5vdCBhbGxvd2VkIGlmIGVuZCBoYXMgYmVlbiBjYWxsZWRcbiAgaWYgKHRoaXMuX2VuZGluZykge1xuICAgIHRocm93IG5ldyBXcml0ZUFmdGVyRW5kRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGFuZCBzaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiBkYXRhKSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yKCkpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGlmIG5lZWRlZCBhbmQgZW5kXG4gIGlmICghZGF0YSkge1xuICAgIHRoaXMuX2VuZGVkID0gdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3VycmVudFJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdDtcbiAgICB0aGlzLndyaXRlKGRhdGEsIGVuY29kaW5nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9lbmRlZCA9IHRydWU7XG4gICAgICBjdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2VuZGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8vIFNldHMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3Quc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbn07XG5cbi8vIENsZWFycyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlSGVhZGVyKG5hbWUpO1xufTtcblxuLy8gR2xvYmFsIHRpbWVvdXQgZm9yIGFsbCB1bmRlcmx5aW5nIHJlcXVlc3RzXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG1zZWNzLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gRGVzdHJveXMgdGhlIHNvY2tldCBvbiB0aW1lb3V0XG4gIGZ1bmN0aW9uIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KSB7XG4gICAgc29ja2V0LnNldFRpbWVvdXQobXNlY3MpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICAgIHNvY2tldC5hZGRMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICB9XG5cbiAgLy8gU2V0cyB1cCBhIHRpbWVyIHRvIHRyaWdnZXIgYSB0aW1lb3V0IGV2ZW50XG4gIGZ1bmN0aW9uIHN0YXJ0VGltZXIoc29ja2V0KSB7XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICB9XG4gICAgc2VsZi5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5lbWl0KFwidGltZW91dFwiKTtcbiAgICAgIGNsZWFyVGltZXIoKTtcbiAgICB9LCBtc2Vjcyk7XG4gICAgZGVzdHJveU9uVGltZW91dChzb2NrZXQpO1xuICB9XG5cbiAgLy8gU3RvcHMgYSB0aW1lb3V0IGZyb20gdHJpZ2dlcmluZ1xuICBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgIC8vIENsZWFyIHRoZSB0aW1lb3V0XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICAgIHNlbGYuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIGFsbCBhdHRhY2hlZCBsaXN0ZW5lcnNcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLnNvY2tldCkge1xuICAgICAgc2VsZi5fY3VycmVudFJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQXR0YWNoIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBTdGFydCB0aGUgdGltZXIgaWYgb3Igd2hlbiB0aGUgc29ja2V0IGlzIG9wZW5lZFxuICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICBzdGFydFRpbWVyKHRoaXMuc29ja2V0KTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbmNlKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgb24gZXZlbnRzXG4gIHRoaXMub24oXCJzb2NrZXRcIiwgZGVzdHJveU9uVGltZW91dCk7XG4gIHRoaXMub24oXCJhYm9ydFwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImZsdXNoSGVhZGVyc1wiLCBcImdldEhlYWRlclwiLFxuICBcInNldE5vRGVsYXlcIiwgXCJzZXRTb2NrZXRLZWVwQWxpdmVcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9zYW5pdGl6ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAvLyBFbnN1cmUgaGVhZGVycyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQ29tcGxldGUgdGhlIFVSTCBvYmplY3Qgd2hlbiBuZWNlc3NhcnlcbiAgaWYgKCFvcHRpb25zLnBhdGhuYW1lICYmIG9wdGlvbnMucGF0aCkge1xuICAgIHZhciBzZWFyY2hQb3MgPSBvcHRpb25zLnBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFBvcyA8IDApIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoMCwgc2VhcmNoUG9zKTtcbiAgICAgIG9wdGlvbnMuc2VhcmNoID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZyhzZWFyY2hQb3MpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLyBFeGVjdXRlcyB0aGUgbmV4dCBuYXRpdmUgcmVxdWVzdCAoaW5pdGlhbCBvciByZWRpcmVjdClcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wZXJmb3JtUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gTG9hZCB0aGUgbmF0aXZlIHByb3RvY29sXG4gIHZhciBwcm90b2NvbCA9IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gIHZhciBuYXRpdmVQcm90b2NvbCA9IHRoaXMuX29wdGlvbnMubmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXTtcbiAgaWYgKCFuYXRpdmVQcm90b2NvbCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBwcm90b2NvbCBcIiArIHByb3RvY29sKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB1c2UgdGhlIGFnZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3RvY29sXG4gIC8vIChIVFRQIGFuZCBIVFRQUyB1c2UgZGlmZmVyZW50IHR5cGVzIG9mIGFnZW50cylcbiAgaWYgKHRoaXMuX29wdGlvbnMuYWdlbnRzKSB7XG4gICAgdmFyIHNjaGVtZSA9IHByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLl9vcHRpb25zLmFnZW50ID0gdGhpcy5fb3B0aW9ucy5hZ2VudHNbc2NoZW1lXTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgbmF0aXZlIHJlcXVlc3QgYW5kIHNldCB1cCBpdHMgZXZlbnQgaGFuZGxlcnNcbiAgdmFyIHJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdCA9XG4gICAgICAgIG5hdGl2ZVByb3RvY29sLnJlcXVlc3QodGhpcy5fb3B0aW9ucywgdGhpcy5fb25OYXRpdmVSZXNwb25zZSk7XG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3Qub24oZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzDCpzUuMy4xOiBXaGVuIG1ha2luZyBhIHJlcXVlc3QgZGlyZWN0bHkgdG8gYW4gb3JpZ2luIHNlcnZlciwgW+KApl1cbiAgLy8gYSBjbGllbnQgTVVTVCBzZW5kIG9ubHkgdGhlIGFic29sdXRlIHBhdGggW+KApl0gYXMgdGhlIHJlcXVlc3QtdGFyZ2V0LlxuICB0aGlzLl9jdXJyZW50VXJsID0gL15cXC8vLnRlc3QodGhpcy5fb3B0aW9ucy5wYXRoKSA/XG4gICAgdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKSA6XG4gICAgLy8gV2hlbiBtYWtpbmcgYSByZXF1ZXN0IHRvIGEgcHJveHksIFvigKZdXG4gICAgLy8gYSBjbGllbnQgTVVTVCBzZW5kIHRoZSB0YXJnZXQgVVJJIGluIGFic29sdXRlLWZvcm0gW+KApl0uXG4gICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMuX29wdGlvbnMucGF0aDtcblxuICAvLyBFbmQgYSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgLy8gKFRoZSBmaXJzdCByZXF1ZXN0IG11c3QgYmUgZW5kZWQgZXhwbGljaXRseSB3aXRoIFJlZGlyZWN0YWJsZVJlcXVlc3QjZW5kKVxuICBpZiAodGhpcy5faXNSZWRpcmVjdCkge1xuICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IGVudGl0eSBhbmQgZW5kXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycztcbiAgICAoZnVuY3Rpb24gd3JpdGVOZXh0KGVycm9yKSB7XG4gICAgICAvLyBPbmx5IHdyaXRlIGlmIHRoaXMgcmVxdWVzdCBoYXMgbm90IGJlZW4gcmVkaXJlY3RlZCB5ZXRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocmVxdWVzdCA9PT0gc2VsZi5fY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgLy8gUmVwb3J0IGFueSB3cml0ZSBlcnJvcnNcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0ZSB0aGUgbmV4dCBidWZmZXIgaWYgdGhlcmUgYXJlIHN0aWxsIGxlZnRcbiAgICAgICAgZWxzZSBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICghcmVxdWVzdC5maW5pc2hlZCkge1xuICAgICAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QgaWYgYGVuZGAgaGFzIGJlZW4gY2FsbGVkIG9uIHVzXG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2VuZGVkKSB7XG4gICAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgdmFyIHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuXG4gIC8vIElmIHRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gIHZhciBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMubG9jYXRpb247XG4gIGlmICghbG9jYXRpb24gfHwgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgPT09IGZhbHNlIHx8XG4gICAgICBzdGF0dXNDb2RlIDwgMzAwIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSByZXNwb25zZSBpcyBhIHJlZGlyZWN0LCBzbyBhYm9ydCB0aGUgY3VycmVudCByZXF1ZXN0XG4gIGFib3J0UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFN0b3JlIHRoZSByZXF1ZXN0IGhlYWRlcnMgaWYgYXBwbGljYWJsZVxuICB2YXIgcmVxdWVzdEhlYWRlcnM7XG4gIHZhciBiZWZvcmVSZWRpcmVjdCA9IHRoaXMuX29wdGlvbnMuYmVmb3JlUmVkaXJlY3Q7XG4gIGlmIChiZWZvcmVSZWRpcmVjdCkge1xuICAgIHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAvLyBUaGUgSG9zdCBoZWFkZXIgd2FzIHNldCBieSBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0XG4gICAgICBIb3N0OiByZXNwb25zZS5yZXEuZ2V0SGVhZGVyKFwiaG9zdFwiKSxcbiAgICB9LCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gIC8vIGNhcmUgZm9yIG1ldGhvZHMgbm90IGtub3duIHRvIGJlIHNhZmUsIFvigKZdXG4gIC8vIFJGQzcyMzHCpzYuNC4y4oCTMzogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgYSB1c2VyIGFnZW50IE1BWSBjaGFuZ2VcbiAgLy8gdGhlIHJlcXVlc3QgbWV0aG9kIGZyb20gUE9TVCB0byBHRVQgZm9yIHRoZSBzdWJzZXF1ZW50IHJlcXVlc3QuXG4gIHZhciBtZXRob2QgPSB0aGlzLl9vcHRpb25zLm1ldGhvZDtcbiAgaWYgKChzdGF0dXNDb2RlID09PSAzMDEgfHwgc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiB0aGlzLl9vcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHxcbiAgICAgIC8vIFJGQzcyMzHCpzYuNC40OiBUaGUgMzAzIChTZWUgT3RoZXIpIHN0YXR1cyBjb2RlIGluZGljYXRlcyB0aGF0XG4gICAgICAvLyB0aGUgc2VydmVyIGlzIHJlZGlyZWN0aW5nIHRoZSB1c2VyIGFnZW50IHRvIGEgZGlmZmVyZW50IHJlc291cmNlIFvigKZdXG4gICAgICAvLyBBIHVzZXIgYWdlbnQgY2FuIHBlcmZvcm0gYSByZXRyaWV2YWwgcmVxdWVzdCB0YXJnZXRpbmcgdGhhdCBVUklcbiAgICAgIC8vIChhIEdFVCBvciBIRUFEIHJlcXVlc3QgaWYgdXNpbmcgSFRUUCkgW+KApl1cbiAgICAgIChzdGF0dXNDb2RlID09PSAzMDMpICYmICEvXig/OkdFVHxIRUFEKSQvLnRlc3QodGhpcy5fb3B0aW9ucy5tZXRob2QpKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5tZXRob2QgPSBcIkdFVFwiO1xuICAgIC8vIERyb3AgYSBwb3NzaWJsZSBlbnRpdHkgYW5kIGhlYWRlcnMgcmVsYXRlZCB0byBpdFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmNvbnRlbnQtL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICB2YXIgY3VycmVudEhvc3RIZWFkZXIgPSByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15ob3N0JC9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuXG4gIC8vIElmIHRoZSByZWRpcmVjdCBpcyByZWxhdGl2ZSwgY2Fycnkgb3ZlciB0aGUgaG9zdCBvZiB0aGUgbGFzdCByZXF1ZXN0XG4gIHZhciBjdXJyZW50VXJsUGFydHMgPSB1cmwucGFyc2UodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBVUkwgb2YgdGhlIHJlZGlyZWN0aW9uXG4gIHZhciByZWRpcmVjdFVybDtcbiAgdHJ5IHtcbiAgICByZWRpcmVjdFVybCA9IHVybC5yZXNvbHZlKGN1cnJlbnRVcmwsIGxvY2F0aW9uKTtcbiAgfVxuICBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgUmVkaXJlY3Rpb25FcnJvcihjYXVzZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwpO1xuICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgdmFyIHJlZGlyZWN0VXJsUGFydHMgPSB1cmwucGFyc2UocmVkaXJlY3RVcmwpO1xuICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHJlZGlyZWN0VXJsUGFydHMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybFBhcnRzLnByb3RvY29sICE9PSBjdXJyZW50VXJsUGFydHMucHJvdG9jb2wgJiZcbiAgICAgcmVkaXJlY3RVcmxQYXJ0cy5wcm90b2NvbCAhPT0gXCJodHRwczpcIiB8fFxuICAgICByZWRpcmVjdFVybFBhcnRzLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybFBhcnRzLmhvc3QsIGN1cnJlbnRIb3N0KSkge1xuICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXig/OmF1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAodHlwZW9mIGJlZm9yZVJlZGlyZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGJlZm9yZVJlZGlyZWN0KHRoaXMuX29wdGlvbnMsIHJlc3BvbnNlRGV0YWlscywgcmVxdWVzdERldGFpbHMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdHJ5IHtcbiAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuICB9XG4gIGNhdGNoIChjYXVzZSkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBSZWRpcmVjdGlvbkVycm9yKGNhdXNlKSk7XG4gIH1cbn07XG5cbi8vIFdyYXBzIHRoZSBrZXkvdmFsdWUgb2JqZWN0IG9mIHByb3RvY29scyB3aXRoIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHlcbmZ1bmN0aW9uIHdyYXAocHJvdG9jb2xzKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZ3NcbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgbWF4UmVkaXJlY3RzOiAyMSxcbiAgICBtYXhCb2R5TGVuZ3RoOiAxMCAqIDEwMjQgKiAxMDI0LFxuICB9O1xuXG4gIC8vIFdyYXAgZWFjaCBwcm90b2NvbFxuICB2YXIgbmF0aXZlUHJvdG9jb2xzID0ge307XG4gIE9iamVjdC5rZXlzKHByb3RvY29scykuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lKSB7XG4gICAgdmFyIHByb3RvY29sID0gc2NoZW1lICsgXCI6XCI7XG4gICAgdmFyIG5hdGl2ZVByb3RvY29sID0gbmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXSA9IHByb3RvY29sc1tzY2hlbWVdO1xuICAgIHZhciB3cmFwcGVkUHJvdG9jb2wgPSBleHBvcnRzW3NjaGVtZV0gPSBPYmplY3QuY3JlYXRlKG5hdGl2ZVByb3RvY29sKTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIHJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAvLyBQYXJzZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciB1cmxTdHIgPSBpbnB1dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhuZXcgVVJMKHVybFN0cikpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlucHV0ID0gdXJsLnBhcnNlKHVybFN0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFVSTCAmJiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKGlucHV0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBpbnB1dDtcbiAgICAgICAgaW5wdXQgPSB7IHByb3RvY29sOiBwcm90b2NvbCB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1heFJlZGlyZWN0czogZXhwb3J0cy5tYXhSZWRpcmVjdHMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgIH0sIGlucHV0LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMubmF0aXZlUHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzO1xuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBub29wKCkgeyAvKiBlbXB0eSAqLyB9XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanNcbmZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmxPYmplY3QpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgcHJvdG9jb2w6IHVybE9iamVjdC5wcm90b2NvbCxcbiAgICBob3N0bmFtZTogdXJsT2JqZWN0Lmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpID9cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDpcbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZSxcbiAgICBoYXNoOiB1cmxPYmplY3QuaGFzaCxcbiAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgcGF0aG5hbWU6IHVybE9iamVjdC5wYXRobmFtZSxcbiAgICBwYXRoOiB1cmxPYmplY3QucGF0aG5hbWUgKyB1cmxPYmplY3Quc2VhcmNoLFxuICAgIGhyZWY6IHVybE9iamVjdC5ocmVmLFxuICB9O1xuICBpZiAodXJsT2JqZWN0LnBvcnQgIT09IFwiXCIpIHtcbiAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIodXJsT2JqZWN0LnBvcnQpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRjaGluZ0hlYWRlcnMocmVnZXgsIGhlYWRlcnMpIHtcbiAgdmFyIGxhc3RWYWx1ZTtcbiAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICBpZiAocmVnZXgudGVzdChoZWFkZXIpKSB7XG4gICAgICBsYXN0VmFsdWUgPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGxhc3RWYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFzdFZhbHVlID09PSBcInVuZGVmaW5lZFwiKSA/XG4gICAgdW5kZWZpbmVkIDogU3RyaW5nKGxhc3RWYWx1ZSkudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IoY2F1c2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICBpZiAoIWNhdXNlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZSArIFwiOiBcIiArIGNhdXNlLm1lc3NhZ2U7XG4gICAgICB0aGlzLmNhdXNlID0gY2F1c2U7XG4gICAgfVxuICB9XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLm5hbWUgPSBcIkVycm9yIFtcIiArIGNvZGUgKyBcIl1cIjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGFib3J0UmVxdWVzdChyZXF1ZXN0KSB7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gIHJlcXVlc3QuYWJvcnQoKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJkb21haW4oc3ViZG9tYWluLCBkb21haW4pIHtcbiAgY29uc3QgZG90ID0gc3ViZG9tYWluLmxlbmd0aCAtIGRvbWFpbi5sZW5ndGggLSAxO1xuICByZXR1cm4gZG90ID4gMCAmJiBzdWJkb21haW5bZG90XSA9PT0gXCIuXCIgJiYgc3ViZG9tYWluLmVuZHNXaXRoKGRvbWFpbik7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmVhbSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5KSB7XG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwidmFyIGpzb25fc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5LmpzJykuc3RyaW5naWZ5O1xudmFyIGpzb25fcGFyc2UgICAgID0gcmVxdWlyZSgnLi9saWIvcGFyc2UuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuICB7XG4gICAgICAgIHBhcnNlOiBqc29uX3BhcnNlKG9wdGlvbnMpLFxuICAgICAgICBzdHJpbmdpZnk6IGpzb25fc3RyaW5naWZ5XG4gICAgfVxufTtcbi8vY3JlYXRlIHRoZSBkZWZhdWx0IG1ldGhvZCBtZW1iZXJzIHdpdGggbm8gb3B0aW9ucyBhcHBsaWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBqc29uX3BhcnNlKCk7XG5tb2R1bGUuZXhwb3J0cy5zdHJpbmdpZnkgPSBqc29uX3N0cmluZ2lmeTtcbiIsInZhciBCaWdOdW1iZXIgPSBudWxsO1xuXG4vLyByZWdleHB4cyBleHRyYWN0ZWQgZnJvbVxuLy8gKGMpIEJTRC0zLUNsYXVzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zhc3RpZnkvc2VjdXJlLWpzb24tcGFyc2UvZ3JhcGhzL2NvbnRyaWJ1dG9ycyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy9ib3VybmUvZ3JhcGhzL2NvbnRyaWJ1dG9yc1xuXG5jb25zdCBzdXNwZWN0UHJvdG9SeCA9IC8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvO1xuY29uc3Qgc3VzcGVjdENvbnN0cnVjdG9yUnggPSAvKD86Y3xcXFxcdTAwNjMpKD86b3xcXFxcdTAwNltGZl0pKD86bnxcXFxcdTAwNltFZV0pKD86c3xcXFxcdTAwNzMpKD86dHxcXFxcdTAwNzQpKD86cnxcXFxcdTAwNzIpKD86dXxcXFxcdTAwNzUpKD86Y3xcXFxcdTAwNjMpKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86cnxcXFxcdTAwNzIpLztcblxuLypcbiAgICBqc29uX3BhcnNlLmpzXG4gICAgMjAxMi0wNi0yMFxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEganNvbl9wYXJzZSBmdW5jdGlvbi5cbiAgICBEdXJpbmcgY3JlYXRlIHlvdSBjYW4gKG9wdGlvbmFsbHkpIHNwZWNpZnkgc29tZSBiZWhhdmlvdXJhbCBzd2l0Y2hlc1xuXG4gICAgICAgIHJlcXVpcmUoJ2pzb24tYmlnaW50Jykob3B0aW9ucylcblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIG9wdGlvbnMgcGFyYW1ldGVyIGhvbGRzIHN3aXRjaGVzIHRoYXQgZHJpdmUgY2VydGFpblxuICAgICAgICAgICAgYXNwZWN0cyBvZiB0aGUgcGFyc2luZyBwcm9jZXNzOlxuICAgICAgICAgICAgKiBvcHRpb25zLnN0cmljdCA9IHRydWUgd2lsbCB3YXJuIGFib3V0IGR1cGxpY2F0ZS1rZXkgdXNhZ2UgaW4gdGhlIGpzb24uXG4gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IChzdHJpY3QgPSBmYWxzZSkgd2lsbCBzaWxlbnRseSBpZ25vcmUgdGhvc2UgYW5kIG92ZXJ3cml0ZVxuICAgICAgICAgICAgICB2YWx1ZXMgZm9yIGtleXMgdGhhdCBhcmUgaW4gZHVwbGljYXRlIHVzZS5cblxuICAgIFRoZSByZXN1bHRpbmcgZnVuY3Rpb24gZm9sbG93cyB0aGlzIHNpZ25hdHVyZTpcbiAgICAgICAganNvbl9wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IGpzb25fcGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG4qL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXFwiXCIsIFwiXFwvXCIsIFwiXFxcXFwiLCBhdCwgYiwgY2FsbCwgY2hhckF0LCBmLCBmcm9tQ2hhckNvZGUsXG4gICAgaGFzT3duUHJvcGVydHksIG1lc3NhZ2UsIG4sIG5hbWUsIHByb3RvdHlwZSwgcHVzaCwgciwgdCwgdGV4dFxuKi9cblxudmFyIGpzb25fcGFyc2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBhcnNlIGEgSlNPTiB0ZXh0LCBwcm9kdWNpbmcgYSBKYXZhU2NyaXB0XG4gIC8vIGRhdGEgc3RydWN0dXJlLiBJdCBpcyBhIHNpbXBsZSwgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLiBJdCBkb2VzIG5vdCB1c2VcbiAgLy8gZXZhbCBvciByZWd1bGFyIGV4cHJlc3Npb25zLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIG1vZGVsIGZvciBpbXBsZW1lbnRpbmdcbiAgLy8gYSBKU09OIHBhcnNlciBpbiBvdGhlciBsYW5ndWFnZXMuXG5cbiAgLy8gV2UgYXJlIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAvLyBnbG9iYWwgdmFyaWFibGVzLlxuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyBvbmUgY2FuIG92ZXJyaWRlIGJ5IHBhc3Npbmcgb3B0aW9ucyB0byB0aGUgcGFyc2UoKVxuICB2YXIgX29wdGlvbnMgPSB7XG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gbm90IGJlaW5nIHN0cmljdCBtZWFucyBkbyBub3QgZ2VuZXJhdGUgc3ludGF4IGVycm9ycyBmb3IgXCJkdXBsaWNhdGUga2V5XCJcbiAgICBzdG9yZUFzU3RyaW5nOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHN0b3JlZCBhcyBCaWdOdW1iZXIgKGRlZmF1bHQpIG9yIGEgc3RyaW5nXG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciBhbGwgbnVtYmVycyBzaG91bGQgYmUgQmlnXG4gICAgdXNlTmF0aXZlQmlnSW50OiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgQmlnSW50IGluc3RlYWQgb2YgYmlnbnVtYmVyLmpzXG4gICAgcHJvdG9BY3Rpb246ICdlcnJvcicsXG4gICAgY29uc3RydWN0b3JBY3Rpb246ICdlcnJvcicsXG4gIH07XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbnMsIHRoZW4gdXNlIHRoZW0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgX29wdGlvbnNcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdHJpY3QgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdG9yZUFzU3RyaW5nID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9XG4gICAgICBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPT09IHRydWUgPyBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgOiBmYWxzZTtcbiAgICBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPVxuICAgICAgb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPT09IHRydWUgPyBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9IG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b0FjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMucHJvdG9BY3Rpb24gPSBvcHRpb25zLnByb3RvQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIHByb3RvQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLnByb3RvQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICdcIic6ICdcIicsXG4gICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICcvJzogJy8nLFxuICAgICAgYjogJ1xcYicsXG4gICAgICBmOiAnXFxmJyxcbiAgICAgIG46ICdcXG4nLFxuICAgICAgcjogJ1xccicsXG4gICAgICB0OiAnXFx0JyxcbiAgICB9LFxuICAgIHRleHQsXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cblxuICAgICAgdGhyb3cge1xuICAgICAgICBuYW1lOiAnU3ludGF4RXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICBhdDogYXQsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cblxuICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgIGF0ICs9IDE7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgbmV4dCgnLScpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICBlcnJvcignQmFkIG51bWJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEJpZ051bWJlciA9PSBudWxsKSBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcbiAgICAgICAgLy9pZiAobnVtYmVyID4gOTAwNzE5OTI1NDc0MDk5MiB8fCBudW1iZXIgPCAtOTAwNzE5OTI1NDc0MDk5MilcbiAgICAgICAgLy8gQmlnbnVtYmVyIGhhcyBzdHJpY3RlciBjaGVjazogZXZlcnl0aGluZyB3aXRoIGxlbmd0aCA+IDE1IGRpZ2l0cyBkaXNhbGxvd2VkXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMTUpXG4gICAgICAgICAgcmV0dXJuIF9vcHRpb25zLnN0b3JlQXNTdHJpbmdcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQoc3RyaW5nKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHN0cmluZyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gIV9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWdcbiAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQobnVtYmVyKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKG51bWJlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgICAgdmFyIGhleCxcbiAgICAgICAgaSxcbiAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgIHVmZmZmO1xuXG4gICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICB2YXIgc3RhcnRBdCA9IGF0O1xuICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgc3RyaW5nJyk7XG4gICAgfSxcbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG4gICAgdmFsdWUsIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgYXJyYXknKTtcbiAgICB9LFxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgdmFyIGtleSxcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgbmV4dCgneycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfb3B0aW9ucy5zdHJpY3QgPT09IHRydWUgJiZcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1c3BlY3RQcm90b1J4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHN1c3BlY3RDb25zdHJ1Y3RvclJ4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIGNvbnN0cnVjdG9yIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgb2JqZWN0Jyk7XG4gICAgfTtcblxuICB2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuICAvLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0ZXh0ID0gc291cmNlICsgJyc7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgIGVycm9yKCdTeW50YXggZXJyb3InKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgICAgdmFyIGssXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSkoeyAnJzogcmVzdWx0IH0sICcnKVxuICAgICAgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25fcGFyc2U7XG4iLCJ2YXIgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG5cbi8qXG4gICAganNvbjIuanNcbiAgICAyMDEzLTA1LTI2XG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgU2VlIGh0dHA6Ly93d3cuSlNPTi5vcmcvanMuaHRtbFxuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmluZ2lmeVxuICAgIGFuZCBwYXJzZS5cblxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKVxuICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LlxuXG4gICAgICAgICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMuIEl0IGNhbiBiZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuXG4gICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXFx0JyBvciAnJm5ic3A7JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxldmVsLlxuXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZS5cblxuICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT05cbiAgICAgICAgICAgIG1ldGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBzZXJpYWxpemU6IGl0IHJldHVybnMgdGhlXG4gICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBtZXRob2RcbiAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZVxuICAgICAgICAgICAgYm91bmQgdG8gdGhlIHZhbHVlXG5cbiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy5cblxuICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUgcGFzc2VkIHRoZVxuICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nXG4gICAgICAgICAgICBvYmplY3QuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZVxuICAgICAgICAgICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhlIG1lbWJlciB3aWxsXG4gICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLlxuXG4gICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gaXQgd2lsbCBiZVxuICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0c1xuICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3JcbiAgICAgICAgICAgIGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3VjaCB2YWx1ZXMgaW4gb2JqZWN0cyB3aWxsIGJlXG4gICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2VcbiAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVzLlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNhdGlvbiBvZiB0aGVcbiAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVkIHdpdGggbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXRcbiAgICAgICAgICAgIGVhc2llciB0byByZWFkLlxuXG4gICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsXG4gICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlblxuICAgICAgICAgICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiZVwiLHtcInBsdXJpYnVzXCI6XCJ1bnVtXCJ9XSdcblxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1xcdCcpO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1xcblxcdFwiZVwiLFxcblxcdHtcXG5cXHRcXHRcInBsdXJpYnVzXCI6IFwidW51bVwiXFxuXFx0fVxcbl0nXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgP1xuICAgICAgICAgICAgICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKVwiXSdcblxuXG4gICAgICAgIEpTT04ucGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgnW1wiRGF0ZSgwOS8wOS8yMDAxKVwiXScsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDUpID09PSAnRGF0ZSgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgtMSkgPT09ICcpJykge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFsdWUuc2xpY2UoNSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cbiovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHJlZ2V4cDogdHJ1ZSAqL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXGJcIiwgXCJcXHRcIiwgXCJcXG5cIiwgXCJcXGZcIiwgXCJcXHJcIiwgXCJcXFwiXCIsIEpTT04sIFwiXFxcXFwiLCBhcHBseSxcbiAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRDSG91cnMsXG4gICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLFxuICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBwYXJzZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LFxuICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2ZcbiovXG5cblxuLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gV2UgY3JlYXRlIHRoZVxuLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcgZ2xvYmFsIHZhcmlhYmxlcy5cblxudmFyIEpTT04gPSBtb2R1bGUuZXhwb3J0cztcblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgIH1cblxuICAgIHZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBnYXAsXG4gICAgICAgIGluZGVudCxcbiAgICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVwO1xuXG5cbiAgICBmdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcblxuLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbi8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuLy8gc2VxdWVuY2VzLlxuXG4gICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgOiAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICAgICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcblxuLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuXG4gICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgICAgIHBhcnRpYWwsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldLFxuICAgICAgICAgICAgaXNCaWdOdW1iZXIgPSB2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlciB8fCBCaWdOdW1iZXIuaXNCaWdOdW1iZXIodmFsdWUpKTtcblxuLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgICAgICB9XG5cbi8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuXG4vLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChpc0JpZ051bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdudW1iZXInOlxuXG4vLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cblxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICBjYXNlICdiaWdpbnQnOlxuXG4vLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4vLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG5cbi8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yXG4vLyBudWxsLlxuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG5cbi8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBpbiBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jyxcbi8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLlxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLlxuXG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuXG4vLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXG4vLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyXG4vLyBmb3Igbm9uLUpTT04gdmFsdWVzLlxuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kIHdyYXAgdGhlbSBpblxuLy8gYnJhY2tldHMuXG5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnW10nXG4gICAgICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcFtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4vLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ3t9J1xuICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgPyAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9J1xuICAgICAgICAgICAgICAgIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICB9XG5cbi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHN0cmluZ2lmeSBtZXRob2QsIGdpdmUgaXQgb25lLlxuXG4gICAgaWYgKHR5cGVvZiBKU09OLnN0cmluZ2lmeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBKU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG5cbi8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWxcbi8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvblxuLy8gdGhhdCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNlbGVjdCB0aGUga2V5cy5cbi8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHByb3ZpZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW5cbi8vIHByb2R1Y2UgdGV4dCB0aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLlxuXG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGdhcCA9ICcnO1xuICAgICAgICAgICAgaW5kZW50ID0gJyc7XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbi8vIG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4vLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuXG4gICAgICAgICAgICByZXAgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cblxuICAgICAgICAgICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAyMiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMyMSk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsInBhcmFsbGVsIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsImNsZWFuIiwia2V5Iiwiam9icyIsInN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJiaW5kIiwiZGVmZXIiLCJjYWxsYmFjayIsImlzQXN5bmMiLCJlcnIiLCJyZXN1bHQiLCJmbiIsIm5leHRUaWNrIiwic2V0SW1tZWRpYXRlIiwicHJvY2VzcyIsInNldFRpbWVvdXQiLCJhc3luYyIsImFib3J0IiwibGlzdCIsIml0ZXJhdG9yIiwiaW5kZXgiLCJpdGVtIiwibGVuZ3RoIiwicnVuSm9iIiwiZXJyb3IiLCJvdXRwdXQiLCJyZXN1bHRzIiwic29ydE1ldGhvZCIsImlzTmFtZWRMaXN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaW5pdFN0YXRlIiwia2V5ZWRMaXN0Iiwic2l6ZSIsInNvcnQiLCJhIiwiYiIsIml0ZXJhdGUiLCJ0ZXJtaW5hdG9yIiwiYXNjZW5kaW5nIiwiaXRlcmF0b3JIYW5kbGVyIiwiZGVzY2VuZGluZyIsInV0aWxzIiwic2V0dGxlIiwiYnVpbGRGdWxsUGF0aCIsImJ1aWxkVVJMIiwiaHR0cCIsImh0dHBzIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwidXJsIiwiemxpYiIsIlZFUlNJT04iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwiaXNIdHRwcyIsInN1cHBvcnRlZFByb3RvY29scyIsInNldFByb3h5Iiwib3B0aW9ucyIsInByb3h5IiwibG9jYXRpb24iLCJob3N0bmFtZSIsImhvc3QiLCJwb3J0IiwicGF0aCIsImF1dGgiLCJiYXNlNjQiLCJCdWZmZXIiLCJmcm9tIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInRvU3RyaW5nIiwiaGVhZGVycyIsImJlZm9yZVJlZGlyZWN0IiwicmVkaXJlY3Rpb24iLCJocmVmIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmVQcm9taXNlIiwicmVqZWN0UHJvbWlzZSIsIm9uQ2FuY2VsZWQiLCJkb25lIiwiY2FuY2VsVG9rZW4iLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJyZXNvbHZlIiwidmFsdWUiLCJyZWplY3RlZCIsInJlamVjdCIsImRhdGEiLCJoZWFkZXJOYW1lcyIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImlzRm9ybURhdGEiLCJpc0Z1bmN0aW9uIiwiZ2V0SGVhZGVycyIsImFzc2lnbiIsImlzU3RyZWFtIiwiaXNCdWZmZXIiLCJpc0FycmF5QnVmZmVyIiwiVWludDhBcnJheSIsImlzU3RyaW5nIiwiRVJSX0JBRF9SRVFVRVNUIiwibWF4Qm9keUxlbmd0aCIsInVuZGVmaW5lZCIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsInBhcnNlZCIsInBhcnNlIiwicHJvdG9jb2wiLCJpbmRleE9mIiwidXJsQXV0aCIsInNwbGl0IiwiYXV0aG9yaXphdGlvbiIsImlzSHR0cHNSZXF1ZXN0IiwidGVzdCIsImFnZW50IiwiaHR0cHNBZ2VudCIsImh0dHBBZ2VudCIsInBhcmFtcyIsInBhcmFtc1NlcmlhbGl6ZXIiLCJyZXBsYWNlIiwiY3VzdG9tRXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiZXhpc3RzIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJhZ2VudHMiLCJzb2NrZXRQYXRoIiwidHJhbnNwb3J0IiwicHJveHlFbnYiLCJzbGljZSIsInByb3h5VXJsIiwiZW52IiwicGFyc2VkUHJveHlVcmwiLCJub1Byb3h5RW52Iiwibm9fcHJveHkiLCJOT19QUk9YWSIsInNob3VsZFByb3h5IiwibWFwIiwicyIsInRyaW0iLCJzb21lIiwicHJveHlFbGVtZW50Iiwic3Vic3RyIiwicHJveHlVcmxBdXRoIiwiaXNIdHRwc1Byb3h5IiwibWF4UmVkaXJlY3RzIiwiaW5zZWN1cmVIVFRQUGFyc2VyIiwicmVxIiwicmVxdWVzdCIsInJlcyIsImFib3J0ZWQiLCJzdHJlYW0iLCJsYXN0UmVxdWVzdCIsInN0YXR1c0NvZGUiLCJkZWNvbXByZXNzIiwicGlwZSIsImNyZWF0ZVVuemlwIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlQnVmZmVyIiwidG90YWxSZXNwb25zZUJ5dGVzIiwib24iLCJjaHVuayIsInB1c2giLCJtYXhDb250ZW50TGVuZ3RoIiwiZGVzdHJveSIsIkVSUl9CQURfUkVTUE9OU0UiLCJyZXNwb25zZURhdGEiLCJjb25jYXQiLCJyZXNwb25zZUVuY29kaW5nIiwic3RyaXBCT00iLCJzb2NrZXQiLCJzZXRLZWVwQWxpdmUiLCJ0aW1lb3V0IiwicGFyc2VJbnQiLCJpc05hTiIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsIkVDT05OQUJPUlRFRCIsImNhbmNlbCIsInR5cGUiLCJzdWJzY3JpYmUiLCJhZGRFdmVudExpc3RlbmVyIiwiZW5kIiwiY29va2llcyIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInBhcnNlUHJvdG9jb2wiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJYTUxIdHRwUmVxdWVzdCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwib25hYm9ydCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ4c3JmQ29va2llTmFtZSIsInJlYWQiLCJ4c3JmSGVhZGVyTmFtZSIsInZhbCIsInNldFJlcXVlc3RIZWFkZXIiLCJpc1VuZGVmaW5lZCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJzZW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiY3JlYXRlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwidG9Gb3JtRGF0YSIsIkNhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiaXNBeGlvc0Vycm9yIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJwcm9taXNlIiwidG9rZW4iLCJ0aGVuIiwiX2xpc3RlbmVycyIsImkiLCJsIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsInNwbGljZSIsInNvdXJjZSIsImMiLCJjYWxsIiwiRVJSX0NBTkNFTEVEIiwiaW5oZXJpdHMiLCJfX0NBTkNFTF9fIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsImRlZmF1bHRzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicnVuV2hlbiIsInN5bmNocm9ub3VzIiwidW5zaGlmdCIsImZ1bGZpbGxlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiYXBwbHkiLCJzaGlmdCIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImNvZGUiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiZGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJvYmoiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwiaWQiLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwibWVyZ2UiLCJjb21tb24iLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwidmFsaWRhdGVTdGF0dXMiLCJNYXRoIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNGaWxlTGlzdCIsImlzT2JqZWN0UGF5bG9hZCIsImlzT2JqZWN0IiwiY29udGVudFR5cGUiLCJfRm9ybURhdGEiLCJGb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsIkpTT04iLCJlIiwic3RyaW5naWZ5Iiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJ0aGlzQXJnIiwiYXJncyIsImFyZ3VtZW50cyIsImVuY29kZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInYiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImpvaW4iLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJpc051bWJlciIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsImRvY3VtZW50IiwibWF0Y2giLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJwYXlsb2FkIiwib3JpZ2luVVJMIiwibXNpZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJzZWFyY2giLCJoYXNoIiwicGF0aG5hbWUiLCJjaGFyQXQiLCJ3aW5kb3ciLCJyZXF1ZXN0VVJMIiwibm9ybWFsaXplZE5hbWUiLCJpZ25vcmVEdXBsaWNhdGVPZiIsImxpbmUiLCJleGVjIiwiYXJyIiwiZm9ybURhdGEiLCJjb252ZXJ0VmFsdWUiLCJpc1R5cGVkQXJyYXkiLCJCbG9iIiwiYnVpbGQiLCJwYXJlbnRLZXkiLCJmdWxsS2V5IiwiZW5kc1dpdGgiLCJ0b0FycmF5IiwiZWwiLCJhcHBlbmQiLCJwb3AiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT04iLCJjYWNoZSIsImtpbmRPZiIsInN0ciIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5IiwiVHlwZWRBcnJheSIsImNvbnN0cnVjdG9yIiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicHJvZHVjdCIsImFzc2lnblZhbHVlIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwibGFzdEluZGV4IiwiaXNQdXJlT2JqZWN0IiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwiYXBpS2V5IiwiYXBpU2VjcmV0IiwiYXBpVG9rZW4iLCJyZXNvdXJjZSIsInJlcXVlc3RfMSIsIkh0dHBNZXRob2RzXzEiLCJHZXQiLCJQb3N0IiwiUHV0IiwiRGVsZXRlIiwicGFja2FnZUpTT04iLCJzZXRDb25maWciLCJzZXRPcHRpb25zIiwidG9rZW5Db25uZWN0U3RyYXRlZ3kiLCJiYXNpY0Nvbm5lY3RTdHJhdGVneSIsImNsb25lZFBhcmFtcyIsIl9fYXNzaWduIiwiY3VzdG9tQ29uZmlnIiwic2V0VmFsdWVJZk5vdE5pbCIsImZyZWV6ZSIsInBhY2thZ2VfanNvbl8xIiwiaW5kZXhfMSIsImluZGV4XzIiLCJfX2V4dGVuZHMiLCJNYWlsamV0IiwiSHR0cE1ldGhvZHMiLCJKU09OYiIsInN0b3JlQXNTdHJpbmciLCJjbGllbnQiLCJjbGllbnRfMSIsInZhbHVlcyIsImluY2x1ZGVzIiwic3ViUGF0aCIsImJ1aWxkU3ViUGF0aCIsImFjdGlvblBhdGgiLCJSZXF1ZXN0IiwiZ2V0UGFja2FnZVZlcnNpb24iLCJnZXRBUElUb2tlbiIsImdldEFQSUtleSIsImdldEFQSVNlY3JldCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsIl9hIiwiX2IiLCJpc0NvbnRhY3RMaXN0V2l0aENTViIsImlzQmF0Y2hKb2JXaXRoQ1NWIiwiaXNTZW5kUmVzb3VyY2UiLCJyZXNvdXJjZUNvbnRhaW5TTVMiLCJyZXF1ZXN0Q29uZmlnIiwiZ2V0UmVxdWVzdEJvZHkiLCJnZXRVc2VyQWdlbnQiLCJnZXRDb250ZW50VHlwZSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsImJhc2VVcmwiLCJwZXJmb3JtQVBJQ2FsbCIsImJ1aWxkRnVsbFVybCIsInNldEJhc2VVUkwiLCJib2R5IiwibWFrZVJlcXVlc3QiLCJfZyIsImF4aW9zXzEiLCJlcnJfMSIsIl9mIiwic3RhdHVzXzEiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJvcmlnaW5hbE1lc3NhZ2UiLCJmdWxsTWVzc2FnZSIsIk1lc3NhZ2VzIiwiX2MiLCJFcnJvcnMiLCJfZCIsIl9lIiwiRXJyb3JDb2RlIiwiRXJyb3JJZGVudGlmaWVyIiwiRXJyb3JSZWxhdGVkVG8iLCJ0ZXh0IiwiaXNOaWxfMSIsImlzTnVsbF8xIiwiaXNVbmRlZmluZWRfMSIsImlzUHVyZU9iamVjdF8xIiwic2V0VmFsdWVJZk5vdE5pbF8xIiwidGFyZ2V0T2JqZWN0IiwiZ2xvYmFsT2JqZWN0IiwiQmlnTnVtYmVyIiwiaXNOdW1lcmljIiwibWF0aGNlaWwiLCJjZWlsIiwibWF0aGZsb29yIiwiYmlnbnVtYmVyRXJyb3IiLCJ0b29NYW55RGlnaXRzIiwiQkFTRSIsIkxPR19CQVNFIiwiTUFYX1NBRkVfSU5URUdFUiIsIlBPV1NfVEVOIiwiU1FSVF9CQVNFIiwiTUFYIiwiYml0Rmxvb3IiLCJuIiwiY29lZmZUb1N0cmluZyIsInoiLCJqIiwiciIsImNvbXBhcmUiLCJ4IiwieSIsInhjIiwieWMiLCJrIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJpc09kZCIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkUG9pbnQiLCJsZW4iLCJ6cyIsImNsb25lIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwiZm9ybWF0Iiwicm0iLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJtIiwibm9ybWFsaXNlIiwic2QiLCJkIiwibmkiLCJyZCIsInBvd3MxMCIsIm91dCIsIlJPVU5EX1VQIiwiUk9VTkRfRE9XTiIsIlJPVU5EX0NFSUwiLCJST1VORF9GTE9PUiIsIlJPVU5EX0hBTEZfVVAiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9IQUxGX0NFSUwiLCJST1VORF9IQUxGX0ZMT09SIiwiRVVDTElEIiwic2V0IiwicCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwicDEiLCJwMiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJ0aW1lcyIsImludGVnZXJWYWx1ZSIsImlzRXF1YWxUbyIsImVxIiwiaXNGaW5pdGUiLCJpc0dyZWF0ZXJUaGFuIiwiaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyIsImd0ZSIsImlzTGVzc1RoYW4iLCJpc0xlc3NUaGFuT3JFcXVhbFRvIiwibHRlIiwiaXNOZWdhdGl2ZSIsImlzUG9zaXRpdmUiLCJpc1plcm8iLCJtaW51cyIsInQiLCJ4TFR5IiwieGUiLCJ5ZSIsIm1vZHVsbyIsIm11bHRpcGxpZWRCeSIsInhjTCIsInljTCIsInlsbyIsInloaSIsInpjIiwic3FydEJhc2UiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2hpZnRlZEJ5Iiwic3F1YXJlUm9vdCIsInNxcnQiLCJyZXAiLCJ0b0ZpeGVkIiwidG9Gb3JtYXQiLCJnMSIsImcyIiwiaW50UGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnIiwiaW50RGlnaXRzIiwidG9GcmFjdGlvbiIsIm1kIiwiZDAiLCJkMSIsImQyIiwiZXhwIiwibjAiLCJuMSIsInRvTnVtYmVyIiwidG9QcmVjaXNpb24iLCJ1dGlsIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsIkNvbWJpbmVkU3RyZWFtIiwid3JpdGFibGUiLCJyZWFkYWJsZSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfc3RyZWFtcyIsIl9jdXJyZW50U3RyZWFtIiwiX2luc2lkZUxvb3AiLCJfcGVuZGluZ05leHQiLCJjb21iaW5lZFN0cmVhbSIsIm9wdGlvbiIsImlzU3RyZWFtTGlrZSIsIm5ld1N0cmVhbSIsIkluZmluaXR5IiwicGF1c2VTdHJlYW0iLCJfY2hlY2tEYXRhU2l6ZSIsIl9oYW5kbGVFcnJvcnMiLCJwYXVzZSIsImRlc3QiLCJyZXN1bWUiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsInNlbGYiLCJfZW1pdEVycm9yIiwiZW1pdCIsIl9yZXNldCIsIl91cGRhdGVEYXRhU2l6ZSIsInciLCJwbHVyYWwiLCJtcyIsIm1zQWJzIiwiaXNQbHVyYWwiLCJwYXJzZUZsb2F0IiwibG9uZyIsImZtdFNob3J0IiwiZm9ybWF0QXJncyIsInVzZUNvbG9ycyIsIm5hbWVzcGFjZSIsImh1bWFuaXplIiwiZGlmZiIsImNvbG9yIiwibGFzdEMiLCJzYXZlIiwibmFtZXNwYWNlcyIsInN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsImxvYWQiLCJnZXRJdGVtIiwiX19ud2pzIiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJXZWJraXRBcHBlYXJhbmNlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwiJDEiLCJsb2NhbFN0b3JhZ2UiLCJsb2NhbHN0b3JhZ2UiLCJ3YXJuZWQiLCJjb2xvcnMiLCJsb2ciLCJkZWJ1ZyIsImZvcm1hdHRlcnMiLCJjcmVhdGVEZWJ1ZyIsInByZXZUaW1lIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIk51bWJlciIsInByZXYiLCJjb2VyY2UiLCJmb3JtYXR0ZXIiLCJzZWxlY3RDb2xvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJnZXQiLCJkZWxpbWl0ZXIiLCJuZXdEZWJ1ZyIsInRvTmFtZXNwYWNlIiwicmVnZXhwIiwiZGVmYXVsdCIsImRpc2FibGUiLCJuYW1lcyIsInNraXBzIiwiZW5hYmxlIiwiYnJvd3NlciIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJCb29sZWFuIiwiaXNhdHR5IiwiZmQiLCJkZXByZWNhdGUiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJyZWR1Y2UiLCJfIiwibyIsImluc3BlY3QiLCJPIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsInNldEVuY29kaW5nIiwicmVsZWFzZSIsIl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCIsIlVSTCIsIldyaXRhYmxlIiwiYXNzZXJ0IiwiZXZlbnRzIiwiZXZlbnRIYW5kbGVycyIsImV2ZW50IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX3JlZGlyZWN0YWJsZSIsIlJlZGlyZWN0aW9uRXJyb3IiLCJjcmVhdGVFcnJvclR5cGUiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIlJlZGlyZWN0YWJsZVJlcXVlc3QiLCJyZXNwb25zZUNhbGxiYWNrIiwiX3Nhbml0aXplT3B0aW9ucyIsIl9vcHRpb25zIiwiX2VuZGVkIiwiX2VuZGluZyIsIl9yZWRpcmVjdENvdW50IiwiX3JlZGlyZWN0cyIsIl9yZXF1ZXN0Qm9keUxlbmd0aCIsIl9yZXF1ZXN0Qm9keUJ1ZmZlcnMiLCJfb25OYXRpdmVSZXNwb25zZSIsIl9wcm9jZXNzUmVzcG9uc2UiLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibmF0aXZlUHJvdG9jb2xzIiwic2NoZW1lIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJpbnB1dCIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0Iiwic3RhcnRzV2l0aCIsInJlbW92ZU1hdGNoaW5nSGVhZGVycyIsInJlZ2V4IiwibGFzdFZhbHVlIiwiaGVhZGVyIiwiZGVmYXVsdE1lc3NhZ2UiLCJDdXN0b21FcnJvciIsImNhdXNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJhYm9ydFJlcXVlc3QiLCJyZW1vdmVMaXN0ZW5lciIsIl9jdXJyZW50UmVxdWVzdCIsImVuY29kaW5nIiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJhZGRMaXN0ZW5lciIsInN0YXJ0VGltZXIiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFyVGltZXIiLCJvbmNlIiwicHJvcGVydHkiLCJzZWFyY2hQb3MiLCJfY3VycmVudFVybCIsIl9pc1JlZGlyZWN0IiwiYnVmZmVycyIsIndyaXRlTmV4dCIsImZpbmlzaGVkIiwidHJhY2tSZWRpcmVjdHMiLCJmb2xsb3dSZWRpcmVjdHMiLCJyZXNwb25zZVVybCIsInJlZGlyZWN0cyIsIkhvc3QiLCJnZXRIZWFkZXIiLCJyZWRpcmVjdFVybCIsImN1cnJlbnRIb3N0SGVhZGVyIiwiY3VycmVudFVybFBhcnRzIiwiY3VycmVudEhvc3QiLCJjdXJyZW50VXJsIiwicmVkaXJlY3RVcmxQYXJ0cyIsInN1YmRvbWFpbiIsImRvdCIsImlzU3ViZG9tYWluIiwicmVzcG9uc2VEZXRhaWxzIiwicmVxdWVzdERldGFpbHMiLCJwYXJzZVVybCIsImZzIiwibWltZSIsImFzeW5ja2l0IiwicG9wdWxhdGUiLCJfb3ZlcmhlYWRMZW5ndGgiLCJfdmFsdWVMZW5ndGgiLCJfdmFsdWVzVG9NZWFzdXJlIiwiTElORV9CUkVBSyIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJieXRlTGVuZ3RoIiwiX2xlbmd0aFJldHJpZXZlciIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsIl9nZXRDb250ZW50VHlwZSIsImNvbnRlbnRzIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwibmV4dCIsIl9sYXN0Qm91bmRhcnkiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwic2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImFsbG9jIiwiZ2V0TGVuZ3RoU3luYyIsImhhc0tub3duTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwiY2IiLCJzdWJtaXQiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJkc3QiLCJzcmMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJqc29uX3N0cmluZ2lmeSIsImpzb25fcGFyc2UiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4Iiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJzdHJpbmciLCJCaWdJbnQiLCJoZXgiLCJ1ZmZmZiIsInN0YXJ0QXQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwib3MiLCJoYXNGbGFnIiwiZm9yY2VDb2xvciIsImdldFN1cHBvcnRMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJDSV9OQU1FIiwiVEVBTUNJVFlfVkVSU0lPTiIsIkNPTE9SVEVSTSIsIlRFUk1fUFJPR1JBTV9WRVJTSU9OIiwiVEVSTV9QUk9HUkFNIiwiVEVSTSIsImhhc0Jhc2ljIiwiaGFzMjU2IiwiaGFzMTZtIiwidHJhbnNsYXRlTGV2ZWwiLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJmaXJzdCIsImNvbXBvbmVudCIsImRlZmluaXRpb24iLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/mailjet.node.js.LICENSE.txt b/dist/mailjet.node.js.LICENSE.txt index 16291f2..a296405 100644 --- a/dist/mailjet.node.js.LICENSE.txt +++ b/dist/mailjet.node.js.LICENSE.txt @@ -12,4 +12,4 @@ * MIT Licensed */ -/*! node-mailjet v5.0.0 */ +/*! node-mailjet v5.0.1 */ diff --git a/dist/mailjet.web.js b/dist/mailjet.web.js index b5c872b..f4feb0e 100644 --- a/dist/mailjet.web.js +++ b/dist/mailjet.web.js @@ -1,3 +1,3 @@ /*! For license information please see mailjet.web.js.LICENSE.txt */ -define((function(){return e={669:function(e,t,r){e.exports=r(609)},448:function(e,t,r){"use strict";var n=r(867),o=r(26),i=r(372),s=r(327),u=r(97),a=r(109),c=r(985),f=r(660),l=r(648),p=r(644),h=r(205);e.exports=function(e){return new Promise((function(t,r){var d,g=e.data,m=e.headers,y=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(d),e.signal&&e.signal.removeEventListener("abort",d)}n.isFormData(g)&&n.isStandardBrowserEnv()&&delete m["Content-Type"];var b=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",O=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(w+":"+O)}var E=u(e.baseURL,e.url);function j(){if(b){var n="getAllResponseHeaders"in b?a(b.getAllResponseHeaders()):null,i={data:y&&"text"!==y&&"json"!==y?b.response:b.responseText,status:b.status,statusText:b.statusText,headers:n,config:e,request:b};o((function(e){t(e),v()}),(function(e){r(e),v()}),i),b=null}}if(b.open(e.method.toUpperCase(),s(E,e.params,e.paramsSerializer),!0),b.timeout=e.timeout,"onloadend"in b?b.onloadend=j:b.onreadystatechange=function(){b&&4===b.readyState&&(0!==b.status||b.responseURL&&0===b.responseURL.indexOf("file:"))&&setTimeout(j)},b.onabort=function(){b&&(r(new l("Request aborted",l.ECONNABORTED,e,b)),b=null)},b.onerror=function(){r(new l("Network Error",l.ERR_NETWORK,e,b,b)),b=null},b.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new l(t,n.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,b)),b=null},n.isStandardBrowserEnv()){var A=(e.withCredentials||c(E))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;A&&(m[e.xsrfHeaderName]=A)}"setRequestHeader"in b&&n.forEach(m,(function(e,t){void 0===g&&"content-type"===t.toLowerCase()?delete m[t]:b.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(b.withCredentials=!!e.withCredentials),y&&"json"!==y&&(b.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&b.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&b.upload&&b.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(d=function(e){b&&(r(!e||e&&e.type?new p:e),b.abort(),b=null)},e.cancelToken&&e.cancelToken.subscribe(d),e.signal&&(e.signal.aborted?d():e.signal.addEventListener("abort",d))),g||(g=null);var x=h(E);x&&-1===["http","https","file"].indexOf(x)?r(new l("Unsupported protocol "+x+":",l.ERR_BAD_REQUEST,e)):b.send(g)}))}},609:function(e,t,r){"use strict";var n=r(867),o=r(849),i=r(496),s=r(185),u=function e(t){var r=new i(t),u=o(i.prototype.request,r);return n.extend(u,i.prototype,r),n.extend(u,r),u.create=function(r){return e(s(t,r))},u}(r(546));u.Axios=i,u.CanceledError=r(644),u.CancelToken=r(972),u.isCancel=r(502),u.VERSION=r(288).version,u.toFormData=r(675),u.AxiosError=r(648),u.Cancel=u.CanceledError,u.all=function(e){return Promise.all(e)},u.spread=r(713),u.isAxiosError=r(268),e.exports=u,e.exports.default=u},972:function(e,t,r){"use strict";var n=r(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){var t,n=r._listeners.length;for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){l.headers[e]=n.merge(a)})),e.exports=l},660:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},288:function(e){e.exports={version:"0.27.2"}},849:function(e){"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},205:function(e){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},713:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},675:function(e,t,r){"use strict";var n=r(867);e.exports=function(e,t){t=t||new FormData;var r=[];function o(e){return null===e?"":n.isDate(e)?e.toISOString():n.isArrayBuffer(e)||n.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(i,s){if(n.isPlainObject(i)||n.isArray(i)){if(-1!==r.indexOf(i))throw Error("Circular reference detected in "+s);r.push(i),n.forEach(i,(function(r,i){if(!n.isUndefined(r)){var u,a=s?s+"."+i:i;if(r&&!s&&"object"==typeof r)if(n.endsWith(i,"{}"))r=JSON.stringify(r);else if(n.endsWith(i,"[]")&&(u=n.toArray(r)))return void u.forEach((function(e){!n.isUndefined(e)&&t.append(a,o(e))}));e(r,a)}})),r.pop()}else t.append(s,o(i))}(e),t}},875:function(e,t,r){"use strict";var n=r(288).version,o=r(648),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,r){function i(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,u){if(!1===e)throw new o(i(n," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[n]&&(s[n]=!0,console.warn(i(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,u)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),i=n.length;i-- >0;){var s=n[i],u=t[s];if(u){var a=e[s],c=void 0===a||u(a,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},867:function(e,t,r){"use strict";var n,o=r(849),i=Object.prototype.toString,s=(n=Object.create(null),function(e){var t=i.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())});function u(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function a(e){return Array.isArray(e)}function c(e){return void 0===e}var f=u("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var h=u("Date"),d=u("File"),g=u("Blob"),m=u("FileList");function y(e){return"[object Function]"===i.call(e)}var v=u("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var r=0,n=e.length;r0;)s[i=n[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:u,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:O,isFileList:m}},76:function(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[g.default.Put,g.default.Post,g.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var t,r,n=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:n.host,i=null!==(r=this.config.version)&&void 0!==r?r:n.version;return(0,l.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var r="send"===this.resource,n=this.resource.indexOf("sms")>-1;return r||n?"":"REST"},e.prototype.makeRequest=function(t,r,n){var i,s={url:t,params:n,data:this.getRequestBody(r),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var r="string"==typeof t,n="json"===this.responseType;return t&&r&&n?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var u=this.getCredentials();u.apiToken?s.headers.Authorization="Bearer ".concat(u.apiToken):s.auth={username:u.apiKey,password:u.apiSecret};var a=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var f=null!==(i=this.config.output)&&void 0!==i?i:a.output;return f&&(s.responseType=f),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,h.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(n(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,l.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,l.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,r){var n,o,i,s,u;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===r&&(r=!0),a(this,void 0,void 0,(function(){var a,f,l,p,g,m,y,v,b,w;return c(this,(function(c){switch(c.label){case 0:if(a=this.buildFullUrl(),this.setBaseURL(this.resource),!r)return[2,{body:v=this.getRequestBody(e),params:t,url:a}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(a,e,t)];case 2:return[2,{response:f=c.sent(),body:f.data}];case 3:if((l=c.sent())instanceof h.AxiosError)throw(p=new Error).code=l.code,p.config=l.config,l.response?(g=l.response,m=g.status,y=g.statusText,v=g.data,p.response=l.response,p.statusCode=m,p.statusText=y,b=null!==(n=null==v?void 0:v.ErrorMessage)&&void 0!==n?n:l.message,p.originalMessage=b,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(b,'"'),v&&("string"==typeof(w=null===(u=null===(s=null===(i=null===(o=v.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===u?void 0:u.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,d.setValueIfNotNil)(p,"ErrorMessage",v.ErrorMessage),(0,d.setValueIfNotNil)(p,"ErrorCode",v.ErrorCode),(0,d.setValueIfNotNil)(p,"ErrorIdentifier",v.ErrorIdentifier),(0,d.setValueIfNotNil)(p,"ErrorRelatedTo",v.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=l.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(l.message,'"')),p;throw l;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":n(window))},e.protocol="https://",e}();t.default=v},6:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=n(r(808));t.isNil=o.default;var i=n(r(376));t.isNull=i.default;var s=n(r(34));t.isUndefined=s.default;var u=n(r(818));t.isPureObject=u.default;var a=n(r(190));t.setValueIfNotNil=a.default},808:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(376)),i=n(r(34));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},818:function(e,t){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===r(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},34:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},190:function(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(r(808)),s=o(r(376));t.default=function(e,t,r){if("object"!==n(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(r)||(e[t]=r)}},431:function(e,t,r){var n;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,u=Math.ceil,a=Math.floor,c="[BigNumber Error] ",f=c+"Number primitive has more than 15 significant digits: ",l=1e14,p=14,h=9007199254740991,d=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],g=1e7,m=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function v(e){for(var t,r,n=1,o=e.length,i=e[0]+"";nc^r?1:-1;for(u=(a=o.length)<(c=i.length)?a:c,s=0;si[s]^r?1:-1;return a==c?0:a>c^r?1:-1}function w(e,t,r,n){if(er||e!==a(e))throw Error(c+(n||"Argument")+("number"==typeof e?er?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function O(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function E(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function j(e,t,r){var n,o;if(t<0){for(o=r+".";++t;o+=r);e=o+e}else if(++t>(n=e.length)){for(o=r,t-=n;--t;o+=r);e+=o}else tI?y.c=y.e=null:e.e=10;l/=10,c++);return void(c>I?y.c=y.e=null:(y.e=c,y.c=[e]))}m=String(e)}else{if(!s.test(m=String(e)))return o(y,m,d);y.s=45==m.charCodeAt(0)?(m=m.slice(1),-1):1}(c=m.indexOf("."))>-1&&(m=m.replace(".","")),(l=m.search(/e/i))>0?(c<0&&(c=l),c+=+m.slice(l+1),m=m.substring(0,l)):c<0&&(c=m.length)}else{if(w(t,2,V.length,"Base"),10==t)return H(y=new J(e),T+y.e+1,B);if(m=String(e),d="number"==typeof e){if(0*e!=0)return o(y,m,d,t);if(y.s=1/e<0?(m=m.slice(1),-1):1,J.DEBUG&&m.replace(/^0\.0*|\./,"").length>15)throw Error(f+e)}else y.s=45===m.charCodeAt(0)?(m=m.slice(1),-1):1;for(r=V.slice(0,t),c=l=0,g=m.length;lc){c=g;continue}}else if(!u&&(m==m.toUpperCase()&&(m=m.toLowerCase())||m==m.toLowerCase()&&(m=m.toUpperCase()))){u=!0,l=-1,c=0;continue}return o(y,String(e),d,t)}d=!1,(c=(m=n(m,t,10,y.s)).indexOf("."))>-1?m=m.replace(".",""):c=m.length}for(l=0;48===m.charCodeAt(l);l++);for(g=m.length;48===m.charCodeAt(--g););if(m=m.slice(l,++g)){if(g-=l,d&&J.DEBUG&&g>15&&(e>h||e!==a(e)))throw Error(f+y.s*e);if((c=c-l-1)>I)y.c=y.e=null;else if(c=D)?E(a,s):j(a,s,"0");else if(i=(e=H(new J(e),t,r)).e,u=(a=v(e.c)).length,1==n||2==n&&(t<=i||i<=k)){for(;uu){if(--t>0)for(a+=".";t--;a+="0");}else if((t+=i-u)>0)for(i+1==u&&(a+=".");t--;a+="0");return e.s<0&&o?"-"+a:a}function z(e,t){for(var r,n=1,o=new J(e[0]);n=10;o/=10,n++);return(r=n+r*p-1)>I?e.c=e.e=null:r=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,g=(f=m[h=0])/y[o-s-1]%10|0;else if((h=u((i+1)/p))>=m.length){if(!n)break e;for(;m.length<=h;m.push(0));f=g=0,o=1,s=(i%=p)-p+1}else{for(f=c=m[h],o=1;c>=10;c/=10,o++);g=(s=(i%=p)-p+o)<0?0:f/y[o-s-1]%10|0}if(n=n||t<0||null!=m[h+1]||(s<0?f:f%y[o-s-1]),n=r<4?(g||n)&&(0==r||r==(e.s<0?3:2)):g>5||5==g&&(4==r||n||6==r&&(i>0?s>0?f/y[o-s]:0:m[h-1])%10&1||r==(e.s<0?8:7)),t<1||!m[0])return m.length=0,n?(t-=e.e+1,m[0]=y[(p-t%p)%p],e.e=-t||0):m[0]=e.e=0,e;if(0==i?(m.length=h,c=1,h--):(m.length=h+1,c=y[p-i],m[h]=s>0?a(f/y[o-s]%y[s])*c:0),n)for(;;){if(0==h){for(i=1,s=m[0];s>=10;s/=10,i++);for(s=m[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,m[0]==l&&(m[0]=1));break}if(m[h]+=c,m[h]!=l)break;m[h--]=0,c=1}for(i=m.length;0===m[--i];m.pop());}e.e>I?e.c=e.e=null:e.e=D?E(t,r):j(t,r,"0"),e.s<0?"-"+t:t)}return J.clone=e,J.ROUND_UP=0,J.ROUND_DOWN=1,J.ROUND_CEIL=2,J.ROUND_FLOOR=3,J.ROUND_HALF_UP=4,J.ROUND_HALF_DOWN=5,J.ROUND_HALF_EVEN=6,J.ROUND_HALF_CEIL=7,J.ROUND_HALF_FLOOR=8,J.EUCLID=9,J.config=J.set=function(e){var t,r;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(r=e[t],0,m,t),T=r),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(r=e[t],0,8,t),B=r),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((r=e[t])&&r.pop?(w(r[0],-m,0,t),w(r[1],0,m,t),k=r[0],D=r[1]):(w(r,-m,m,t),k=-(D=r<0?-r:r))),e.hasOwnProperty(t="RANGE"))if((r=e[t])&&r.pop)w(r[0],-m,-1,t),w(r[1],1,m,t),U=r[0],I=r[1];else{if(w(r,-m,m,t),!r)throw Error(c+t+" cannot be zero: "+r);U=-(I=r<0?-r:r)}if(e.hasOwnProperty(t="CRYPTO")){if((r=e[t])!==!!r)throw Error(c+t+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!r,Error(c+"crypto unavailable");L=r}else L=r}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(r=e[t],0,9,t),M=r),e.hasOwnProperty(t="POW_PRECISION")&&(w(r=e[t],0,m,t),F=r),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(r=e[t]))throw Error(c+t+" not an object: "+r);q=r}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(r=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(c+t+" invalid: "+r);V=r}}return{DECIMAL_PLACES:T,ROUNDING_MODE:B,EXPONENTIAL_AT:[k,D],RANGE:[U,I],CRYPTO:L,MODULO_MODE:M,POW_PRECISION:F,FORMAT:q,ALPHABET:V}},J.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!J.DEBUG)return!0;var t,r,n=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===i||-1===i)&&o>=-m&&o<=m&&o===a(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(n[0]).length==t){for(t=0;t=l||r!==a(r))break e;if(0!==r)return!0}}}else if(null===n&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},J.maximum=J.max=function(){return z(arguments,R.lt)},J.minimum=J.min=function(){return z(arguments,R.gt)},J.random=(i=9007199254740992,A=Math.random()*i&2097151?function(){return a(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,r,n,o,i,s=0,f=[],l=new J(C);if(null==e?e=T:w(e,0,m),o=u(e/p),L)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(f.push(i%1e14),s+=7);s=o/7}if(!L)for(;s=10;i/=10,s++);sr-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/r|0,s[o]%=r)}return s.reverse()}return function(n,o,i,s,u){var a,c,f,l,p,h,d,g,m=n.indexOf("."),y=T,b=B;for(m>=0&&(l=F,F=0,n=n.replace(".",""),h=(g=new J(o)).pow(n.length-m),F=l,g.c=t(j(v(h.c),h.e,"0"),10,i,e),g.e=g.c.length),f=l=(d=t(n,o,i,u?(a=V,e):(a=e,V))).length;0==d[--l];d.pop());if(!d[0])return a.charAt(0);if(m<0?--f:(h.c=d,h.e=f,h.s=s,d=(h=r(h,g,y,b,i)).c,p=h.r,f=h.e),m=d[c=f+y+1],l=i/2,p=p||c<0||null!=d[c+1],p=b<4?(null!=m||p)&&(0==b||b==(h.s<0?3:2)):m>l||m==l&&(4==b||p||6==b&&1&d[c-1]||b==(h.s<0?8:7)),c<1||!d[0])n=p?j(a.charAt(1),-y,a.charAt(0)):a.charAt(0);else{if(d.length=c,p)for(--i;++d[--c]>i;)d[c]=0,c||(++f,d=[1].concat(d));for(l=d.length;!d[--l];);for(m=0,n="";m<=l;n+=a.charAt(d[m++]));n=j(n,f,a.charAt(0))}return n}}(),r=function(){function e(e,t,r){var n,o,i,s,u=0,a=e.length,c=t%g,f=t/g|0;for(e=e.slice();a--;)u=((o=c*(i=e[a]%g)+(n=f*i+(s=e[a]/g|0)*c)%g*g+u)/r|0)+(n/g|0)+f*s,e[a]=o%r;return u&&(e=[u].concat(e)),e}function t(e,t,r,n){var o,i;if(r!=n)i=r>n?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function r(e,t,r,n){for(var o=0;r--;)e[r]-=o,o=e[r]1;e.splice(0,1));}return function(n,o,i,s,u){var c,f,h,d,g,m,v,b,w,O,E,j,A,x,_,S,N,P=n.s==o.s?1:-1,R=n.c,C=o.c;if(!(R&&R[0]&&C&&C[0]))return new J(n.s&&o.s&&(R?!C||R[0]!=C[0]:C)?R&&0==R[0]||!C?0*P:P/0:NaN);for(w=(b=new J(P)).c=[],P=i+(f=n.e-o.e)+1,u||(u=l,f=y(n.e/p)-y(o.e/p),P=P/p|0),h=0;C[h]==(R[h]||0);h++);if(C[h]>(R[h]||0)&&f--,P<0)w.push(1),d=!0;else{for(x=R.length,S=C.length,h=0,P+=2,(g=a(u/(C[0]+1)))>1&&(C=e(C,g,u),R=e(R,g,u),S=C.length,x=R.length),A=S,E=(O=R.slice(0,S)).length;E=u/2&&_++;do{if(g=0,(c=t(C,O,S,E))<0){if(j=O[0],S!=E&&(j=j*u+(O[1]||0)),(g=a(j/_))>1)for(g>=u&&(g=u-1),v=(m=e(C,g,u)).length,E=O.length;1==t(m,O,v,E);)g--,r(m,S=10;P/=10,h++);H(b,i+(b.e=h+f*p-1)+1,s,d)}else b.e=f,b.r=+d;return b}}(),x=/^(-?)0([xbo])(?=\w[\w.]*$)/i,_=/^([^.]+)\.$/,S=/^\.([^.]+)$/,N=/^-?(Infinity|NaN)$/,P=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,r,n){var o,i=r?t:t.replace(P,"");if(N.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!r&&(i=i.replace(x,(function(e,t,r){return o="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=o?e:t})),n&&(o=n,i=i.replace(_,"$1").replace(S,"0.$1")),t!=i))return new J(i,o);if(J.DEBUG)throw Error(c+"Not a"+(n?" base "+n:"")+" number: "+t);e.s=null}e.c=e.e=null},R.absoluteValue=R.abs=function(){var e=new J(this);return e.s<0&&(e.s=1),e},R.comparedTo=function(e,t){return b(this,new J(e,t))},R.decimalPlaces=R.dp=function(e,t){var r,n,o,i=this;if(null!=e)return w(e,0,m),null==t?t=B:w(t,0,8),H(new J(i),e+i.e+1,t);if(!(r=i.c))return null;if(n=((o=r.length-1)-y(this.e/p))*p,o=r[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},R.dividedBy=R.div=function(e,t){return r(this,new J(e,t),T,B)},R.dividedToIntegerBy=R.idiv=function(e,t){return r(this,new J(e,t),0,1)},R.exponentiatedBy=R.pow=function(e,t){var r,n,o,i,s,f,l,h,d=this;if((e=new J(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+K(e));if(null!=t&&(t=new J(t)),s=e.e>14,!d.c||!d.c[0]||1==d.c[0]&&!d.e&&1==d.c.length||!e.c||!e.c[0])return h=new J(Math.pow(+K(d),s?2-O(e):+K(e))),t?h.mod(t):h;if(f=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new J(NaN);(n=!f&&d.isInteger()&&t.isInteger())&&(d=d.mod(t))}else{if(e.e>9&&(d.e>0||d.e<-1||(0==d.e?d.c[0]>1||s&&d.c[1]>=24e7:d.c[0]<8e13||s&&d.c[0]<=9999975e7)))return i=d.s<0&&O(e)?-0:0,d.e>-1&&(i=1/i),new J(f?1/i:i);F&&(i=u(F/p+2))}for(s?(r=new J(.5),f&&(e.s=1),l=O(e)):l=(o=Math.abs(+K(e)))%2,h=new J(C);;){if(l){if(!(h=h.times(d)).c)break;i?h.c.length>i&&(h.c.length=i):n&&(h=h.mod(t))}if(o){if(0===(o=a(o/2)))break;l=o%2}else if(H(e=e.times(r),e.e+1,1),e.e>14)l=O(e);else{if(0==(o=+K(e)))break;l=o%2}d=d.times(d),i?d.c&&d.c.length>i&&(d.c.length=i):n&&(d=d.mod(t))}return n?h:(f&&(h=C.div(h)),t?h.mod(t):i?H(h,F,B,void 0):h)},R.integerValue=function(e){var t=new J(this);return null==e?e=B:w(e,0,8),H(t,t.e+1,e)},R.isEqualTo=R.eq=function(e,t){return 0===b(this,new J(e,t))},R.isFinite=function(){return!!this.c},R.isGreaterThan=R.gt=function(e,t){return b(this,new J(e,t))>0},R.isGreaterThanOrEqualTo=R.gte=function(e,t){return 1===(t=b(this,new J(e,t)))||0===t},R.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},R.isLessThan=R.lt=function(e,t){return b(this,new J(e,t))<0},R.isLessThanOrEqualTo=R.lte=function(e,t){return-1===(t=b(this,new J(e,t)))||0===t},R.isNaN=function(){return!this.s},R.isNegative=function(){return this.s<0},R.isPositive=function(){return this.s>0},R.isZero=function(){return!!this.c&&0==this.c[0]},R.minus=function(e,t){var r,n,o,i,s=this,u=s.s;if(t=(e=new J(e,t)).s,!u||!t)return new J(NaN);if(u!=t)return e.s=-t,s.plus(e);var a=s.e/p,c=e.e/p,f=s.c,h=e.c;if(!a||!c){if(!f||!h)return f?(e.s=-t,e):new J(h?s:NaN);if(!f[0]||!h[0])return h[0]?(e.s=-t,e):new J(f[0]?s:3==B?-0:0)}if(a=y(a),c=y(c),f=f.slice(),u=a-c){for((i=u<0)?(u=-u,o=f):(c=a,o=h),o.reverse(),t=u;t--;o.push(0));o.reverse()}else for(n=(i=(u=f.length)<(t=h.length))?u:t,u=t=0;t0)for(;t--;f[r++]=0);for(t=l-1;n>u;){if(f[--n]=0;){for(r=0,d=j[o]%w,m=j[o]/w|0,i=o+(s=a);i>o;)r=((c=d*(c=E[--s]%w)+(u=m*c+(f=E[s]/w|0)*d)%w*w+v[i]+r)/b|0)+(u/w|0)+m*f,v[i--]=c%b;v[i]=r}return r?++n:v.splice(0,1),G(e,v,n)},R.negated=function(){var e=new J(this);return e.s=-e.s||null,e},R.plus=function(e,t){var r,n=this,o=n.s;if(t=(e=new J(e,t)).s,!o||!t)return new J(NaN);if(o!=t)return e.s=-t,n.minus(e);var i=n.e/p,s=e.e/p,u=n.c,a=e.c;if(!i||!s){if(!u||!a)return new J(o/0);if(!u[0]||!a[0])return a[0]?e:new J(u[0]?n:0*o)}if(i=y(i),s=y(s),u=u.slice(),o=i-s){for(o>0?(s=i,r=a):(o=-o,r=u),r.reverse();o--;r.push(0));r.reverse()}for((o=u.length)-(t=a.length)<0&&(r=a,a=u,u=r,t=o),o=0;t;)o=(u[--t]=u[t]+a[t]+o)/l|0,u[t]=l===u[t]?0:u[t]%l;return o&&(u=[o].concat(u),++s),G(e,u,s)},R.precision=R.sd=function(e,t){var r,n,o,i=this;if(null!=e&&e!==!!e)return w(e,1,m),null==t?t=B:w(t,0,8),H(new J(i),e,t);if(!(r=i.c))return null;if(n=(o=r.length-1)*p+1,o=r[o]){for(;o%10==0;o/=10,n--);for(o=r[0];o>=10;o/=10,n++);}return e&&i.e+1>n&&(n=i.e+1),n},R.shiftedBy=function(e){return w(e,-9007199254740991,h),this.times("1e"+e)},R.squareRoot=R.sqrt=function(){var e,t,n,o,i,s=this,u=s.c,a=s.s,c=s.e,f=T+4,l=new J("0.5");if(1!==a||!u||!u[0])return new J(!a||a<0&&(!u||u[0])?NaN:u?s:1/0);if(0==(a=Math.sqrt(+K(s)))||a==1/0?(((t=v(u)).length+c)%2==0&&(t+="0"),a=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),n=new J(t=a==1/0?"5e"+c:(t=a.toExponential()).slice(0,t.indexOf("e")+1)+c)):n=new J(a+""),n.c[0])for((a=(c=n.e)+f)<3&&(a=0);;)if(i=n,n=l.times(i.plus(r(s,i,f,1))),v(i.c).slice(0,a)===(t=v(n.c)).slice(0,a)){if(n.e0&&g>0){for(i=g%u||u,l=d.substr(0,i);i0&&(l+=f+d.slice(i)),h&&(l="-"+l)}n=p?l+(r.decimalSeparator||"")+((a=+r.fractionGroupSize)?p.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):p):l}return(r.prefix||"")+n+(r.suffix||"")},R.toFraction=function(e){var t,n,o,i,s,u,a,f,l,h,g,m,y=this,b=y.c;if(null!=e&&(!(a=new J(e)).isInteger()&&(a.c||1!==a.s)||a.lt(C)))throw Error(c+"Argument "+(a.isInteger()?"out of range: ":"not an integer: ")+K(a));if(!b)return new J(y);for(t=new J(C),l=n=new J(C),o=f=new J(C),m=v(b),s=t.e=m.length-y.e-1,t.c[0]=d[(u=s%p)<0?p+u:u],e=!e||a.comparedTo(t)>0?s>0?t:l:a,u=I,I=1/0,a=new J(m),f.c[0]=0;h=r(a,t,0,1),1!=(i=n.plus(h.times(o))).comparedTo(e);)n=o,o=i,l=f.plus(h.times(i=l)),f=i,t=a.minus(h.times(i=t)),a=i;return i=r(e.minus(n),o,0,1),f=f.plus(i.times(l)),n=n.plus(i.times(o)),f.s=l.s=y.s,g=r(l,o,s*=2,B).minus(y).abs().comparedTo(r(f,n,s,B).minus(y).abs())<1?[l,o]:[f,n],I=u,g},R.toNumber=function(){return+K(this)},R.toPrecision=function(e,t){return null!=e&&w(e,1,m),$(this,e,t,2)},R.toString=function(e){var t,r=this,o=r.s,i=r.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=k||i>=D?E(v(r.c),i):j(v(r.c),i,"0"):10===e?t=j(v((r=H(new J(r),T+i+1,B)).c),r.e,"0"):(w(e,2,V.length,"Base"),t=n(j(v(r.c),i,"0"),10,e,o,!0)),o<0&&r.c[0]&&(t="-"+t)),t},R.valueOf=R.toJSON=function(){return K(this)},R._isBigNumber=!0,null!=t&&J.set(t),J}(),i.default=i.BigNumber=i,void 0===(n=function(){return i}.call(t,r,t,e))||(e.exports=n)}()},400:function(e,t,r){var n=r(123).stringify,o=r(813);e.exports=function(e){return{parse:o(e),stringify:n}},e.exports.parse=o(),e.exports.stringify=n},813:function(e,t,r){var n=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,u,a,c,f={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},l=function(e){throw{name:"SyntaxError",message:e,at:s,text:a}},p=function(e){return e&&e!==u&&l("Expected '"+e+"' instead of '"+u+"'"),u=a.charAt(s),s+=1,u},h=function(){var e,o="";for("-"===u&&(o="-",p("-"));u>="0"&&u<="9";)o+=u,p();if("."===u)for(o+=".";p()&&u>="0"&&u<="9";)o+=u;if("e"===u||"E"===u)for(o+=u,p(),"-"!==u&&"+"!==u||(o+=u,p());u>="0"&&u<="9";)o+=u,p();if(e=+o,isFinite(e))return null==n&&(n=r(431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new n(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new n(e):e;l("Bad number")},d=function(){var e,t,r,n="";if('"'===u)for(var o=s;p();){if('"'===u)return s-1>o&&(n+=a.substring(o,s-1)),p(),n;if("\\"===u){if(s-1>o&&(n+=a.substring(o,s-1)),p(),"u"===u){for(r=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)r=16*r+e;n+=String.fromCharCode(r)}else{if("string"!=typeof f[u])break;n+=f[u]}o=s}}l("Bad string")},g=function(){for(;u&&u<=" ";)p()};return c=function(){switch(g(),u){case"{":return function(){var e,r=Object.create(null);if("{"===u){if(p("{"),g(),"}"===u)return p("}"),r;for(;u;){if(e=d(),g(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(r,e)&&l('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?l("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():r[e]=c():!0===i.test(e)?"error"===t.constructorAction?l("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():r[e]=c():r[e]=c(),g(),"}"===u)return p("}"),r;p(","),g()}}l("Bad object")}();case"[":return function(){var e=[];if("["===u){if(p("["),g(),"]"===u)return p("]"),e;for(;u;){if(e.push(c()),g(),"]"===u)return p("]"),e;p(","),g()}}l("Bad array")}();case'"':return d();case"-":return h();default:return u>="0"&&u<="9"?h():function(){switch(u){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}l("Unexpected '"+u+"'")}()}},function(e,t){var r;return a=e+"",s=0,u=" ",r=c(),g(),u&&l("Syntax error"),"function"==typeof t?function e(r,n){var o,i=r[n];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(r,n,i)}({"":r},""):r}}},123:function(e,t,r){var n=r(431),o=e.exports;!function(){"use strict";var e,t,r,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function u(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function a(o,i){var s,c,f,l,p,h=e,d=i[o],g=null!=d&&(d instanceof n||n.isBigNumber(d));switch(d&&"object"==typeof d&&"function"==typeof d.toJSON&&(d=d.toJSON(o)),"function"==typeof r&&(d=r.call(i,o,d)),typeof d){case"string":return g?d:u(d);case"number":return isFinite(d)?String(d):"null";case"boolean":case"null":case"bigint":return String(d);case"object":if(!d)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(d)){for(l=d.length,s=0;s1){var r=e.shift();e[0]=r+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n0&&(o=o.replace(/^[\/]+/,"")),o=n0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(n=i)?n.call(t,r,t,e):n)||(e.exports=o)},147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"5.0.0","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"],"standard-version":{"commitUrlFormat":"https://github.com/mailjet/mailjet-apiv3-nodejs/commits/{{hash}}","compareUrlFormat":"https://github.com/mailjet/mailjet-apiv3-nodejs/compare/{{previousTag}}...{{currentTag}}","types":[{"type":"breaking","section":"Breaking changes"},{"type":"security","section":"Dependency changes for security"},{"type":"feature","section":"Added features"},{"type":"deprecate","section":"Deprecated features"},{"type":"remove","section":"Removed features"},{"type":"fix","section":"Bug Fixes"},{"type":"test","section":"Tests"},{"type":"build","section":"Build changes"},{"type":"docs","section":"Docs changes"},{"type":"other","section":"Other changes"},{"type":"chore","hidden":true}],"scripts":{"prerelease":"npm run build:release","postchangelog":"npm run build:prepublish && git add -A dist","posttag":"git push && git push --tags"}}}')}},t={},r=function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}(321),r;var e,t,r})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPa2QsRUFOcUIsaUJBQWpCMWQsVUFBVSxHQUNYQSxVQUFVLEdBRVYsR0FBR2pELE1BQU0vRSxLQUFLZ0ksY0F0RVcxUSxFQUFPQyxRQUFTRCxFQUFPQyxRQUFVd3VCLFNBQ0EsMEJBQWpCLEtBQWlCLG14SkNEcEVDLEVBQTJCLEdDRTNCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUJscUIsSUFBakJtcUIsRUFDSCxPQUFPQSxFQUFhN3VCLFFBR3JCLElBQUlELEVBQVMwdUIsRUFBeUJHLEdBQVksQ0FHakQ1dUIsUUFBUyxJQU9WLE9BSEE4dUIsRUFBb0JGLEdBQVVubUIsS0FBSzFJLEVBQU9DLFFBQVNELEVBQVFBLEVBQU9DLFFBQVMydUIsR0FHcEU1dUIsRUFBT0MsUUNsQlcydUIsQ0FBb0IsYURGMUNGLEVDRUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzTnVsbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNQdXJlT2JqZWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYmlnbnVtYmVyLmpzL2JpZ251bWJlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHZhciBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcbiAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuXG4gICAgdmFyIGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCAoaXNPYmplY3RQYXlsb2FkICYmIGNvbnRlbnRUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7XG4gICAgICB2YXIgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG4gICAgICByZXR1cm4gdG9Gb3JtRGF0YShpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLCBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHJlcXVpcmUoJy4vZW52L0Zvcm1EYXRhJylcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3Rcbm1vZHVsZS5leHBvcnRzID0gbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgdmFyIG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyBGb3JtRGF0YSgpO1xuXG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZChkYXRhLCBwYXJlbnRLZXkpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChkYXRhKSB8fCB1dGlscy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihkYXRhKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGFyZW50S2V5KTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaChkYXRhKTtcblxuICAgICAgdXRpbHMuZm9yRWFjaChkYXRhLCBmdW5jdGlvbiBlYWNoKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZnVsbEtleSA9IHBhcmVudEtleSA/IHBhcmVudEtleSArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgdmFyIGFycjtcblxuICAgICAgICBpZiAodmFsdWUgJiYgIXBhcmVudEtleSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh1dGlscy5lbmRzV2l0aChrZXksICdbXScpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAhdXRpbHMuaXNVbmRlZmluZWQoZWwpICYmIGZvcm1EYXRhLmFwcGVuZChmdWxsS2V5LCBjb252ZXJ0VmFsdWUoZWwpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkKHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgY29udmVydFZhbHVlKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIga2luZE9mID0gKGZ1bmN0aW9uKGNhY2hlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG4gIH07XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpc0tpbmRPZih0aGluZykge1xuICAgIHJldHVybiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodGhpbmcpIHtcbiAgdmFyIHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0cyhjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIHRvRmxhdE9iamVjdChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlcikge1xuICB2YXIgcHJvcHM7XG4gIHZhciBpO1xuICB2YXIgcHJvcDtcbiAgdmFyIG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLypcbiAqIGRldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIHZhciBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHRoaW5nKSB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICB2YXIgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKGlzVW5kZWZpbmVkKGkpKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGlzVHlwZWRBcnJheSA9IChmdW5jdGlvbihUeXBlZEFycmF5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NLFxuICBpbmhlcml0czogaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdDogdG9GbGF0T2JqZWN0LFxuICBraW5kT2Y6IGtpbmRPZixcbiAga2luZE9mVGVzdDoga2luZE9mVGVzdCxcbiAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdDogaXNGaWxlTGlzdFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbmltcG9ydCB7XG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn0gZnJvbSAnQHV0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4uL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuaW1wb3J0IHsgSUNsaWVudFBhcmFtcyB9IGZyb20gJy4vSUNsaWVudCc7XG5pbXBvcnQgeyBJUmVxdWVzdENvbmZpZywgSVJlcXVlc3RPcHRpb25zLCBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnIH0gZnJvbSAnLi4vcmVxdWVzdC9JUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuLypvdGhlciovXG5cbmV4cG9ydCB0eXBlIFRDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxJQ2xpZW50UGFyYW1zLCAnY29uZmlnJyB8ICdvcHRpb25zJz47XG5cbmNsYXNzIENsaWVudCB7XG4gIHByaXZhdGUgdmVyc2lvbiE6IHN0cmluZztcblxuICBwcml2YXRlIGNvbmZpZyE6IElSZXF1ZXN0Q29uZmlnO1xuICBwcml2YXRlIG9wdGlvbnMhOiBJUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCh0aGlzLmNsb25lUGFyYW1zKHBhcmFtcykpO1xuICB9XG5cbiAgcHVibGljIGdldFBhY2thZ2VWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VjcmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2VuO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuR2V0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUG9zdCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcHV0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5EZWxldGUsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGFwaVRva2VuLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXBpU2VjcmV0LFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICB9ID0gcGFyYW1zO1xuXG4gICAgdGhpcy52ZXJzaW9uID0gQ2xpZW50LnBhY2thZ2VKU09OLnZlcnNpb247XG5cbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcgPz8gbnVsbCk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMgPz8gbnVsbCk7XG5cbiAgICByZXR1cm4gJ2FwaVRva2VuJyBpbiBwYXJhbXNcbiAgICAgID8gdGhpcy50b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbilcbiAgICAgIDogdGhpcy5iYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXksIGFwaVNlY3JldCk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGFyYW1zKHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPElSZXF1ZXN0Q29uZmlnPiB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjdXN0b21Db25maWdcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0geyAuLi5DbGllbnQuY29uZmlnIH07XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ2hvc3QnLCBjdXN0b21Db25maWcuaG9zdCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ291dHB1dCcsIGN1c3RvbUNvbmZpZy5vdXRwdXQpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICd2ZXJzaW9uJywgY3VzdG9tQ29uZmlnLnZlcnNpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zIHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJvcHRpb25zXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfVE9LRU4gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaVRva2VuID0gYXBpVG9rZW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFwaVNlY3JldDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfS0VZIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghYXBpU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1NFQ1JFVCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwaUNvbm5lY3QoYXBpS2V5OiBzdHJpbmcsIGFwaVNlY3JldDogc3RyaW5nLCBwYXJhbXM/OiBUQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBUQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpVG9rZW4sIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlnOiBSZWFkb25seTxJUmVxdWVzdENvbmZpZz4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBob3N0OiAnYXBpLm1haWxqZXQuY29tJyxcbiAgICB2ZXJzaW9uOiAndjMnLFxuICAgIG91dHB1dDogJ2pzb24nLFxuICB9IGFzIGNvbnN0KTtcblxuICBwdWJsaWMgc3RhdGljIHBhY2thZ2VKU09OID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgLi4ucGFja2FnZUpTT04sXG4gIH0gYXMgY29uc3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDbGllbnQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0L2luZGV4JztcbmltcG9ydCBDbGllbnQgZnJvbSAnLi9jbGllbnQvaW5kZXgnO1xuLypvdGhlciovXG5cbmNsYXNzIE1haWxqZXQgZXh0ZW5kcyBDbGllbnQge1xuICBzdGF0aWMgUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIHN0YXRpYyBIdHRwTWV0aG9kcyA9IEh0dHBNZXRob2RzO1xufVxuXG5leHBvcnQgeyBDbGllbnQsIFJlcXVlc3QsIEh0dHBNZXRob2RzIH07XG5leHBvcnQgZGVmYXVsdCBNYWlsamV0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZW51bSBIdHRwTWV0aG9kcyB7XG4gIEdldCA9ICdnZXQnLFxuICBQb3N0ID0gJ3Bvc3QnLFxuICBQdXQgPSAncHV0JyxcbiAgRGVsZXRlID0gJ2RlbGV0ZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSHR0cE1ldGhvZHM7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuaW1wb3J0IHVybEpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEpTT05CaWdJbnQgZnJvbSAnanNvbi1iaWdpbnQnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG4vKnV0aWxzKi9cbmltcG9ydCB7IHNldFZhbHVlSWZOb3ROaWwgfSBmcm9tICdAdXRpbHMvaW5kZXgnO1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnQGN1c3RvbS90eXBlcyc7XG5pbXBvcnQgeyBJQVBJTG9jYWxSZXNwb25zZSwgSUFQSVJlc3BvbnNlIH0gZnJvbSAnQG1haWxqZXQvdHlwZXMvYXBpL1Jlc3BvbnNlJztcbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL0h0dHBNZXRob2RzJztcbmltcG9ydCB7XG4gIElSZXF1ZXN0Q29uZmlnLFxuICBUUmVxdWVzdERhdGEsXG4gIFRSZXF1ZXN0UGFyYW1zLFxuICBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICBUUmVxdWVzdEF4aW9zQ29uZmlnLFxuICBUU3ViUGF0aCxcbn0gZnJvbSAnLi9JUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgQ2xpZW50IGZyb20gJy4uL2NsaWVudCc7XG4vKm90aGVyKi9cblxudHlwZSBUVW5rbm93blJlYyA9IFRPYmplY3QuVFVua25vd25SZWNcblxuY29uc3QgSlNPTmIgPSBKU09OQmlnSW50KHsgc3RvcmVBc1N0cmluZzogdHJ1ZSB9KTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBIdHRwTWV0aG9kcztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFBhcnRpYWw8SVJlcXVlc3RDb25maWc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzdWJQYXRoOiBUU3ViUGF0aDtcbiAgcHJpdmF0ZSBhY3Rpb25QYXRoOiBzdHJpbmcgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZHMsXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcbiAgICBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICApIHtcbiAgICBpZiAoIShjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY2xpZW50XCIgbXVzdCBiZSBpbnN0YW5jZSBvZiBDbGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoSHR0cE1ldGhvZHMpLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJtZXRob2RcIiBtdXN0IGJlIG9uZSBvZiBzdXBwb3J0ZWQgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicmVzb3VyY2VcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbnVsbDtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyQWdlbnQoKSB7XG4gICAgcmV0dXJuIGBtYWlsamV0LWFwaS12My1ub2RlanMvJHt0aGlzLmNsaWVudC5nZXRQYWNrYWdlVmVyc2lvbigpfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVRva2VuOiB0aGlzLmNsaWVudC5nZXRBUElUb2tlbigpLFxuICAgICAgYXBpS2V5OiB0aGlzLmNsaWVudC5nZXRBUElLZXkoKSxcbiAgICAgIGFwaVNlY3JldDogdGhpcy5jbGllbnQuZ2V0QVBJU2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ1cmxcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwuaW5kZXhPZigndGV4dDpwbGFpbicpID4gLTFcbiAgICAgID8gJ3RleHQvcGxhaW4nXG4gICAgICA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdEJvZHkoZGF0YTogVFJlcXVlc3REYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEh0dHBNZXRob2RzLlB1dCxcbiAgICAgIEh0dHBNZXRob2RzLlBvc3QsXG4gICAgICBIdHRwTWV0aG9kcy5EZWxldGUsXG4gICAgXS5pbmNsdWRlcyh0aGlzLm1ldGhvZCkgPyBkYXRhIDoge307XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVsbFVybCgpIHtcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0ID8/IGNsaWVudENvbmZpZy5ob3N0O1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8/IGNsaWVudENvbmZpZy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHVybEpvaW4oUmVxdWVzdC5wcm90b2NvbCwgaG9zdCwgdmVyc2lvbiwgdGhpcy5zdWJQYXRoLCB0aGlzLnVybCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViUGF0aCgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjb25zdCBpc0NvbnRhY3RMaXN0V2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdjb250YWN0c2xpc3QnICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICBjb25zdCBpc0JhdGNoSm9iV2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdiYXRjaGpvYicgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuXG4gICAgICByZXR1cm4gKGlzQ29udGFjdExpc3RXaXRoQ1NWIHx8IGlzQmF0Y2hKb2JXaXRoQ1NWKSA/ICdEQVRBJyA6IHRoaXMuc3ViUGF0aDtcbiAgICB9XG4gICAgY29uc3QgaXNTZW5kUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlID09PSAnc2VuZCc7XG4gICAgY29uc3QgcmVzb3VyY2VDb250YWluU01TID0gdGhpcy5yZXNvdXJjZS5pbmRleE9mKCdzbXMnKSA+IC0xO1xuXG4gICAgcmV0dXJuICghaXNTZW5kUmVzb3VyY2UgJiYgIXJlc291cmNlQ29udGFpblNNUykgPyAnUkVTVCcgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcsIGRhdGE6IFRSZXF1ZXN0RGF0YSwgcGFyYW1zOiBUUmVxdWVzdFBhcmFtcykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyNyZXF1ZXN0LWNvbmZpZ1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFRSZXF1ZXN0QXhpb3NDb25maWcgPSB7XG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpLFxuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHRoaXMuZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0aGlzLmdldENvbnRlbnRUeXBlKHVybCksXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2VEYXRhOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IGRhdGFJc1N0cmluZyA9IHR5cGVvZiByZXNwb25zZURhdGEgPT09ICdzdHJpbmcnO1xuICAgICAgICBjb25zdCBpc0pTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgZGF0YUlzU3RyaW5nICYmIGlzSlNPTlJlcXVlc3RlZCkge1xuICAgICAgICAgIHJldHVybiBSZXF1ZXN0LnBhcnNlVG9KU09OYihyZXNwb25zZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEJST1dTRVIgU0lERVxuICAgIGlmIChSZXF1ZXN0LmlzQnJvd3NlcigpKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1gtVXNlci1BZ2VudCddID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgfVxuXG4gICAgLy8gQVVUSFxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5nZXRDcmVkZW50aWFscygpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmFwaVRva2VuKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjcmVkZW50aWFscy5hcGlUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmF1dGggPSB7XG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMuYXBpU2VjcmV0IGFzIHN0cmluZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT1BUSU9OU1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB0aGlzLmNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAvLyAxLiBUaW1lb3V0XG4gICAgaWYgKGNsaWVudE9wdGlvbnMudGltZW91dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy50aW1lb3V0ID0gY2xpZW50T3B0aW9ucy50aW1lb3V0O1xuICAgIH1cblxuICAgIC8vIDIuIFByb3h5XG4gICAgaWYgKGNsaWVudE9wdGlvbnMucHJveHkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucHJveHkgPSBjbGllbnRPcHRpb25zLnByb3h5O1xuICAgIH1cblxuICAgIC8vIDMuIEhlYWRlcnNcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGNsaWVudE9wdGlvbnMuaGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLmhlYWRlcnMsXG4gICAgICAgIC4uLmNsaWVudE9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gNC4gT3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5jb25maWcub3V0cHV0ID8/IGNsaWVudENvbmZpZy5vdXRwdXQ7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5yZXNwb25zZVR5cGUgPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNS4gTWF4IHJlcXVlc3QgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhCb2R5TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDYuIE1heCByZXNwb25zZSBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heENvbnRlbnRMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9zKHJlcXVlc3RDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCYXNlVVJMKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAoIVsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ2YWx1ZVwiIG11c3QgYmUgc3RyaW5nIG9yIG51bWJlcicpO1xuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm5hbWVcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjYXNlICdjc3ZkYXRhJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjc3ZlcnJvcic6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdGhpcy5hY3Rpb25QYXRoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YT4oXG4gICAgZGF0YT86IFRSZXF1ZXN0RGF0YSxcbiAgICBwYXJhbXM/OiBUUmVxdWVzdFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IHRydWUsXG4gICk6IFByb21pc2U8SUFQSVJlc3BvbnNlPFRCb2R5Pj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YSwgVFBhcmFtcyBleHRlbmRzIFRVbmtub3duUmVjPihcbiAgICBkYXRhPzogVEJvZHksXG4gICAgcGFyYW1zPzogVFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IGZhbHNlLFxuICApOiBQcm9taXNlPElBUElMb2NhbFJlc3BvbnNlPFRCb2R5LCBUUGFyYW1zPj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YSwgVFBhcmFtcyBleHRlbmRzIFRVbmtub3duUmVjPihcbiAgICBkYXRhOiBUUmVxdWVzdERhdGEgfCBUQm9keSA9IHt9LFxuICAgIHBhcmFtczogVFJlcXVlc3RQYXJhbXMgfCBUUGFyYW1zID0ge30sXG4gICAgcGVyZm9ybUFQSUNhbGwgPSB0cnVlLFxuICApOiBQcm9taXNlPElBUElSZXNwb25zZTxUQm9keT4gfCBJQVBJTG9jYWxSZXNwb25zZTxUQm9keSwgVFBhcmFtcz4+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRnVsbFVybCgpO1xuICAgIHRoaXMuc2V0QmFzZVVSTCh0aGlzLnJlc291cmNlKTtcblxuICAgIGlmICghcGVyZm9ybUFQSUNhbGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHVybCxcbiAgICAgIH0gYXMgSUFQSUxvY2FsUmVzcG9uc2U8VEJvZHksIFRQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzUHVyZU9iamVjdCBmcm9tICcuL2lzUHVyZU9iamVjdCc7XG5pbXBvcnQgc2V0VmFsdWVJZk5vdE5pbCBmcm9tICcuL3NldFZhbHVlSWZOb3ROaWwnO1xuXG5leHBvcnQge1xuICBpc05pbCxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOaWwodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTnVsbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzUHVyZU9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmIHZhbHVlICE9PSBudWxsXG4gICAgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHVyZU9iamVjdDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJ0BjdXN0b20vdHlwZXMnO1xuLyp1dGlscyovXG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUlmTm90TmlsKFxuICB0YXJnZXRPYmplY3Q6IFRPYmplY3QuVFVua25vd25SZWMsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXRPYmplY3QgIT09ICdvYmplY3QnIHx8IGlzTnVsbCh0YXJnZXRPYmplY3QpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwidGFyZ2V0T2JqZWN0XCIgaXMgbm90IG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwicGF0aFwiIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIWlzTmlsKHZhbHVlKSkge1xuICAgIHRhcmdldE9iamVjdFtwYXRoXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZhbHVlSWZOb3ROaWw7XG4iLCI7KGZ1bmN0aW9uIChnbG9iYWxPYmplY3QpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4vKlxyXG4gKiAgICAgIGJpZ251bWJlci5qcyB2OS4wLjFcclxuICogICAgICBBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljLlxyXG4gKiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2JpZ251bWJlci5qc1xyXG4gKiAgICAgIENvcHlyaWdodCAoYykgMjAyMCBNaWNoYWVsIE1jbGF1Z2hsaW4gPE04Y2g4OGxAZ21haWwuY29tPlxyXG4gKiAgICAgIE1JVCBMaWNlbnNlZC5cclxuICpcclxuICogICAgICBCaWdOdW1iZXIucHJvdG90eXBlIG1ldGhvZHMgICAgIHwgIEJpZ051bWJlciBtZXRob2RzXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgIGFicyAgICB8ICBjbG9uZVxyXG4gKiAgICAgIGNvbXBhcmVkVG8gICAgICAgICAgICAgICAgICAgICAgfCAgY29uZmlnICAgICAgICAgICAgICAgc2V0XHJcbiAqICAgICAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgIGRwICAgICB8ICAgICAgREVDSU1BTF9QTEFDRVNcclxuICogICAgICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgZGl2ICAgIHwgICAgICBST1VORElOR19NT0RFXHJcbiAqICAgICAgZGl2aWRlZFRvSW50ZWdlckJ5ICAgICAgIGlkaXYgICB8ICAgICAgRVhQT05FTlRJQUxfQVRcclxuICogICAgICBleHBvbmVudGlhdGVkQnkgICAgICAgICAgcG93ICAgIHwgICAgICBSQU5HRVxyXG4gKiAgICAgIGludGVnZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIENSWVBUT1xyXG4gKiAgICAgIGlzRXF1YWxUbyAgICAgICAgICAgICAgICBlcSAgICAgfCAgICAgIE1PRFVMT19NT0RFXHJcbiAqICAgICAgaXNGaW5pdGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgUE9XX1BSRUNJU0lPTlxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW4gICAgICAgICAgICBndCAgICAgfCAgICAgIEZPUk1BVFxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW5PckVxdWFsVG8gICBndGUgICAgfCAgICAgIEFMUEhBQkVUXHJcbiAqICAgICAgaXNJbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICB8ICBpc0JpZ051bWJlclxyXG4gKiAgICAgIGlzTGVzc1RoYW4gICAgICAgICAgICAgICBsdCAgICAgfCAgbWF4aW11bSAgICAgICAgICAgICAgbWF4XHJcbiAqICAgICAgaXNMZXNzVGhhbk9yRXF1YWxUbyAgICAgIGx0ZSAgICB8ICBtaW5pbXVtICAgICAgICAgICAgICBtaW5cclxuICogICAgICBpc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJhbmRvbVxyXG4gKiAgICAgIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgICAgICAgfCAgc3VtXHJcbiAqICAgICAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgaXNaZXJvICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbWludXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbW9kdWxvICAgICAgICAgICAgICAgICAgIG1vZCAgICB8XHJcbiAqICAgICAgbXVsdGlwbGllZEJ5ICAgICAgICAgICAgIHRpbWVzICB8XHJcbiAqICAgICAgbmVnYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcHJlY2lzaW9uICAgICAgICAgICAgICAgIHNkICAgICB8XHJcbiAqICAgICAgc2hpZnRlZEJ5ICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgc3F1YXJlUm9vdCAgICAgICAgICAgICAgIHNxcnQgICB8XHJcbiAqICAgICAgdG9FeHBvbmVudGlhbCAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GcmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9KU09OICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9OdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9QcmVjaXNpb24gICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdmFsdWVPZiAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqXHJcbiAqL1xyXG5cclxuXHJcbiAgdmFyIEJpZ051bWJlcixcclxuICAgIGlzTnVtZXJpYyA9IC9eLT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/JC9pLFxyXG4gICAgbWF0aGNlaWwgPSBNYXRoLmNlaWwsXHJcbiAgICBtYXRoZmxvb3IgPSBNYXRoLmZsb29yLFxyXG5cclxuICAgIGJpZ251bWJlckVycm9yID0gJ1tCaWdOdW1iZXIgRXJyb3JdICcsXHJcbiAgICB0b29NYW55RGlnaXRzID0gYmlnbnVtYmVyRXJyb3IgKyAnTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogJyxcclxuXHJcbiAgICBCQVNFID0gMWUxNCxcclxuICAgIExPR19CQVNFID0gMTQsXHJcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gMHgxZmZmZmZmZmZmZmZmZiwgICAgICAgICAvLyAyXjUzIC0gMVxyXG4gICAgLy8gTUFYX0lOVDMyID0gMHg3ZmZmZmZmZiwgICAgICAgICAgICAgICAgICAgLy8gMl4zMSAtIDFcclxuICAgIFBPV1NfVEVOID0gWzEsIDEwLCAxMDAsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwgMWUxMCwgMWUxMSwgMWUxMiwgMWUxM10sXHJcbiAgICBTUVJUX0JBU0UgPSAxZTcsXHJcblxyXG4gICAgLy8gRURJVEFCTEVcclxuICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgREVDSU1BTF9QTEFDRVMsIFRPX0VYUF9ORUcsIFRPX0VYUF9QT1MsIE1JTl9FWFAsIE1BWF9FWFAsIGFuZFxyXG4gICAgLy8gdGhlIGFyZ3VtZW50cyB0byB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCwgYW5kIHRvUHJlY2lzaW9uLlxyXG4gICAgTUFYID0gMUU5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhfSU5UMzJcclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBCaWdOdW1iZXIgY29uc3RydWN0b3IuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xvbmUoY29uZmlnT2JqZWN0KSB7XHJcbiAgICB2YXIgZGl2LCBjb252ZXJ0QmFzZSwgcGFyc2VOdW1lcmljLFxyXG4gICAgICBQID0gQmlnTnVtYmVyLnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IEJpZ051bWJlciwgdG9TdHJpbmc6IG51bGwsIHZhbHVlT2Y6IG51bGwgfSxcclxuICAgICAgT05FID0gbmV3IEJpZ051bWJlcigxKSxcclxuXHJcblxyXG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVRBQkxFIENPTkZJRyBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93IG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIHN0YXRlZC5cclxuICAgICAgLy8gVGhlIHZhbHVlcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHVzaW5nIEJpZ051bWJlci5zZXQuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIG9wZXJhdGlvbnMgaW52b2x2aW5nIGRpdmlzaW9uLlxyXG4gICAgICBERUNJTUFMX1BMQUNFUyA9IDIwLCAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgcm91bmRpbmcgbW9kZSB1c2VkIHdoZW4gcm91bmRpbmcgdG8gdGhlIGFib3ZlIGRlY2ltYWwgcGxhY2VzLCBhbmQgd2hlbiB1c2luZ1xyXG4gICAgICAvLyB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCBhbmQgdG9QcmVjaXNpb24sIGFuZCByb3VuZCAoZGVmYXVsdCB2YWx1ZSkuXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBBd2F5IGZyb20gemVyby5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRvd2FyZHMgemVyby5cclxuICAgICAgLy8gQ0VJTCAgICAgICAyIFRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfVVAgICAgNCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdXAuXHJcbiAgICAgIC8vIEhBTEZfRE9XTiAgNSBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgZG93bi5cclxuICAgICAgLy8gSEFMRl9FVkVOICA2IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIGV2ZW4gbmVpZ2hib3VyLlxyXG4gICAgICAvLyBIQUxGX0NFSUwgIDcgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX0ZMT09SIDggVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICBST1VORElOR19NT0RFID0gNCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gRVhQT05FTlRJQUxfQVQgOiBbVE9fRVhQX05FRyAsIFRPX0VYUF9QT1NdXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGJlbmVhdGggd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC03XHJcbiAgICAgIFRPX0VYUF9ORUcgPSAtNywgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGFib3ZlIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAyMVxyXG4gICAgICBUT19FWFBfUE9TID0gMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBSQU5HRSA6IFtNSU5fRVhQLCBNQVhfRVhQXVxyXG5cclxuICAgICAgLy8gVGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWUsIGJlbmVhdGggd2hpY2ggdW5kZXJmbG93IHRvIHplcm8gb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTMyNCAgKDVlLTMyNClcclxuICAgICAgTUlOX0VYUCA9IC0xZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtMSB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCB2YWx1ZSwgYWJvdmUgd2hpY2ggb3ZlcmZsb3cgdG8gSW5maW5pdHkgb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogIDMwOCAgKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KVxyXG4gICAgICAvLyBGb3IgTUFYX0VYUCA+IDFlNywgZS5nLiBuZXcgQmlnTnVtYmVyKCcxZTEwMDAwMDAwMCcpLnBsdXMoMSkgbWF5IGJlIHNsb3cuXHJcbiAgICAgIE1BWF9FWFAgPSAxZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBNQVhcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgQ1JZUFRPID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIG9yIGZhbHNlXHJcblxyXG4gICAgICAvLyBUaGUgbW9kdWxvIG1vZGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBtb2R1bHVzOiBhIG1vZCBuLlxyXG4gICAgICAvLyBUaGUgcXVvdGllbnQgKHEgPSBhIC8gbikgaXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91bmRpbmcgbW9kZS5cclxuICAgICAgLy8gVGhlIHJlbWFpbmRlciAocikgaXMgY2FsY3VsYXRlZCBhczogciA9IGEgLSBuICogcS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVVAgICAgICAgIDAgVGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSBpZiB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIGVsc2UgaXMgbmVnYXRpdmUuXHJcbiAgICAgIC8vIERPV04gICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGlzIG1vZHVsbyBtb2RlIGlzIGNvbW1vbmx5IGtub3duIGFzICd0cnVuY2F0ZWQgZGl2aXNpb24nIGFuZCBpc1xyXG4gICAgICAvLyAgICAgICAgICAgICBlcXVpdmFsZW50IHRvIChhICUgbikgaW4gSmF2YVNjcmlwdC5cclxuICAgICAgLy8gRkxPT1IgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gNiBUaGlzIG1vZHVsbyBtb2RlIGltcGxlbWVudHMgdGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgIDkgRXVjbGlkaWFuIGRpdmlzaW9uLiBxID0gc2lnbihuKSAqIGZsb29yKGEgLyBhYnMobikpLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIGlzIGFsd2F5cyBwb3NpdGl2ZS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVGhlIHRydW5jYXRlZCBkaXZpc2lvbiwgZmxvb3JlZCBkaXZpc2lvbiwgRXVjbGlkaWFuIGRpdmlzaW9uIGFuZCBJRUVFIDc1NCByZW1haW5kZXJcclxuICAgICAgLy8gbW9kZXMgYXJlIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBtb2R1bHVzIG9wZXJhdGlvbi5cclxuICAgICAgLy8gQWx0aG91Z2ggdGhlIG90aGVyIHJvdW5kaW5nIG1vZGVzIGNhbiBhbHNvIGJlIHVzZWQsIHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLlxyXG4gICAgICBNT0RVTE9fTU9ERSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBleHBvbmVudGlhdGVkQnkgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBJZiBQT1dfUFJFQ0lTSU9OIGlzIDAsIHRoZXJlIHdpbGwgYmUgdW5saW1pdGVkIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAgUE9XX1BSRUNJU0lPTiA9IDAsICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHVzZWQgYnkgdGhlIEJpZ051bWJlci5wcm90b3R5cGUudG9Gb3JtYXQgbWV0aG9kLlxyXG4gICAgICBGT1JNQVQgPSB7XHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBncm91cFNpemU6IDMsXHJcbiAgICAgICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgICAgc3VmZml4OiAnJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhlIGFscGhhYmV0IHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi4gSXQgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZywgd2l0aCBubyAnKycsXHJcbiAgICAgIC8vICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgIC8vICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiRfJ1xyXG4gICAgICBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUlxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIEJpZ051bWJlciBjb25zdHJ1Y3RvciBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24uXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJpZ051bWJlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEEgbnVtZXJpYyB2YWx1ZS5cclxuICAgICAqIFtiXSB7bnVtYmVyfSBUaGUgYmFzZSBvZiB2LiBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJpZ051bWJlcih2LCBiKSB7XHJcbiAgICAgIHZhciBhbHBoYWJldCwgYywgY2FzZUNoYW5nZWQsIGUsIGksIGlzTnVtLCBsZW4sIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIEVuYWJsZSBjb25zdHJ1Y3RvciBjYWxsIHdpdGhvdXQgYG5ld2AuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBCaWdOdW1iZXIpKSByZXR1cm4gbmV3IEJpZ051bWJlcih2LCBiKTtcclxuXHJcbiAgICAgIGlmIChiID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHYgJiYgdi5faXNCaWdOdW1iZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgIHgucyA9IHYucztcclxuXHJcbiAgICAgICAgICBpZiAoIXYuYyB8fCB2LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeC5lID0gdi5lO1xyXG4gICAgICAgICAgICB4LmMgPSB2LmMuc2xpY2UoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpICYmIHYgKiAwID09IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgYDEgLyBuYCB0byBoYW5kbGUgbWludXMgemVybyBhbHNvLlxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHYgPSAtdiwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGludGVnZXJzLCB3aGVyZSBuIDwgMjE0NzQ4MzY0OCAoMioqMzEpLlxyXG4gICAgICAgICAgaWYgKHYgPT09IH5+dikge1xyXG4gICAgICAgICAgICBmb3IgKGUgPSAwLCBpID0gdjsgaSA+PSAxMDsgaSAvPSAxMCwgZSsrKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmMgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTnVtZXJpYy50ZXN0KHN0ciA9IFN0cmluZyh2KSkpIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSk7XHJcblxyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgICAgICBpZiAoKGkgPSBzdHIuc2VhcmNoKC9lL2kpKSA+IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICAgICAgZSArPSArc3RyLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgICAgIC8vIEludGVnZXIuXHJcbiAgICAgICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBleHBvbmVudGlhbCBub3RhdGlvbiB0byBiZSB1c2VkIHdpdGggYmFzZSAxMCBhcmd1bWVudCwgd2hpbGVcclxuICAgICAgICAvLyBhbHNvIHJvdW5kaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFzIHdpdGggb3RoZXIgYmFzZXMuXHJcbiAgICAgICAgaWYgKGIgPT0gMTApIHtcclxuICAgICAgICAgIHggPSBuZXcgQmlnTnVtYmVyKHYpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvdW5kKHgsIERFQ0lNQUxfUExBQ0VTICsgeC5lICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcblxyXG4gICAgICAgIGlmIChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXZvaWQgcG90ZW50aWFsIGludGVycHJldGF0aW9uIG9mIEluZmluaXR5IGFuZCBOYU4gYXMgYmFzZSA0NCsgdmFsdWVzLlxyXG4gICAgICAgICAgaWYgKHYgKiAwICE9IDApIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSwgYik7XHJcblxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRyAmJiBzdHIucmVwbGFjZSgvXjBcXC4wKnxcXC4vLCAnJykubGVuZ3RoID4gMTUpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgdik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbHBoYWJldCA9IEFMUEhBQkVULnNsaWNlKDAsIGIpO1xyXG4gICAgICAgIGUgPSBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBzdHIgaXMgYSB2YWxpZCBiYXNlIGIgbnVtYmVyLlxyXG4gICAgICAgIC8vIERvbid0IHVzZSBSZWdFeHAsIHNvIGFscGhhYmV0IGNhbiBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy5cclxuICAgICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoYyA9IHN0ci5jaGFyQXQoaSkpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgJy4nIGlzIG5vdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpdCBoYXMgbm90IGJlIGZvdW5kIGJlZm9yZS5cclxuICAgICAgICAgICAgICBpZiAoaSA+IGUpIHtcclxuICAgICAgICAgICAgICAgIGUgPSBsZW47XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNhc2VDaGFuZ2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFsbG93IGUuZy4gaGV4YWRlY2ltYWwgJ0ZGJyBhcyB3ZWxsIGFzICdmZicuXHJcbiAgICAgICAgICAgICAgaWYgKHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICBlID0gMDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBTdHJpbmcodiksIGlzTnVtLCBiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgbGF0ZXIgY2hlY2sgZm9yIGxlbmd0aCBvbiBjb252ZXJ0ZWQgbnVtYmVyLlxyXG4gICAgICAgIGlzTnVtID0gZmFsc2U7XHJcbiAgICAgICAgc3RyID0gY29udmVydEJhc2Uoc3RyLCBiLCAxMCwgeC5zKTtcclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICBlbHNlIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgc3RyLmNoYXJDb2RlQXQoaSkgPT09IDQ4OyBpKyspO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KC0tbGVuKSA9PT0gNDg7KTtcclxuXHJcbiAgICAgIGlmIChzdHIgPSBzdHIuc2xpY2UoaSwgKytsZW4pKSB7XHJcbiAgICAgICAgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgaWYgKGlzTnVtICYmIEJpZ051bWJlci5ERUJVRyAmJlxyXG4gICAgICAgICAgbGVuID4gMTUgJiYgKHYgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHYgIT09IG1hdGhmbG9vcih2KSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgKHgucyAqIHYpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoKGUgPSBlIC0gaSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgeC5jID0gW107XHJcblxyXG4gICAgICAgICAgLy8gVHJhbnNmb3JtIGJhc2VcclxuXHJcbiAgICAgICAgICAvLyBlIGlzIHRoZSBiYXNlIDEwIGV4cG9uZW50LlxyXG4gICAgICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2VmZmljaWVudCBhcnJheS5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoZSA8IDApIGkgKz0gTE9HX0JBU0U7ICAvLyBpIDwgMVxyXG5cclxuICAgICAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpKSB4LmMucHVzaCgrc3RyLnNsaWNlKDAsIGkpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICAgIHguYy5wdXNoKCtzdHIuc2xpY2UoaSwgaSArPSBMT0dfQkFTRSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpID0gTE9HX0JBU0UgLSAoc3RyID0gc3RyLnNsaWNlKGkpKS5sZW5ndGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpIC09IGxlbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIHguYy5wdXNoKCtzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1IgUFJPUEVSVElFU1xyXG5cclxuXHJcbiAgICBCaWdOdW1iZXIuY2xvbmUgPSBjbG9uZTtcclxuXHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfVVAgPSAwO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0RPV04gPSAxO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0NFSUwgPSAyO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0ZMT09SID0gMztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX1VQID0gNDtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0RPV04gPSA1O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9DRUlMID0gNztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0ZMT09SID0gODtcclxuICAgIEJpZ051bWJlci5FVUNMSUQgPSA5O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogQ29uZmlndXJlIGluZnJlcXVlbnRseS1jaGFuZ2luZyBsaWJyYXJ5LXdpZGUgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQWNjZXB0IGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcHJvcGVydGllcyAoaWYgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgaXNcclxuICAgICAqIGEgbnVtYmVyLCBpdCBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2Ugc3RhdGVkKTpcclxuICAgICAqXHJcbiAgICAgKiAgIERFQ0lNQUxfUExBQ0VTICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIFJPVU5ESU5HX01PREUgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOFxyXG4gICAgICogICBFWFBPTkVOVElBTF9BVCAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAgb3IgIFstTUFYIHRvIDAsIDAgdG8gTUFYXVxyXG4gICAgICogICBSQU5HRSAgICAgICAgICAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAobm90IHplcm8pICBvciAgWy1NQVggdG8gLTEsIDEgdG8gTUFYXVxyXG4gICAgICogICBDUllQVE8gICAgICAgICAgIHtib29sZWFufSAgICAgICAgICB0cnVlIG9yIGZhbHNlXHJcbiAgICAgKiAgIE1PRFVMT19NT0RFICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOVxyXG4gICAgICogICBQT1dfUFJFQ0lTSU9OICAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBBTFBIQUJFVCAgICAgICAgIHtzdHJpbmd9ICAgICAgICAgICBBIHN0cmluZyBvZiB0d28gb3IgbW9yZSB1bmlxdWUgY2hhcmFjdGVycyB3aGljaCBkb2VzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb250YWluICcuJy5cclxuICAgICAqICAgRk9STUFUICAgICAgICAgICB7b2JqZWN0fSAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKiAgICAgcHJlZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGdyb3VwU2l6ZSAgICAgICAgICAgICAge251bWJlcn1cclxuICAgICAqICAgICBzZWNvbmRhcnlHcm91cFNpemUgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZ3JvdXBTZXBhcmF0b3IgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGRlY2ltYWxTZXBhcmF0b3IgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2l6ZSAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB7c3RyaW5nfVxyXG4gICAgICogICAgIHN1ZmZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqXHJcbiAgICAgKiAoVGhlIHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgYWJvdmUgRk9STUFUIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3QgY2hlY2tlZCBmb3IgdmFsaWRpdHkuKVxyXG4gICAgICpcclxuICAgICAqIEUuZy5cclxuICAgICAqIEJpZ051bWJlci5jb25maWcoeyBERUNJTUFMX1BMQUNFUyA6IDIwLCBST1VORElOR19NT0RFIDogNCB9KVxyXG4gICAgICpcclxuICAgICAqIElnbm9yZSBwcm9wZXJ0aWVzL3BhcmFtZXRlcnMgc2V0IHRvIG51bGwgb3IgdW5kZWZpbmVkLCBleGNlcHQgZm9yIEFMUEhBQkVULlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBjdXJyZW50IHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmNvbmZpZyA9IEJpZ051bWJlci5zZXQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIHZhciBwLCB2O1xyXG5cclxuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqID09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgLy8gREVDSU1BTF9QTEFDRVMge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIERFQ0lNQUxfUExBQ0VTIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdERUNJTUFMX1BMQUNFUycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIERFQ0lNQUxfUExBQ0VTID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBST1VORElOR19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUk9VTkRJTkdfTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUk9VTkRJTkdfTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDgsIHApO1xyXG4gICAgICAgICAgICBST1VORElOR19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBFWFBPTkVOVElBTF9BVCB7bnVtYmVyfG51bWJlcltdfVxyXG4gICAgICAgICAgLy8gSW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIDAgaW5jbHVzaXZlLCAwIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEVYUE9ORU5USUFMX0FUIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdFWFBPTkVOVElBTF9BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgMCwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gdlswXTtcclxuICAgICAgICAgICAgICBUT19FWFBfUE9TID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSAtKFRPX0VYUF9QT1MgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSQU5HRSB7bnVtYmVyfG51bWJlcltdfSBOb24temVybyBpbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gLTEgaW5jbHVzaXZlLCBpbnRlZ2VyIDEgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUkFOR0Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfGNhbm5vdCBiZSB6ZXJvfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JBTkdFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAtMSwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMSwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBNSU5fRVhQID0gdlswXTtcclxuICAgICAgICAgICAgICBNQVhfRVhQID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBNSU5fRVhQID0gLShNQVhfRVhQID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGNhbm5vdCBiZSB6ZXJvOiAnICsgdik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ1JZUFRPIHtib29sZWFufSB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIENSWVBUTyBub3QgdHJ1ZSBvciBmYWxzZToge3Z9J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdDUllQVE8nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiA9PT0gISF2KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAmJlxyXG4gICAgICAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9ICF2O1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgdHJ1ZSBvciBmYWxzZTogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTU9EVUxPX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA5IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBNT0RVTE9fTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnTU9EVUxPX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA5LCBwKTtcclxuICAgICAgICAgICAgTU9EVUxPX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFBPV19QUkVDSVNJT04ge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFBPV19QUkVDSVNJT04ge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1BPV19QUkVDSVNJT04nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBGT1JNQVQge29iamVjdH1cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBGT1JNQVQgbm90IGFuIG9iamVjdDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0ZPUk1BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnb2JqZWN0JykgRk9STUFUID0gdjtcclxuICAgICAgICAgICAgZWxzZSB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IGFuIG9iamVjdDogJyArIHYpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEFMUEhBQkVUIHtzdHJpbmd9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQUxQSEFCRVQgaW52YWxpZDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0FMUEhBQkVUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIERpc2FsbG93IGlmIGxlc3MgdGhhbiB0d28gY2hhcmFjdGVycyxcclxuICAgICAgICAgICAgLy8gb3IgaWYgaXQgY29udGFpbnMgJysnLCAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgYSByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnc3RyaW5nJyAmJiAhL14uPyR8WytcXC0uXFxzXXwoLikuKlxcMS8udGVzdCh2KSkge1xyXG4gICAgICAgICAgICAgIEFMUEhBQkVUID0gdjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBpbnZhbGlkOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gT2JqZWN0IGV4cGVjdGVkOiB7dn0nXHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdPYmplY3QgZXhwZWN0ZWQ6ICcgKyBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBERUNJTUFMX1BMQUNFUzogREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgUk9VTkRJTkdfTU9ERTogUk9VTkRJTkdfTU9ERSxcclxuICAgICAgICBFWFBPTkVOVElBTF9BVDogW1RPX0VYUF9ORUcsIFRPX0VYUF9QT1NdLFxyXG4gICAgICAgIFJBTkdFOiBbTUlOX0VYUCwgTUFYX0VYUF0sXHJcbiAgICAgICAgQ1JZUFRPOiBDUllQVE8sXHJcbiAgICAgICAgTU9EVUxPX01PREU6IE1PRFVMT19NT0RFLFxyXG4gICAgICAgIFBPV19QUkVDSVNJT046IFBPV19QUkVDSVNJT04sXHJcbiAgICAgICAgRk9STUFUOiBGT1JNQVQsXHJcbiAgICAgICAgQUxQSEFCRVQ6IEFMUEhBQkVUXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdiBpcyBhIEJpZ051bWJlciBpbnN0YW5jZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBCaWdOdW1iZXIuREVCVUcgaXMgdHJ1ZSwgdGhyb3cgaWYgYSBCaWdOdW1iZXIgaW5zdGFuY2UgaXMgbm90IHdlbGwtZm9ybWVkLlxyXG4gICAgICpcclxuICAgICAqIHYge2FueX1cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gSW52YWxpZCBCaWdOdW1iZXI6IHt2fSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmlzQmlnTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgaWYgKCF2IHx8IHYuX2lzQmlnTnVtYmVyICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghQmlnTnVtYmVyLkRFQlVHKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBpLCBuLFxyXG4gICAgICAgIGMgPSB2LmMsXHJcbiAgICAgICAgZSA9IHYuZSxcclxuICAgICAgICBzID0gdi5zO1xyXG5cclxuICAgICAgb3V0OiBpZiAoe30udG9TdHJpbmcuY2FsbChjKSA9PSAnW29iamVjdCBBcnJheV0nKSB7XHJcblxyXG4gICAgICAgIGlmICgocyA9PT0gMSB8fCBzID09PSAtMSkgJiYgZSA+PSAtTUFYICYmIGUgPD0gTUFYICYmIGUgPT09IG1hdGhmbG9vcihlKSkge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBlbGVtZW50IGlzIHplcm8sIHRoZSBCaWdOdW1iZXIgdmFsdWUgbXVzdCBiZSB6ZXJvLlxyXG4gICAgICAgICAgaWYgKGNbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09IDAgJiYgYy5sZW5ndGggPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBjWzBdIHNob3VsZCBoYXZlLCBiYXNlZCBvbiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGkgPCAxKSBpICs9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgICAgICAvL2lmIChNYXRoLmNlaWwoTWF0aC5sb2coY1swXSArIDEpIC8gTWF0aC5MTjEwKSA9PSBpKSB7XHJcbiAgICAgICAgICBpZiAoU3RyaW5nKGNbMF0pLmxlbmd0aCA9PSBpKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIG4gPSBjW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IEJBU0UgfHwgbiAhPT0gbWF0aGZsb29yKG4pKSBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhc3QgZWxlbWVudCBjYW5ub3QgYmUgemVybywgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IGVsZW1lbnQuXHJcbiAgICAgICAgICAgIGlmIChuICE9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU5cclxuICAgICAgfSBlbHNlIGlmIChjID09PSBudWxsICYmIGUgPT09IG51bGwgJiYgKHMgPT09IG51bGwgfHwgcyA9PT0gMSB8fCBzID09PSAtMSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnSW52YWxpZCBCaWdOdW1iZXI6ICcgKyB2KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1heGltdW0gPSBCaWdOdW1iZXIubWF4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmx0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1pbmltdW0gPSBCaWdOdW1iZXIubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmd0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLFxyXG4gICAgICogYW5kIHdpdGggZHAsIG9yIERFQ0lNQUxfUExBQ0VTIGlmIGRwIGlzIG9taXR0ZWQsIGRlY2ltYWwgcGxhY2VzIChvciBsZXNzIGlmIHRyYWlsaW5nXHJcbiAgICAgKiB6ZXJvcyBhcmUgcHJvZHVjZWQpLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5yYW5kb20gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgcG93Ml81MyA9IDB4MjAwMDAwMDAwMDAwMDA7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gYSA1MyBiaXQgaW50ZWdlciBuLCB3aGVyZSAwIDw9IG4gPCA5MDA3MTk5MjU0NzQwOTkyLlxyXG4gICAgICAvLyBDaGVjayBpZiBNYXRoLnJhbmRvbSgpIHByb2R1Y2VzIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHJhbmRvbW5lc3MuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIGFzc3VtZSBhdCBsZWFzdCA1MyBiaXRzIGFyZSBwcm9kdWNlZCwgb3RoZXJ3aXNlIGFzc3VtZSBhdCBsZWFzdCAzMCBiaXRzLlxyXG4gICAgICAvLyAweDQwMDAwMDAwIGlzIDJeMzAsIDB4ODAwMDAwIGlzIDJeMjMsIDB4MWZmZmZmIGlzIDJeMjEgLSAxLlxyXG4gICAgICB2YXIgcmFuZG9tNTNiaXRJbnQgPSAoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpICYgMHgxZmZmZmZcclxuICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKTsgfVxyXG4gICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoKE1hdGgucmFuZG9tKCkgKiAweDQwMDAwMDAwIHwgMCkgKiAweDgwMDAwMCkgK1xyXG4gICAgICAgICAoTWF0aC5yYW5kb20oKSAqIDB4ODAwMDAwIHwgMCk7IH07XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgICAgdmFyIGEsIGIsIGUsIGssIHYsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGMgPSBbXSxcclxuICAgICAgICAgIHJhbmQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAgIGlmIChkcCA9PSBudWxsKSBkcCA9IERFQ0lNQUxfUExBQ0VTO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcblxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChkcCAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgaWYgKENSWVBUTykge1xyXG5cclxuICAgICAgICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgICAgICAgIGlmIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoayAqPSAyKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDUzIGJpdHM6XHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSAqIE1hdGgucG93KDIsIDIxKSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTEwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMFxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgPj4+IDExKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMHgyMDAwMCBpcyAyXjIxLlxyXG4gICAgICAgICAgICAgIHYgPSBhW2ldICogMHgyMDAwMCArIChhW2kgKyAxXSA+Pj4gMTEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBSZWplY3Rpb24gc2FtcGxpbmc6XHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IHRoYXQgdiA+PSA5ZTE1LCBpc1xyXG4gICAgICAgICAgICAgIC8vIDcxOTkyNTQ3NDA5OTIgLyA5MDA3MTk5MjU0NzQwOTkyIH49IDAuMDAwOCwgaS5lLiAxIGluIDEyNTFcclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBiID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpO1xyXG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbMF07XHJcbiAgICAgICAgICAgICAgICBhW2kgKyAxXSA9IGJbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9IHYgPD0gODk5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBidWZmZXJcclxuICAgICAgICAgICAgYSA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMDAwMDAgaXMgMl40OCwgMHgxMDAwMDAwMDAwMCBpcyAyXjQwXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAgaXMgMl4zMiwgMHgxMDAwMDAwIGlzIDJeMjRcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICB2ID0gKChhW2ldICYgMzEpICogMHgxMDAwMDAwMDAwMDAwKSArIChhW2kgKyAxXSAqIDB4MTAwMDAwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgMl0gKiAweDEwMDAwMDAwMCkgKyAoYVtpICsgM10gKiAweDEwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgNF0gPDwgMTYpICsgKGFbaSArIDVdIDw8IDgpICsgYVtpICsgNl07XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KGEsIGkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSA3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBDUllQVE8gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBNYXRoLnJhbmRvbS5cclxuICAgICAgICBpZiAoIUNSWVBUTykge1xyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICAgICAgdiA9IHJhbmRvbTUzYml0SW50KCk7XHJcbiAgICAgICAgICAgIGlmICh2IDwgOWUxNSkgY1tpKytdID0gdiAlIDFlMTQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrID0gY1stLWldO1xyXG4gICAgICAgIGRwICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gZHAuXHJcbiAgICAgICAgaWYgKGsgJiYgZHApIHtcclxuICAgICAgICAgIHYgPSBQT1dTX1RFTltMT0dfQkFTRSAtIGRwXTtcclxuICAgICAgICAgIGNbaV0gPSBtYXRoZmxvb3IoayAvIHYpICogdjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVyby5cclxuICAgICAgICBmb3IgKDsgY1tpXSA9PT0gMDsgYy5wb3AoKSwgaS0tKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGMgPSBbZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGZvciAoZSA9IC0xIDsgY1swXSA9PT0gMDsgYy5zcGxpY2UoMCwgMSksIGUgLT0gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYyB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcywgYW5kLi4uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCB2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgaWYgKGkgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByYW5kLmUgPSBlO1xyXG4gICAgICAgIHJhbmQuYyA9IGM7XHJcbiAgICAgICAgcmV0dXJuIHJhbmQ7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuc3VtID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcclxuICAgICAgICBzdW0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOykgc3VtID0gc3VtLnBsdXMoYXJnc1tpKytdKTtcclxuICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXHJcblxyXG5cclxuICAgIC8vIENhbGxlZCBieSBCaWdOdW1iZXIgYW5kIEJpZ051bWJlci5wcm90b3R5cGUudG9TdHJpbmcuXHJcbiAgICBjb252ZXJ0QmFzZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBkZWNpbWFsID0gJzAxMjM0NTY3ODknO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ29udmVydCBzdHJpbmcgb2YgYmFzZUluIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYmFzZU91dC5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGFscGhhYmV0KSB7XHJcbiAgICAgICAgdmFyIGosXHJcbiAgICAgICAgICBhcnIgPSBbMF0sXHJcbiAgICAgICAgICBhcnJMLFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTsgYXJyW2FyckxdICo9IGJhc2VJbik7XHJcblxyXG4gICAgICAgICAgYXJyWzBdICs9IGFscGhhYmV0LmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PSBudWxsKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VJbiB0byBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgdG9TdHJpbmcsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZSAxMCB0byBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIEJpZ051bWJlciwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlSW4gdG8gYmFzZSAxMC5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIGJhc2VJbiwgYmFzZU91dCwgc2lnbiwgY2FsbGVySXNUb1N0cmluZykge1xyXG4gICAgICAgIHZhciBhbHBoYWJldCwgZCwgZSwgaywgciwgeCwgeGMsIHksXHJcbiAgICAgICAgICBpID0gc3RyLmluZGV4T2YoJy4nKSxcclxuICAgICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgICBybSA9IFJPVU5ESU5HX01PREU7XHJcblxyXG4gICAgICAgIC8vIE5vbi1pbnRlZ2VyLlxyXG4gICAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICAgIGsgPSBQT1dfUFJFQ0lTSU9OO1xyXG5cclxuICAgICAgICAgIC8vIFVubGltaXRlZCBwcmVjaXNpb24uXHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gMDtcclxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoYmFzZUluKTtcclxuICAgICAgICAgIHggPSB5LnBvdyhzdHIubGVuZ3RoIC0gaSk7XHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gaztcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHN0ciBhcyBpZiBhbiBpbnRlZ2VyLCB0aGVuIHJlc3RvcmUgdGhlIGZyYWN0aW9uIHBhcnQgYnkgZGl2aWRpbmcgdGhlXHJcbiAgICAgICAgICAvLyByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIuXHJcblxyXG4gICAgICAgICAgeS5jID0gdG9CYXNlT3V0KHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKHguYyksIHguZSwgJzAnKSxcclxuICAgICAgICAgICAxMCwgYmFzZU91dCwgZGVjaW1hbCk7XHJcbiAgICAgICAgICB5LmUgPSB5LmMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGludGVnZXIuXHJcblxyXG4gICAgICAgIHhjID0gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBjYWxsZXJJc1RvU3RyaW5nXHJcbiAgICAgICAgID8gKGFscGhhYmV0ID0gQUxQSEFCRVQsIGRlY2ltYWwpXHJcbiAgICAgICAgIDogKGFscGhhYmV0ID0gZGVjaW1hbCwgQUxQSEFCRVQpKTtcclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGFzIGFuIGludGVnZXIgYW5kIGNvbnZlcnRlZCB0byBiYXNlT3V0LiBlIGlzIHRoZSBleHBvbmVudC5cclxuICAgICAgICBlID0gayA9IHhjLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyB4Y1stLWtdID09IDA7IHhjLnBvcCgpKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoIXhjWzBdKSByZXR1cm4gYWxwaGFiZXQuY2hhckF0KDApO1xyXG5cclxuICAgICAgICAvLyBEb2VzIHN0ciByZXByZXNlbnQgYW4gaW50ZWdlcj8gSWYgc28sIG5vIG5lZWQgZm9yIHRoZSBkaXZpc2lvbi5cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIC0tZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5jID0geGM7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBzaWduIGlzIG5lZWRlZCBmb3IgY29ycmVjdCByb3VuZGluZy5cclxuICAgICAgICAgIHgucyA9IHNpZ247XHJcbiAgICAgICAgICB4ID0gZGl2KHgsIHksIGRwLCBybSwgYmFzZU91dCk7XHJcbiAgICAgICAgICB4YyA9IHguYztcclxuICAgICAgICAgIHIgPSB4LnI7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGNvbnZlcnRlZCB0byBiYXNlT3V0LlxyXG5cclxuICAgICAgICAvLyBUSGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGQgPSBlICsgZHAgKyAxO1xyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQ6IHRoZSBkaWdpdCB0byB0aGUgcmlnaHQgb2YgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhjW2RdO1xyXG5cclxuICAgICAgICAvLyBMb29rIGF0IHRoZSByb3VuZGluZyBkaWdpdHMgYW5kIG1vZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcm91bmQgdXAuXHJcblxyXG4gICAgICAgIGsgPSBiYXNlT3V0IC8gMjtcclxuICAgICAgICByID0gciB8fCBkIDwgMCB8fCB4Y1tkICsgMV0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgciA9IHJtIDwgNCA/IChpICE9IG51bGwgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgICAgOiBpID4gayB8fCBpID09IGsgJiYocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiYgeGNbZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvLCBvciB4YyByZXByZXNlbnRzXHJcbiAgICAgICAgLy8gemVybywgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBiYXNlIGNvbnZlcnNpb24gaXMgemVybyBvciwgaWYgcm91bmRpbmcgdXAsIGEgdmFsdWVcclxuICAgICAgICAvLyBzdWNoIGFzIDAuMDAwMDEuXHJcbiAgICAgICAgaWYgKGQgPCAxIHx8ICF4Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIDFeLWRwIG9yIDBcclxuICAgICAgICAgIHN0ciA9IHIgPyB0b0ZpeGVkUG9pbnQoYWxwaGFiZXQuY2hhckF0KDEpLCAtZHAsIGFscGhhYmV0LmNoYXJBdCgwKSkgOiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBUcnVuY2F0ZSB4YyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgeGMubGVuZ3RoID0gZDtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgICBmb3IgKC0tYmFzZU91dDsgKyt4Y1stLWRdID4gYmFzZU91dDspIHtcclxuICAgICAgICAgICAgICB4Y1tkXSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghZCkge1xyXG4gICAgICAgICAgICAgICAgKytlO1xyXG4gICAgICAgICAgICAgICAgeGMgPSBbMV0uY29uY2F0KHhjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGsgPSB4Yy5sZW5ndGg7ICF4Y1stLWtdOyk7XHJcblxyXG4gICAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDw9IGs7IHN0ciArPSBhbHBoYWJldC5jaGFyQXQoeGNbaSsrXSkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm9zLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyB6ZXJvcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsIGFscGhhYmV0LmNoYXJBdCgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgYWRkIHRoZSBzaWduLlxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvLyBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS4gQ2FsbGVkIGJ5IGRpdiBhbmQgY29udmVydEJhc2UuXHJcbiAgICBkaXYgPSAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgLy8gQXNzdW1lIG5vbi16ZXJvIHggYW5kIGsuXHJcbiAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KHgsIGssIGJhc2UpIHtcclxuICAgICAgICB2YXIgbSwgdGVtcCwgeGxvLCB4aGksXHJcbiAgICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgICBpID0geC5sZW5ndGgsXHJcbiAgICAgICAgICBrbG8gPSBrICUgU1FSVF9CQVNFLFxyXG4gICAgICAgICAga2hpID0gayAvIFNRUlRfQkFTRSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgICAgeGxvID0geFtpXSAlIFNRUlRfQkFTRTtcclxuICAgICAgICAgIHhoaSA9IHhbaV0gLyBTUVJUX0JBU0UgfCAwO1xyXG4gICAgICAgICAgbSA9IGtoaSAqIHhsbyArIHhoaSAqIGtsbztcclxuICAgICAgICAgIHRlbXAgPSBrbG8gKiB4bG8gKyAoKG0gJSBTUVJUX0JBU0UpICogU1FSVF9CQVNFKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSAodGVtcCAvIGJhc2UgfCAwKSArIChtIC8gU1FSVF9CQVNFIHwgMCkgKyBraGkgKiB4aGk7XHJcbiAgICAgICAgICB4W2ldID0gdGVtcCAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FycnkpIHggPSBbY2FycnldLmNvbmNhdCh4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgICAgdmFyIGksIGNtcDtcclxuXHJcbiAgICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgICBjbXAgPSBhTCA+IGJMID8gMSA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgZm9yIChpID0gY21wID0gMDsgaSA8IGFMOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgICBjbXAgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc3VidHJhY3QoYSwgYiwgYUwsIGJhc2UpIHtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICAgIGZvciAoOyBhTC0tOykge1xyXG4gICAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgICBhW2FMXSA9IGkgKiBiYXNlICsgYVthTF0gLSBiW2FMXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7IGEuc3BsaWNlKDAsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geDogZGl2aWRlbmQsIHk6IGRpdmlzb3IuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgZHAsIHJtLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGNtcCwgZSwgaSwgbW9yZSwgbiwgcHJvZCwgcHJvZEwsIHEsIHFjLCByZW0sIHJlbUwsIHJlbTAsIHhpLCB4TCwgeWMwLFxyXG4gICAgICAgICAgeUwsIHl6LFxyXG4gICAgICAgICAgcyA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICAgIGlmICgheGMgfHwgIXhjWzBdIHx8ICF5YyB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihcclxuXHJcbiAgICAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgTmFOLCBvciBib3RoIEluZmluaXR5IG9yIDAuXHJcbiAgICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4YyA/IHljICYmIHhjWzBdID09IHljWzBdIDogIXljKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIHggaXMgwrEwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyDCsTAuXHJcbiAgICAgICAgICAgIHhjICYmIHhjWzBdID09IDAgfHwgIXljID8gcyAqIDAgOiBzIC8gMFxyXG4gICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcSA9IG5ldyBCaWdOdW1iZXIocyk7XHJcbiAgICAgICAgcWMgPSBxLmMgPSBbXTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICAgIHMgPSBkcCArIGUgKyAxO1xyXG5cclxuICAgICAgICBpZiAoIWJhc2UpIHtcclxuICAgICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSAtIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgICAgIHMgPSBzIC8gTE9HX0JBU0UgfCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGUuXHJcbiAgICAgICAgLy8gVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQmlnTnVtYmVycyBmcm9tIGNvbnZlcnRCYXNlIG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IHljW2ldID09ICh4Y1tpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgICAgaWYgKHljW2ldID4gKHhjW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCkge1xyXG4gICAgICAgICAgcWMucHVzaCgxKTtcclxuICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBzICs9IDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhjIGFuZCB5YyBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHljIGlzID49IGJhc2UgLyAyLlxyXG5cclxuICAgICAgICAgIG4gPSBtYXRoZmxvb3IoYmFzZSAvICh5Y1swXSArIDEpKTtcclxuXHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gaGFuZGxlIG9kZCBiYXNlcyB3aGVyZSB5Y1swXSA9PSAoYmFzZSAvIDIpIC0gMS5cclxuICAgICAgICAgIC8vIGlmIChuID4gMSB8fCBuKysgPT0gMSAmJiB5Y1swXSA8IGJhc2UgLyAyKSB7XHJcbiAgICAgICAgICBpZiAobiA+IDEpIHtcclxuICAgICAgICAgICAgeWMgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHhjID0gbXVsdGlwbHkoeGMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhjLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOyByZW1bcmVtTCsrXSA9IDApO1xyXG4gICAgICAgICAgeXogPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgeXogPSBbMF0uY29uY2F0KHl6KTtcclxuICAgICAgICAgIHljMCA9IHljWzBdO1xyXG4gICAgICAgICAgaWYgKHljWzFdID49IGJhc2UgLyAyKSB5YzArKztcclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBwcmV2ZW50IHRyaWFsIGRpZ2l0IG4gPiBiYXNlLCB3aGVuIHVzaW5nIGJhc2UgMy5cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGJhc2UgPT0gMyAmJiB5YzAgPT0gMSkgeWMwID0gMSArIDFlLTE1O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIG4uXHJcblxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG4gaXMgaG93IG1hbnkgdGltZXMgdGhlIGRpdmlzb3IgZ29lcyBpbnRvIHRoZSBjdXJyZW50IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBuID0gbWF0aGZsb29yKHJlbTAgLyB5YzApO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICBwcm9kdWN0ID0gZGl2aXNvciBtdWx0aXBsaWVkIGJ5IHRyaWFsIGRpZ2l0IChuKS5cclxuICAgICAgICAgICAgICAvLyAgQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3QgaXMgZ3JlYXRlciB0aGFuIHJlbWFpbmRlcjpcclxuICAgICAgICAgICAgICAvLyAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdCwgZGVjcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgIC8vICBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IHdhcyBsZXNzIHRoYW4gcmVtYWluZGVyIGF0IHRoZSBsYXN0IGNvbXBhcmU6XHJcbiAgICAgICAgICAgICAgLy8gICAgQ29tcGFyZSBuZXcgcmVtYWluZGVyIGFuZCBkaXZpc29yLlxyXG4gICAgICAgICAgICAgIC8vICAgIElmIHJlbWFpbmRlciBpcyBncmVhdGVyIHRoYW4gZGl2aXNvcjpcclxuICAgICAgICAgICAgICAvLyAgICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIsIGluY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBtYXkgYmUgPiBiYXNlIG9ubHkgd2hlbiBiYXNlIGlzIDMuXHJcbiAgICAgICAgICAgICAgICBpZiAobiA+PSBiYXNlKSBuID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0ID4gcmVtYWluZGVyIHRoZW4gdHJpYWwgZGlnaXQgbiB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gaGlnaCBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIGlzIG5vdCBrbm93biB0byBoYXZlXHJcbiAgICAgICAgICAgICAgICAvLyBldmVyIGJlZW4gbW9yZSB0aGFuIDEgdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4tLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5YywgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjbXAgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAwIG9yIDEsIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHljIGFuZCByZW0gYWdhaW4gYmVsb3csXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBjaGFuZ2UgY21wIHRvIDEgdG8gYXZvaWQgaXQuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDEsIGxlYXZlIGNtcCBhcyAtMSwgc28geWMgYW5kIHJlbSBhcmUgY29tcGFyZWQgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBkaXZpc29yIDwgcmVtYWluZGVyLCBzbyBuIG11c3QgYmUgYXQgbGVhc3QgMS5cclxuICAgICAgICAgICAgICAgICAgY21wID0gbiA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3JcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwcm9kTCA8IHJlbUwpIHByb2QgPSBbMF0uY29uY2F0KHByb2QpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBUcmlhbCBkaWdpdCBuIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGxvdyBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIHZlcnkgcmFyZWx5IDIgdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHljLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIG4rKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gLy8gZWxzZSBjbXAgPT09IDEgYW5kIG4gd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIG4sIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFjW2krK10gPSBuO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChyZW1bMF0pIHtcclxuICAgICAgICAgICAgICByZW1bcmVtTCsrXSA9IHhjW3hpXSB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlbSA9IFt4Y1t4aV1dO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPSBudWxsKSAmJiBzLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgICBpZiAoIXFjWzBdKSBxYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFzZSA9PSBCQVNFKSB7XHJcblxyXG4gICAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFjWzBdLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgcyA9IHFjWzBdOyBzID49IDEwOyBzIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIHJvdW5kKHEsIGRwICsgKHEuZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSArIDEsIHJtLCBtb3JlKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbGVyIGlzIGNvbnZlcnRCYXNlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxLmUgPSBlO1xyXG4gICAgICAgICAgcS5yID0gK21vcmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIgbiBpbiBmaXhlZC1wb2ludCBvciBleHBvbmVudGlhbFxyXG4gICAgICogbm90YXRpb24gcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIG9yIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAqXHJcbiAgICAgKiBuOiBhIEJpZ051bWJlci5cclxuICAgICAqIGk6IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBkaWdpdCByZXF1aXJlZCAoaS5lLiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cCkuXHJcbiAgICAgKiBybTogdGhlIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgKiBpZDogMSAodG9FeHBvbmVudGlhbCkgb3IgMiAodG9QcmVjaXNpb24pLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JtYXQobiwgaSwgcm0sIGlkKSB7XHJcbiAgICAgIHZhciBjMCwgZSwgbmUsIGxlbiwgc3RyO1xyXG5cclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICBpZiAoIW4uYykgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGMwID0gbi5jWzBdO1xyXG4gICAgICBuZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChpID09IG51bGwpIHtcclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgc3RyID0gaWQgPT0gMSB8fCBpZCA9PSAyICYmIChuZSA8PSBUT19FWFBfTkVHIHx8IG5lID49IFRPX0VYUF9QT1MpXHJcbiAgICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIG5lKVxyXG4gICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIG5lLCAnMCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBpLCBybSk7XHJcblxyXG4gICAgICAgIC8vIG4uZSBtYXkgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2YWx1ZSB3YXMgcm91bmRlZCB1cC5cclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gdG9QcmVjaXNpb24gcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICAgIC8vIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlclxyXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgICBpZiAoaWQgPT0gMSB8fCBpZCA9PSAyICYmIChpIDw9IGUgfHwgZSA8PSBUT19FWFBfTkVHKSkge1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGZvciAoOyBsZW4gPCBpOyBzdHIgKz0gJzAnLCBsZW4rKyk7XHJcbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHN0ciwgZSk7XHJcblxyXG4gICAgICAgIC8vIEZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpIC09IG5lO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBpZiAoZSArIDEgPiBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKC0taSA+IDApIGZvciAoc3RyICs9ICcuJzsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgKz0gZSAtIGxlbjtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGUgKyAxID09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgJiYgYzAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSBCaWdOdW1iZXIubWF4IGFuZCBCaWdOdW1iZXIubWluLlxyXG4gICAgZnVuY3Rpb24gbWF4T3JNaW4oYXJncywgbWV0aG9kKSB7XHJcbiAgICAgIHZhciBuLFxyXG4gICAgICAgIGkgPSAxLFxyXG4gICAgICAgIG0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIoYXJnc1tpXSk7XHJcblxyXG4gICAgICAgIC8vIElmIGFueSBudW1iZXIgaXMgTmFOLCByZXR1cm4gTmFOLlxyXG4gICAgICAgIGlmICghbi5zKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kLmNhbGwobSwgbikpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBTdHJpcCB0cmFpbGluZyB6ZXJvcywgY2FsY3VsYXRlIGJhc2UgMTAgZXhwb25lbnQgYW5kIGNoZWNrIGFnYWluc3QgTUlOX0VYUCBhbmQgTUFYX0VYUC5cclxuICAgICAqIENhbGxlZCBieSBtaW51cywgcGx1cyBhbmQgdGltZXMuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG5vcm1hbGlzZShuLCBjLCBlKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBqID0gYy5sZW5ndGg7XHJcblxyXG4gICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWNbLS1qXTsgYy5wb3AoKSk7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGJhc2UgMTAgZXhwb25lbnQuIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICBmb3IgKGogPSBjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgIGlmICgoZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgbi5jID0gbi5lID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIG4uYyA9IFtuLmUgPSAwXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuLmUgPSBlO1xyXG4gICAgICAgIG4uYyA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdmFsdWVzIHRoYXQgZmFpbCB0aGUgdmFsaWRpdHkgdGVzdCBpbiBCaWdOdW1iZXIuXHJcbiAgICBwYXJzZU51bWVyaWMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksXHJcbiAgICAgICAgZG90QWZ0ZXIgPSAvXihbXi5dKylcXC4kLyxcclxuICAgICAgICBkb3RCZWZvcmUgPSAvXlxcLihbXi5dKykkLyxcclxuICAgICAgICBpc0luZmluaXR5T3JOYU4gPSAvXi0/KEluZmluaXR5fE5hTikkLyxcclxuICAgICAgICB3aGl0ZXNwYWNlT3JQbHVzID0gL15cXHMqXFwrKD89W1xcdy5dKXxeXFxzK3xcXHMrJC9nO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCBzdHIsIGlzTnVtLCBiKSB7XHJcbiAgICAgICAgdmFyIGJhc2UsXHJcbiAgICAgICAgICBzID0gaXNOdW0gPyBzdHIgOiBzdHIucmVwbGFjZSh3aGl0ZXNwYWNlT3JQbHVzLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIE5vIGV4Y2VwdGlvbiBvbiDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAgICBpZiAoaXNJbmZpbml0eU9yTmFOLnRlc3QocykpIHtcclxuICAgICAgICAgIHgucyA9IGlzTmFOKHMpID8gbnVsbCA6IHMgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIWlzTnVtKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaVxyXG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKGJhc2VQcmVmaXgsIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gKHAyID0gcDIudG9Mb3dlckNhc2UoKSkgPT0gJ3gnID8gMTYgOiBwMiA9PSAnYicgPyAyIDogODtcclxuICAgICAgICAgICAgICByZXR1cm4gIWIgfHwgYiA9PSBiYXNlID8gcDEgOiBtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IGI7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEUuZy4gJzEuJyB0byAnMScsICcuMScgdG8gJzAuMSdcclxuICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKGRvdEFmdGVyLCAnJDEnKS5yZXBsYWNlKGRvdEJlZm9yZSwgJzAuJDEnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ciAhPSBzKSByZXR1cm4gbmV3IEJpZ051bWJlcihzLCBiYXNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgYmFzZSB7Yn0gbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ05vdCBhJyArIChiID8gJyBiYXNlICcgKyBiIDogJycpICsgJyBudW1iZXI6ICcgKyBzdHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE5hTlxyXG4gICAgICAgICAgeC5zID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSb3VuZCB4IHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93LlxyXG4gICAgICogSWYgciBpcyB0cnV0aHksIGl0IGlzIGtub3duIHRoYXQgdGhlcmUgYXJlIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcm91bmQoeCwgc2QsIHJtLCByKSB7XHJcbiAgICAgIHZhciBkLCBpLCBqLCBrLCBuLCBuaSwgcmQsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgcG93czEwID0gUE9XU19URU47XHJcblxyXG4gICAgICAvLyBpZiB4IGlzIG5vdCBJbmZpbml0eSBvciBOYU4uLi5cclxuICAgICAgaWYgKHhjKSB7XHJcblxyXG4gICAgICAgIC8vIHJkIGlzIHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgLy8gbiBpcyBhIGJhc2UgMWUxNCBudW1iZXIsIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBvZiBhcnJheSB4LmMgY29udGFpbmluZyByZC5cclxuICAgICAgICAvLyBuaSBpcyB0aGUgaW5kZXggb2YgbiB3aXRoaW4geC5jLlxyXG4gICAgICAgIC8vIGQgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAvLyBpIGlzIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiBpbmNsdWRpbmcgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAvLyBqIGlzIHRoZSBhY3R1YWwgaW5kZXggb2YgcmQgd2l0aGluIG4gKGlmIDwgMCwgcmQgaXMgYSBsZWFkaW5nIHplcm8pLlxyXG4gICAgICAgIG91dDoge1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy5cclxuICAgICAgICAgIGZvciAoZCA9IDEsIGsgPSB4Y1swXTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuICAgICAgICAgIGkgPSBzZCAtIGQ7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgaiA9IHNkO1xyXG4gICAgICAgICAgICBuID0geGNbbmkgPSAwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICByZCA9IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5pID0gbWF0aGNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuaSA+PSB4Yy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgYnkgc3FydC5cclxuICAgICAgICAgICAgICAgIGZvciAoOyB4Yy5sZW5ndGggPD0gbmk7IHhjLnB1c2goMCkpO1xyXG4gICAgICAgICAgICAgICAgbiA9IHJkID0gMDtcclxuICAgICAgICAgICAgICAgIGQgPSAxO1xyXG4gICAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG4gPSBrID0geGNbbmldO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAgICAgICBmb3IgKGQgPSAxOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLlxyXG4gICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4sIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuIGlzIGdpdmVuIGJ5IExPR19CQVNFIC0gZC5cclxuICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByID0gciB8fCBzZCA8IDAgfHxcclxuXHJcbiAgICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/XHJcbiAgICAgICAgICAvLyBUaGUgZXhwcmVzc2lvbiAgbiAlIHBvd3MxMFtkIC0gaiAtIDFdICByZXR1cm5zIGFsbCBkaWdpdHMgb2YgbiB0byB0aGUgcmlnaHRcclxuICAgICAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCBqLCBlLmcuIGlmIG4gaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uIGdpdmVzIDcxNC5cclxuICAgICAgICAgICB4Y1tuaSArIDFdICE9IG51bGwgfHwgKGogPCAwID8gbiA6IG4gJSBwb3dzMTBbZCAtIGogLSAxXSk7XHJcblxyXG4gICAgICAgICAgciA9IHJtIDwgNFxyXG4gICAgICAgICAgID8gKHJkIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmXHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyBuIC8gcG93czEwW2QgLSBqXSA6IDAgOiB4Y1tuaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2QgPCAxIHx8ICF4Y1swXSkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgICAgICBzZCAtPSB4LmUgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0gcG93czEwWyhMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0VdO1xyXG4gICAgICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0geC5lID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgbmktLTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pICsgMTtcclxuICAgICAgICAgICAgayA9IHBvd3MxMFtMT0dfQkFTRSAtIGldO1xyXG5cclxuICAgICAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygbi5cclxuICAgICAgICAgICAgeGNbbmldID0gaiA+IDAgPyBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gal0gJSBwb3dzMTBbal0pICogayA6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgICAgICBpZiAobmkgPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhjWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG4gICAgICAgICAgICAgICAgaiA9IHhjWzBdICs9IGs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwLCBrKyspO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHguZSsrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeGNbMF0gPT0gQkFTRSkgeGNbMF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaV0gKz0gaztcclxuICAgICAgICAgICAgICAgIGlmICh4Y1tuaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaS0tXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGkgPSB4Yy5sZW5ndGg7IHhjWy0taV0gPT09IDA7IHhjLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE92ZXJmbG93PyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93PyBaZXJvLlxyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2Yobikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuXHJcbiAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBlKVxyXG4gICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBQUk9UT1RZUEUvSU5TVEFOQ0UgTUVUSE9EU1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5cclxuICAgICAqICAgMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIC0xIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICAgKiAgIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgKi9cclxuICAgIFAuY29tcGFyZWRUbyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIGRwIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZVxyXG4gICAgICogdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgZHAgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBkcCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXM6IGludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICBuID0gKCh2ID0gYy5sZW5ndGggLSAxKSAtIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgbnVtYmVyLlxyXG4gICAgICBpZiAodiA9IGNbdl0pIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC8gMCA9IElcclxuICAgICAqICBuIC8gTiA9IE5cclxuICAgICAqICBuIC8gSSA9IDBcclxuICAgICAqICAwIC8gbiA9IDBcclxuICAgICAqICAwIC8gMCA9IE5cclxuICAgICAqICAwIC8gTiA9IE5cclxuICAgICAqICAwIC8gSSA9IDBcclxuICAgICAqICBOIC8gbiA9IE5cclxuICAgICAqICBOIC8gMCA9IE5cclxuICAgICAqICBOIC8gTiA9IE5cclxuICAgICAqICBOIC8gSSA9IE5cclxuICAgICAqICBJIC8gbiA9IElcclxuICAgICAqICBJIC8gMCA9IElcclxuICAgICAqICBJIC8gTiA9IE5cclxuICAgICAqICBJIC8gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgREVDSU1BTF9QTEFDRVMsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIgcGFydCBvZiBkaXZpZGluZyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIGJ5IHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5pZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCAwLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGV4cG9uZW50aWF0ZWQgYnkgbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBtIGlzIHByZXNlbnQsIHJldHVybiB0aGUgcmVzdWx0IG1vZHVsbyBtLlxyXG4gICAgICogSWYgbiBpcyBuZWdhdGl2ZSByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKiBJZiBQT1dfUFJFQ0lTSU9OIGlzIG5vbi16ZXJvIGFuZCBtIGlzIG5vdCBwcmVzZW50LCByb3VuZCB0byBQT1dfUFJFQ0lTSU9OIHVzaW5nIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZHVsYXIgcG93ZXIgb3BlcmF0aW9uIHdvcmtzIGVmZmljaWVudGx5IHdoZW4geCwgbiwgYW5kIG0gYXJlIGludGVnZXJzLCBvdGhlcndpc2UgaXRcclxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgeC5leHBvbmVudGlhdGVkQnkobikubW9kdWxvKG0pIHdpdGggYSBQT1dfUFJFQ0lTSU9OIG9mIDAuXHJcbiAgICAgKlxyXG4gICAgICogbiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBleHBvbmVudC4gQW4gaW50ZWdlci5cclxuICAgICAqIFttXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBtb2R1bHVzLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBFeHBvbmVudCBub3QgYW4gaW50ZWdlcjoge259J1xyXG4gICAgICovXHJcbiAgICBQLmV4cG9uZW50aWF0ZWRCeSA9IFAucG93ID0gZnVuY3Rpb24gKG4sIG0pIHtcclxuICAgICAgdmFyIGhhbGYsIGlzTW9kRXhwLCBpLCBrLCBtb3JlLCBuSXNCaWcsIG5Jc05lZywgbklzT2RkLCB5LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobik7XHJcblxyXG4gICAgICAvLyBBbGxvdyBOYU4gYW5kIMKxSW5maW5pdHksIGJ1dCBub3Qgb3RoZXIgbm9uLWludGVnZXJzLlxyXG4gICAgICBpZiAobi5jICYmICFuLmlzSW50ZWdlcigpKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogJyArIHZhbHVlT2YobikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobSAhPSBudWxsKSBtID0gbmV3IEJpZ051bWJlcihtKTtcclxuXHJcbiAgICAgIC8vIEV4cG9uZW50IG9mIE1BWF9TQUZFX0lOVEVHRVIgaXMgMTUuXHJcbiAgICAgIG5Jc0JpZyA9IG4uZSA+IDE0O1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBOYU4sIMKxSW5maW5pdHksIMKxMCBvciDCsTEsIG9yIG4gaXMgwrFJbmZpbml0eSwgTmFOIG9yIMKxMC5cclxuICAgICAgaWYgKCF4LmMgfHwgIXguY1swXSB8fCB4LmNbMF0gPT0gMSAmJiAheC5lICYmIHguYy5sZW5ndGggPT0gMSB8fCAhbi5jIHx8ICFuLmNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZiBwb3cgd2hlbiB4IGlzIG5lZ2F0aXZlIGRlcGVuZHMgb24gdGhlIGV2ZW5uZXNzIG9mIG4uXHJcbiAgICAgICAgLy8gSWYgK24gb3ZlcmZsb3dzIHRvIMKxSW5maW5pdHksIHRoZSBldmVubmVzcyBvZiBuIHdvdWxkIGJlIG5vdCBiZSBrbm93bi5cclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihNYXRoLnBvdygrdmFsdWVPZih4KSwgbklzQmlnID8gMiAtIGlzT2RkKG4pIDogK3ZhbHVlT2YobikpKTtcclxuICAgICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogeTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbklzTmVnID0gbi5zIDwgMDtcclxuXHJcbiAgICAgIGlmIChtKSB7XHJcblxyXG4gICAgICAgIC8vIHggJSBtIHJldHVybnMgTmFOIGlmIGFicyhtKSBpcyB6ZXJvLCBvciBtIGlzIE5hTi5cclxuICAgICAgICBpZiAobS5jID8gIW0uY1swXSA6ICFtLnMpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAgIGlzTW9kRXhwID0gIW5Jc05lZyAmJiB4LmlzSW50ZWdlcigpICYmIG0uaXNJbnRlZ2VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpc01vZEV4cCkgeCA9IHgubW9kKG0pO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3cgdG8gwrFJbmZpbml0eTogPj0yKioxZTEwIG9yID49MS4wMDAwMDI0KioxZTE1LlxyXG4gICAgICAvLyBVbmRlcmZsb3cgdG8gwrEwOiA8PTAuNzkqKjFlMTAgb3IgPD0wLjk5OTk5NzUqKjFlMTUuXHJcbiAgICAgIH0gZWxzZSBpZiAobi5lID4gOSAmJiAoeC5lID4gMCB8fCB4LmUgPCAtMSB8fCAoeC5lID09IDBcclxuICAgICAgICAvLyBbMSwgMjQwMDAwMDAwXVxyXG4gICAgICAgID8geC5jWzBdID4gMSB8fCBuSXNCaWcgJiYgeC5jWzFdID49IDI0ZTdcclxuICAgICAgICAvLyBbODAwMDAwMDAwMDAwMDBdICBbOTk5OTk3NTAwMDAwMDBdXHJcbiAgICAgICAgOiB4LmNbMF0gPCA4ZTEzIHx8IG5Jc0JpZyAmJiB4LmNbMF0gPD0gOTk5OTk3NWU3KSkpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgeCBpcyBuZWdhdGl2ZSBhbmQgbiBpcyBvZGQsIGsgPSAtMCwgZWxzZSBrID0gMC5cclxuICAgICAgICBrID0geC5zIDwgMCAmJiBpc09kZChuKSA/IC0wIDogMDtcclxuXHJcbiAgICAgICAgLy8gSWYgeCA+PSAxLCBrID0gwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gLTEpIGsgPSAxIC8gaztcclxuXHJcbiAgICAgICAgLy8gSWYgbiBpcyBuZWdhdGl2ZSByZXR1cm4gwrEwLCBlbHNlIHJldHVybiDCsUluZmluaXR5LlxyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKG5Jc05lZyA/IDEgLyBrIDogayk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKFBPV19QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGluZyBlYWNoIGNvZWZmaWNpZW50IGFycmF5IHRvIGEgbGVuZ3RoIG9mIGsgYWZ0ZXIgZWFjaCBtdWx0aXBsaWNhdGlvblxyXG4gICAgICAgIC8vIGVxdWF0ZXMgdG8gdHJ1bmNhdGluZyBzaWduaWZpY2FudCBkaWdpdHMgdG8gUE9XX1BSRUNJU0lPTiArIFsyOCwgNDFdLFxyXG4gICAgICAgIC8vIGkuZS4gdGhlcmUgd2lsbCBiZSBhIG1pbmltdW0gb2YgMjggZ3VhcmQgZGlnaXRzIHJldGFpbmVkLlxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChQT1dfUFJFQ0lTSU9OIC8gTE9HX0JBU0UgKyAyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5Jc0JpZykge1xyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKDAuNSk7XHJcbiAgICAgICAgaWYgKG5Jc05lZykgbi5zID0gMTtcclxuICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gTWF0aC5hYnMoK3ZhbHVlT2YobikpO1xyXG4gICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgLy8gUGVyZm9ybXMgNTQgbG9vcCBpdGVyYXRpb25zIGZvciBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEuXHJcbiAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgIGlmIChuSXNPZGQpIHtcclxuICAgICAgICAgIHkgPSB5LnRpbWVzKHgpO1xyXG4gICAgICAgICAgaWYgKCF5LmMpIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICAgIGlmICh5LmMubGVuZ3RoID4gaykgeS5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICAgIHkgPSB5Lm1vZChtKTsgICAgLy95ID0geS5taW51cyhkaXYoeSwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpKSB7XHJcbiAgICAgICAgICBpID0gbWF0aGZsb29yKGkgLyAyKTtcclxuICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gbi50aW1lcyhoYWxmKTtcclxuICAgICAgICAgIHJvdW5kKG4sIG4uZSArIDEsIDEpO1xyXG5cclxuICAgICAgICAgIGlmIChuLmUgPiAxNCkge1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgPSArdmFsdWVPZihuKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggPSB4LnRpbWVzKHgpO1xyXG5cclxuICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgaWYgKHguYyAmJiB4LmMubGVuZ3RoID4gaykgeC5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgeCA9IHgubW9kKG0pOyAgICAvL3ggPSB4Lm1pbnVzKGRpdih4LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTW9kRXhwKSByZXR1cm4geTtcclxuICAgICAgaWYgKG5Jc05lZykgeSA9IE9ORS5kaXYoeSk7XHJcblxyXG4gICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogayA/IHJvdW5kKHksIFBPV19QUkVDSVNJT04sIFJPVU5ESU5HX01PREUsIG1vcmUpIDogeTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIGFuIGludGVnZXJcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtybX0nXHJcbiAgICAgKi9cclxuICAgIFAuaW50ZWdlclZhbHVlID0gZnVuY3Rpb24gKHJtKSB7XHJcbiAgICAgIHZhciBuID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcbiAgICAgIHJldHVybiByb3VuZChuLCBuLmUgKyAxLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRXF1YWxUbyA9IFAuZXEgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYSBmaW5pdGUgbnVtYmVyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAxIHx8IGIgPT09IDA7XHJcblxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzSW50ZWdlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSA+IHRoaXMuYy5sZW5ndGggLSAyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbiA9IFAubHQgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuT3JFcXVhbFRvID0gUC5sdGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gLTEgfHwgYiA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgTmFOLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmFOID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMucztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbmVnYXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIHRoaXMuY1swXSA9PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC0gMCA9IG5cclxuICAgICAqICBuIC0gTiA9IE5cclxuICAgICAqICBuIC0gSSA9IC1JXHJcbiAgICAgKiAgMCAtIG4gPSAtblxyXG4gICAgICogIDAgLSAwID0gMFxyXG4gICAgICogIDAgLSBOID0gTlxyXG4gICAgICogIDAgLSBJID0gLUlcclxuICAgICAqICBOIC0gbiA9IE5cclxuICAgICAqICBOIC0gMCA9IE5cclxuICAgICAqICBOIC0gTiA9IE5cclxuICAgICAqICBOIC0gSSA9IE5cclxuICAgICAqICBJIC0gbiA9IElcclxuICAgICAqICBJIC0gMCA9IElcclxuICAgICAqICBJIC0gTiA9IE5cclxuICAgICAqICBJIC0gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtaW51cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5taW51cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBpLCBqLCB0LCB4TFR5LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4LnBsdXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiB4YyA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHljID8geCA6IE5hTik7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgICByZXR1cm4geWNbMF0gPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOlxyXG5cclxuICAgICAgICAgICAvLyBJRUVFIDc1NCAoMjAwOCkgNi4zOiBuIC0gbiA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5XHJcbiAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9PSAzID8gLTAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuXHJcbiAgICAgICAgaWYgKHhMVHkgPSBhIDwgMCkge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLlxyXG4gICAgICAgIGZvciAoYiA9IGE7IGItLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRzIGVxdWFsLiBDaGVjayBkaWdpdCBieSBkaWdpdC5cclxuICAgICAgICBqID0gKHhMVHkgPSAoYSA9IHhjLmxlbmd0aCkgPCAoYiA9IHljLmxlbmd0aCkpID8gYSA6IGI7XHJcblxyXG4gICAgICAgIGZvciAoYSA9IGIgPSAwOyBiIDwgajsgYisrKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHhjW2JdICE9IHljW2JdKSB7XHJcbiAgICAgICAgICAgIHhMVHkgPSB4Y1tiXSA8IHljW2JdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHggPCB5PyBQb2ludCB4YyB0byB0aGUgYXJyYXkgb2YgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmICh4TFR5KSB0ID0geGMsIHhjID0geWMsIHljID0gdCwgeS5zID0gLXkucztcclxuXHJcbiAgICAgIGIgPSAoaiA9IHljLmxlbmd0aCkgLSAoaSA9IHhjLmxlbmd0aCk7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MgdG8geGMgaWYgc2hvcnRlci5cclxuICAgICAgLy8gTm8gbmVlZCB0byBhZGQgemVyb3MgdG8geWMgaWYgc2hvcnRlciBhcyBzdWJ0cmFjdCBvbmx5IG5lZWRzIHRvIHN0YXJ0IGF0IHljLmxlbmd0aC5cclxuICAgICAgaWYgKGIgPiAwKSBmb3IgKDsgYi0tOyB4Y1tpKytdID0gMCk7XHJcbiAgICAgIGIgPSBCQVNFIC0gMTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHljIGZyb20geGMuXHJcbiAgICAgIGZvciAoOyBqID4gYTspIHtcclxuXHJcbiAgICAgICAgaWYgKHhjWy0tal0gPCB5Y1tqXSkge1xyXG4gICAgICAgICAgZm9yIChpID0gajsgaSAmJiAheGNbLS1pXTsgeGNbaV0gPSBiKTtcclxuICAgICAgICAgIC0teGNbaV07XHJcbiAgICAgICAgICB4Y1tqXSArPSBCQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeGNbal0gLT0geWNbal07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyB4Y1swXSA9PSAwOyB4Yy5zcGxpY2UoMCwgMSksIC0teWUpO1xyXG5cclxuICAgICAgLy8gWmVybz9cclxuICAgICAgaWYgKCF4Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBGb2xsb3dpbmcgSUVFRSA3NTQgKDIwMDgpIDYuMyxcclxuICAgICAgICAvLyBuIC0gbiA9ICswICBidXQgIG4gLSBuID0gLTAgIHdoZW4gcm91bmRpbmcgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgICAgeS5zID0gUk9VTkRJTkdfTU9ERSA9PSAzID8gLTEgOiAxO1xyXG4gICAgICAgIHkuYyA9IFt5LmUgPSAwXTtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgSW5maW5pdHkgYXMgK3ggLSAreSAhPSBJbmZpbml0eSAmJiAteCAtIC15ICE9IEluZmluaXR5XHJcbiAgICAgIC8vIGZvciBmaW5pdGUgeCBhbmQgeS5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICAgbiAlIDAgPSAgTlxyXG4gICAgICogICBuICUgTiA9ICBOXHJcbiAgICAgKiAgIG4gJSBJID0gIG5cclxuICAgICAqICAgMCAlIG4gPSAgMFxyXG4gICAgICogIC0wICUgbiA9IC0wXHJcbiAgICAgKiAgIDAgJSAwID0gIE5cclxuICAgICAqICAgMCAlIE4gPSAgTlxyXG4gICAgICogICAwICUgSSA9ICAwXHJcbiAgICAgKiAgIE4gJSBuID0gIE5cclxuICAgICAqICAgTiAlIDAgPSAgTlxyXG4gICAgICogICBOICUgTiA9ICBOXHJcbiAgICAgKiAgIE4gJSBJID0gIE5cclxuICAgICAqICAgSSAlIG4gPSAgTlxyXG4gICAgICogICBJICUgMCA9ICBOXHJcbiAgICAgKiAgIEkgJSBOID0gIE5cclxuICAgICAqICAgSSAlIEkgPSAgTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1vZHVsbyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBNT0RVTE9fTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBxLCBzLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgSW5maW5pdHkgb3IgTmFOLCBvciB5IGlzIE5hTiBvciB6ZXJvLlxyXG4gICAgICBpZiAoIXguYyB8fCAheS5zIHx8IHkuYyAmJiAheS5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgSW5maW5pdHkgb3IgeCBpcyB6ZXJvLlxyXG4gICAgICB9IGVsc2UgaWYgKCF5LmMgfHwgeC5jICYmICF4LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE1PRFVMT19NT0RFID09IDkpIHtcclxuXHJcbiAgICAgICAgLy8gRXVjbGlkaWFuIGRpdmlzaW9uOiBxID0gc2lnbih5KSAqIGZsb29yKHggLyBhYnMoeSkpXHJcbiAgICAgICAgLy8gciA9IHggLSBxeSAgICB3aGVyZSAgMCA8PSByIDwgYWJzKHkpXHJcbiAgICAgICAgcyA9IHkucztcclxuICAgICAgICB5LnMgPSAxO1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgMyk7XHJcbiAgICAgICAgeS5zID0gcztcclxuICAgICAgICBxLnMgKj0gcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIE1PRFVMT19NT0RFKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IHgubWludXMocS50aW1lcyh5KSk7XHJcblxyXG4gICAgICAvLyBUbyBtYXRjaCBKYXZhU2NyaXB0ICUsIGVuc3VyZSBzaWduIG9mIHplcm8gaXMgc2lnbiBvZiBkaXZpZGVuZC5cclxuICAgICAgaWYgKCF5LmNbMF0gJiYgTU9EVUxPX01PREUgPT0gMSkgeS5zID0geC5zO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKiAwID0gMFxyXG4gICAgICogIG4gKiBOID0gTlxyXG4gICAgICogIG4gKiBJID0gSVxyXG4gICAgICogIDAgKiBuID0gMFxyXG4gICAgICogIDAgKiAwID0gMFxyXG4gICAgICogIDAgKiBOID0gTlxyXG4gICAgICogIDAgKiBJID0gTlxyXG4gICAgICogIE4gKiBuID0gTlxyXG4gICAgICogIE4gKiAwID0gTlxyXG4gICAgICogIE4gKiBOID0gTlxyXG4gICAgICogIE4gKiBJID0gTlxyXG4gICAgICogIEkgKiBuID0gSVxyXG4gICAgICogIEkgKiAwID0gTlxyXG4gICAgICogIEkgKiBOID0gTlxyXG4gICAgICogIEkgKiBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG11bHRpcGxpZWQgYnkgdGhlIHZhbHVlXHJcbiAgICAgKiBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubXVsdGlwbGllZEJ5ID0gUC50aW1lcyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBjLCBlLCBpLCBqLCBrLCBtLCB4Y0wsIHhsbywgeGhpLCB5Y0wsIHlsbywgeWhpLCB6YyxcclxuICAgICAgICBiYXNlLCBzcXJ0QmFzZSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9ICh5ID0gbmV3IEJpZ051bWJlcih5LCBiKSkuYztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIMKxSW5maW5pdHkgb3IgwrEwP1xyXG4gICAgICBpZiAoIXhjIHx8ICF5YyB8fCAheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTiwgb3Igb25lIGlzIDAgYW5kIHRoZSBvdGhlciBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXgucyB8fCAheS5zIHx8IHhjICYmICF4Y1swXSAmJiAheWMgfHwgeWMgJiYgIXljWzBdICYmICF4Yykge1xyXG4gICAgICAgICAgeS5jID0geS5lID0geS5zID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeS5zICo9IHgucztcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgaXMgwrFJbmZpbml0eS5cclxuICAgICAgICAgIGlmICgheGMgfHwgIXljKSB7XHJcbiAgICAgICAgICAgIHkuYyA9IHkuZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeS5jID0gWzBdO1xyXG4gICAgICAgICAgICB5LmUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgKyBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgIHkucyAqPSB4LnM7XHJcbiAgICAgIHhjTCA9IHhjLmxlbmd0aDtcclxuICAgICAgeWNMID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gRW5zdXJlIHhjIHBvaW50cyB0byBsb25nZXIgYXJyYXkgYW5kIHhjTCB0byBpdHMgbGVuZ3RoLlxyXG4gICAgICBpZiAoeGNMIDwgeWNMKSB6YyA9IHhjLCB4YyA9IHljLCB5YyA9IHpjLCBpID0geGNMLCB4Y0wgPSB5Y0wsIHljTCA9IGk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGNMICsgeWNMLCB6YyA9IFtdOyBpLS07IHpjLnB1c2goMCkpO1xyXG5cclxuICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgIHNxcnRCYXNlID0gU1FSVF9CQVNFO1xyXG5cclxuICAgICAgZm9yIChpID0geWNMOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBjID0gMDtcclxuICAgICAgICB5bG8gPSB5Y1tpXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgIHloaSA9IHljW2ldIC8gc3FydEJhc2UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSB4Y0wsIGogPSBpICsgazsgaiA+IGk7KSB7XHJcbiAgICAgICAgICB4bG8gPSB4Y1stLWtdICUgc3FydEJhc2U7XHJcbiAgICAgICAgICB4aGkgPSB4Y1trXSAvIHNxcnRCYXNlIHwgMDtcclxuICAgICAgICAgIG0gPSB5aGkgKiB4bG8gKyB4aGkgKiB5bG87XHJcbiAgICAgICAgICB4bG8gPSB5bG8gKiB4bG8gKyAoKG0gJSBzcXJ0QmFzZSkgKiBzcXJ0QmFzZSkgKyB6Y1tqXSArIGM7XHJcbiAgICAgICAgICBjID0gKHhsbyAvIGJhc2UgfCAwKSArIChtIC8gc3FydEJhc2UgfCAwKSArIHloaSAqIHhoaTtcclxuICAgICAgICAgIHpjW2otLV0gPSB4bG8gJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgemNbal0gPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgICsrZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB6Yy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgemMsIGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG5lZ2F0ZWQsXHJcbiAgICAgKiBpLmUuIG11bHRpcGxpZWQgYnkgLTEuXHJcbiAgICAgKi9cclxuICAgIFAubmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICB4LnMgPSAteC5zIHx8IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICsgMCA9IG5cclxuICAgICAqICBuICsgTiA9IE5cclxuICAgICAqICBuICsgSSA9IElcclxuICAgICAqICAwICsgbiA9IG5cclxuICAgICAqICAwICsgMCA9IDBcclxuICAgICAqICAwICsgTiA9IE5cclxuICAgICAqICAwICsgSSA9IElcclxuICAgICAqICBOICsgbiA9IE5cclxuICAgICAqICBOICsgMCA9IE5cclxuICAgICAqICBOICsgTiA9IE5cclxuICAgICAqICBOICsgSSA9IE5cclxuICAgICAqICBJICsgbiA9IElcclxuICAgICAqICBJICsgMCA9IElcclxuICAgICAqICBJICsgTiA9IE5cclxuICAgICAqICBJICsgSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBwbHVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLnBsdXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYSAvIDApO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkgcmV0dXJuIHljWzBdID8geSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDogYSAqIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcbiAgICAgICAgaWYgKGEgPiAwKSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKDsgYS0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhID0geGMubGVuZ3RoO1xyXG4gICAgICBiID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUG9pbnQgeGMgdG8gdGhlIGxvbmdlciBhcnJheSwgYW5kIGIgdG8gdGhlIHNob3J0ZXIgbGVuZ3RoLlxyXG4gICAgICBpZiAoYSAtIGIgPCAwKSB0ID0geWMsIHljID0geGMsIHhjID0gdCwgYiA9IGE7XHJcblxyXG4gICAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5Yy5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4YyBjYW4gYmUgaWdub3JlZC5cclxuICAgICAgZm9yIChhID0gMDsgYjspIHtcclxuICAgICAgICBhID0gKHhjWy0tYl0gPSB4Y1tiXSArIHljW2JdICsgYSkgLyBCQVNFIHwgMDtcclxuICAgICAgICB4Y1tiXSA9IEJBU0UgPT09IHhjW2JdID8gMCA6IHhjW2JdICUgQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICB4YyA9IFthXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICsreWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgICAgLy8geWUgPSBNQVhfRVhQICsgMSBwb3NzaWJsZVxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgc2QgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mXHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICogSWYgc2QgaXMgdHJ1ZSBpbmNsdWRlIGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgY291bnQuXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBzZCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIHNkIHtudW1iZXJ8Ym9vbGVhbn0gbnVtYmVyOiBzaWduaWZpY2FudCBkaWdpdHM6IGludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogd2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoc2QgIT0gbnVsbCAmJiBzZCAhPT0gISFzZCkge1xyXG4gICAgICAgIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBzZCwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHYgPSBjLmxlbmd0aCAtIDE7XHJcbiAgICAgIG4gPSB2ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSB7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBuKyspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgJiYgeC5lICsgMSA+IG4pIG4gPSB4LmUgKyAxO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgc2hpZnRlZCBieSBrIHBsYWNlc1xyXG4gICAgICogKHBvd2VycyBvZiAxMCkuIFNoaWZ0IHRvIHRoZSByaWdodCBpZiBuID4gMCwgYW5kIHRvIHRoZSBsZWZ0IGlmIG4gPCAwLlxyXG4gICAgICpcclxuICAgICAqIGsge251bWJlcn0gSW50ZWdlciwgLU1BWF9TQUZFX0lOVEVHRVIgdG8gTUFYX1NBRkVfSU5URUdFUiBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtrfSdcclxuICAgICAqL1xyXG4gICAgUC5zaGlmdGVkQnkgPSBmdW5jdGlvbiAoaykge1xyXG4gICAgICBpbnRDaGVjayhrLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVzKCcxZScgKyBrKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgc3FydCgtbikgPSAgTlxyXG4gICAgICogIHNxcnQoTikgPSAgTlxyXG4gICAgICogIHNxcnQoLUkpID0gIE5cclxuICAgICAqICBzcXJ0KEkpID0gIElcclxuICAgICAqICBzcXJ0KDApID0gIDBcclxuICAgICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLFxyXG4gICAgICogcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuc3F1YXJlUm9vdCA9IFAuc3FydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIG0sIG4sIHIsIHJlcCwgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBjID0geC5jLFxyXG4gICAgICAgIHMgPSB4LnMsXHJcbiAgICAgICAgZSA9IHguZSxcclxuICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTICsgNCxcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcignMC41Jyk7XHJcblxyXG4gICAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgICAgaWYgKHMgIT09IDEgfHwgIWMgfHwgIWNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcighcyB8fCBzIDwgMCAmJiAoIWMgfHwgY1swXSkgPyBOYU4gOiBjID8geCA6IDEgLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgICAgcyA9IE1hdGguc3FydCgrdmFsdWVPZih4KSk7XHJcblxyXG4gICAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAocyA9PSAwIHx8IHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gY29lZmZUb1N0cmluZyhjKTtcclxuICAgICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoK24pO1xyXG4gICAgICAgIGUgPSBiaXRGbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpO1xyXG5cclxuICAgICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKHMgKyAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciB6ZXJvLlxyXG4gICAgICAvLyByIGNvdWxkIGJlIHplcm8gaWYgTUlOX0VYUCBpcyBjaGFuZ2VkIGFmdGVyIHRoZSB0aGlzIHZhbHVlIHdhcyBjcmVhdGVkLlxyXG4gICAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIGEgZGl2aXNpb24gYnkgemVybyAoeC90KSBhbmQgaGVuY2UgSW5maW5pdHkgYmVsb3csIHdoaWNoIHdvdWxkIGNhdXNlXHJcbiAgICAgIC8vIGNvZWZmVG9TdHJpbmcgdG8gdGhyb3cuXHJcbiAgICAgIGlmIChyLmNbMF0pIHtcclxuICAgICAgICBlID0gci5lO1xyXG4gICAgICAgIHMgPSBlICsgZHA7XHJcbiAgICAgICAgaWYgKHMgPCAzKSBzID0gMDtcclxuXHJcbiAgICAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgICAgIGZvciAoOyA7KSB7XHJcbiAgICAgICAgICB0ID0gcjtcclxuICAgICAgICAgIHIgPSBoYWxmLnRpbWVzKHQucGx1cyhkaXYoeCwgdCwgZHAsIDEpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvZWZmVG9TdHJpbmcodC5jKS5zbGljZSgwLCBzKSA9PT0gKG4gPSBjb2VmZlRvU3RyaW5nKHIuYykpLnNsaWNlKDAsIHMpKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXhwb25lbnQgb2YgciBtYXkgaGVyZSBiZSBvbmUgbGVzcyB0aGFuIHRoZSBmaW5hbCByZXN1bHQgZXhwb25lbnQsXHJcbiAgICAgICAgICAgIC8vIGUuZyAwLjAwMDk5OTkgKGUtNCkgLS0+IDAuMDAxIChlLTMpLCBzbyBhZGp1c3QgcyBzbyB0aGUgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSBpbmRleGVkIGNvcnJlY3RseS5cclxuICAgICAgICAgICAgaWYgKHIuZSA8IGUpIC0tcztcclxuICAgICAgICAgICAgbiA9IG4uc2xpY2UocyAtIDMsIHMgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgOTk5OSBvciA0OTk5IChpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnkpIGNvbnRpbnVlIHRoZVxyXG4gICAgICAgICAgICAvLyBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGV4YWN0IHJlc3VsdCBhcyB0aGUgbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgICAgICByb3VuZCh0LCB0LmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRwICs9IDQ7XHJcbiAgICAgICAgICAgICAgcyArPSA0O1xyXG4gICAgICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBleGFjdFxyXG4gICAgICAgICAgICAgIC8vIHJlc3VsdC4gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDEpO1xyXG4gICAgICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDEsIFJPVU5ESU5HX01PREUsIG0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFuZFxyXG4gICAgICogcm91bmRlZCB1c2luZyBST1VORElOR19NT0RFIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0V4cG9uZW50aWFsID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwKys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0sIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kaW5nXHJcbiAgICAgKiB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogYXMgd2l0aCBKYXZhU2NyaXB0J3MgbnVtYmVyIHR5cGUsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsXHJcbiAgICAgKiBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GaXhlZCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCA9IGRwICsgdGhpcy5lICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRlZFxyXG4gICAgICogdXNpbmcgcm0gb3IgUk9VTkRJTkdfTU9ERSB0byBkcCBkZWNpbWFsIHBsYWNlcywgYW5kIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnRpZXNcclxuICAgICAqIG9mIHRoZSBmb3JtYXQgb3IgRk9STUFUIG9iamVjdCAoc2VlIEJpZ051bWJlci5zZXQpLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmb3JtYXR0aW5nIG9iamVjdCBtYXkgY29udGFpbiBzb21lIG9yIGFsbCBvZiB0aGUgcHJvcGVydGllcyBzaG93biBiZWxvdy5cclxuICAgICAqXHJcbiAgICAgKiBGT1JNQVQgPSB7XHJcbiAgICAgKiAgIHByZWZpeDogJycsXHJcbiAgICAgKiAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAqICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICogICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICogICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICogICBzdWZmaXg6ICcnXHJcbiAgICAgKiB9O1xyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqIFtmb3JtYXRdIHtvYmplY3R9IEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlIEZPUk1BVCBwYmplY3QgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQgbm90IGFuIG9iamVjdDoge2Zvcm1hdH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9Gb3JtYXQgPSBmdW5jdGlvbiAoZHAsIHJtLCBmb3JtYXQpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkcCAhPSBudWxsICYmIHJtICYmIHR5cGVvZiBybSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gcm07XHJcbiAgICAgICAgICBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkcCAmJiB0eXBlb2YgZHAgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGRwO1xyXG4gICAgICAgICAgZHAgPSBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZvcm1hdCAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgbm90IGFuIG9iamVjdDogJyArIGZvcm1hdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHgudG9GaXhlZChkcCwgcm0pO1xyXG5cclxuICAgICAgaWYgKHguYykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgYXJyID0gc3RyLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICBnMSA9ICtmb3JtYXQuZ3JvdXBTaXplLFxyXG4gICAgICAgICAgZzIgPSArZm9ybWF0LnNlY29uZGFyeUdyb3VwU2l6ZSxcclxuICAgICAgICAgIGdyb3VwU2VwYXJhdG9yID0gZm9ybWF0Lmdyb3VwU2VwYXJhdG9yIHx8ICcnLFxyXG4gICAgICAgICAgaW50UGFydCA9IGFyclswXSxcclxuICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGFyclsxXSxcclxuICAgICAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgICAgIGludERpZ2l0cyA9IGlzTmVnID8gaW50UGFydC5zbGljZSgxKSA6IGludFBhcnQsXHJcbiAgICAgICAgICBsZW4gPSBpbnREaWdpdHMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZzIpIGkgPSBnMSwgZzEgPSBnMiwgZzIgPSBpLCBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgaWYgKGcxID4gMCAmJiBsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpID0gbGVuICUgZzEgfHwgZzE7XHJcbiAgICAgICAgICBpbnRQYXJ0ID0gaW50RGlnaXRzLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpICs9IGcxKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnN1YnN0cihpLCBnMSk7XHJcbiAgICAgICAgICBpZiAoZzIgPiAwKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnNsaWNlKGkpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnKSBpbnRQYXJ0ID0gJy0nICsgaW50UGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IGZyYWN0aW9uUGFydFxyXG4gICAgICAgICA/IGludFBhcnQgKyAoZm9ybWF0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJycpICsgKChnMiA9ICtmb3JtYXQuZnJhY3Rpb25Hcm91cFNpemUpXHJcbiAgICAgICAgICA/IGZyYWN0aW9uUGFydC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxkeycgKyBnMiArICd9XFxcXEInLCAnZycpLFxyXG4gICAgICAgICAgICckJicgKyAoZm9ybWF0LmZyYWN0aW9uR3JvdXBTZXBhcmF0b3IgfHwgJycpKVxyXG4gICAgICAgICAgOiBmcmFjdGlvblBhcnQpXHJcbiAgICAgICAgIDogaW50UGFydDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIChmb3JtYXQucHJlZml4IHx8ICcnKSArIHN0ciArIChmb3JtYXQuc3VmZml4IHx8ICcnKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdHdvIEJpZ051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBhcyBhIHNpbXBsZVxyXG4gICAgICogZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci5cclxuICAgICAqIFRoZSBkZW5vbWluYXRvciB3aWxsIGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIG1heGltdW0gZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZVxyXG4gICAgICogdGhlIGxvd2VzdCB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBbbWRdIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gSW50ZWdlciA+PSAxLCBvciBJbmZpbml0eS4gVGhlIG1heGltdW0gZGVub21pbmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9IDoge21kfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1kKSB7XHJcbiAgICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBleHAsIG4sIG4wLCBuMSwgcSwgciwgcyxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYztcclxuXHJcbiAgICAgIGlmIChtZCAhPSBudWxsKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobWQpO1xyXG5cclxuICAgICAgICAvLyBUaHJvdyBpZiBtZCBpcyBsZXNzIHRoYW4gb25lIG9yIGlzIG5vdCBhbiBpbnRlZ2VyLCB1bmxlc3MgaXQgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCFuLmlzSW50ZWdlcigpICYmIChuLmMgfHwgbi5zICE9PSAxKSB8fCBuLmx0KE9ORSkpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCAnICtcclxuICAgICAgICAgICAgICAobi5pc0ludGVnZXIoKSA/ICdvdXQgb2YgcmFuZ2U6ICcgOiAnbm90IGFuIGludGVnZXI6ICcpICsgdmFsdWVPZihuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXhjKSByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuXHJcbiAgICAgIGQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIG4xID0gZDAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIGQxID0gbjAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIHMgPSBjb2VmZlRvU3RyaW5nKHhjKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBpbml0aWFsIGRlbm9taW5hdG9yLlxyXG4gICAgICAvLyBkIGlzIGEgcG93ZXIgb2YgMTAgYW5kIHRoZSBtaW5pbXVtIG1heCBkZW5vbWluYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgZXhhY3RseS5cclxuICAgICAgZSA9IGQuZSA9IHMubGVuZ3RoIC0geC5lIC0gMTtcclxuICAgICAgZC5jWzBdID0gUE9XU19URU5bKGV4cCA9IGUgJSBMT0dfQkFTRSkgPCAwID8gTE9HX0JBU0UgKyBleHAgOiBleHBdO1xyXG4gICAgICBtZCA9ICFtZCB8fCBuLmNvbXBhcmVkVG8oZCkgPiAwID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcblxyXG4gICAgICBleHAgPSBNQVhfRVhQO1xyXG4gICAgICBNQVhfRVhQID0gMSAvIDA7XHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG5cclxuICAgICAgLy8gbjAgPSBkMSA9IDBcclxuICAgICAgbjAuY1swXSA9IDA7XHJcblxyXG4gICAgICBmb3IgKDsgOykgIHtcclxuICAgICAgICBxID0gZGl2KG4sIGQsIDAsIDEpO1xyXG4gICAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7XHJcbiAgICAgICAgaWYgKGQyLmNvbXBhcmVkVG8obWQpID09IDEpIGJyZWFrO1xyXG4gICAgICAgIGQwID0gZDE7XHJcbiAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMiA9IG4xKSk7XHJcbiAgICAgICAgbjAgPSBkMjtcclxuICAgICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyID0gZCkpO1xyXG4gICAgICAgIG4gPSBkMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZDIgPSBkaXYobWQubWludXMoZDApLCBkMSwgMCwgMSk7XHJcbiAgICAgIG4wID0gbjAucGx1cyhkMi50aW1lcyhuMSkpO1xyXG4gICAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcbiAgICAgIGUgPSBlICogMjtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDFcclxuICAgICAgciA9IGRpdihuMSwgZDEsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpLmNvbXBhcmVkVG8oXHJcbiAgICAgICAgICBkaXYobjAsIGQwLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKSkgPCAxID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICAgIE1BWF9FWFAgPSBleHA7XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICAgKi9cclxuICAgIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiArdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSBvciBST1VORElOR19NT0RFLiBJZiBzZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHNcclxuICAgICAqIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24sIHRoZW4gdXNlXHJcbiAgICAgKiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICBpZiAoc2QgIT0gbnVsbCkgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgc2QsIHJtLCAyKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBiYXNlIGIsIG9yIGJhc2UgMTAgaWYgYiBpc1xyXG4gICAgICogb21pdHRlZC4gSWYgYSBiYXNlIGlzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGJhc2UgMTAsIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmRcclxuICAgICAqIFJPVU5ESU5HX01PREUuIElmIGEgYmFzZSBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgdGhpcyBCaWdOdW1iZXIgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnRcclxuICAgICAqIHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFRPX0VYUF9QT1MsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuXHJcbiAgICAgKiBUT19FWFBfTkVHLCByZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW2JdIHtudW1iZXJ9IEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgKi9cclxuICAgIFAudG9TdHJpbmcgPSBmdW5jdGlvbiAoYikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIG4gPSB0aGlzLFxyXG4gICAgICAgIHMgPSBuLnMsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5IG9yIE5hTj9cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc3RyID0gJ0luZmluaXR5JztcclxuICAgICAgICAgIGlmIChzIDwgMCkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSAnTmFOJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgICAgID8gdG9FeHBvbmVudGlhbChjb2VmZlRvU3RyaW5nKG4uYyksIGUpXHJcbiAgICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYiA9PT0gMTApIHtcclxuICAgICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBERUNJTUFMX1BMQUNFUyArIGUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIG4uZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG4gICAgICAgICAgc3RyID0gY29udmVydEJhc2UodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKSwgMTAsIGIsIHMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHMgPCAwICYmIG4uY1swXSkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhcyB0b1N0cmluZywgYnV0IGRvIG5vdCBhY2NlcHQgYSBiYXNlIGFyZ3VtZW50LCBhbmQgaW5jbHVkZSB0aGUgbWludXMgc2lnbiBmb3JcclxuICAgICAqIG5lZ2F0aXZlIHplcm8uXHJcbiAgICAgKi9cclxuICAgIFAudmFsdWVPZiA9IFAudG9KU09OID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFAuX2lzQmlnTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY29uZmlnT2JqZWN0ICE9IG51bGwpIEJpZ051bWJlci5zZXQoY29uZmlnT2JqZWN0KTtcclxuXHJcbiAgICByZXR1cm4gQmlnTnVtYmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFBSSVZBVEUgSEVMUEVSIEZVTkNUSU9OU1xyXG5cclxuICAvLyBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmFyaWFibGVzLFxyXG4gIC8vIGUuZy4gREVDSU1BTF9QTEFDRVMsIGluIHRoZSBzY29wZSBvZiB0aGUgYGNsb25lYCBmdW5jdGlvbiBhYm92ZS5cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGJpdEZsb29yKG4pIHtcclxuICAgIHZhciBpID0gbiB8IDA7XHJcbiAgICByZXR1cm4gbiA+IDAgfHwgbiA9PT0gaSA/IGkgOiBpIC0gMTtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gYSBjb2VmZmljaWVudCBhcnJheSBhcyBhIHN0cmluZyBvZiBiYXNlIDEwIGRpZ2l0cy5cclxuICBmdW5jdGlvbiBjb2VmZlRvU3RyaW5nKGEpIHtcclxuICAgIHZhciBzLCB6LFxyXG4gICAgICBpID0gMSxcclxuICAgICAgaiA9IGEubGVuZ3RoLFxyXG4gICAgICByID0gYVswXSArICcnO1xyXG5cclxuICAgIGZvciAoOyBpIDwgajspIHtcclxuICAgICAgcyA9IGFbaSsrXSArICcnO1xyXG4gICAgICB6ID0gTE9HX0JBU0UgLSBzLmxlbmd0aDtcclxuICAgICAgZm9yICg7IHotLTsgcyA9ICcwJyArIHMpO1xyXG4gICAgICByICs9IHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChqID0gci5sZW5ndGg7IHIuY2hhckNvZGVBdCgtLWopID09PSA0ODspO1xyXG5cclxuICAgIHJldHVybiByLnNsaWNlKDAsIGogKyAxIHx8IDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbXBhcmUgdGhlIHZhbHVlIG9mIEJpZ051bWJlcnMgeCBhbmQgeS5cclxuICBmdW5jdGlvbiBjb21wYXJlKHgsIHkpIHtcclxuICAgIHZhciBhLCBiLFxyXG4gICAgICB4YyA9IHguYyxcclxuICAgICAgeWMgPSB5LmMsXHJcbiAgICAgIGkgPSB4LnMsXHJcbiAgICAgIGogPSB5LnMsXHJcbiAgICAgIGsgPSB4LmUsXHJcbiAgICAgIGwgPSB5LmU7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTj9cclxuICAgIGlmICghaSB8fCAhaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgYSA9IHhjICYmICF4Y1swXTtcclxuICAgIGIgPSB5YyAmJiAheWNbMF07XHJcblxyXG4gICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICBpZiAoYSB8fCBiKSByZXR1cm4gYSA/IGIgPyAwIDogLWogOiBpO1xyXG5cclxuICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgIGlmIChpICE9IGopIHJldHVybiBpO1xyXG5cclxuICAgIGEgPSBpIDwgMDtcclxuICAgIGIgPSBrID09IGw7XHJcblxyXG4gICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBiID8gMCA6ICF4YyBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoIWIpIHJldHVybiBrID4gbCBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgaiA9IChrID0geGMubGVuZ3RoKSA8IChsID0geWMubGVuZ3RoKSA/IGsgOiBsO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSBpZiAoeGNbaV0gIT0geWNbaV0pIHJldHVybiB4Y1tpXSA+IHljW2ldIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGxlbmd0aHMuXHJcbiAgICByZXR1cm4gayA9PSBsID8gMCA6IGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrIHRoYXQgbiBpcyBhIHByaW1pdGl2ZSBudW1iZXIsIGFuIGludGVnZXIsIGFuZCBpbiByYW5nZSwgb3RoZXJ3aXNlIHRocm93LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGludENoZWNrKG4sIG1pbiwgbWF4LCBuYW1lKSB7XHJcbiAgICBpZiAobiA8IG1pbiB8fCBuID4gbWF4IHx8IG4gIT09IG1hdGhmbG9vcihuKSkge1xyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgKGJpZ251bWJlckVycm9yICsgKG5hbWUgfHwgJ0FyZ3VtZW50JykgKyAodHlwZW9mIG4gPT0gJ251bWJlcidcclxuICAgICAgICAgPyBuIDwgbWluIHx8IG4gPiBtYXggPyAnIG91dCBvZiByYW5nZTogJyA6ICcgbm90IGFuIGludGVnZXI6ICdcclxuICAgICAgICAgOiAnIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICcpICsgU3RyaW5nKG4pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBBc3N1bWVzIGZpbml0ZSBuLlxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHZhciBrID0gbi5jLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gYml0Rmxvb3Iobi5lIC8gTE9HX0JBU0UpID09IGsgJiYgbi5jW2tdICUgMiAhPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRXhwb25lbnRpYWwoc3RyLCBlKSB7XHJcbiAgICByZXR1cm4gKHN0ci5sZW5ndGggPiAxID8gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKSA6IHN0cikgK1xyXG4gICAgIChlIDwgMCA/ICdlJyA6ICdlKycpICsgZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCB6KSB7XHJcbiAgICB2YXIgbGVuLCB6cztcclxuXHJcbiAgICAvLyBOZWdhdGl2ZSBleHBvbmVudD9cclxuICAgIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcy5cclxuICAgICAgZm9yICh6cyA9IHogKyAnLic7ICsrZTsgenMgKz0geik7XHJcbiAgICAgIHN0ciA9IHpzICsgc3RyO1xyXG5cclxuICAgIC8vIFBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zLlxyXG4gICAgICBpZiAoKytlID4gbGVuKSB7XHJcbiAgICAgICAgZm9yICh6cyA9IHosIGUgLT0gbGVuOyAtLWU7IHpzICs9IHopO1xyXG4gICAgICAgIHN0ciArPSB6cztcclxuICAgICAgfSBlbHNlIGlmIChlIDwgbGVuKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG5cclxuICAvLyBFWFBPUlRcclxuXHJcblxyXG4gIEJpZ051bWJlciA9IGNsb25lKCk7XHJcbiAgQmlnTnVtYmVyWydkZWZhdWx0J10gPSBCaWdOdW1iZXIuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBBTUQuXHJcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gQmlnTnVtYmVyOyB9KTtcclxuXHJcbiAgLy8gTm9kZS5qcyBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBCcm93c2VyLlxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoIWdsb2JhbE9iamVjdCkge1xyXG4gICAgICBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmID8gc2VsZiA6IHdpbmRvdztcclxuICAgIH1cclxuXHJcbiAgICBnbG9iYWxPYmplY3QuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMjEpO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJ1dGlscyIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZFVSTCIsImJ1aWxkRnVsbFBhdGgiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwicGFyc2VQcm90b2NvbCIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwiZGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImRvbmUiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzRm9ybURhdGEiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsInVybCIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInZhbHVlIiwiZXJyIiwib3BlbiIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJpbmRleE9mIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsIndpdGhDcmVkZW50aWFscyIsInhzcmZDb29raWVOYW1lIiwicmVhZCIsInVuZGVmaW5lZCIsInhzcmZIZWFkZXJOYW1lIiwiZm9yRWFjaCIsInZhbCIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0UmVxdWVzdEhlYWRlciIsImlzVW5kZWZpbmVkIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJ0eXBlIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicHJvdG9jb2wiLCJFUlJfQkFEX1JFUVVFU1QiLCJzZW5kIiwiYmluZCIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImNvbnRleHQiLCJpbnN0YW5jZSIsInByb3RvdHlwZSIsImV4dGVuZCIsImNyZWF0ZSIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsIlZFUlNJT04iLCJ0b0Zvcm1EYXRhIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJpc0F4aW9zRXJyb3IiLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwidGhpcyIsInByb21pc2UiLCJ0b2tlbiIsInRoZW4iLCJfbGlzdGVuZXJzIiwiaSIsImwiLCJsZW5ndGgiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwibWVzc2FnZSIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsInNwbGljZSIsInNvdXJjZSIsImMiLCJjYWxsIiwiRVJSX0NBTkNFTEVEIiwibmFtZSIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiQXJyYXkiLCJhcHBseSIsImNvbmNhdCIsInNoaWZ0IiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZXJyb3IiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb2RlIiwiRXJyb3IiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiZGVzY3JpcHRvcnMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJmcm9tIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwidG9GbGF0T2JqZWN0Iiwib2JqIiwiYXNzaWduIiwiaGFuZGxlcnMiLCJ1c2UiLCJvcHRpb25zIiwiZWplY3QiLCJpZCIsImZuIiwiaCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlc3BvbnNlIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsInRhcmdldCIsImlzUGxhaW5PYmplY3QiLCJpc0FycmF5Iiwic2xpY2UiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJrZXlzIiwiY29uZmlnVmFsdWUiLCJ2YWxpZGF0ZVN0YXR1cyIsIkVSUl9CQURfUkVTUE9OU0UiLCJNYXRoIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJwcm9jZXNzIiwidG9TdHJpbmciLCJpc0FycmF5QnVmZmVyIiwiaXNCdWZmZXIiLCJpc1N0cmVhbSIsImlzRmlsZSIsImlzQmxvYiIsImlzQXJyYXlCdWZmZXJWaWV3IiwiYnVmZmVyIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc0ZpbGVMaXN0IiwiaXNPYmplY3RQYXlsb2FkIiwiaXNPYmplY3QiLCJjb250ZW50VHlwZSIsIl9Gb3JtRGF0YSIsImVudiIsIkZvcm1EYXRhIiwicmF3VmFsdWUiLCJwYXJzZXIiLCJlbmNvZGVyIiwiaXNTdHJpbmciLCJKU09OIiwicGFyc2UiLCJ0cmltIiwiZSIsInN0cmluZ2lmeSIsInN0cmluZ2lmeVNhZmVseSIsInN0cmljdEpTT05QYXJzaW5nIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ0aGlzQXJnIiwiYXJncyIsImFyZ3VtZW50cyIsImVuY29kZSIsInJlcGxhY2UiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwid3JpdGUiLCJleHBpcmVzIiwicGF0aCIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsImlzTnVtYmVyIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwiZG9jdW1lbnQiLCJtYXRjaCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsInRlc3QiLCJwYXlsb2FkIiwib3JpZ2luVVJMIiwibXNpZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsInBhcnNlZCIsIm5vcm1hbGl6ZWROYW1lIiwiaWdub3JlRHVwbGljYXRlT2YiLCJzcGxpdCIsImxpbmUiLCJzdWJzdHIiLCJleGVjIiwiY2FsbGJhY2siLCJhcnIiLCJmb3JtRGF0YSIsImNvbnZlcnRWYWx1ZSIsImlzVHlwZWRBcnJheSIsIkJsb2IiLCJCdWZmZXIiLCJidWlsZCIsInBhcmVudEtleSIsImZ1bGxLZXkiLCJlbmRzV2l0aCIsInRvQXJyYXkiLCJlbCIsImFwcGVuZCIsInBvcCIsInRoaW5nIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInJlc3VsdCIsIkVSUl9CQURfT1BUSU9OIiwiY2FjaGUiLCJraW5kT2YiLCJzdHIiLCJraW5kT2ZUZXN0IiwiZ2V0UHJvdG90eXBlT2YiLCJpc0Z1bmN0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImNvbnN0cnVjdG9yIiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJtZXJnZWQiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJTdHJpbmciLCJsYXN0SW5kZXgiLCJpc1B1cmVPYmplY3QiLCJpbml0IiwiY2xvbmVQYXJhbXMiLCJDbGllbnQiLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJhcGlUb2tlbiIsInJlc291cmNlIiwicmVxdWVzdF8xIiwiSHR0cE1ldGhvZHNfMSIsIkdldCIsIlBvc3QiLCJQdXQiLCJEZWxldGUiLCJwYWNrYWdlSlNPTiIsInNldENvbmZpZyIsInNldE9wdGlvbnMiLCJ0b2tlbkNvbm5lY3RTdHJhdGVneSIsImJhc2ljQ29ubmVjdFN0cmF0ZWd5IiwiY2xvbmVkUGFyYW1zIiwiX19hc3NpZ24iLCJwcm94eSIsImN1c3RvbUNvbmZpZyIsInNldFZhbHVlSWZOb3ROaWwiLCJvdXRwdXQiLCJmcmVlemUiLCJwYWNrYWdlX2pzb25fMSIsImluZGV4XzEiLCJpbmRleF8yIiwiX19leHRlbmRzIiwiTWFpbGpldCIsIkh0dHBNZXRob2RzIiwiSlNPTmIiLCJzdG9yZUFzU3RyaW5nIiwiY2xpZW50IiwiY2xpZW50XzEiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJjbGllbnRDb25maWciLCJnZXRDb25maWciLCJfYSIsIl9iIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJyZXNwb25zZURhdGEiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiY2xpZW50T3B0aW9ucyIsImdldE9wdGlvbnMiLCJiYXNlVXJsIiwicGVyZm9ybUFQSUNhbGwiLCJidWlsZEZ1bGxVcmwiLCJzZXRCYXNlVVJMIiwiYm9keSIsIm1ha2VSZXF1ZXN0IiwiX2ciLCJheGlvc18xIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzQ29kZSIsImVycm9yTWVzc2FnZSIsIkVycm9yTWVzc2FnZSIsIm9yaWdpbmFsTWVzc2FnZSIsImZ1bGxNZXNzYWdlIiwiTWVzc2FnZXMiLCJfYyIsIkVycm9ycyIsIl9kIiwiX2UiLCJFcnJvckNvZGUiLCJFcnJvcklkZW50aWZpZXIiLCJFcnJvclJlbGF0ZWRUbyIsInRleHQiLCJpc05pbF8xIiwiaXNOdWxsXzEiLCJpc1VuZGVmaW5lZF8xIiwiaXNQdXJlT2JqZWN0XzEiLCJzZXRWYWx1ZUlmTm90TmlsXzEiLCJ0YXJnZXRPYmplY3QiLCJnbG9iYWxPYmplY3QiLCJCaWdOdW1iZXIiLCJpc051bWVyaWMiLCJtYXRoY2VpbCIsImNlaWwiLCJtYXRoZmxvb3IiLCJiaWdudW1iZXJFcnJvciIsInRvb01hbnlEaWdpdHMiLCJCQVNFIiwiTE9HX0JBU0UiLCJNQVhfU0FGRV9JTlRFR0VSIiwiUE9XU19URU4iLCJTUVJUX0JBU0UiLCJNQVgiLCJiaXRGbG9vciIsIm4iLCJjb2VmZlRvU3RyaW5nIiwicyIsInoiLCJqIiwiciIsImNvbXBhcmUiLCJ4IiwieSIsInhjIiwieWMiLCJrIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJpc09kZCIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkUG9pbnQiLCJsZW4iLCJ6cyIsImNsb25lIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwiZm9ybWF0Iiwicm0iLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJtIiwibm9ybWFsaXNlIiwic2QiLCJkIiwibmkiLCJyZCIsInBvd3MxMCIsIm91dCIsIlJPVU5EX1VQIiwiUk9VTkRfRE9XTiIsIlJPVU5EX0NFSUwiLCJST1VORF9GTE9PUiIsIlJPVU5EX0hBTEZfVVAiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9IQUxGX0NFSUwiLCJST1VORF9IQUxGX0ZMT09SIiwiRVVDTElEIiwic2V0IiwicCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwiaXNOYU4iLCJwMSIsInAyIiwiYWJzb2x1dGVWYWx1ZSIsImFicyIsImNvbXBhcmVkVG8iLCJkZWNpbWFsUGxhY2VzIiwiZGl2aWRlZEJ5IiwiZGl2aWRlZFRvSW50ZWdlckJ5IiwiaWRpdiIsImV4cG9uZW50aWF0ZWRCeSIsImhhbGYiLCJpc01vZEV4cCIsIm5Jc0JpZyIsIm5Jc05lZyIsIm5Jc09kZCIsImlzSW50ZWdlciIsIm1vZCIsInRpbWVzIiwiaW50ZWdlclZhbHVlIiwiaXNFcXVhbFRvIiwiZXEiLCJpc0Zpbml0ZSIsImlzR3JlYXRlclRoYW4iLCJpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvIiwiZ3RlIiwiaXNMZXNzVGhhbiIsImlzTGVzc1RoYW5PckVxdWFsVG8iLCJsdGUiLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzWmVybyIsIm1pbnVzIiwidCIsInhMVHkiLCJ4ZSIsInllIiwibW9kdWxvIiwibXVsdGlwbGllZEJ5IiwieGNMIiwieWNMIiwieWxvIiwieWhpIiwiemMiLCJzcXJ0QmFzZSIsIm5lZ2F0ZWQiLCJwcmVjaXNpb24iLCJzaGlmdGVkQnkiLCJzcXVhcmVSb290Iiwic3FydCIsInJlcCIsInRvRml4ZWQiLCJ0b0Zvcm1hdCIsImcxIiwiZzIiLCJpbnRQYXJ0IiwiZnJhY3Rpb25QYXJ0IiwiaXNOZWciLCJpbnREaWdpdHMiLCJ0b0ZyYWN0aW9uIiwibWQiLCJkMCIsImQxIiwiZDIiLCJleHAiLCJuMCIsIm4xIiwidG9OdW1iZXIiLCJ0b1ByZWNpc2lvbiIsImpzb25fc3RyaW5naWZ5IiwianNvbl9wYXJzZSIsInN1c3BlY3RQcm90b1J4Iiwic3VzcGVjdENvbnN0cnVjdG9yUngiLCJfb3B0aW9ucyIsInN0cmljdCIsImFsd2F5c1BhcnNlQXNCaWciLCJ1c2VOYXRpdmVCaWdJbnQiLCJwcm90b0FjdGlvbiIsImNvbnN0cnVjdG9yQWN0aW9uIiwiYXQiLCJjaCIsImVzY2FwZWUiLCJmIiwibmV4dCIsInN0cmluZyIsIkJpZ0ludCIsImhleCIsInVmZmZmIiwic3RhcnRBdCIsInBhcnNlSW50IiwiZnJvbUNoYXJDb2RlIiwid2hpdGUiLCJvYmplY3QiLCJhcnJheSIsIndvcmQiLCJyZXZpdmVyIiwid2FsayIsImhvbGRlciIsImdhcCIsImluZGVudCIsImVzY2FwYWJsZSIsIm1ldGEiLCJxdW90ZSIsInBhcnRpYWwiLCJtaW5kIiwicmVwbGFjZXIiLCJzcGFjZSIsIm5vcm1hbGl6ZSIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJmaXJzdCIsImNvbXBvbmVudCIsImRlZmluaXRpb24iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +define((function(){return e={669:function(e,t,r){e.exports=r(609)},448:function(e,t,r){"use strict";var n=r(867),o=r(26),i=r(372),s=r(327),u=r(97),a=r(109),c=r(985),f=r(660),l=r(648),p=r(644),h=r(205);e.exports=function(e){return new Promise((function(t,r){var d,g=e.data,m=e.headers,y=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(d),e.signal&&e.signal.removeEventListener("abort",d)}n.isFormData(g)&&n.isStandardBrowserEnv()&&delete m["Content-Type"];var b=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",E=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(w+":"+E)}var O=u(e.baseURL,e.url);function A(){if(b){var n="getAllResponseHeaders"in b?a(b.getAllResponseHeaders()):null,i={data:y&&"text"!==y&&"json"!==y?b.response:b.responseText,status:b.status,statusText:b.statusText,headers:n,config:e,request:b};o((function(e){t(e),v()}),(function(e){r(e),v()}),i),b=null}}if(b.open(e.method.toUpperCase(),s(O,e.params,e.paramsSerializer),!0),b.timeout=e.timeout,"onloadend"in b?b.onloadend=A:b.onreadystatechange=function(){b&&4===b.readyState&&(0!==b.status||b.responseURL&&0===b.responseURL.indexOf("file:"))&&setTimeout(A)},b.onabort=function(){b&&(r(new l("Request aborted",l.ECONNABORTED,e,b)),b=null)},b.onerror=function(){r(new l("Network Error",l.ERR_NETWORK,e,b,b)),b=null},b.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new l(t,n.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,b)),b=null},n.isStandardBrowserEnv()){var j=(e.withCredentials||c(O))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;j&&(m[e.xsrfHeaderName]=j)}"setRequestHeader"in b&&n.forEach(m,(function(e,t){void 0===g&&"content-type"===t.toLowerCase()?delete m[t]:b.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(b.withCredentials=!!e.withCredentials),y&&"json"!==y&&(b.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&b.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&b.upload&&b.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(d=function(e){b&&(r(!e||e&&e.type?new p:e),b.abort(),b=null)},e.cancelToken&&e.cancelToken.subscribe(d),e.signal&&(e.signal.aborted?d():e.signal.addEventListener("abort",d))),g||(g=null);var x=h(O);x&&-1===["http","https","file"].indexOf(x)?r(new l("Unsupported protocol "+x+":",l.ERR_BAD_REQUEST,e)):b.send(g)}))}},609:function(e,t,r){"use strict";var n=r(867),o=r(849),i=r(496),s=r(185),u=function e(t){var r=new i(t),u=o(i.prototype.request,r);return n.extend(u,i.prototype,r),n.extend(u,r),u.create=function(r){return e(s(t,r))},u}(r(546));u.Axios=i,u.CanceledError=r(644),u.CancelToken=r(972),u.isCancel=r(502),u.VERSION=r(288).version,u.toFormData=r(675),u.AxiosError=r(648),u.Cancel=u.CanceledError,u.all=function(e){return Promise.all(e)},u.spread=r(713),u.isAxiosError=r(268),e.exports=u,e.exports.default=u},972:function(e,t,r){"use strict";var n=r(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){var t,n=r._listeners.length;for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){l.headers[e]=n.merge(a)})),e.exports=l},660:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},288:function(e){e.exports={version:"0.27.2"}},849:function(e){"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},205:function(e){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},713:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},675:function(e,t,r){"use strict";var n=r(867);e.exports=function(e,t){t=t||new FormData;var r=[];function o(e){return null===e?"":n.isDate(e)?e.toISOString():n.isArrayBuffer(e)||n.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(i,s){if(n.isPlainObject(i)||n.isArray(i)){if(-1!==r.indexOf(i))throw Error("Circular reference detected in "+s);r.push(i),n.forEach(i,(function(r,i){if(!n.isUndefined(r)){var u,a=s?s+"."+i:i;if(r&&!s&&"object"==typeof r)if(n.endsWith(i,"{}"))r=JSON.stringify(r);else if(n.endsWith(i,"[]")&&(u=n.toArray(r)))return void u.forEach((function(e){!n.isUndefined(e)&&t.append(a,o(e))}));e(r,a)}})),r.pop()}else t.append(s,o(i))}(e),t}},875:function(e,t,r){"use strict";var n=r(288).version,o=r(648),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,r){function i(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,u){if(!1===e)throw new o(i(n," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[n]&&(s[n]=!0,console.warn(i(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,u)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),i=n.length;i-- >0;){var s=n[i],u=t[s];if(u){var a=e[s],c=void 0===a||u(a,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},867:function(e,t,r){"use strict";var n,o=r(849),i=Object.prototype.toString,s=(n=Object.create(null),function(e){var t=i.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())});function u(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function a(e){return Array.isArray(e)}function c(e){return void 0===e}var f=u("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var h=u("Date"),d=u("File"),g=u("Blob"),m=u("FileList");function y(e){return"[object Function]"===i.call(e)}var v=u("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var r=0,n=e.length;r0;)s[i=n[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:u,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:E,isFileList:m}},76:function(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[g.default.Put,g.default.Post,g.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var t,r,n=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:n.host,i=null!==(r=this.config.version)&&void 0!==r?r:n.version;return(0,l.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var r="send"===this.resource,n=this.resource.indexOf("sms")>-1;return r||n?"":"REST"},e.prototype.makeRequest=function(t,r,n){var i,s={url:t,params:n,data:this.getRequestBody(r),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var r="string"==typeof t,n="json"===this.responseType;return t&&r&&n?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var u=this.getCredentials();u.apiToken?s.headers.Authorization="Bearer ".concat(u.apiToken):s.auth={username:u.apiKey,password:u.apiSecret};var a=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var f=null!==(i=this.config.output)&&void 0!==i?i:a.output;return f&&(s.responseType=f),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,h.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(n(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,l.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,l.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,r){var n,o,i,s,u;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===r&&(r=!0),a(this,void 0,void 0,(function(){var a,f,l,p,g,m,y,v,b,w;return c(this,(function(c){switch(c.label){case 0:if(a=this.buildFullUrl(),this.setBaseURL(this.resource),!r)return[2,{body:v=this.getRequestBody(e),params:t,url:a}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(a,e,t)];case 2:return[2,{response:f=c.sent(),body:f.data}];case 3:if((l=c.sent())instanceof h.AxiosError)throw(p=new Error).code=l.code,p.config=l.config,l.response?(g=l.response,m=g.status,y=g.statusText,v=g.data,p.response=l.response,p.statusCode=m,p.statusText=y,b=null!==(n=null==v?void 0:v.ErrorMessage)&&void 0!==n?n:l.message,p.originalMessage=b,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(b,'"'),v&&("string"==typeof(w=null===(u=null===(s=null===(i=null===(o=v.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===u?void 0:u.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,d.setValueIfNotNil)(p,"ErrorMessage",v.ErrorMessage),(0,d.setValueIfNotNil)(p,"ErrorCode",v.ErrorCode),(0,d.setValueIfNotNil)(p,"ErrorIdentifier",v.ErrorIdentifier),(0,d.setValueIfNotNil)(p,"ErrorRelatedTo",v.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=l.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(l.message,'"')),p;throw l;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":n(window))},e.protocol="https://",e}();t.default=v},6:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=n(r(808));t.isNil=o.default;var i=n(r(376));t.isNull=i.default;var s=n(r(34));t.isUndefined=s.default;var u=n(r(818));t.isPureObject=u.default;var a=n(r(190));t.setValueIfNotNil=a.default},808:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(376)),i=n(r(34));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},818:function(e,t){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===r(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},34:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},190:function(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(r(808)),s=o(r(376));t.default=function(e,t,r){if("object"!==n(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(r)||(e[t]=r)}},431:function(e,t,r){var n;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,u=Math.ceil,a=Math.floor,c="[BigNumber Error] ",f=c+"Number primitive has more than 15 significant digits: ",l=1e14,p=14,h=9007199254740991,d=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],g=1e7,m=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function v(e){for(var t,r,n=1,o=e.length,i=e[0]+"";nc^r?1:-1;for(u=(a=o.length)<(c=i.length)?a:c,s=0;si[s]^r?1:-1;return a==c?0:a>c^r?1:-1}function w(e,t,r,n){if(er||e!==a(e))throw Error(c+(n||"Argument")+("number"==typeof e?er?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function E(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function O(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function A(e,t,r){var n,o;if(t<0){for(o=r+".";++t;o+=r);e=o+e}else if(++t>(n=e.length)){for(o=r,t-=n;--t;o+=r);e+=o}else tI?y.c=y.e=null:e.e=10;l/=10,c++);return void(c>I?y.c=y.e=null:(y.e=c,y.c=[e]))}m=String(e)}else{if(!s.test(m=String(e)))return o(y,m,d);y.s=45==m.charCodeAt(0)?(m=m.slice(1),-1):1}(c=m.indexOf("."))>-1&&(m=m.replace(".","")),(l=m.search(/e/i))>0?(c<0&&(c=l),c+=+m.slice(l+1),m=m.substring(0,l)):c<0&&(c=m.length)}else{if(w(t,2,V.length,"Base"),10==t)return H(y=new J(e),T+y.e+1,B);if(m=String(e),d="number"==typeof e){if(0*e!=0)return o(y,m,d,t);if(y.s=1/e<0?(m=m.slice(1),-1):1,J.DEBUG&&m.replace(/^0\.0*|\./,"").length>15)throw Error(f+e)}else y.s=45===m.charCodeAt(0)?(m=m.slice(1),-1):1;for(r=V.slice(0,t),c=l=0,g=m.length;lc){c=g;continue}}else if(!u&&(m==m.toUpperCase()&&(m=m.toLowerCase())||m==m.toLowerCase()&&(m=m.toUpperCase()))){u=!0,l=-1,c=0;continue}return o(y,String(e),d,t)}d=!1,(c=(m=n(m,t,10,y.s)).indexOf("."))>-1?m=m.replace(".",""):c=m.length}for(l=0;48===m.charCodeAt(l);l++);for(g=m.length;48===m.charCodeAt(--g););if(m=m.slice(l,++g)){if(g-=l,d&&J.DEBUG&&g>15&&(e>h||e!==a(e)))throw Error(f+y.s*e);if((c=c-l-1)>I)y.c=y.e=null;else if(c=U)?O(a,s):A(a,s,"0");else if(i=(e=H(new J(e),t,r)).e,u=(a=v(e.c)).length,1==n||2==n&&(t<=i||i<=k)){for(;uu){if(--t>0)for(a+=".";t--;a+="0");}else if((t+=i-u)>0)for(i+1==u&&(a+=".");t--;a+="0");return e.s<0&&o?"-"+a:a}function z(e,t){for(var r,n=1,o=new J(e[0]);n=10;o/=10,n++);return(r=n+r*p-1)>I?e.c=e.e=null:r=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,g=(f=m[h=0])/y[o-s-1]%10|0;else if((h=u((i+1)/p))>=m.length){if(!n)break e;for(;m.length<=h;m.push(0));f=g=0,o=1,s=(i%=p)-p+1}else{for(f=c=m[h],o=1;c>=10;c/=10,o++);g=(s=(i%=p)-p+o)<0?0:f/y[o-s-1]%10|0}if(n=n||t<0||null!=m[h+1]||(s<0?f:f%y[o-s-1]),n=r<4?(g||n)&&(0==r||r==(e.s<0?3:2)):g>5||5==g&&(4==r||n||6==r&&(i>0?s>0?f/y[o-s]:0:m[h-1])%10&1||r==(e.s<0?8:7)),t<1||!m[0])return m.length=0,n?(t-=e.e+1,m[0]=y[(p-t%p)%p],e.e=-t||0):m[0]=e.e=0,e;if(0==i?(m.length=h,c=1,h--):(m.length=h+1,c=y[p-i],m[h]=s>0?a(f/y[o-s]%y[s])*c:0),n)for(;;){if(0==h){for(i=1,s=m[0];s>=10;s/=10,i++);for(s=m[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,m[0]==l&&(m[0]=1));break}if(m[h]+=c,m[h]!=l)break;m[h--]=0,c=1}for(i=m.length;0===m[--i];m.pop());}e.e>I?e.c=e.e=null:e.e=U?O(t,r):A(t,r,"0"),e.s<0?"-"+t:t)}return J.clone=e,J.ROUND_UP=0,J.ROUND_DOWN=1,J.ROUND_CEIL=2,J.ROUND_FLOOR=3,J.ROUND_HALF_UP=4,J.ROUND_HALF_DOWN=5,J.ROUND_HALF_EVEN=6,J.ROUND_HALF_CEIL=7,J.ROUND_HALF_FLOOR=8,J.EUCLID=9,J.config=J.set=function(e){var t,r;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(r=e[t],0,m,t),T=r),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(r=e[t],0,8,t),B=r),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((r=e[t])&&r.pop?(w(r[0],-m,0,t),w(r[1],0,m,t),k=r[0],U=r[1]):(w(r,-m,m,t),k=-(U=r<0?-r:r))),e.hasOwnProperty(t="RANGE"))if((r=e[t])&&r.pop)w(r[0],-m,-1,t),w(r[1],1,m,t),D=r[0],I=r[1];else{if(w(r,-m,m,t),!r)throw Error(c+t+" cannot be zero: "+r);D=-(I=r<0?-r:r)}if(e.hasOwnProperty(t="CRYPTO")){if((r=e[t])!==!!r)throw Error(c+t+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!r,Error(c+"crypto unavailable");L=r}else L=r}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(r=e[t],0,9,t),M=r),e.hasOwnProperty(t="POW_PRECISION")&&(w(r=e[t],0,m,t),F=r),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(r=e[t]))throw Error(c+t+" not an object: "+r);q=r}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(r=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(c+t+" invalid: "+r);V=r}}return{DECIMAL_PLACES:T,ROUNDING_MODE:B,EXPONENTIAL_AT:[k,U],RANGE:[D,I],CRYPTO:L,MODULO_MODE:M,POW_PRECISION:F,FORMAT:q,ALPHABET:V}},J.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!J.DEBUG)return!0;var t,r,n=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===i||-1===i)&&o>=-m&&o<=m&&o===a(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(n[0]).length==t){for(t=0;t=l||r!==a(r))break e;if(0!==r)return!0}}}else if(null===n&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},J.maximum=J.max=function(){return z(arguments,R.lt)},J.minimum=J.min=function(){return z(arguments,R.gt)},J.random=(i=9007199254740992,j=Math.random()*i&2097151?function(){return a(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,r,n,o,i,s=0,f=[],l=new J(C);if(null==e?e=T:w(e,0,m),o=u(e/p),L)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(f.push(i%1e14),s+=7);s=o/7}if(!L)for(;s=10;i/=10,s++);sr-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/r|0,s[o]%=r)}return s.reverse()}return function(n,o,i,s,u){var a,c,f,l,p,h,d,g,m=n.indexOf("."),y=T,b=B;for(m>=0&&(l=F,F=0,n=n.replace(".",""),h=(g=new J(o)).pow(n.length-m),F=l,g.c=t(A(v(h.c),h.e,"0"),10,i,e),g.e=g.c.length),f=l=(d=t(n,o,i,u?(a=V,e):(a=e,V))).length;0==d[--l];d.pop());if(!d[0])return a.charAt(0);if(m<0?--f:(h.c=d,h.e=f,h.s=s,d=(h=r(h,g,y,b,i)).c,p=h.r,f=h.e),m=d[c=f+y+1],l=i/2,p=p||c<0||null!=d[c+1],p=b<4?(null!=m||p)&&(0==b||b==(h.s<0?3:2)):m>l||m==l&&(4==b||p||6==b&&1&d[c-1]||b==(h.s<0?8:7)),c<1||!d[0])n=p?A(a.charAt(1),-y,a.charAt(0)):a.charAt(0);else{if(d.length=c,p)for(--i;++d[--c]>i;)d[c]=0,c||(++f,d=[1].concat(d));for(l=d.length;!d[--l];);for(m=0,n="";m<=l;n+=a.charAt(d[m++]));n=A(n,f,a.charAt(0))}return n}}(),r=function(){function e(e,t,r){var n,o,i,s,u=0,a=e.length,c=t%g,f=t/g|0;for(e=e.slice();a--;)u=((o=c*(i=e[a]%g)+(n=f*i+(s=e[a]/g|0)*c)%g*g+u)/r|0)+(n/g|0)+f*s,e[a]=o%r;return u&&(e=[u].concat(e)),e}function t(e,t,r,n){var o,i;if(r!=n)i=r>n?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function r(e,t,r,n){for(var o=0;r--;)e[r]-=o,o=e[r]1;e.splice(0,1));}return function(n,o,i,s,u){var c,f,h,d,g,m,v,b,w,E,O,A,j,x,_,S,N,P=n.s==o.s?1:-1,R=n.c,C=o.c;if(!(R&&R[0]&&C&&C[0]))return new J(n.s&&o.s&&(R?!C||R[0]!=C[0]:C)?R&&0==R[0]||!C?0*P:P/0:NaN);for(w=(b=new J(P)).c=[],P=i+(f=n.e-o.e)+1,u||(u=l,f=y(n.e/p)-y(o.e/p),P=P/p|0),h=0;C[h]==(R[h]||0);h++);if(C[h]>(R[h]||0)&&f--,P<0)w.push(1),d=!0;else{for(x=R.length,S=C.length,h=0,P+=2,(g=a(u/(C[0]+1)))>1&&(C=e(C,g,u),R=e(R,g,u),S=C.length,x=R.length),j=S,O=(E=R.slice(0,S)).length;O=u/2&&_++;do{if(g=0,(c=t(C,E,S,O))<0){if(A=E[0],S!=O&&(A=A*u+(E[1]||0)),(g=a(A/_))>1)for(g>=u&&(g=u-1),v=(m=e(C,g,u)).length,O=E.length;1==t(m,E,v,O);)g--,r(m,S=10;P/=10,h++);H(b,i+(b.e=h+f*p-1)+1,s,d)}else b.e=f,b.r=+d;return b}}(),x=/^(-?)0([xbo])(?=\w[\w.]*$)/i,_=/^([^.]+)\.$/,S=/^\.([^.]+)$/,N=/^-?(Infinity|NaN)$/,P=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,r,n){var o,i=r?t:t.replace(P,"");if(N.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!r&&(i=i.replace(x,(function(e,t,r){return o="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=o?e:t})),n&&(o=n,i=i.replace(_,"$1").replace(S,"0.$1")),t!=i))return new J(i,o);if(J.DEBUG)throw Error(c+"Not a"+(n?" base "+n:"")+" number: "+t);e.s=null}e.c=e.e=null},R.absoluteValue=R.abs=function(){var e=new J(this);return e.s<0&&(e.s=1),e},R.comparedTo=function(e,t){return b(this,new J(e,t))},R.decimalPlaces=R.dp=function(e,t){var r,n,o,i=this;if(null!=e)return w(e,0,m),null==t?t=B:w(t,0,8),H(new J(i),e+i.e+1,t);if(!(r=i.c))return null;if(n=((o=r.length-1)-y(this.e/p))*p,o=r[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},R.dividedBy=R.div=function(e,t){return r(this,new J(e,t),T,B)},R.dividedToIntegerBy=R.idiv=function(e,t){return r(this,new J(e,t),0,1)},R.exponentiatedBy=R.pow=function(e,t){var r,n,o,i,s,f,l,h,d=this;if((e=new J(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+K(e));if(null!=t&&(t=new J(t)),s=e.e>14,!d.c||!d.c[0]||1==d.c[0]&&!d.e&&1==d.c.length||!e.c||!e.c[0])return h=new J(Math.pow(+K(d),s?2-E(e):+K(e))),t?h.mod(t):h;if(f=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new J(NaN);(n=!f&&d.isInteger()&&t.isInteger())&&(d=d.mod(t))}else{if(e.e>9&&(d.e>0||d.e<-1||(0==d.e?d.c[0]>1||s&&d.c[1]>=24e7:d.c[0]<8e13||s&&d.c[0]<=9999975e7)))return i=d.s<0&&E(e)?-0:0,d.e>-1&&(i=1/i),new J(f?1/i:i);F&&(i=u(F/p+2))}for(s?(r=new J(.5),f&&(e.s=1),l=E(e)):l=(o=Math.abs(+K(e)))%2,h=new J(C);;){if(l){if(!(h=h.times(d)).c)break;i?h.c.length>i&&(h.c.length=i):n&&(h=h.mod(t))}if(o){if(0===(o=a(o/2)))break;l=o%2}else if(H(e=e.times(r),e.e+1,1),e.e>14)l=E(e);else{if(0==(o=+K(e)))break;l=o%2}d=d.times(d),i?d.c&&d.c.length>i&&(d.c.length=i):n&&(d=d.mod(t))}return n?h:(f&&(h=C.div(h)),t?h.mod(t):i?H(h,F,B,void 0):h)},R.integerValue=function(e){var t=new J(this);return null==e?e=B:w(e,0,8),H(t,t.e+1,e)},R.isEqualTo=R.eq=function(e,t){return 0===b(this,new J(e,t))},R.isFinite=function(){return!!this.c},R.isGreaterThan=R.gt=function(e,t){return b(this,new J(e,t))>0},R.isGreaterThanOrEqualTo=R.gte=function(e,t){return 1===(t=b(this,new J(e,t)))||0===t},R.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},R.isLessThan=R.lt=function(e,t){return b(this,new J(e,t))<0},R.isLessThanOrEqualTo=R.lte=function(e,t){return-1===(t=b(this,new J(e,t)))||0===t},R.isNaN=function(){return!this.s},R.isNegative=function(){return this.s<0},R.isPositive=function(){return this.s>0},R.isZero=function(){return!!this.c&&0==this.c[0]},R.minus=function(e,t){var r,n,o,i,s=this,u=s.s;if(t=(e=new J(e,t)).s,!u||!t)return new J(NaN);if(u!=t)return e.s=-t,s.plus(e);var a=s.e/p,c=e.e/p,f=s.c,h=e.c;if(!a||!c){if(!f||!h)return f?(e.s=-t,e):new J(h?s:NaN);if(!f[0]||!h[0])return h[0]?(e.s=-t,e):new J(f[0]?s:3==B?-0:0)}if(a=y(a),c=y(c),f=f.slice(),u=a-c){for((i=u<0)?(u=-u,o=f):(c=a,o=h),o.reverse(),t=u;t--;o.push(0));o.reverse()}else for(n=(i=(u=f.length)<(t=h.length))?u:t,u=t=0;t0)for(;t--;f[r++]=0);for(t=l-1;n>u;){if(f[--n]=0;){for(r=0,d=A[o]%w,m=A[o]/w|0,i=o+(s=a);i>o;)r=((c=d*(c=O[--s]%w)+(u=m*c+(f=O[s]/w|0)*d)%w*w+v[i]+r)/b|0)+(u/w|0)+m*f,v[i--]=c%b;v[i]=r}return r?++n:v.splice(0,1),G(e,v,n)},R.negated=function(){var e=new J(this);return e.s=-e.s||null,e},R.plus=function(e,t){var r,n=this,o=n.s;if(t=(e=new J(e,t)).s,!o||!t)return new J(NaN);if(o!=t)return e.s=-t,n.minus(e);var i=n.e/p,s=e.e/p,u=n.c,a=e.c;if(!i||!s){if(!u||!a)return new J(o/0);if(!u[0]||!a[0])return a[0]?e:new J(u[0]?n:0*o)}if(i=y(i),s=y(s),u=u.slice(),o=i-s){for(o>0?(s=i,r=a):(o=-o,r=u),r.reverse();o--;r.push(0));r.reverse()}for((o=u.length)-(t=a.length)<0&&(r=a,a=u,u=r,t=o),o=0;t;)o=(u[--t]=u[t]+a[t]+o)/l|0,u[t]=l===u[t]?0:u[t]%l;return o&&(u=[o].concat(u),++s),G(e,u,s)},R.precision=R.sd=function(e,t){var r,n,o,i=this;if(null!=e&&e!==!!e)return w(e,1,m),null==t?t=B:w(t,0,8),H(new J(i),e,t);if(!(r=i.c))return null;if(n=(o=r.length-1)*p+1,o=r[o]){for(;o%10==0;o/=10,n--);for(o=r[0];o>=10;o/=10,n++);}return e&&i.e+1>n&&(n=i.e+1),n},R.shiftedBy=function(e){return w(e,-9007199254740991,h),this.times("1e"+e)},R.squareRoot=R.sqrt=function(){var e,t,n,o,i,s=this,u=s.c,a=s.s,c=s.e,f=T+4,l=new J("0.5");if(1!==a||!u||!u[0])return new J(!a||a<0&&(!u||u[0])?NaN:u?s:1/0);if(0==(a=Math.sqrt(+K(s)))||a==1/0?(((t=v(u)).length+c)%2==0&&(t+="0"),a=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),n=new J(t=a==1/0?"5e"+c:(t=a.toExponential()).slice(0,t.indexOf("e")+1)+c)):n=new J(a+""),n.c[0])for((a=(c=n.e)+f)<3&&(a=0);;)if(i=n,n=l.times(i.plus(r(s,i,f,1))),v(i.c).slice(0,a)===(t=v(n.c)).slice(0,a)){if(n.e0&&g>0){for(i=g%u||u,l=d.substr(0,i);i0&&(l+=f+d.slice(i)),h&&(l="-"+l)}n=p?l+(r.decimalSeparator||"")+((a=+r.fractionGroupSize)?p.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):p):l}return(r.prefix||"")+n+(r.suffix||"")},R.toFraction=function(e){var t,n,o,i,s,u,a,f,l,h,g,m,y=this,b=y.c;if(null!=e&&(!(a=new J(e)).isInteger()&&(a.c||1!==a.s)||a.lt(C)))throw Error(c+"Argument "+(a.isInteger()?"out of range: ":"not an integer: ")+K(a));if(!b)return new J(y);for(t=new J(C),l=n=new J(C),o=f=new J(C),m=v(b),s=t.e=m.length-y.e-1,t.c[0]=d[(u=s%p)<0?p+u:u],e=!e||a.comparedTo(t)>0?s>0?t:l:a,u=I,I=1/0,a=new J(m),f.c[0]=0;h=r(a,t,0,1),1!=(i=n.plus(h.times(o))).comparedTo(e);)n=o,o=i,l=f.plus(h.times(i=l)),f=i,t=a.minus(h.times(i=t)),a=i;return i=r(e.minus(n),o,0,1),f=f.plus(i.times(l)),n=n.plus(i.times(o)),f.s=l.s=y.s,g=r(l,o,s*=2,B).minus(y).abs().comparedTo(r(f,n,s,B).minus(y).abs())<1?[l,o]:[f,n],I=u,g},R.toNumber=function(){return+K(this)},R.toPrecision=function(e,t){return null!=e&&w(e,1,m),$(this,e,t,2)},R.toString=function(e){var t,r=this,o=r.s,i=r.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=k||i>=U?O(v(r.c),i):A(v(r.c),i,"0"):10===e?t=A(v((r=H(new J(r),T+i+1,B)).c),r.e,"0"):(w(e,2,V.length,"Base"),t=n(A(v(r.c),i,"0"),10,e,o,!0)),o<0&&r.c[0]&&(t="-"+t)),t},R.valueOf=R.toJSON=function(){return K(this)},R._isBigNumber=!0,null!=t&&J.set(t),J}(),i.default=i.BigNumber=i,void 0===(n=function(){return i}.call(t,r,t,e))||(e.exports=n)}()},400:function(e,t,r){var n=r(123).stringify,o=r(813);e.exports=function(e){return{parse:o(e),stringify:n}},e.exports.parse=o(),e.exports.stringify=n},813:function(e,t,r){var n=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,u,a,c,f={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},l=function(e){throw{name:"SyntaxError",message:e,at:s,text:a}},p=function(e){return e&&e!==u&&l("Expected '"+e+"' instead of '"+u+"'"),u=a.charAt(s),s+=1,u},h=function(){var e,o="";for("-"===u&&(o="-",p("-"));u>="0"&&u<="9";)o+=u,p();if("."===u)for(o+=".";p()&&u>="0"&&u<="9";)o+=u;if("e"===u||"E"===u)for(o+=u,p(),"-"!==u&&"+"!==u||(o+=u,p());u>="0"&&u<="9";)o+=u,p();if(e=+o,isFinite(e))return null==n&&(n=r(431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new n(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new n(e):e;l("Bad number")},d=function(){var e,t,r,n="";if('"'===u)for(var o=s;p();){if('"'===u)return s-1>o&&(n+=a.substring(o,s-1)),p(),n;if("\\"===u){if(s-1>o&&(n+=a.substring(o,s-1)),p(),"u"===u){for(r=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)r=16*r+e;n+=String.fromCharCode(r)}else{if("string"!=typeof f[u])break;n+=f[u]}o=s}}l("Bad string")},g=function(){for(;u&&u<=" ";)p()};return c=function(){switch(g(),u){case"{":return function(){var e,r=Object.create(null);if("{"===u){if(p("{"),g(),"}"===u)return p("}"),r;for(;u;){if(e=d(),g(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(r,e)&&l('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?l("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():r[e]=c():!0===i.test(e)?"error"===t.constructorAction?l("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():r[e]=c():r[e]=c(),g(),"}"===u)return p("}"),r;p(","),g()}}l("Bad object")}();case"[":return function(){var e=[];if("["===u){if(p("["),g(),"]"===u)return p("]"),e;for(;u;){if(e.push(c()),g(),"]"===u)return p("]"),e;p(","),g()}}l("Bad array")}();case'"':return d();case"-":return h();default:return u>="0"&&u<="9"?h():function(){switch(u){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}l("Unexpected '"+u+"'")}()}},function(e,t){var r;return a=e+"",s=0,u=" ",r=c(),g(),u&&l("Syntax error"),"function"==typeof t?function e(r,n){var o,i=r[n];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(r,n,i)}({"":r},""):r}}},123:function(e,t,r){var n=r(431),o=e.exports;!function(){"use strict";var e,t,r,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function u(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function a(o,i){var s,c,f,l,p,h=e,d=i[o],g=null!=d&&(d instanceof n||n.isBigNumber(d));switch(d&&"object"==typeof d&&"function"==typeof d.toJSON&&(d=d.toJSON(o)),"function"==typeof r&&(d=r.call(i,o,d)),typeof d){case"string":return g?d:u(d);case"number":return isFinite(d)?String(d):"null";case"boolean":case"null":case"bigint":return String(d);case"object":if(!d)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(d)){for(l=d.length,s=0;s1){var r=e.shift();e[0]=r+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n0&&(o=o.replace(/^[\/]+/,"")),o=n0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(n=i)?n.call(t,r,t,e):n)||(e.exports=o)},147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"5.0.1","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},t={},r=function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}(321),r;var e,t,r})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPa2QsRUFOcUIsaUJBQWpCMWQsVUFBVSxHQUNYQSxVQUFVLEdBRVYsR0FBR2pELE1BQU0vRSxLQUFLZ0ksY0F0RVcxUSxFQUFPQyxRQUFTRCxFQUFPQyxRQUFVd3VCLFNBQ0EsMEJBQWpCLEtBQWlCLGs3SENEcEVDLEVBQTJCLEdDRTNCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUJscUIsSUFBakJtcUIsRUFDSCxPQUFPQSxFQUFhN3VCLFFBR3JCLElBQUlELEVBQVMwdUIsRUFBeUJHLEdBQVksQ0FHakQ1dUIsUUFBUyxJQU9WLE9BSEE4dUIsRUFBb0JGLEdBQVVubUIsS0FBSzFJLEVBQU9DLFFBQVNELEVBQVFBLEVBQU9DLFFBQVMydUIsR0FHcEU1dUIsRUFBT0MsUUNsQlcydUIsQ0FBb0IsYURGMUNGLEVDRUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzTnVsbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNQdXJlT2JqZWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYmlnbnVtYmVyLmpzL2JpZ251bWJlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHZhciBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcbiAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuXG4gICAgdmFyIGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCAoaXNPYmplY3RQYXlsb2FkICYmIGNvbnRlbnRUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7XG4gICAgICB2YXIgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG4gICAgICByZXR1cm4gdG9Gb3JtRGF0YShpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLCBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHJlcXVpcmUoJy4vZW52L0Zvcm1EYXRhJylcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3Rcbm1vZHVsZS5leHBvcnRzID0gbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgdmFyIG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyBGb3JtRGF0YSgpO1xuXG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZChkYXRhLCBwYXJlbnRLZXkpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChkYXRhKSB8fCB1dGlscy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihkYXRhKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGFyZW50S2V5KTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaChkYXRhKTtcblxuICAgICAgdXRpbHMuZm9yRWFjaChkYXRhLCBmdW5jdGlvbiBlYWNoKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZnVsbEtleSA9IHBhcmVudEtleSA/IHBhcmVudEtleSArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgdmFyIGFycjtcblxuICAgICAgICBpZiAodmFsdWUgJiYgIXBhcmVudEtleSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh1dGlscy5lbmRzV2l0aChrZXksICdbXScpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAhdXRpbHMuaXNVbmRlZmluZWQoZWwpICYmIGZvcm1EYXRhLmFwcGVuZChmdWxsS2V5LCBjb252ZXJ0VmFsdWUoZWwpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkKHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgY29udmVydFZhbHVlKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIga2luZE9mID0gKGZ1bmN0aW9uKGNhY2hlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG4gIH07XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpc0tpbmRPZih0aGluZykge1xuICAgIHJldHVybiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodGhpbmcpIHtcbiAgdmFyIHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0cyhjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIHRvRmxhdE9iamVjdChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlcikge1xuICB2YXIgcHJvcHM7XG4gIHZhciBpO1xuICB2YXIgcHJvcDtcbiAgdmFyIG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLypcbiAqIGRldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIHZhciBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHRoaW5nKSB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICB2YXIgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKGlzVW5kZWZpbmVkKGkpKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGlzVHlwZWRBcnJheSA9IChmdW5jdGlvbihUeXBlZEFycmF5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NLFxuICBpbmhlcml0czogaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdDogdG9GbGF0T2JqZWN0LFxuICBraW5kT2Y6IGtpbmRPZixcbiAga2luZE9mVGVzdDoga2luZE9mVGVzdCxcbiAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdDogaXNGaWxlTGlzdFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbmltcG9ydCB7XG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn0gZnJvbSAnQHV0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4uL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuaW1wb3J0IHsgSUNsaWVudFBhcmFtcyB9IGZyb20gJy4vSUNsaWVudCc7XG5pbXBvcnQgeyBJUmVxdWVzdENvbmZpZywgSVJlcXVlc3RPcHRpb25zLCBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnIH0gZnJvbSAnLi4vcmVxdWVzdC9JUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuLypvdGhlciovXG5cbmV4cG9ydCB0eXBlIFRDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxJQ2xpZW50UGFyYW1zLCAnY29uZmlnJyB8ICdvcHRpb25zJz47XG5cbmNsYXNzIENsaWVudCB7XG4gIHByaXZhdGUgdmVyc2lvbiE6IHN0cmluZztcblxuICBwcml2YXRlIGNvbmZpZyE6IElSZXF1ZXN0Q29uZmlnO1xuICBwcml2YXRlIG9wdGlvbnMhOiBJUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCh0aGlzLmNsb25lUGFyYW1zKHBhcmFtcykpO1xuICB9XG5cbiAgcHVibGljIGdldFBhY2thZ2VWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VjcmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2VuO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuR2V0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUG9zdCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcHV0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFRSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogVFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5EZWxldGUsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGFwaVRva2VuLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXBpU2VjcmV0LFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICB9ID0gcGFyYW1zO1xuXG4gICAgdGhpcy52ZXJzaW9uID0gQ2xpZW50LnBhY2thZ2VKU09OLnZlcnNpb247XG5cbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcgPz8gbnVsbCk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMgPz8gbnVsbCk7XG5cbiAgICByZXR1cm4gJ2FwaVRva2VuJyBpbiBwYXJhbXNcbiAgICAgID8gdGhpcy50b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbilcbiAgICAgIDogdGhpcy5iYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXksIGFwaVNlY3JldCk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGFyYW1zKHBhcmFtczogSUNsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPElSZXF1ZXN0Q29uZmlnPiB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjdXN0b21Db25maWdcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0geyAuLi5DbGllbnQuY29uZmlnIH07XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ2hvc3QnLCBjdXN0b21Db25maWcuaG9zdCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ291dHB1dCcsIGN1c3RvbUNvbmZpZy5vdXRwdXQpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICd2ZXJzaW9uJywgY3VzdG9tQ29uZmlnLnZlcnNpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zIHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJvcHRpb25zXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfVE9LRU4gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaVRva2VuID0gYXBpVG9rZW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFwaVNlY3JldDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfS0VZIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghYXBpU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1NFQ1JFVCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwaUNvbm5lY3QoYXBpS2V5OiBzdHJpbmcsIGFwaVNlY3JldDogc3RyaW5nLCBwYXJhbXM/OiBUQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBUQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpVG9rZW4sIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlnOiBSZWFkb25seTxJUmVxdWVzdENvbmZpZz4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBob3N0OiAnYXBpLm1haWxqZXQuY29tJyxcbiAgICB2ZXJzaW9uOiAndjMnLFxuICAgIG91dHB1dDogJ2pzb24nLFxuICB9IGFzIGNvbnN0KTtcblxuICBwdWJsaWMgc3RhdGljIHBhY2thZ2VKU09OID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgLi4ucGFja2FnZUpTT04sXG4gIH0gYXMgY29uc3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDbGllbnQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0L2luZGV4JztcbmltcG9ydCBDbGllbnQgZnJvbSAnLi9jbGllbnQvaW5kZXgnO1xuLypvdGhlciovXG5cbmNsYXNzIE1haWxqZXQgZXh0ZW5kcyBDbGllbnQge1xuICBzdGF0aWMgUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIHN0YXRpYyBIdHRwTWV0aG9kcyA9IEh0dHBNZXRob2RzO1xufVxuXG5leHBvcnQgeyBDbGllbnQsIFJlcXVlc3QsIEh0dHBNZXRob2RzIH07XG5leHBvcnQgZGVmYXVsdCBNYWlsamV0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZW51bSBIdHRwTWV0aG9kcyB7XG4gIEdldCA9ICdnZXQnLFxuICBQb3N0ID0gJ3Bvc3QnLFxuICBQdXQgPSAncHV0JyxcbiAgRGVsZXRlID0gJ2RlbGV0ZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSHR0cE1ldGhvZHM7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuaW1wb3J0IHVybEpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEpTT05CaWdJbnQgZnJvbSAnanNvbi1iaWdpbnQnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG4vKnV0aWxzKi9cbmltcG9ydCB7IHNldFZhbHVlSWZOb3ROaWwgfSBmcm9tICdAdXRpbHMvaW5kZXgnO1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnQGN1c3RvbS90eXBlcyc7XG5pbXBvcnQgeyBJQVBJTG9jYWxSZXNwb25zZSwgSUFQSVJlc3BvbnNlIH0gZnJvbSAnQG1haWxqZXQvdHlwZXMvYXBpL1Jlc3BvbnNlJztcbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL0h0dHBNZXRob2RzJztcbmltcG9ydCB7XG4gIElSZXF1ZXN0Q29uZmlnLFxuICBUUmVxdWVzdERhdGEsXG4gIFRSZXF1ZXN0UGFyYW1zLFxuICBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICBUUmVxdWVzdEF4aW9zQ29uZmlnLFxuICBUU3ViUGF0aCxcbn0gZnJvbSAnLi9JUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgQ2xpZW50IGZyb20gJy4uL2NsaWVudCc7XG4vKm90aGVyKi9cblxudHlwZSBUVW5rbm93blJlYyA9IFRPYmplY3QuVFVua25vd25SZWNcblxuY29uc3QgSlNPTmIgPSBKU09OQmlnSW50KHsgc3RvcmVBc1N0cmluZzogdHJ1ZSB9KTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBIdHRwTWV0aG9kcztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFBhcnRpYWw8SVJlcXVlc3RDb25maWc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzdWJQYXRoOiBUU3ViUGF0aDtcbiAgcHJpdmF0ZSBhY3Rpb25QYXRoOiBzdHJpbmcgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZHMsXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcbiAgICBjb25maWc/OiBUUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICApIHtcbiAgICBpZiAoIShjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY2xpZW50XCIgbXVzdCBiZSBpbnN0YW5jZSBvZiBDbGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoSHR0cE1ldGhvZHMpLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJtZXRob2RcIiBtdXN0IGJlIG9uZSBvZiBzdXBwb3J0ZWQgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicmVzb3VyY2VcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbnVsbDtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyQWdlbnQoKSB7XG4gICAgcmV0dXJuIGBtYWlsamV0LWFwaS12My1ub2RlanMvJHt0aGlzLmNsaWVudC5nZXRQYWNrYWdlVmVyc2lvbigpfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVRva2VuOiB0aGlzLmNsaWVudC5nZXRBUElUb2tlbigpLFxuICAgICAgYXBpS2V5OiB0aGlzLmNsaWVudC5nZXRBUElLZXkoKSxcbiAgICAgIGFwaVNlY3JldDogdGhpcy5jbGllbnQuZ2V0QVBJU2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ1cmxcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwuaW5kZXhPZigndGV4dDpwbGFpbicpID4gLTFcbiAgICAgID8gJ3RleHQvcGxhaW4nXG4gICAgICA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdEJvZHkoZGF0YTogVFJlcXVlc3REYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEh0dHBNZXRob2RzLlB1dCxcbiAgICAgIEh0dHBNZXRob2RzLlBvc3QsXG4gICAgICBIdHRwTWV0aG9kcy5EZWxldGUsXG4gICAgXS5pbmNsdWRlcyh0aGlzLm1ldGhvZCkgPyBkYXRhIDoge307XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVsbFVybCgpIHtcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0ID8/IGNsaWVudENvbmZpZy5ob3N0O1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8/IGNsaWVudENvbmZpZy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHVybEpvaW4oUmVxdWVzdC5wcm90b2NvbCwgaG9zdCwgdmVyc2lvbiwgdGhpcy5zdWJQYXRoLCB0aGlzLnVybCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViUGF0aCgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjb25zdCBpc0NvbnRhY3RMaXN0V2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdjb250YWN0c2xpc3QnICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICBjb25zdCBpc0JhdGNoSm9iV2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdiYXRjaGpvYicgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuXG4gICAgICByZXR1cm4gKGlzQ29udGFjdExpc3RXaXRoQ1NWIHx8IGlzQmF0Y2hKb2JXaXRoQ1NWKSA/ICdEQVRBJyA6IHRoaXMuc3ViUGF0aDtcbiAgICB9XG4gICAgY29uc3QgaXNTZW5kUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlID09PSAnc2VuZCc7XG4gICAgY29uc3QgcmVzb3VyY2VDb250YWluU01TID0gdGhpcy5yZXNvdXJjZS5pbmRleE9mKCdzbXMnKSA+IC0xO1xuXG4gICAgcmV0dXJuICghaXNTZW5kUmVzb3VyY2UgJiYgIXJlc291cmNlQ29udGFpblNNUykgPyAnUkVTVCcgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcsIGRhdGE6IFRSZXF1ZXN0RGF0YSwgcGFyYW1zOiBUUmVxdWVzdFBhcmFtcykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyNyZXF1ZXN0LWNvbmZpZ1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFRSZXF1ZXN0QXhpb3NDb25maWcgPSB7XG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpLFxuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHRoaXMuZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0aGlzLmdldENvbnRlbnRUeXBlKHVybCksXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2VEYXRhOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IGRhdGFJc1N0cmluZyA9IHR5cGVvZiByZXNwb25zZURhdGEgPT09ICdzdHJpbmcnO1xuICAgICAgICBjb25zdCBpc0pTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgZGF0YUlzU3RyaW5nICYmIGlzSlNPTlJlcXVlc3RlZCkge1xuICAgICAgICAgIHJldHVybiBSZXF1ZXN0LnBhcnNlVG9KU09OYihyZXNwb25zZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEJST1dTRVIgU0lERVxuICAgIGlmIChSZXF1ZXN0LmlzQnJvd3NlcigpKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1gtVXNlci1BZ2VudCddID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgfVxuXG4gICAgLy8gQVVUSFxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5nZXRDcmVkZW50aWFscygpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmFwaVRva2VuKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjcmVkZW50aWFscy5hcGlUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmF1dGggPSB7XG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMuYXBpU2VjcmV0IGFzIHN0cmluZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT1BUSU9OU1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB0aGlzLmNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAvLyAxLiBUaW1lb3V0XG4gICAgaWYgKGNsaWVudE9wdGlvbnMudGltZW91dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy50aW1lb3V0ID0gY2xpZW50T3B0aW9ucy50aW1lb3V0O1xuICAgIH1cblxuICAgIC8vIDIuIFByb3h5XG4gICAgaWYgKGNsaWVudE9wdGlvbnMucHJveHkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucHJveHkgPSBjbGllbnRPcHRpb25zLnByb3h5O1xuICAgIH1cblxuICAgIC8vIDMuIEhlYWRlcnNcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGNsaWVudE9wdGlvbnMuaGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLmhlYWRlcnMsXG4gICAgICAgIC4uLmNsaWVudE9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gNC4gT3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5jb25maWcub3V0cHV0ID8/IGNsaWVudENvbmZpZy5vdXRwdXQ7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5yZXNwb25zZVR5cGUgPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNS4gTWF4IHJlcXVlc3QgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhCb2R5TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDYuIE1heCByZXNwb25zZSBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heENvbnRlbnRMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9zKHJlcXVlc3RDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCYXNlVVJMKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAoIVsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ2YWx1ZVwiIG11c3QgYmUgc3RyaW5nIG9yIG51bWJlcicpO1xuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm5hbWVcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjYXNlICdjc3ZkYXRhJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjc3ZlcnJvcic6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdGhpcy5hY3Rpb25QYXRoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YT4oXG4gICAgZGF0YT86IFRSZXF1ZXN0RGF0YSxcbiAgICBwYXJhbXM/OiBUUmVxdWVzdFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IHRydWUsXG4gICk6IFByb21pc2U8SUFQSVJlc3BvbnNlPFRCb2R5Pj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YSwgVFBhcmFtcyBleHRlbmRzIFRVbmtub3duUmVjPihcbiAgICBkYXRhPzogVEJvZHksXG4gICAgcGFyYW1zPzogVFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IGZhbHNlLFxuICApOiBQcm9taXNlPElBUElMb2NhbFJlc3BvbnNlPFRCb2R5LCBUUGFyYW1zPj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUQm9keSBleHRlbmRzIFRSZXF1ZXN0RGF0YSwgVFBhcmFtcyBleHRlbmRzIFRVbmtub3duUmVjPihcbiAgICBkYXRhOiBUUmVxdWVzdERhdGEgfCBUQm9keSA9IHt9LFxuICAgIHBhcmFtczogVFJlcXVlc3RQYXJhbXMgfCBUUGFyYW1zID0ge30sXG4gICAgcGVyZm9ybUFQSUNhbGwgPSB0cnVlLFxuICApOiBQcm9taXNlPElBUElSZXNwb25zZTxUQm9keT4gfCBJQVBJTG9jYWxSZXNwb25zZTxUQm9keSwgVFBhcmFtcz4+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRnVsbFVybCgpO1xuICAgIHRoaXMuc2V0QmFzZVVSTCh0aGlzLnJlc291cmNlKTtcblxuICAgIGlmICghcGVyZm9ybUFQSUNhbGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHVybCxcbiAgICAgIH0gYXMgSUFQSUxvY2FsUmVzcG9uc2U8VEJvZHksIFRQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzUHVyZU9iamVjdCBmcm9tICcuL2lzUHVyZU9iamVjdCc7XG5pbXBvcnQgc2V0VmFsdWVJZk5vdE5pbCBmcm9tICcuL3NldFZhbHVlSWZOb3ROaWwnO1xuXG5leHBvcnQge1xuICBpc05pbCxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOaWwodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTnVsbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzUHVyZU9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmIHZhbHVlICE9PSBudWxsXG4gICAgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHVyZU9iamVjdDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJ0BjdXN0b20vdHlwZXMnO1xuLyp1dGlscyovXG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUlmTm90TmlsKFxuICB0YXJnZXRPYmplY3Q6IFRPYmplY3QuVFVua25vd25SZWMsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXRPYmplY3QgIT09ICdvYmplY3QnIHx8IGlzTnVsbCh0YXJnZXRPYmplY3QpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwidGFyZ2V0T2JqZWN0XCIgaXMgbm90IG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwicGF0aFwiIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIWlzTmlsKHZhbHVlKSkge1xuICAgIHRhcmdldE9iamVjdFtwYXRoXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZhbHVlSWZOb3ROaWw7XG4iLCI7KGZ1bmN0aW9uIChnbG9iYWxPYmplY3QpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4vKlxyXG4gKiAgICAgIGJpZ251bWJlci5qcyB2OS4wLjFcclxuICogICAgICBBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljLlxyXG4gKiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2JpZ251bWJlci5qc1xyXG4gKiAgICAgIENvcHlyaWdodCAoYykgMjAyMCBNaWNoYWVsIE1jbGF1Z2hsaW4gPE04Y2g4OGxAZ21haWwuY29tPlxyXG4gKiAgICAgIE1JVCBMaWNlbnNlZC5cclxuICpcclxuICogICAgICBCaWdOdW1iZXIucHJvdG90eXBlIG1ldGhvZHMgICAgIHwgIEJpZ051bWJlciBtZXRob2RzXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgIGFicyAgICB8ICBjbG9uZVxyXG4gKiAgICAgIGNvbXBhcmVkVG8gICAgICAgICAgICAgICAgICAgICAgfCAgY29uZmlnICAgICAgICAgICAgICAgc2V0XHJcbiAqICAgICAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgIGRwICAgICB8ICAgICAgREVDSU1BTF9QTEFDRVNcclxuICogICAgICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgZGl2ICAgIHwgICAgICBST1VORElOR19NT0RFXHJcbiAqICAgICAgZGl2aWRlZFRvSW50ZWdlckJ5ICAgICAgIGlkaXYgICB8ICAgICAgRVhQT05FTlRJQUxfQVRcclxuICogICAgICBleHBvbmVudGlhdGVkQnkgICAgICAgICAgcG93ICAgIHwgICAgICBSQU5HRVxyXG4gKiAgICAgIGludGVnZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIENSWVBUT1xyXG4gKiAgICAgIGlzRXF1YWxUbyAgICAgICAgICAgICAgICBlcSAgICAgfCAgICAgIE1PRFVMT19NT0RFXHJcbiAqICAgICAgaXNGaW5pdGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgUE9XX1BSRUNJU0lPTlxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW4gICAgICAgICAgICBndCAgICAgfCAgICAgIEZPUk1BVFxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW5PckVxdWFsVG8gICBndGUgICAgfCAgICAgIEFMUEhBQkVUXHJcbiAqICAgICAgaXNJbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICB8ICBpc0JpZ051bWJlclxyXG4gKiAgICAgIGlzTGVzc1RoYW4gICAgICAgICAgICAgICBsdCAgICAgfCAgbWF4aW11bSAgICAgICAgICAgICAgbWF4XHJcbiAqICAgICAgaXNMZXNzVGhhbk9yRXF1YWxUbyAgICAgIGx0ZSAgICB8ICBtaW5pbXVtICAgICAgICAgICAgICBtaW5cclxuICogICAgICBpc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJhbmRvbVxyXG4gKiAgICAgIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgICAgICAgfCAgc3VtXHJcbiAqICAgICAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgaXNaZXJvICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbWludXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbW9kdWxvICAgICAgICAgICAgICAgICAgIG1vZCAgICB8XHJcbiAqICAgICAgbXVsdGlwbGllZEJ5ICAgICAgICAgICAgIHRpbWVzICB8XHJcbiAqICAgICAgbmVnYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcHJlY2lzaW9uICAgICAgICAgICAgICAgIHNkICAgICB8XHJcbiAqICAgICAgc2hpZnRlZEJ5ICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgc3F1YXJlUm9vdCAgICAgICAgICAgICAgIHNxcnQgICB8XHJcbiAqICAgICAgdG9FeHBvbmVudGlhbCAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GcmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9KU09OICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9OdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9QcmVjaXNpb24gICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdmFsdWVPZiAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqXHJcbiAqL1xyXG5cclxuXHJcbiAgdmFyIEJpZ051bWJlcixcclxuICAgIGlzTnVtZXJpYyA9IC9eLT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/JC9pLFxyXG4gICAgbWF0aGNlaWwgPSBNYXRoLmNlaWwsXHJcbiAgICBtYXRoZmxvb3IgPSBNYXRoLmZsb29yLFxyXG5cclxuICAgIGJpZ251bWJlckVycm9yID0gJ1tCaWdOdW1iZXIgRXJyb3JdICcsXHJcbiAgICB0b29NYW55RGlnaXRzID0gYmlnbnVtYmVyRXJyb3IgKyAnTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogJyxcclxuXHJcbiAgICBCQVNFID0gMWUxNCxcclxuICAgIExPR19CQVNFID0gMTQsXHJcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gMHgxZmZmZmZmZmZmZmZmZiwgICAgICAgICAvLyAyXjUzIC0gMVxyXG4gICAgLy8gTUFYX0lOVDMyID0gMHg3ZmZmZmZmZiwgICAgICAgICAgICAgICAgICAgLy8gMl4zMSAtIDFcclxuICAgIFBPV1NfVEVOID0gWzEsIDEwLCAxMDAsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwgMWUxMCwgMWUxMSwgMWUxMiwgMWUxM10sXHJcbiAgICBTUVJUX0JBU0UgPSAxZTcsXHJcblxyXG4gICAgLy8gRURJVEFCTEVcclxuICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgREVDSU1BTF9QTEFDRVMsIFRPX0VYUF9ORUcsIFRPX0VYUF9QT1MsIE1JTl9FWFAsIE1BWF9FWFAsIGFuZFxyXG4gICAgLy8gdGhlIGFyZ3VtZW50cyB0byB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCwgYW5kIHRvUHJlY2lzaW9uLlxyXG4gICAgTUFYID0gMUU5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhfSU5UMzJcclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBCaWdOdW1iZXIgY29uc3RydWN0b3IuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xvbmUoY29uZmlnT2JqZWN0KSB7XHJcbiAgICB2YXIgZGl2LCBjb252ZXJ0QmFzZSwgcGFyc2VOdW1lcmljLFxyXG4gICAgICBQID0gQmlnTnVtYmVyLnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IEJpZ051bWJlciwgdG9TdHJpbmc6IG51bGwsIHZhbHVlT2Y6IG51bGwgfSxcclxuICAgICAgT05FID0gbmV3IEJpZ051bWJlcigxKSxcclxuXHJcblxyXG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVRBQkxFIENPTkZJRyBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93IG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIHN0YXRlZC5cclxuICAgICAgLy8gVGhlIHZhbHVlcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHVzaW5nIEJpZ051bWJlci5zZXQuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIG9wZXJhdGlvbnMgaW52b2x2aW5nIGRpdmlzaW9uLlxyXG4gICAgICBERUNJTUFMX1BMQUNFUyA9IDIwLCAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgcm91bmRpbmcgbW9kZSB1c2VkIHdoZW4gcm91bmRpbmcgdG8gdGhlIGFib3ZlIGRlY2ltYWwgcGxhY2VzLCBhbmQgd2hlbiB1c2luZ1xyXG4gICAgICAvLyB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCBhbmQgdG9QcmVjaXNpb24sIGFuZCByb3VuZCAoZGVmYXVsdCB2YWx1ZSkuXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBBd2F5IGZyb20gemVyby5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRvd2FyZHMgemVyby5cclxuICAgICAgLy8gQ0VJTCAgICAgICAyIFRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfVVAgICAgNCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdXAuXHJcbiAgICAgIC8vIEhBTEZfRE9XTiAgNSBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgZG93bi5cclxuICAgICAgLy8gSEFMRl9FVkVOICA2IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIGV2ZW4gbmVpZ2hib3VyLlxyXG4gICAgICAvLyBIQUxGX0NFSUwgIDcgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX0ZMT09SIDggVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICBST1VORElOR19NT0RFID0gNCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gRVhQT05FTlRJQUxfQVQgOiBbVE9fRVhQX05FRyAsIFRPX0VYUF9QT1NdXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGJlbmVhdGggd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC03XHJcbiAgICAgIFRPX0VYUF9ORUcgPSAtNywgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGFib3ZlIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAyMVxyXG4gICAgICBUT19FWFBfUE9TID0gMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBSQU5HRSA6IFtNSU5fRVhQLCBNQVhfRVhQXVxyXG5cclxuICAgICAgLy8gVGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWUsIGJlbmVhdGggd2hpY2ggdW5kZXJmbG93IHRvIHplcm8gb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTMyNCAgKDVlLTMyNClcclxuICAgICAgTUlOX0VYUCA9IC0xZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtMSB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCB2YWx1ZSwgYWJvdmUgd2hpY2ggb3ZlcmZsb3cgdG8gSW5maW5pdHkgb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogIDMwOCAgKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KVxyXG4gICAgICAvLyBGb3IgTUFYX0VYUCA+IDFlNywgZS5nLiBuZXcgQmlnTnVtYmVyKCcxZTEwMDAwMDAwMCcpLnBsdXMoMSkgbWF5IGJlIHNsb3cuXHJcbiAgICAgIE1BWF9FWFAgPSAxZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBNQVhcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgQ1JZUFRPID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIG9yIGZhbHNlXHJcblxyXG4gICAgICAvLyBUaGUgbW9kdWxvIG1vZGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBtb2R1bHVzOiBhIG1vZCBuLlxyXG4gICAgICAvLyBUaGUgcXVvdGllbnQgKHEgPSBhIC8gbikgaXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91bmRpbmcgbW9kZS5cclxuICAgICAgLy8gVGhlIHJlbWFpbmRlciAocikgaXMgY2FsY3VsYXRlZCBhczogciA9IGEgLSBuICogcS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVVAgICAgICAgIDAgVGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSBpZiB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIGVsc2UgaXMgbmVnYXRpdmUuXHJcbiAgICAgIC8vIERPV04gICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGlzIG1vZHVsbyBtb2RlIGlzIGNvbW1vbmx5IGtub3duIGFzICd0cnVuY2F0ZWQgZGl2aXNpb24nIGFuZCBpc1xyXG4gICAgICAvLyAgICAgICAgICAgICBlcXVpdmFsZW50IHRvIChhICUgbikgaW4gSmF2YVNjcmlwdC5cclxuICAgICAgLy8gRkxPT1IgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gNiBUaGlzIG1vZHVsbyBtb2RlIGltcGxlbWVudHMgdGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgIDkgRXVjbGlkaWFuIGRpdmlzaW9uLiBxID0gc2lnbihuKSAqIGZsb29yKGEgLyBhYnMobikpLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIGlzIGFsd2F5cyBwb3NpdGl2ZS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVGhlIHRydW5jYXRlZCBkaXZpc2lvbiwgZmxvb3JlZCBkaXZpc2lvbiwgRXVjbGlkaWFuIGRpdmlzaW9uIGFuZCBJRUVFIDc1NCByZW1haW5kZXJcclxuICAgICAgLy8gbW9kZXMgYXJlIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBtb2R1bHVzIG9wZXJhdGlvbi5cclxuICAgICAgLy8gQWx0aG91Z2ggdGhlIG90aGVyIHJvdW5kaW5nIG1vZGVzIGNhbiBhbHNvIGJlIHVzZWQsIHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLlxyXG4gICAgICBNT0RVTE9fTU9ERSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBleHBvbmVudGlhdGVkQnkgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBJZiBQT1dfUFJFQ0lTSU9OIGlzIDAsIHRoZXJlIHdpbGwgYmUgdW5saW1pdGVkIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAgUE9XX1BSRUNJU0lPTiA9IDAsICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHVzZWQgYnkgdGhlIEJpZ051bWJlci5wcm90b3R5cGUudG9Gb3JtYXQgbWV0aG9kLlxyXG4gICAgICBGT1JNQVQgPSB7XHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBncm91cFNpemU6IDMsXHJcbiAgICAgICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgICAgc3VmZml4OiAnJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhlIGFscGhhYmV0IHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi4gSXQgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZywgd2l0aCBubyAnKycsXHJcbiAgICAgIC8vICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgIC8vICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiRfJ1xyXG4gICAgICBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUlxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIEJpZ051bWJlciBjb25zdHJ1Y3RvciBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24uXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJpZ051bWJlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEEgbnVtZXJpYyB2YWx1ZS5cclxuICAgICAqIFtiXSB7bnVtYmVyfSBUaGUgYmFzZSBvZiB2LiBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJpZ051bWJlcih2LCBiKSB7XHJcbiAgICAgIHZhciBhbHBoYWJldCwgYywgY2FzZUNoYW5nZWQsIGUsIGksIGlzTnVtLCBsZW4sIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIEVuYWJsZSBjb25zdHJ1Y3RvciBjYWxsIHdpdGhvdXQgYG5ld2AuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBCaWdOdW1iZXIpKSByZXR1cm4gbmV3IEJpZ051bWJlcih2LCBiKTtcclxuXHJcbiAgICAgIGlmIChiID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHYgJiYgdi5faXNCaWdOdW1iZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgIHgucyA9IHYucztcclxuXHJcbiAgICAgICAgICBpZiAoIXYuYyB8fCB2LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeC5lID0gdi5lO1xyXG4gICAgICAgICAgICB4LmMgPSB2LmMuc2xpY2UoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpICYmIHYgKiAwID09IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgYDEgLyBuYCB0byBoYW5kbGUgbWludXMgemVybyBhbHNvLlxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHYgPSAtdiwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGludGVnZXJzLCB3aGVyZSBuIDwgMjE0NzQ4MzY0OCAoMioqMzEpLlxyXG4gICAgICAgICAgaWYgKHYgPT09IH5+dikge1xyXG4gICAgICAgICAgICBmb3IgKGUgPSAwLCBpID0gdjsgaSA+PSAxMDsgaSAvPSAxMCwgZSsrKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmMgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTnVtZXJpYy50ZXN0KHN0ciA9IFN0cmluZyh2KSkpIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSk7XHJcblxyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgICAgICBpZiAoKGkgPSBzdHIuc2VhcmNoKC9lL2kpKSA+IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICAgICAgZSArPSArc3RyLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgICAgIC8vIEludGVnZXIuXHJcbiAgICAgICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBleHBvbmVudGlhbCBub3RhdGlvbiB0byBiZSB1c2VkIHdpdGggYmFzZSAxMCBhcmd1bWVudCwgd2hpbGVcclxuICAgICAgICAvLyBhbHNvIHJvdW5kaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFzIHdpdGggb3RoZXIgYmFzZXMuXHJcbiAgICAgICAgaWYgKGIgPT0gMTApIHtcclxuICAgICAgICAgIHggPSBuZXcgQmlnTnVtYmVyKHYpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvdW5kKHgsIERFQ0lNQUxfUExBQ0VTICsgeC5lICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcblxyXG4gICAgICAgIGlmIChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXZvaWQgcG90ZW50aWFsIGludGVycHJldGF0aW9uIG9mIEluZmluaXR5IGFuZCBOYU4gYXMgYmFzZSA0NCsgdmFsdWVzLlxyXG4gICAgICAgICAgaWYgKHYgKiAwICE9IDApIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSwgYik7XHJcblxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRyAmJiBzdHIucmVwbGFjZSgvXjBcXC4wKnxcXC4vLCAnJykubGVuZ3RoID4gMTUpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgdik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbHBoYWJldCA9IEFMUEhBQkVULnNsaWNlKDAsIGIpO1xyXG4gICAgICAgIGUgPSBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBzdHIgaXMgYSB2YWxpZCBiYXNlIGIgbnVtYmVyLlxyXG4gICAgICAgIC8vIERvbid0IHVzZSBSZWdFeHAsIHNvIGFscGhhYmV0IGNhbiBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy5cclxuICAgICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoYyA9IHN0ci5jaGFyQXQoaSkpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgJy4nIGlzIG5vdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpdCBoYXMgbm90IGJlIGZvdW5kIGJlZm9yZS5cclxuICAgICAgICAgICAgICBpZiAoaSA+IGUpIHtcclxuICAgICAgICAgICAgICAgIGUgPSBsZW47XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNhc2VDaGFuZ2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFsbG93IGUuZy4gaGV4YWRlY2ltYWwgJ0ZGJyBhcyB3ZWxsIGFzICdmZicuXHJcbiAgICAgICAgICAgICAgaWYgKHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICBlID0gMDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBTdHJpbmcodiksIGlzTnVtLCBiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgbGF0ZXIgY2hlY2sgZm9yIGxlbmd0aCBvbiBjb252ZXJ0ZWQgbnVtYmVyLlxyXG4gICAgICAgIGlzTnVtID0gZmFsc2U7XHJcbiAgICAgICAgc3RyID0gY29udmVydEJhc2Uoc3RyLCBiLCAxMCwgeC5zKTtcclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICBlbHNlIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgc3RyLmNoYXJDb2RlQXQoaSkgPT09IDQ4OyBpKyspO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KC0tbGVuKSA9PT0gNDg7KTtcclxuXHJcbiAgICAgIGlmIChzdHIgPSBzdHIuc2xpY2UoaSwgKytsZW4pKSB7XHJcbiAgICAgICAgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgaWYgKGlzTnVtICYmIEJpZ051bWJlci5ERUJVRyAmJlxyXG4gICAgICAgICAgbGVuID4gMTUgJiYgKHYgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHYgIT09IG1hdGhmbG9vcih2KSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgKHgucyAqIHYpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoKGUgPSBlIC0gaSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgeC5jID0gW107XHJcblxyXG4gICAgICAgICAgLy8gVHJhbnNmb3JtIGJhc2VcclxuXHJcbiAgICAgICAgICAvLyBlIGlzIHRoZSBiYXNlIDEwIGV4cG9uZW50LlxyXG4gICAgICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2VmZmljaWVudCBhcnJheS5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoZSA8IDApIGkgKz0gTE9HX0JBU0U7ICAvLyBpIDwgMVxyXG5cclxuICAgICAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpKSB4LmMucHVzaCgrc3RyLnNsaWNlKDAsIGkpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICAgIHguYy5wdXNoKCtzdHIuc2xpY2UoaSwgaSArPSBMT0dfQkFTRSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpID0gTE9HX0JBU0UgLSAoc3RyID0gc3RyLnNsaWNlKGkpKS5sZW5ndGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpIC09IGxlbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIHguYy5wdXNoKCtzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1IgUFJPUEVSVElFU1xyXG5cclxuXHJcbiAgICBCaWdOdW1iZXIuY2xvbmUgPSBjbG9uZTtcclxuXHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfVVAgPSAwO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0RPV04gPSAxO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0NFSUwgPSAyO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0ZMT09SID0gMztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX1VQID0gNDtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0RPV04gPSA1O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9DRUlMID0gNztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0ZMT09SID0gODtcclxuICAgIEJpZ051bWJlci5FVUNMSUQgPSA5O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogQ29uZmlndXJlIGluZnJlcXVlbnRseS1jaGFuZ2luZyBsaWJyYXJ5LXdpZGUgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQWNjZXB0IGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcHJvcGVydGllcyAoaWYgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgaXNcclxuICAgICAqIGEgbnVtYmVyLCBpdCBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2Ugc3RhdGVkKTpcclxuICAgICAqXHJcbiAgICAgKiAgIERFQ0lNQUxfUExBQ0VTICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIFJPVU5ESU5HX01PREUgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOFxyXG4gICAgICogICBFWFBPTkVOVElBTF9BVCAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAgb3IgIFstTUFYIHRvIDAsIDAgdG8gTUFYXVxyXG4gICAgICogICBSQU5HRSAgICAgICAgICAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAobm90IHplcm8pICBvciAgWy1NQVggdG8gLTEsIDEgdG8gTUFYXVxyXG4gICAgICogICBDUllQVE8gICAgICAgICAgIHtib29sZWFufSAgICAgICAgICB0cnVlIG9yIGZhbHNlXHJcbiAgICAgKiAgIE1PRFVMT19NT0RFICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOVxyXG4gICAgICogICBQT1dfUFJFQ0lTSU9OICAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBBTFBIQUJFVCAgICAgICAgIHtzdHJpbmd9ICAgICAgICAgICBBIHN0cmluZyBvZiB0d28gb3IgbW9yZSB1bmlxdWUgY2hhcmFjdGVycyB3aGljaCBkb2VzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb250YWluICcuJy5cclxuICAgICAqICAgRk9STUFUICAgICAgICAgICB7b2JqZWN0fSAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKiAgICAgcHJlZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGdyb3VwU2l6ZSAgICAgICAgICAgICAge251bWJlcn1cclxuICAgICAqICAgICBzZWNvbmRhcnlHcm91cFNpemUgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZ3JvdXBTZXBhcmF0b3IgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGRlY2ltYWxTZXBhcmF0b3IgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2l6ZSAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB7c3RyaW5nfVxyXG4gICAgICogICAgIHN1ZmZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqXHJcbiAgICAgKiAoVGhlIHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgYWJvdmUgRk9STUFUIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3QgY2hlY2tlZCBmb3IgdmFsaWRpdHkuKVxyXG4gICAgICpcclxuICAgICAqIEUuZy5cclxuICAgICAqIEJpZ051bWJlci5jb25maWcoeyBERUNJTUFMX1BMQUNFUyA6IDIwLCBST1VORElOR19NT0RFIDogNCB9KVxyXG4gICAgICpcclxuICAgICAqIElnbm9yZSBwcm9wZXJ0aWVzL3BhcmFtZXRlcnMgc2V0IHRvIG51bGwgb3IgdW5kZWZpbmVkLCBleGNlcHQgZm9yIEFMUEhBQkVULlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBjdXJyZW50IHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmNvbmZpZyA9IEJpZ051bWJlci5zZXQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIHZhciBwLCB2O1xyXG5cclxuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqID09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgLy8gREVDSU1BTF9QTEFDRVMge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIERFQ0lNQUxfUExBQ0VTIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdERUNJTUFMX1BMQUNFUycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIERFQ0lNQUxfUExBQ0VTID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBST1VORElOR19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUk9VTkRJTkdfTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUk9VTkRJTkdfTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDgsIHApO1xyXG4gICAgICAgICAgICBST1VORElOR19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBFWFBPTkVOVElBTF9BVCB7bnVtYmVyfG51bWJlcltdfVxyXG4gICAgICAgICAgLy8gSW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIDAgaW5jbHVzaXZlLCAwIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEVYUE9ORU5USUFMX0FUIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdFWFBPTkVOVElBTF9BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgMCwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gdlswXTtcclxuICAgICAgICAgICAgICBUT19FWFBfUE9TID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSAtKFRPX0VYUF9QT1MgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSQU5HRSB7bnVtYmVyfG51bWJlcltdfSBOb24temVybyBpbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gLTEgaW5jbHVzaXZlLCBpbnRlZ2VyIDEgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUkFOR0Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfGNhbm5vdCBiZSB6ZXJvfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JBTkdFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAtMSwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMSwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBNSU5fRVhQID0gdlswXTtcclxuICAgICAgICAgICAgICBNQVhfRVhQID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBNSU5fRVhQID0gLShNQVhfRVhQID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGNhbm5vdCBiZSB6ZXJvOiAnICsgdik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ1JZUFRPIHtib29sZWFufSB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIENSWVBUTyBub3QgdHJ1ZSBvciBmYWxzZToge3Z9J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdDUllQVE8nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiA9PT0gISF2KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAmJlxyXG4gICAgICAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9ICF2O1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgdHJ1ZSBvciBmYWxzZTogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTU9EVUxPX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA5IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBNT0RVTE9fTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnTU9EVUxPX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA5LCBwKTtcclxuICAgICAgICAgICAgTU9EVUxPX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFBPV19QUkVDSVNJT04ge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFBPV19QUkVDSVNJT04ge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1BPV19QUkVDSVNJT04nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBGT1JNQVQge29iamVjdH1cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBGT1JNQVQgbm90IGFuIG9iamVjdDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0ZPUk1BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnb2JqZWN0JykgRk9STUFUID0gdjtcclxuICAgICAgICAgICAgZWxzZSB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IGFuIG9iamVjdDogJyArIHYpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEFMUEhBQkVUIHtzdHJpbmd9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQUxQSEFCRVQgaW52YWxpZDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0FMUEhBQkVUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIERpc2FsbG93IGlmIGxlc3MgdGhhbiB0d28gY2hhcmFjdGVycyxcclxuICAgICAgICAgICAgLy8gb3IgaWYgaXQgY29udGFpbnMgJysnLCAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgYSByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnc3RyaW5nJyAmJiAhL14uPyR8WytcXC0uXFxzXXwoLikuKlxcMS8udGVzdCh2KSkge1xyXG4gICAgICAgICAgICAgIEFMUEhBQkVUID0gdjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBpbnZhbGlkOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gT2JqZWN0IGV4cGVjdGVkOiB7dn0nXHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdPYmplY3QgZXhwZWN0ZWQ6ICcgKyBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBERUNJTUFMX1BMQUNFUzogREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgUk9VTkRJTkdfTU9ERTogUk9VTkRJTkdfTU9ERSxcclxuICAgICAgICBFWFBPTkVOVElBTF9BVDogW1RPX0VYUF9ORUcsIFRPX0VYUF9QT1NdLFxyXG4gICAgICAgIFJBTkdFOiBbTUlOX0VYUCwgTUFYX0VYUF0sXHJcbiAgICAgICAgQ1JZUFRPOiBDUllQVE8sXHJcbiAgICAgICAgTU9EVUxPX01PREU6IE1PRFVMT19NT0RFLFxyXG4gICAgICAgIFBPV19QUkVDSVNJT046IFBPV19QUkVDSVNJT04sXHJcbiAgICAgICAgRk9STUFUOiBGT1JNQVQsXHJcbiAgICAgICAgQUxQSEFCRVQ6IEFMUEhBQkVUXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdiBpcyBhIEJpZ051bWJlciBpbnN0YW5jZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBCaWdOdW1iZXIuREVCVUcgaXMgdHJ1ZSwgdGhyb3cgaWYgYSBCaWdOdW1iZXIgaW5zdGFuY2UgaXMgbm90IHdlbGwtZm9ybWVkLlxyXG4gICAgICpcclxuICAgICAqIHYge2FueX1cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gSW52YWxpZCBCaWdOdW1iZXI6IHt2fSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmlzQmlnTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgaWYgKCF2IHx8IHYuX2lzQmlnTnVtYmVyICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghQmlnTnVtYmVyLkRFQlVHKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBpLCBuLFxyXG4gICAgICAgIGMgPSB2LmMsXHJcbiAgICAgICAgZSA9IHYuZSxcclxuICAgICAgICBzID0gdi5zO1xyXG5cclxuICAgICAgb3V0OiBpZiAoe30udG9TdHJpbmcuY2FsbChjKSA9PSAnW29iamVjdCBBcnJheV0nKSB7XHJcblxyXG4gICAgICAgIGlmICgocyA9PT0gMSB8fCBzID09PSAtMSkgJiYgZSA+PSAtTUFYICYmIGUgPD0gTUFYICYmIGUgPT09IG1hdGhmbG9vcihlKSkge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBlbGVtZW50IGlzIHplcm8sIHRoZSBCaWdOdW1iZXIgdmFsdWUgbXVzdCBiZSB6ZXJvLlxyXG4gICAgICAgICAgaWYgKGNbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09IDAgJiYgYy5sZW5ndGggPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBjWzBdIHNob3VsZCBoYXZlLCBiYXNlZCBvbiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGkgPCAxKSBpICs9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgICAgICAvL2lmIChNYXRoLmNlaWwoTWF0aC5sb2coY1swXSArIDEpIC8gTWF0aC5MTjEwKSA9PSBpKSB7XHJcbiAgICAgICAgICBpZiAoU3RyaW5nKGNbMF0pLmxlbmd0aCA9PSBpKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIG4gPSBjW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IEJBU0UgfHwgbiAhPT0gbWF0aGZsb29yKG4pKSBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhc3QgZWxlbWVudCBjYW5ub3QgYmUgemVybywgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IGVsZW1lbnQuXHJcbiAgICAgICAgICAgIGlmIChuICE9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU5cclxuICAgICAgfSBlbHNlIGlmIChjID09PSBudWxsICYmIGUgPT09IG51bGwgJiYgKHMgPT09IG51bGwgfHwgcyA9PT0gMSB8fCBzID09PSAtMSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnSW52YWxpZCBCaWdOdW1iZXI6ICcgKyB2KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1heGltdW0gPSBCaWdOdW1iZXIubWF4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmx0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1pbmltdW0gPSBCaWdOdW1iZXIubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmd0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLFxyXG4gICAgICogYW5kIHdpdGggZHAsIG9yIERFQ0lNQUxfUExBQ0VTIGlmIGRwIGlzIG9taXR0ZWQsIGRlY2ltYWwgcGxhY2VzIChvciBsZXNzIGlmIHRyYWlsaW5nXHJcbiAgICAgKiB6ZXJvcyBhcmUgcHJvZHVjZWQpLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5yYW5kb20gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgcG93Ml81MyA9IDB4MjAwMDAwMDAwMDAwMDA7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gYSA1MyBiaXQgaW50ZWdlciBuLCB3aGVyZSAwIDw9IG4gPCA5MDA3MTk5MjU0NzQwOTkyLlxyXG4gICAgICAvLyBDaGVjayBpZiBNYXRoLnJhbmRvbSgpIHByb2R1Y2VzIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHJhbmRvbW5lc3MuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIGFzc3VtZSBhdCBsZWFzdCA1MyBiaXRzIGFyZSBwcm9kdWNlZCwgb3RoZXJ3aXNlIGFzc3VtZSBhdCBsZWFzdCAzMCBiaXRzLlxyXG4gICAgICAvLyAweDQwMDAwMDAwIGlzIDJeMzAsIDB4ODAwMDAwIGlzIDJeMjMsIDB4MWZmZmZmIGlzIDJeMjEgLSAxLlxyXG4gICAgICB2YXIgcmFuZG9tNTNiaXRJbnQgPSAoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpICYgMHgxZmZmZmZcclxuICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKTsgfVxyXG4gICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoKE1hdGgucmFuZG9tKCkgKiAweDQwMDAwMDAwIHwgMCkgKiAweDgwMDAwMCkgK1xyXG4gICAgICAgICAoTWF0aC5yYW5kb20oKSAqIDB4ODAwMDAwIHwgMCk7IH07XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgICAgdmFyIGEsIGIsIGUsIGssIHYsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGMgPSBbXSxcclxuICAgICAgICAgIHJhbmQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAgIGlmIChkcCA9PSBudWxsKSBkcCA9IERFQ0lNQUxfUExBQ0VTO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcblxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChkcCAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgaWYgKENSWVBUTykge1xyXG5cclxuICAgICAgICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgICAgICAgIGlmIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoayAqPSAyKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDUzIGJpdHM6XHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSAqIE1hdGgucG93KDIsIDIxKSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTEwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMFxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgPj4+IDExKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMHgyMDAwMCBpcyAyXjIxLlxyXG4gICAgICAgICAgICAgIHYgPSBhW2ldICogMHgyMDAwMCArIChhW2kgKyAxXSA+Pj4gMTEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBSZWplY3Rpb24gc2FtcGxpbmc6XHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IHRoYXQgdiA+PSA5ZTE1LCBpc1xyXG4gICAgICAgICAgICAgIC8vIDcxOTkyNTQ3NDA5OTIgLyA5MDA3MTk5MjU0NzQwOTkyIH49IDAuMDAwOCwgaS5lLiAxIGluIDEyNTFcclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBiID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpO1xyXG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbMF07XHJcbiAgICAgICAgICAgICAgICBhW2kgKyAxXSA9IGJbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9IHYgPD0gODk5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBidWZmZXJcclxuICAgICAgICAgICAgYSA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMDAwMDAgaXMgMl40OCwgMHgxMDAwMDAwMDAwMCBpcyAyXjQwXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAgaXMgMl4zMiwgMHgxMDAwMDAwIGlzIDJeMjRcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICB2ID0gKChhW2ldICYgMzEpICogMHgxMDAwMDAwMDAwMDAwKSArIChhW2kgKyAxXSAqIDB4MTAwMDAwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgMl0gKiAweDEwMDAwMDAwMCkgKyAoYVtpICsgM10gKiAweDEwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgNF0gPDwgMTYpICsgKGFbaSArIDVdIDw8IDgpICsgYVtpICsgNl07XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KGEsIGkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSA3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBDUllQVE8gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBNYXRoLnJhbmRvbS5cclxuICAgICAgICBpZiAoIUNSWVBUTykge1xyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICAgICAgdiA9IHJhbmRvbTUzYml0SW50KCk7XHJcbiAgICAgICAgICAgIGlmICh2IDwgOWUxNSkgY1tpKytdID0gdiAlIDFlMTQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrID0gY1stLWldO1xyXG4gICAgICAgIGRwICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gZHAuXHJcbiAgICAgICAgaWYgKGsgJiYgZHApIHtcclxuICAgICAgICAgIHYgPSBQT1dTX1RFTltMT0dfQkFTRSAtIGRwXTtcclxuICAgICAgICAgIGNbaV0gPSBtYXRoZmxvb3IoayAvIHYpICogdjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVyby5cclxuICAgICAgICBmb3IgKDsgY1tpXSA9PT0gMDsgYy5wb3AoKSwgaS0tKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGMgPSBbZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGZvciAoZSA9IC0xIDsgY1swXSA9PT0gMDsgYy5zcGxpY2UoMCwgMSksIGUgLT0gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYyB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcywgYW5kLi4uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCB2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgaWYgKGkgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByYW5kLmUgPSBlO1xyXG4gICAgICAgIHJhbmQuYyA9IGM7XHJcbiAgICAgICAgcmV0dXJuIHJhbmQ7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuc3VtID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcclxuICAgICAgICBzdW0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOykgc3VtID0gc3VtLnBsdXMoYXJnc1tpKytdKTtcclxuICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXHJcblxyXG5cclxuICAgIC8vIENhbGxlZCBieSBCaWdOdW1iZXIgYW5kIEJpZ051bWJlci5wcm90b3R5cGUudG9TdHJpbmcuXHJcbiAgICBjb252ZXJ0QmFzZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBkZWNpbWFsID0gJzAxMjM0NTY3ODknO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ29udmVydCBzdHJpbmcgb2YgYmFzZUluIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYmFzZU91dC5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGFscGhhYmV0KSB7XHJcbiAgICAgICAgdmFyIGosXHJcbiAgICAgICAgICBhcnIgPSBbMF0sXHJcbiAgICAgICAgICBhcnJMLFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTsgYXJyW2FyckxdICo9IGJhc2VJbik7XHJcblxyXG4gICAgICAgICAgYXJyWzBdICs9IGFscGhhYmV0LmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PSBudWxsKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VJbiB0byBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgdG9TdHJpbmcsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZSAxMCB0byBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIEJpZ051bWJlciwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlSW4gdG8gYmFzZSAxMC5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIGJhc2VJbiwgYmFzZU91dCwgc2lnbiwgY2FsbGVySXNUb1N0cmluZykge1xyXG4gICAgICAgIHZhciBhbHBoYWJldCwgZCwgZSwgaywgciwgeCwgeGMsIHksXHJcbiAgICAgICAgICBpID0gc3RyLmluZGV4T2YoJy4nKSxcclxuICAgICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgICBybSA9IFJPVU5ESU5HX01PREU7XHJcblxyXG4gICAgICAgIC8vIE5vbi1pbnRlZ2VyLlxyXG4gICAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICAgIGsgPSBQT1dfUFJFQ0lTSU9OO1xyXG5cclxuICAgICAgICAgIC8vIFVubGltaXRlZCBwcmVjaXNpb24uXHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gMDtcclxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoYmFzZUluKTtcclxuICAgICAgICAgIHggPSB5LnBvdyhzdHIubGVuZ3RoIC0gaSk7XHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gaztcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHN0ciBhcyBpZiBhbiBpbnRlZ2VyLCB0aGVuIHJlc3RvcmUgdGhlIGZyYWN0aW9uIHBhcnQgYnkgZGl2aWRpbmcgdGhlXHJcbiAgICAgICAgICAvLyByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIuXHJcblxyXG4gICAgICAgICAgeS5jID0gdG9CYXNlT3V0KHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKHguYyksIHguZSwgJzAnKSxcclxuICAgICAgICAgICAxMCwgYmFzZU91dCwgZGVjaW1hbCk7XHJcbiAgICAgICAgICB5LmUgPSB5LmMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGludGVnZXIuXHJcblxyXG4gICAgICAgIHhjID0gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBjYWxsZXJJc1RvU3RyaW5nXHJcbiAgICAgICAgID8gKGFscGhhYmV0ID0gQUxQSEFCRVQsIGRlY2ltYWwpXHJcbiAgICAgICAgIDogKGFscGhhYmV0ID0gZGVjaW1hbCwgQUxQSEFCRVQpKTtcclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGFzIGFuIGludGVnZXIgYW5kIGNvbnZlcnRlZCB0byBiYXNlT3V0LiBlIGlzIHRoZSBleHBvbmVudC5cclxuICAgICAgICBlID0gayA9IHhjLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyB4Y1stLWtdID09IDA7IHhjLnBvcCgpKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoIXhjWzBdKSByZXR1cm4gYWxwaGFiZXQuY2hhckF0KDApO1xyXG5cclxuICAgICAgICAvLyBEb2VzIHN0ciByZXByZXNlbnQgYW4gaW50ZWdlcj8gSWYgc28sIG5vIG5lZWQgZm9yIHRoZSBkaXZpc2lvbi5cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIC0tZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5jID0geGM7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBzaWduIGlzIG5lZWRlZCBmb3IgY29ycmVjdCByb3VuZGluZy5cclxuICAgICAgICAgIHgucyA9IHNpZ247XHJcbiAgICAgICAgICB4ID0gZGl2KHgsIHksIGRwLCBybSwgYmFzZU91dCk7XHJcbiAgICAgICAgICB4YyA9IHguYztcclxuICAgICAgICAgIHIgPSB4LnI7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGNvbnZlcnRlZCB0byBiYXNlT3V0LlxyXG5cclxuICAgICAgICAvLyBUSGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGQgPSBlICsgZHAgKyAxO1xyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQ6IHRoZSBkaWdpdCB0byB0aGUgcmlnaHQgb2YgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhjW2RdO1xyXG5cclxuICAgICAgICAvLyBMb29rIGF0IHRoZSByb3VuZGluZyBkaWdpdHMgYW5kIG1vZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcm91bmQgdXAuXHJcblxyXG4gICAgICAgIGsgPSBiYXNlT3V0IC8gMjtcclxuICAgICAgICByID0gciB8fCBkIDwgMCB8fCB4Y1tkICsgMV0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgciA9IHJtIDwgNCA/IChpICE9IG51bGwgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgICAgOiBpID4gayB8fCBpID09IGsgJiYocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiYgeGNbZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvLCBvciB4YyByZXByZXNlbnRzXHJcbiAgICAgICAgLy8gemVybywgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBiYXNlIGNvbnZlcnNpb24gaXMgemVybyBvciwgaWYgcm91bmRpbmcgdXAsIGEgdmFsdWVcclxuICAgICAgICAvLyBzdWNoIGFzIDAuMDAwMDEuXHJcbiAgICAgICAgaWYgKGQgPCAxIHx8ICF4Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIDFeLWRwIG9yIDBcclxuICAgICAgICAgIHN0ciA9IHIgPyB0b0ZpeGVkUG9pbnQoYWxwaGFiZXQuY2hhckF0KDEpLCAtZHAsIGFscGhhYmV0LmNoYXJBdCgwKSkgOiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBUcnVuY2F0ZSB4YyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgeGMubGVuZ3RoID0gZDtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgICBmb3IgKC0tYmFzZU91dDsgKyt4Y1stLWRdID4gYmFzZU91dDspIHtcclxuICAgICAgICAgICAgICB4Y1tkXSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghZCkge1xyXG4gICAgICAgICAgICAgICAgKytlO1xyXG4gICAgICAgICAgICAgICAgeGMgPSBbMV0uY29uY2F0KHhjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGsgPSB4Yy5sZW5ndGg7ICF4Y1stLWtdOyk7XHJcblxyXG4gICAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDw9IGs7IHN0ciArPSBhbHBoYWJldC5jaGFyQXQoeGNbaSsrXSkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm9zLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyB6ZXJvcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsIGFscGhhYmV0LmNoYXJBdCgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgYWRkIHRoZSBzaWduLlxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvLyBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS4gQ2FsbGVkIGJ5IGRpdiBhbmQgY29udmVydEJhc2UuXHJcbiAgICBkaXYgPSAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgLy8gQXNzdW1lIG5vbi16ZXJvIHggYW5kIGsuXHJcbiAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KHgsIGssIGJhc2UpIHtcclxuICAgICAgICB2YXIgbSwgdGVtcCwgeGxvLCB4aGksXHJcbiAgICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgICBpID0geC5sZW5ndGgsXHJcbiAgICAgICAgICBrbG8gPSBrICUgU1FSVF9CQVNFLFxyXG4gICAgICAgICAga2hpID0gayAvIFNRUlRfQkFTRSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgICAgeGxvID0geFtpXSAlIFNRUlRfQkFTRTtcclxuICAgICAgICAgIHhoaSA9IHhbaV0gLyBTUVJUX0JBU0UgfCAwO1xyXG4gICAgICAgICAgbSA9IGtoaSAqIHhsbyArIHhoaSAqIGtsbztcclxuICAgICAgICAgIHRlbXAgPSBrbG8gKiB4bG8gKyAoKG0gJSBTUVJUX0JBU0UpICogU1FSVF9CQVNFKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSAodGVtcCAvIGJhc2UgfCAwKSArIChtIC8gU1FSVF9CQVNFIHwgMCkgKyBraGkgKiB4aGk7XHJcbiAgICAgICAgICB4W2ldID0gdGVtcCAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FycnkpIHggPSBbY2FycnldLmNvbmNhdCh4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgICAgdmFyIGksIGNtcDtcclxuXHJcbiAgICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgICBjbXAgPSBhTCA+IGJMID8gMSA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgZm9yIChpID0gY21wID0gMDsgaSA8IGFMOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgICBjbXAgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc3VidHJhY3QoYSwgYiwgYUwsIGJhc2UpIHtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICAgIGZvciAoOyBhTC0tOykge1xyXG4gICAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgICBhW2FMXSA9IGkgKiBiYXNlICsgYVthTF0gLSBiW2FMXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7IGEuc3BsaWNlKDAsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geDogZGl2aWRlbmQsIHk6IGRpdmlzb3IuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgZHAsIHJtLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGNtcCwgZSwgaSwgbW9yZSwgbiwgcHJvZCwgcHJvZEwsIHEsIHFjLCByZW0sIHJlbUwsIHJlbTAsIHhpLCB4TCwgeWMwLFxyXG4gICAgICAgICAgeUwsIHl6LFxyXG4gICAgICAgICAgcyA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICAgIGlmICgheGMgfHwgIXhjWzBdIHx8ICF5YyB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihcclxuXHJcbiAgICAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgTmFOLCBvciBib3RoIEluZmluaXR5IG9yIDAuXHJcbiAgICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4YyA/IHljICYmIHhjWzBdID09IHljWzBdIDogIXljKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIHggaXMgwrEwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyDCsTAuXHJcbiAgICAgICAgICAgIHhjICYmIHhjWzBdID09IDAgfHwgIXljID8gcyAqIDAgOiBzIC8gMFxyXG4gICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcSA9IG5ldyBCaWdOdW1iZXIocyk7XHJcbiAgICAgICAgcWMgPSBxLmMgPSBbXTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICAgIHMgPSBkcCArIGUgKyAxO1xyXG5cclxuICAgICAgICBpZiAoIWJhc2UpIHtcclxuICAgICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSAtIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgICAgIHMgPSBzIC8gTE9HX0JBU0UgfCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGUuXHJcbiAgICAgICAgLy8gVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQmlnTnVtYmVycyBmcm9tIGNvbnZlcnRCYXNlIG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IHljW2ldID09ICh4Y1tpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgICAgaWYgKHljW2ldID4gKHhjW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCkge1xyXG4gICAgICAgICAgcWMucHVzaCgxKTtcclxuICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBzICs9IDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhjIGFuZCB5YyBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHljIGlzID49IGJhc2UgLyAyLlxyXG5cclxuICAgICAgICAgIG4gPSBtYXRoZmxvb3IoYmFzZSAvICh5Y1swXSArIDEpKTtcclxuXHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gaGFuZGxlIG9kZCBiYXNlcyB3aGVyZSB5Y1swXSA9PSAoYmFzZSAvIDIpIC0gMS5cclxuICAgICAgICAgIC8vIGlmIChuID4gMSB8fCBuKysgPT0gMSAmJiB5Y1swXSA8IGJhc2UgLyAyKSB7XHJcbiAgICAgICAgICBpZiAobiA+IDEpIHtcclxuICAgICAgICAgICAgeWMgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHhjID0gbXVsdGlwbHkoeGMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhjLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOyByZW1bcmVtTCsrXSA9IDApO1xyXG4gICAgICAgICAgeXogPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgeXogPSBbMF0uY29uY2F0KHl6KTtcclxuICAgICAgICAgIHljMCA9IHljWzBdO1xyXG4gICAgICAgICAgaWYgKHljWzFdID49IGJhc2UgLyAyKSB5YzArKztcclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBwcmV2ZW50IHRyaWFsIGRpZ2l0IG4gPiBiYXNlLCB3aGVuIHVzaW5nIGJhc2UgMy5cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGJhc2UgPT0gMyAmJiB5YzAgPT0gMSkgeWMwID0gMSArIDFlLTE1O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIG4uXHJcblxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG4gaXMgaG93IG1hbnkgdGltZXMgdGhlIGRpdmlzb3IgZ29lcyBpbnRvIHRoZSBjdXJyZW50IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBuID0gbWF0aGZsb29yKHJlbTAgLyB5YzApO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICBwcm9kdWN0ID0gZGl2aXNvciBtdWx0aXBsaWVkIGJ5IHRyaWFsIGRpZ2l0IChuKS5cclxuICAgICAgICAgICAgICAvLyAgQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3QgaXMgZ3JlYXRlciB0aGFuIHJlbWFpbmRlcjpcclxuICAgICAgICAgICAgICAvLyAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdCwgZGVjcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgIC8vICBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IHdhcyBsZXNzIHRoYW4gcmVtYWluZGVyIGF0IHRoZSBsYXN0IGNvbXBhcmU6XHJcbiAgICAgICAgICAgICAgLy8gICAgQ29tcGFyZSBuZXcgcmVtYWluZGVyIGFuZCBkaXZpc29yLlxyXG4gICAgICAgICAgICAgIC8vICAgIElmIHJlbWFpbmRlciBpcyBncmVhdGVyIHRoYW4gZGl2aXNvcjpcclxuICAgICAgICAgICAgICAvLyAgICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIsIGluY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBtYXkgYmUgPiBiYXNlIG9ubHkgd2hlbiBiYXNlIGlzIDMuXHJcbiAgICAgICAgICAgICAgICBpZiAobiA+PSBiYXNlKSBuID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0ID4gcmVtYWluZGVyIHRoZW4gdHJpYWwgZGlnaXQgbiB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gaGlnaCBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIGlzIG5vdCBrbm93biB0byBoYXZlXHJcbiAgICAgICAgICAgICAgICAvLyBldmVyIGJlZW4gbW9yZSB0aGFuIDEgdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4tLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5YywgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjbXAgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAwIG9yIDEsIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHljIGFuZCByZW0gYWdhaW4gYmVsb3csXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBjaGFuZ2UgY21wIHRvIDEgdG8gYXZvaWQgaXQuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDEsIGxlYXZlIGNtcCBhcyAtMSwgc28geWMgYW5kIHJlbSBhcmUgY29tcGFyZWQgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBkaXZpc29yIDwgcmVtYWluZGVyLCBzbyBuIG11c3QgYmUgYXQgbGVhc3QgMS5cclxuICAgICAgICAgICAgICAgICAgY21wID0gbiA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3JcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwcm9kTCA8IHJlbUwpIHByb2QgPSBbMF0uY29uY2F0KHByb2QpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBUcmlhbCBkaWdpdCBuIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGxvdyBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIHZlcnkgcmFyZWx5IDIgdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHljLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIG4rKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gLy8gZWxzZSBjbXAgPT09IDEgYW5kIG4gd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIG4sIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFjW2krK10gPSBuO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChyZW1bMF0pIHtcclxuICAgICAgICAgICAgICByZW1bcmVtTCsrXSA9IHhjW3hpXSB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlbSA9IFt4Y1t4aV1dO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPSBudWxsKSAmJiBzLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgICBpZiAoIXFjWzBdKSBxYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFzZSA9PSBCQVNFKSB7XHJcblxyXG4gICAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFjWzBdLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgcyA9IHFjWzBdOyBzID49IDEwOyBzIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIHJvdW5kKHEsIGRwICsgKHEuZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSArIDEsIHJtLCBtb3JlKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbGVyIGlzIGNvbnZlcnRCYXNlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxLmUgPSBlO1xyXG4gICAgICAgICAgcS5yID0gK21vcmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIgbiBpbiBmaXhlZC1wb2ludCBvciBleHBvbmVudGlhbFxyXG4gICAgICogbm90YXRpb24gcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIG9yIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAqXHJcbiAgICAgKiBuOiBhIEJpZ051bWJlci5cclxuICAgICAqIGk6IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBkaWdpdCByZXF1aXJlZCAoaS5lLiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cCkuXHJcbiAgICAgKiBybTogdGhlIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgKiBpZDogMSAodG9FeHBvbmVudGlhbCkgb3IgMiAodG9QcmVjaXNpb24pLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JtYXQobiwgaSwgcm0sIGlkKSB7XHJcbiAgICAgIHZhciBjMCwgZSwgbmUsIGxlbiwgc3RyO1xyXG5cclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICBpZiAoIW4uYykgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGMwID0gbi5jWzBdO1xyXG4gICAgICBuZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChpID09IG51bGwpIHtcclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgc3RyID0gaWQgPT0gMSB8fCBpZCA9PSAyICYmIChuZSA8PSBUT19FWFBfTkVHIHx8IG5lID49IFRPX0VYUF9QT1MpXHJcbiAgICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIG5lKVxyXG4gICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIG5lLCAnMCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBpLCBybSk7XHJcblxyXG4gICAgICAgIC8vIG4uZSBtYXkgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2YWx1ZSB3YXMgcm91bmRlZCB1cC5cclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gdG9QcmVjaXNpb24gcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICAgIC8vIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlclxyXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgICBpZiAoaWQgPT0gMSB8fCBpZCA9PSAyICYmIChpIDw9IGUgfHwgZSA8PSBUT19FWFBfTkVHKSkge1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGZvciAoOyBsZW4gPCBpOyBzdHIgKz0gJzAnLCBsZW4rKyk7XHJcbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHN0ciwgZSk7XHJcblxyXG4gICAgICAgIC8vIEZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpIC09IG5lO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBpZiAoZSArIDEgPiBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKC0taSA+IDApIGZvciAoc3RyICs9ICcuJzsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgKz0gZSAtIGxlbjtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGUgKyAxID09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgJiYgYzAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSBCaWdOdW1iZXIubWF4IGFuZCBCaWdOdW1iZXIubWluLlxyXG4gICAgZnVuY3Rpb24gbWF4T3JNaW4oYXJncywgbWV0aG9kKSB7XHJcbiAgICAgIHZhciBuLFxyXG4gICAgICAgIGkgPSAxLFxyXG4gICAgICAgIG0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIoYXJnc1tpXSk7XHJcblxyXG4gICAgICAgIC8vIElmIGFueSBudW1iZXIgaXMgTmFOLCByZXR1cm4gTmFOLlxyXG4gICAgICAgIGlmICghbi5zKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kLmNhbGwobSwgbikpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBTdHJpcCB0cmFpbGluZyB6ZXJvcywgY2FsY3VsYXRlIGJhc2UgMTAgZXhwb25lbnQgYW5kIGNoZWNrIGFnYWluc3QgTUlOX0VYUCBhbmQgTUFYX0VYUC5cclxuICAgICAqIENhbGxlZCBieSBtaW51cywgcGx1cyBhbmQgdGltZXMuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG5vcm1hbGlzZShuLCBjLCBlKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBqID0gYy5sZW5ndGg7XHJcblxyXG4gICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWNbLS1qXTsgYy5wb3AoKSk7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGJhc2UgMTAgZXhwb25lbnQuIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICBmb3IgKGogPSBjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgIGlmICgoZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgbi5jID0gbi5lID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIG4uYyA9IFtuLmUgPSAwXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuLmUgPSBlO1xyXG4gICAgICAgIG4uYyA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdmFsdWVzIHRoYXQgZmFpbCB0aGUgdmFsaWRpdHkgdGVzdCBpbiBCaWdOdW1iZXIuXHJcbiAgICBwYXJzZU51bWVyaWMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksXHJcbiAgICAgICAgZG90QWZ0ZXIgPSAvXihbXi5dKylcXC4kLyxcclxuICAgICAgICBkb3RCZWZvcmUgPSAvXlxcLihbXi5dKykkLyxcclxuICAgICAgICBpc0luZmluaXR5T3JOYU4gPSAvXi0/KEluZmluaXR5fE5hTikkLyxcclxuICAgICAgICB3aGl0ZXNwYWNlT3JQbHVzID0gL15cXHMqXFwrKD89W1xcdy5dKXxeXFxzK3xcXHMrJC9nO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCBzdHIsIGlzTnVtLCBiKSB7XHJcbiAgICAgICAgdmFyIGJhc2UsXHJcbiAgICAgICAgICBzID0gaXNOdW0gPyBzdHIgOiBzdHIucmVwbGFjZSh3aGl0ZXNwYWNlT3JQbHVzLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIE5vIGV4Y2VwdGlvbiBvbiDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAgICBpZiAoaXNJbmZpbml0eU9yTmFOLnRlc3QocykpIHtcclxuICAgICAgICAgIHgucyA9IGlzTmFOKHMpID8gbnVsbCA6IHMgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIWlzTnVtKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaVxyXG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKGJhc2VQcmVmaXgsIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gKHAyID0gcDIudG9Mb3dlckNhc2UoKSkgPT0gJ3gnID8gMTYgOiBwMiA9PSAnYicgPyAyIDogODtcclxuICAgICAgICAgICAgICByZXR1cm4gIWIgfHwgYiA9PSBiYXNlID8gcDEgOiBtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IGI7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEUuZy4gJzEuJyB0byAnMScsICcuMScgdG8gJzAuMSdcclxuICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKGRvdEFmdGVyLCAnJDEnKS5yZXBsYWNlKGRvdEJlZm9yZSwgJzAuJDEnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ciAhPSBzKSByZXR1cm4gbmV3IEJpZ051bWJlcihzLCBiYXNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgYmFzZSB7Yn0gbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ05vdCBhJyArIChiID8gJyBiYXNlICcgKyBiIDogJycpICsgJyBudW1iZXI6ICcgKyBzdHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE5hTlxyXG4gICAgICAgICAgeC5zID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSb3VuZCB4IHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93LlxyXG4gICAgICogSWYgciBpcyB0cnV0aHksIGl0IGlzIGtub3duIHRoYXQgdGhlcmUgYXJlIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcm91bmQoeCwgc2QsIHJtLCByKSB7XHJcbiAgICAgIHZhciBkLCBpLCBqLCBrLCBuLCBuaSwgcmQsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgcG93czEwID0gUE9XU19URU47XHJcblxyXG4gICAgICAvLyBpZiB4IGlzIG5vdCBJbmZpbml0eSBvciBOYU4uLi5cclxuICAgICAgaWYgKHhjKSB7XHJcblxyXG4gICAgICAgIC8vIHJkIGlzIHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgLy8gbiBpcyBhIGJhc2UgMWUxNCBudW1iZXIsIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBvZiBhcnJheSB4LmMgY29udGFpbmluZyByZC5cclxuICAgICAgICAvLyBuaSBpcyB0aGUgaW5kZXggb2YgbiB3aXRoaW4geC5jLlxyXG4gICAgICAgIC8vIGQgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAvLyBpIGlzIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiBpbmNsdWRpbmcgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAvLyBqIGlzIHRoZSBhY3R1YWwgaW5kZXggb2YgcmQgd2l0aGluIG4gKGlmIDwgMCwgcmQgaXMgYSBsZWFkaW5nIHplcm8pLlxyXG4gICAgICAgIG91dDoge1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy5cclxuICAgICAgICAgIGZvciAoZCA9IDEsIGsgPSB4Y1swXTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuICAgICAgICAgIGkgPSBzZCAtIGQ7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgaiA9IHNkO1xyXG4gICAgICAgICAgICBuID0geGNbbmkgPSAwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICByZCA9IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5pID0gbWF0aGNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuaSA+PSB4Yy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgYnkgc3FydC5cclxuICAgICAgICAgICAgICAgIGZvciAoOyB4Yy5sZW5ndGggPD0gbmk7IHhjLnB1c2goMCkpO1xyXG4gICAgICAgICAgICAgICAgbiA9IHJkID0gMDtcclxuICAgICAgICAgICAgICAgIGQgPSAxO1xyXG4gICAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG4gPSBrID0geGNbbmldO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAgICAgICBmb3IgKGQgPSAxOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLlxyXG4gICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4sIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuIGlzIGdpdmVuIGJ5IExPR19CQVNFIC0gZC5cclxuICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByID0gciB8fCBzZCA8IDAgfHxcclxuXHJcbiAgICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/XHJcbiAgICAgICAgICAvLyBUaGUgZXhwcmVzc2lvbiAgbiAlIHBvd3MxMFtkIC0gaiAtIDFdICByZXR1cm5zIGFsbCBkaWdpdHMgb2YgbiB0byB0aGUgcmlnaHRcclxuICAgICAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCBqLCBlLmcuIGlmIG4gaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uIGdpdmVzIDcxNC5cclxuICAgICAgICAgICB4Y1tuaSArIDFdICE9IG51bGwgfHwgKGogPCAwID8gbiA6IG4gJSBwb3dzMTBbZCAtIGogLSAxXSk7XHJcblxyXG4gICAgICAgICAgciA9IHJtIDwgNFxyXG4gICAgICAgICAgID8gKHJkIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmXHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyBuIC8gcG93czEwW2QgLSBqXSA6IDAgOiB4Y1tuaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2QgPCAxIHx8ICF4Y1swXSkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgICAgICBzZCAtPSB4LmUgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0gcG93czEwWyhMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0VdO1xyXG4gICAgICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0geC5lID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgbmktLTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pICsgMTtcclxuICAgICAgICAgICAgayA9IHBvd3MxMFtMT0dfQkFTRSAtIGldO1xyXG5cclxuICAgICAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygbi5cclxuICAgICAgICAgICAgeGNbbmldID0gaiA+IDAgPyBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gal0gJSBwb3dzMTBbal0pICogayA6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgICAgICBpZiAobmkgPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhjWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG4gICAgICAgICAgICAgICAgaiA9IHhjWzBdICs9IGs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwLCBrKyspO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHguZSsrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeGNbMF0gPT0gQkFTRSkgeGNbMF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaV0gKz0gaztcclxuICAgICAgICAgICAgICAgIGlmICh4Y1tuaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaS0tXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGkgPSB4Yy5sZW5ndGg7IHhjWy0taV0gPT09IDA7IHhjLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE92ZXJmbG93PyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93PyBaZXJvLlxyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2Yobikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuXHJcbiAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBlKVxyXG4gICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBQUk9UT1RZUEUvSU5TVEFOQ0UgTUVUSE9EU1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5cclxuICAgICAqICAgMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIC0xIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICAgKiAgIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgKi9cclxuICAgIFAuY29tcGFyZWRUbyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIGRwIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZVxyXG4gICAgICogdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgZHAgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBkcCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXM6IGludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICBuID0gKCh2ID0gYy5sZW5ndGggLSAxKSAtIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgbnVtYmVyLlxyXG4gICAgICBpZiAodiA9IGNbdl0pIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC8gMCA9IElcclxuICAgICAqICBuIC8gTiA9IE5cclxuICAgICAqICBuIC8gSSA9IDBcclxuICAgICAqICAwIC8gbiA9IDBcclxuICAgICAqICAwIC8gMCA9IE5cclxuICAgICAqICAwIC8gTiA9IE5cclxuICAgICAqICAwIC8gSSA9IDBcclxuICAgICAqICBOIC8gbiA9IE5cclxuICAgICAqICBOIC8gMCA9IE5cclxuICAgICAqICBOIC8gTiA9IE5cclxuICAgICAqICBOIC8gSSA9IE5cclxuICAgICAqICBJIC8gbiA9IElcclxuICAgICAqICBJIC8gMCA9IElcclxuICAgICAqICBJIC8gTiA9IE5cclxuICAgICAqICBJIC8gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgREVDSU1BTF9QTEFDRVMsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIgcGFydCBvZiBkaXZpZGluZyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIGJ5IHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5pZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCAwLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGV4cG9uZW50aWF0ZWQgYnkgbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBtIGlzIHByZXNlbnQsIHJldHVybiB0aGUgcmVzdWx0IG1vZHVsbyBtLlxyXG4gICAgICogSWYgbiBpcyBuZWdhdGl2ZSByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKiBJZiBQT1dfUFJFQ0lTSU9OIGlzIG5vbi16ZXJvIGFuZCBtIGlzIG5vdCBwcmVzZW50LCByb3VuZCB0byBQT1dfUFJFQ0lTSU9OIHVzaW5nIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZHVsYXIgcG93ZXIgb3BlcmF0aW9uIHdvcmtzIGVmZmljaWVudGx5IHdoZW4geCwgbiwgYW5kIG0gYXJlIGludGVnZXJzLCBvdGhlcndpc2UgaXRcclxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgeC5leHBvbmVudGlhdGVkQnkobikubW9kdWxvKG0pIHdpdGggYSBQT1dfUFJFQ0lTSU9OIG9mIDAuXHJcbiAgICAgKlxyXG4gICAgICogbiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBleHBvbmVudC4gQW4gaW50ZWdlci5cclxuICAgICAqIFttXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBtb2R1bHVzLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBFeHBvbmVudCBub3QgYW4gaW50ZWdlcjoge259J1xyXG4gICAgICovXHJcbiAgICBQLmV4cG9uZW50aWF0ZWRCeSA9IFAucG93ID0gZnVuY3Rpb24gKG4sIG0pIHtcclxuICAgICAgdmFyIGhhbGYsIGlzTW9kRXhwLCBpLCBrLCBtb3JlLCBuSXNCaWcsIG5Jc05lZywgbklzT2RkLCB5LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobik7XHJcblxyXG4gICAgICAvLyBBbGxvdyBOYU4gYW5kIMKxSW5maW5pdHksIGJ1dCBub3Qgb3RoZXIgbm9uLWludGVnZXJzLlxyXG4gICAgICBpZiAobi5jICYmICFuLmlzSW50ZWdlcigpKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogJyArIHZhbHVlT2YobikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobSAhPSBudWxsKSBtID0gbmV3IEJpZ051bWJlcihtKTtcclxuXHJcbiAgICAgIC8vIEV4cG9uZW50IG9mIE1BWF9TQUZFX0lOVEVHRVIgaXMgMTUuXHJcbiAgICAgIG5Jc0JpZyA9IG4uZSA+IDE0O1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBOYU4sIMKxSW5maW5pdHksIMKxMCBvciDCsTEsIG9yIG4gaXMgwrFJbmZpbml0eSwgTmFOIG9yIMKxMC5cclxuICAgICAgaWYgKCF4LmMgfHwgIXguY1swXSB8fCB4LmNbMF0gPT0gMSAmJiAheC5lICYmIHguYy5sZW5ndGggPT0gMSB8fCAhbi5jIHx8ICFuLmNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZiBwb3cgd2hlbiB4IGlzIG5lZ2F0aXZlIGRlcGVuZHMgb24gdGhlIGV2ZW5uZXNzIG9mIG4uXHJcbiAgICAgICAgLy8gSWYgK24gb3ZlcmZsb3dzIHRvIMKxSW5maW5pdHksIHRoZSBldmVubmVzcyBvZiBuIHdvdWxkIGJlIG5vdCBiZSBrbm93bi5cclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihNYXRoLnBvdygrdmFsdWVPZih4KSwgbklzQmlnID8gMiAtIGlzT2RkKG4pIDogK3ZhbHVlT2YobikpKTtcclxuICAgICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogeTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbklzTmVnID0gbi5zIDwgMDtcclxuXHJcbiAgICAgIGlmIChtKSB7XHJcblxyXG4gICAgICAgIC8vIHggJSBtIHJldHVybnMgTmFOIGlmIGFicyhtKSBpcyB6ZXJvLCBvciBtIGlzIE5hTi5cclxuICAgICAgICBpZiAobS5jID8gIW0uY1swXSA6ICFtLnMpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAgIGlzTW9kRXhwID0gIW5Jc05lZyAmJiB4LmlzSW50ZWdlcigpICYmIG0uaXNJbnRlZ2VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpc01vZEV4cCkgeCA9IHgubW9kKG0pO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3cgdG8gwrFJbmZpbml0eTogPj0yKioxZTEwIG9yID49MS4wMDAwMDI0KioxZTE1LlxyXG4gICAgICAvLyBVbmRlcmZsb3cgdG8gwrEwOiA8PTAuNzkqKjFlMTAgb3IgPD0wLjk5OTk5NzUqKjFlMTUuXHJcbiAgICAgIH0gZWxzZSBpZiAobi5lID4gOSAmJiAoeC5lID4gMCB8fCB4LmUgPCAtMSB8fCAoeC5lID09IDBcclxuICAgICAgICAvLyBbMSwgMjQwMDAwMDAwXVxyXG4gICAgICAgID8geC5jWzBdID4gMSB8fCBuSXNCaWcgJiYgeC5jWzFdID49IDI0ZTdcclxuICAgICAgICAvLyBbODAwMDAwMDAwMDAwMDBdICBbOTk5OTk3NTAwMDAwMDBdXHJcbiAgICAgICAgOiB4LmNbMF0gPCA4ZTEzIHx8IG5Jc0JpZyAmJiB4LmNbMF0gPD0gOTk5OTk3NWU3KSkpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgeCBpcyBuZWdhdGl2ZSBhbmQgbiBpcyBvZGQsIGsgPSAtMCwgZWxzZSBrID0gMC5cclxuICAgICAgICBrID0geC5zIDwgMCAmJiBpc09kZChuKSA/IC0wIDogMDtcclxuXHJcbiAgICAgICAgLy8gSWYgeCA+PSAxLCBrID0gwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gLTEpIGsgPSAxIC8gaztcclxuXHJcbiAgICAgICAgLy8gSWYgbiBpcyBuZWdhdGl2ZSByZXR1cm4gwrEwLCBlbHNlIHJldHVybiDCsUluZmluaXR5LlxyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKG5Jc05lZyA/IDEgLyBrIDogayk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKFBPV19QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGluZyBlYWNoIGNvZWZmaWNpZW50IGFycmF5IHRvIGEgbGVuZ3RoIG9mIGsgYWZ0ZXIgZWFjaCBtdWx0aXBsaWNhdGlvblxyXG4gICAgICAgIC8vIGVxdWF0ZXMgdG8gdHJ1bmNhdGluZyBzaWduaWZpY2FudCBkaWdpdHMgdG8gUE9XX1BSRUNJU0lPTiArIFsyOCwgNDFdLFxyXG4gICAgICAgIC8vIGkuZS4gdGhlcmUgd2lsbCBiZSBhIG1pbmltdW0gb2YgMjggZ3VhcmQgZGlnaXRzIHJldGFpbmVkLlxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChQT1dfUFJFQ0lTSU9OIC8gTE9HX0JBU0UgKyAyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5Jc0JpZykge1xyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKDAuNSk7XHJcbiAgICAgICAgaWYgKG5Jc05lZykgbi5zID0gMTtcclxuICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gTWF0aC5hYnMoK3ZhbHVlT2YobikpO1xyXG4gICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgLy8gUGVyZm9ybXMgNTQgbG9vcCBpdGVyYXRpb25zIGZvciBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEuXHJcbiAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgIGlmIChuSXNPZGQpIHtcclxuICAgICAgICAgIHkgPSB5LnRpbWVzKHgpO1xyXG4gICAgICAgICAgaWYgKCF5LmMpIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICAgIGlmICh5LmMubGVuZ3RoID4gaykgeS5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICAgIHkgPSB5Lm1vZChtKTsgICAgLy95ID0geS5taW51cyhkaXYoeSwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpKSB7XHJcbiAgICAgICAgICBpID0gbWF0aGZsb29yKGkgLyAyKTtcclxuICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gbi50aW1lcyhoYWxmKTtcclxuICAgICAgICAgIHJvdW5kKG4sIG4uZSArIDEsIDEpO1xyXG5cclxuICAgICAgICAgIGlmIChuLmUgPiAxNCkge1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgPSArdmFsdWVPZihuKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggPSB4LnRpbWVzKHgpO1xyXG5cclxuICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgaWYgKHguYyAmJiB4LmMubGVuZ3RoID4gaykgeC5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgeCA9IHgubW9kKG0pOyAgICAvL3ggPSB4Lm1pbnVzKGRpdih4LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTW9kRXhwKSByZXR1cm4geTtcclxuICAgICAgaWYgKG5Jc05lZykgeSA9IE9ORS5kaXYoeSk7XHJcblxyXG4gICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogayA/IHJvdW5kKHksIFBPV19QUkVDSVNJT04sIFJPVU5ESU5HX01PREUsIG1vcmUpIDogeTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIGFuIGludGVnZXJcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtybX0nXHJcbiAgICAgKi9cclxuICAgIFAuaW50ZWdlclZhbHVlID0gZnVuY3Rpb24gKHJtKSB7XHJcbiAgICAgIHZhciBuID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcbiAgICAgIHJldHVybiByb3VuZChuLCBuLmUgKyAxLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRXF1YWxUbyA9IFAuZXEgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYSBmaW5pdGUgbnVtYmVyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAxIHx8IGIgPT09IDA7XHJcblxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzSW50ZWdlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSA+IHRoaXMuYy5sZW5ndGggLSAyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbiA9IFAubHQgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuT3JFcXVhbFRvID0gUC5sdGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gLTEgfHwgYiA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgTmFOLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmFOID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMucztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbmVnYXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIHRoaXMuY1swXSA9PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC0gMCA9IG5cclxuICAgICAqICBuIC0gTiA9IE5cclxuICAgICAqICBuIC0gSSA9IC1JXHJcbiAgICAgKiAgMCAtIG4gPSAtblxyXG4gICAgICogIDAgLSAwID0gMFxyXG4gICAgICogIDAgLSBOID0gTlxyXG4gICAgICogIDAgLSBJID0gLUlcclxuICAgICAqICBOIC0gbiA9IE5cclxuICAgICAqICBOIC0gMCA9IE5cclxuICAgICAqICBOIC0gTiA9IE5cclxuICAgICAqICBOIC0gSSA9IE5cclxuICAgICAqICBJIC0gbiA9IElcclxuICAgICAqICBJIC0gMCA9IElcclxuICAgICAqICBJIC0gTiA9IE5cclxuICAgICAqICBJIC0gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtaW51cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5taW51cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBpLCBqLCB0LCB4TFR5LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4LnBsdXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiB4YyA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHljID8geCA6IE5hTik7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgICByZXR1cm4geWNbMF0gPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOlxyXG5cclxuICAgICAgICAgICAvLyBJRUVFIDc1NCAoMjAwOCkgNi4zOiBuIC0gbiA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5XHJcbiAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9PSAzID8gLTAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuXHJcbiAgICAgICAgaWYgKHhMVHkgPSBhIDwgMCkge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLlxyXG4gICAgICAgIGZvciAoYiA9IGE7IGItLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRzIGVxdWFsLiBDaGVjayBkaWdpdCBieSBkaWdpdC5cclxuICAgICAgICBqID0gKHhMVHkgPSAoYSA9IHhjLmxlbmd0aCkgPCAoYiA9IHljLmxlbmd0aCkpID8gYSA6IGI7XHJcblxyXG4gICAgICAgIGZvciAoYSA9IGIgPSAwOyBiIDwgajsgYisrKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHhjW2JdICE9IHljW2JdKSB7XHJcbiAgICAgICAgICAgIHhMVHkgPSB4Y1tiXSA8IHljW2JdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHggPCB5PyBQb2ludCB4YyB0byB0aGUgYXJyYXkgb2YgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmICh4TFR5KSB0ID0geGMsIHhjID0geWMsIHljID0gdCwgeS5zID0gLXkucztcclxuXHJcbiAgICAgIGIgPSAoaiA9IHljLmxlbmd0aCkgLSAoaSA9IHhjLmxlbmd0aCk7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MgdG8geGMgaWYgc2hvcnRlci5cclxuICAgICAgLy8gTm8gbmVlZCB0byBhZGQgemVyb3MgdG8geWMgaWYgc2hvcnRlciBhcyBzdWJ0cmFjdCBvbmx5IG5lZWRzIHRvIHN0YXJ0IGF0IHljLmxlbmd0aC5cclxuICAgICAgaWYgKGIgPiAwKSBmb3IgKDsgYi0tOyB4Y1tpKytdID0gMCk7XHJcbiAgICAgIGIgPSBCQVNFIC0gMTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHljIGZyb20geGMuXHJcbiAgICAgIGZvciAoOyBqID4gYTspIHtcclxuXHJcbiAgICAgICAgaWYgKHhjWy0tal0gPCB5Y1tqXSkge1xyXG4gICAgICAgICAgZm9yIChpID0gajsgaSAmJiAheGNbLS1pXTsgeGNbaV0gPSBiKTtcclxuICAgICAgICAgIC0teGNbaV07XHJcbiAgICAgICAgICB4Y1tqXSArPSBCQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeGNbal0gLT0geWNbal07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyB4Y1swXSA9PSAwOyB4Yy5zcGxpY2UoMCwgMSksIC0teWUpO1xyXG5cclxuICAgICAgLy8gWmVybz9cclxuICAgICAgaWYgKCF4Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBGb2xsb3dpbmcgSUVFRSA3NTQgKDIwMDgpIDYuMyxcclxuICAgICAgICAvLyBuIC0gbiA9ICswICBidXQgIG4gLSBuID0gLTAgIHdoZW4gcm91bmRpbmcgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgICAgeS5zID0gUk9VTkRJTkdfTU9ERSA9PSAzID8gLTEgOiAxO1xyXG4gICAgICAgIHkuYyA9IFt5LmUgPSAwXTtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgSW5maW5pdHkgYXMgK3ggLSAreSAhPSBJbmZpbml0eSAmJiAteCAtIC15ICE9IEluZmluaXR5XHJcbiAgICAgIC8vIGZvciBmaW5pdGUgeCBhbmQgeS5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICAgbiAlIDAgPSAgTlxyXG4gICAgICogICBuICUgTiA9ICBOXHJcbiAgICAgKiAgIG4gJSBJID0gIG5cclxuICAgICAqICAgMCAlIG4gPSAgMFxyXG4gICAgICogIC0wICUgbiA9IC0wXHJcbiAgICAgKiAgIDAgJSAwID0gIE5cclxuICAgICAqICAgMCAlIE4gPSAgTlxyXG4gICAgICogICAwICUgSSA9ICAwXHJcbiAgICAgKiAgIE4gJSBuID0gIE5cclxuICAgICAqICAgTiAlIDAgPSAgTlxyXG4gICAgICogICBOICUgTiA9ICBOXHJcbiAgICAgKiAgIE4gJSBJID0gIE5cclxuICAgICAqICAgSSAlIG4gPSAgTlxyXG4gICAgICogICBJICUgMCA9ICBOXHJcbiAgICAgKiAgIEkgJSBOID0gIE5cclxuICAgICAqICAgSSAlIEkgPSAgTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1vZHVsbyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBNT0RVTE9fTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBxLCBzLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgSW5maW5pdHkgb3IgTmFOLCBvciB5IGlzIE5hTiBvciB6ZXJvLlxyXG4gICAgICBpZiAoIXguYyB8fCAheS5zIHx8IHkuYyAmJiAheS5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgSW5maW5pdHkgb3IgeCBpcyB6ZXJvLlxyXG4gICAgICB9IGVsc2UgaWYgKCF5LmMgfHwgeC5jICYmICF4LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE1PRFVMT19NT0RFID09IDkpIHtcclxuXHJcbiAgICAgICAgLy8gRXVjbGlkaWFuIGRpdmlzaW9uOiBxID0gc2lnbih5KSAqIGZsb29yKHggLyBhYnMoeSkpXHJcbiAgICAgICAgLy8gciA9IHggLSBxeSAgICB3aGVyZSAgMCA8PSByIDwgYWJzKHkpXHJcbiAgICAgICAgcyA9IHkucztcclxuICAgICAgICB5LnMgPSAxO1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgMyk7XHJcbiAgICAgICAgeS5zID0gcztcclxuICAgICAgICBxLnMgKj0gcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIE1PRFVMT19NT0RFKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IHgubWludXMocS50aW1lcyh5KSk7XHJcblxyXG4gICAgICAvLyBUbyBtYXRjaCBKYXZhU2NyaXB0ICUsIGVuc3VyZSBzaWduIG9mIHplcm8gaXMgc2lnbiBvZiBkaXZpZGVuZC5cclxuICAgICAgaWYgKCF5LmNbMF0gJiYgTU9EVUxPX01PREUgPT0gMSkgeS5zID0geC5zO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKiAwID0gMFxyXG4gICAgICogIG4gKiBOID0gTlxyXG4gICAgICogIG4gKiBJID0gSVxyXG4gICAgICogIDAgKiBuID0gMFxyXG4gICAgICogIDAgKiAwID0gMFxyXG4gICAgICogIDAgKiBOID0gTlxyXG4gICAgICogIDAgKiBJID0gTlxyXG4gICAgICogIE4gKiBuID0gTlxyXG4gICAgICogIE4gKiAwID0gTlxyXG4gICAgICogIE4gKiBOID0gTlxyXG4gICAgICogIE4gKiBJID0gTlxyXG4gICAgICogIEkgKiBuID0gSVxyXG4gICAgICogIEkgKiAwID0gTlxyXG4gICAgICogIEkgKiBOID0gTlxyXG4gICAgICogIEkgKiBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG11bHRpcGxpZWQgYnkgdGhlIHZhbHVlXHJcbiAgICAgKiBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubXVsdGlwbGllZEJ5ID0gUC50aW1lcyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBjLCBlLCBpLCBqLCBrLCBtLCB4Y0wsIHhsbywgeGhpLCB5Y0wsIHlsbywgeWhpLCB6YyxcclxuICAgICAgICBiYXNlLCBzcXJ0QmFzZSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9ICh5ID0gbmV3IEJpZ051bWJlcih5LCBiKSkuYztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIMKxSW5maW5pdHkgb3IgwrEwP1xyXG4gICAgICBpZiAoIXhjIHx8ICF5YyB8fCAheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTiwgb3Igb25lIGlzIDAgYW5kIHRoZSBvdGhlciBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXgucyB8fCAheS5zIHx8IHhjICYmICF4Y1swXSAmJiAheWMgfHwgeWMgJiYgIXljWzBdICYmICF4Yykge1xyXG4gICAgICAgICAgeS5jID0geS5lID0geS5zID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeS5zICo9IHgucztcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgaXMgwrFJbmZpbml0eS5cclxuICAgICAgICAgIGlmICgheGMgfHwgIXljKSB7XHJcbiAgICAgICAgICAgIHkuYyA9IHkuZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeS5jID0gWzBdO1xyXG4gICAgICAgICAgICB5LmUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgKyBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgIHkucyAqPSB4LnM7XHJcbiAgICAgIHhjTCA9IHhjLmxlbmd0aDtcclxuICAgICAgeWNMID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gRW5zdXJlIHhjIHBvaW50cyB0byBsb25nZXIgYXJyYXkgYW5kIHhjTCB0byBpdHMgbGVuZ3RoLlxyXG4gICAgICBpZiAoeGNMIDwgeWNMKSB6YyA9IHhjLCB4YyA9IHljLCB5YyA9IHpjLCBpID0geGNMLCB4Y0wgPSB5Y0wsIHljTCA9IGk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGNMICsgeWNMLCB6YyA9IFtdOyBpLS07IHpjLnB1c2goMCkpO1xyXG5cclxuICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgIHNxcnRCYXNlID0gU1FSVF9CQVNFO1xyXG5cclxuICAgICAgZm9yIChpID0geWNMOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBjID0gMDtcclxuICAgICAgICB5bG8gPSB5Y1tpXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgIHloaSA9IHljW2ldIC8gc3FydEJhc2UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSB4Y0wsIGogPSBpICsgazsgaiA+IGk7KSB7XHJcbiAgICAgICAgICB4bG8gPSB4Y1stLWtdICUgc3FydEJhc2U7XHJcbiAgICAgICAgICB4aGkgPSB4Y1trXSAvIHNxcnRCYXNlIHwgMDtcclxuICAgICAgICAgIG0gPSB5aGkgKiB4bG8gKyB4aGkgKiB5bG87XHJcbiAgICAgICAgICB4bG8gPSB5bG8gKiB4bG8gKyAoKG0gJSBzcXJ0QmFzZSkgKiBzcXJ0QmFzZSkgKyB6Y1tqXSArIGM7XHJcbiAgICAgICAgICBjID0gKHhsbyAvIGJhc2UgfCAwKSArIChtIC8gc3FydEJhc2UgfCAwKSArIHloaSAqIHhoaTtcclxuICAgICAgICAgIHpjW2otLV0gPSB4bG8gJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgemNbal0gPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgICsrZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB6Yy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgemMsIGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG5lZ2F0ZWQsXHJcbiAgICAgKiBpLmUuIG11bHRpcGxpZWQgYnkgLTEuXHJcbiAgICAgKi9cclxuICAgIFAubmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICB4LnMgPSAteC5zIHx8IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICsgMCA9IG5cclxuICAgICAqICBuICsgTiA9IE5cclxuICAgICAqICBuICsgSSA9IElcclxuICAgICAqICAwICsgbiA9IG5cclxuICAgICAqICAwICsgMCA9IDBcclxuICAgICAqICAwICsgTiA9IE5cclxuICAgICAqICAwICsgSSA9IElcclxuICAgICAqICBOICsgbiA9IE5cclxuICAgICAqICBOICsgMCA9IE5cclxuICAgICAqICBOICsgTiA9IE5cclxuICAgICAqICBOICsgSSA9IE5cclxuICAgICAqICBJICsgbiA9IElcclxuICAgICAqICBJICsgMCA9IElcclxuICAgICAqICBJICsgTiA9IE5cclxuICAgICAqICBJICsgSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBwbHVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLnBsdXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYSAvIDApO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkgcmV0dXJuIHljWzBdID8geSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDogYSAqIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcbiAgICAgICAgaWYgKGEgPiAwKSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKDsgYS0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhID0geGMubGVuZ3RoO1xyXG4gICAgICBiID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUG9pbnQgeGMgdG8gdGhlIGxvbmdlciBhcnJheSwgYW5kIGIgdG8gdGhlIHNob3J0ZXIgbGVuZ3RoLlxyXG4gICAgICBpZiAoYSAtIGIgPCAwKSB0ID0geWMsIHljID0geGMsIHhjID0gdCwgYiA9IGE7XHJcblxyXG4gICAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5Yy5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4YyBjYW4gYmUgaWdub3JlZC5cclxuICAgICAgZm9yIChhID0gMDsgYjspIHtcclxuICAgICAgICBhID0gKHhjWy0tYl0gPSB4Y1tiXSArIHljW2JdICsgYSkgLyBCQVNFIHwgMDtcclxuICAgICAgICB4Y1tiXSA9IEJBU0UgPT09IHhjW2JdID8gMCA6IHhjW2JdICUgQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICB4YyA9IFthXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICsreWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgICAgLy8geWUgPSBNQVhfRVhQICsgMSBwb3NzaWJsZVxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgc2QgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mXHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICogSWYgc2QgaXMgdHJ1ZSBpbmNsdWRlIGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgY291bnQuXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBzZCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIHNkIHtudW1iZXJ8Ym9vbGVhbn0gbnVtYmVyOiBzaWduaWZpY2FudCBkaWdpdHM6IGludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogd2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoc2QgIT0gbnVsbCAmJiBzZCAhPT0gISFzZCkge1xyXG4gICAgICAgIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBzZCwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHYgPSBjLmxlbmd0aCAtIDE7XHJcbiAgICAgIG4gPSB2ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSB7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBuKyspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgJiYgeC5lICsgMSA+IG4pIG4gPSB4LmUgKyAxO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgc2hpZnRlZCBieSBrIHBsYWNlc1xyXG4gICAgICogKHBvd2VycyBvZiAxMCkuIFNoaWZ0IHRvIHRoZSByaWdodCBpZiBuID4gMCwgYW5kIHRvIHRoZSBsZWZ0IGlmIG4gPCAwLlxyXG4gICAgICpcclxuICAgICAqIGsge251bWJlcn0gSW50ZWdlciwgLU1BWF9TQUZFX0lOVEVHRVIgdG8gTUFYX1NBRkVfSU5URUdFUiBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtrfSdcclxuICAgICAqL1xyXG4gICAgUC5zaGlmdGVkQnkgPSBmdW5jdGlvbiAoaykge1xyXG4gICAgICBpbnRDaGVjayhrLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVzKCcxZScgKyBrKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgc3FydCgtbikgPSAgTlxyXG4gICAgICogIHNxcnQoTikgPSAgTlxyXG4gICAgICogIHNxcnQoLUkpID0gIE5cclxuICAgICAqICBzcXJ0KEkpID0gIElcclxuICAgICAqICBzcXJ0KDApID0gIDBcclxuICAgICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLFxyXG4gICAgICogcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuc3F1YXJlUm9vdCA9IFAuc3FydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIG0sIG4sIHIsIHJlcCwgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBjID0geC5jLFxyXG4gICAgICAgIHMgPSB4LnMsXHJcbiAgICAgICAgZSA9IHguZSxcclxuICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTICsgNCxcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcignMC41Jyk7XHJcblxyXG4gICAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgICAgaWYgKHMgIT09IDEgfHwgIWMgfHwgIWNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcighcyB8fCBzIDwgMCAmJiAoIWMgfHwgY1swXSkgPyBOYU4gOiBjID8geCA6IDEgLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgICAgcyA9IE1hdGguc3FydCgrdmFsdWVPZih4KSk7XHJcblxyXG4gICAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAocyA9PSAwIHx8IHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gY29lZmZUb1N0cmluZyhjKTtcclxuICAgICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoK24pO1xyXG4gICAgICAgIGUgPSBiaXRGbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpO1xyXG5cclxuICAgICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKHMgKyAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciB6ZXJvLlxyXG4gICAgICAvLyByIGNvdWxkIGJlIHplcm8gaWYgTUlOX0VYUCBpcyBjaGFuZ2VkIGFmdGVyIHRoZSB0aGlzIHZhbHVlIHdhcyBjcmVhdGVkLlxyXG4gICAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIGEgZGl2aXNpb24gYnkgemVybyAoeC90KSBhbmQgaGVuY2UgSW5maW5pdHkgYmVsb3csIHdoaWNoIHdvdWxkIGNhdXNlXHJcbiAgICAgIC8vIGNvZWZmVG9TdHJpbmcgdG8gdGhyb3cuXHJcbiAgICAgIGlmIChyLmNbMF0pIHtcclxuICAgICAgICBlID0gci5lO1xyXG4gICAgICAgIHMgPSBlICsgZHA7XHJcbiAgICAgICAgaWYgKHMgPCAzKSBzID0gMDtcclxuXHJcbiAgICAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgICAgIGZvciAoOyA7KSB7XHJcbiAgICAgICAgICB0ID0gcjtcclxuICAgICAgICAgIHIgPSBoYWxmLnRpbWVzKHQucGx1cyhkaXYoeCwgdCwgZHAsIDEpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvZWZmVG9TdHJpbmcodC5jKS5zbGljZSgwLCBzKSA9PT0gKG4gPSBjb2VmZlRvU3RyaW5nKHIuYykpLnNsaWNlKDAsIHMpKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXhwb25lbnQgb2YgciBtYXkgaGVyZSBiZSBvbmUgbGVzcyB0aGFuIHRoZSBmaW5hbCByZXN1bHQgZXhwb25lbnQsXHJcbiAgICAgICAgICAgIC8vIGUuZyAwLjAwMDk5OTkgKGUtNCkgLS0+IDAuMDAxIChlLTMpLCBzbyBhZGp1c3QgcyBzbyB0aGUgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSBpbmRleGVkIGNvcnJlY3RseS5cclxuICAgICAgICAgICAgaWYgKHIuZSA8IGUpIC0tcztcclxuICAgICAgICAgICAgbiA9IG4uc2xpY2UocyAtIDMsIHMgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgOTk5OSBvciA0OTk5IChpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnkpIGNvbnRpbnVlIHRoZVxyXG4gICAgICAgICAgICAvLyBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGV4YWN0IHJlc3VsdCBhcyB0aGUgbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgICAgICByb3VuZCh0LCB0LmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRwICs9IDQ7XHJcbiAgICAgICAgICAgICAgcyArPSA0O1xyXG4gICAgICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBleGFjdFxyXG4gICAgICAgICAgICAgIC8vIHJlc3VsdC4gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDEpO1xyXG4gICAgICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDEsIFJPVU5ESU5HX01PREUsIG0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFuZFxyXG4gICAgICogcm91bmRlZCB1c2luZyBST1VORElOR19NT0RFIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0V4cG9uZW50aWFsID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwKys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0sIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kaW5nXHJcbiAgICAgKiB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogYXMgd2l0aCBKYXZhU2NyaXB0J3MgbnVtYmVyIHR5cGUsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsXHJcbiAgICAgKiBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GaXhlZCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCA9IGRwICsgdGhpcy5lICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRlZFxyXG4gICAgICogdXNpbmcgcm0gb3IgUk9VTkRJTkdfTU9ERSB0byBkcCBkZWNpbWFsIHBsYWNlcywgYW5kIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnRpZXNcclxuICAgICAqIG9mIHRoZSBmb3JtYXQgb3IgRk9STUFUIG9iamVjdCAoc2VlIEJpZ051bWJlci5zZXQpLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmb3JtYXR0aW5nIG9iamVjdCBtYXkgY29udGFpbiBzb21lIG9yIGFsbCBvZiB0aGUgcHJvcGVydGllcyBzaG93biBiZWxvdy5cclxuICAgICAqXHJcbiAgICAgKiBGT1JNQVQgPSB7XHJcbiAgICAgKiAgIHByZWZpeDogJycsXHJcbiAgICAgKiAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAqICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICogICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICogICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICogICBzdWZmaXg6ICcnXHJcbiAgICAgKiB9O1xyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqIFtmb3JtYXRdIHtvYmplY3R9IEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlIEZPUk1BVCBwYmplY3QgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQgbm90IGFuIG9iamVjdDoge2Zvcm1hdH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9Gb3JtYXQgPSBmdW5jdGlvbiAoZHAsIHJtLCBmb3JtYXQpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkcCAhPSBudWxsICYmIHJtICYmIHR5cGVvZiBybSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gcm07XHJcbiAgICAgICAgICBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkcCAmJiB0eXBlb2YgZHAgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGRwO1xyXG4gICAgICAgICAgZHAgPSBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZvcm1hdCAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgbm90IGFuIG9iamVjdDogJyArIGZvcm1hdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHgudG9GaXhlZChkcCwgcm0pO1xyXG5cclxuICAgICAgaWYgKHguYykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgYXJyID0gc3RyLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICBnMSA9ICtmb3JtYXQuZ3JvdXBTaXplLFxyXG4gICAgICAgICAgZzIgPSArZm9ybWF0LnNlY29uZGFyeUdyb3VwU2l6ZSxcclxuICAgICAgICAgIGdyb3VwU2VwYXJhdG9yID0gZm9ybWF0Lmdyb3VwU2VwYXJhdG9yIHx8ICcnLFxyXG4gICAgICAgICAgaW50UGFydCA9IGFyclswXSxcclxuICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGFyclsxXSxcclxuICAgICAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgICAgIGludERpZ2l0cyA9IGlzTmVnID8gaW50UGFydC5zbGljZSgxKSA6IGludFBhcnQsXHJcbiAgICAgICAgICBsZW4gPSBpbnREaWdpdHMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZzIpIGkgPSBnMSwgZzEgPSBnMiwgZzIgPSBpLCBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgaWYgKGcxID4gMCAmJiBsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpID0gbGVuICUgZzEgfHwgZzE7XHJcbiAgICAgICAgICBpbnRQYXJ0ID0gaW50RGlnaXRzLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpICs9IGcxKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnN1YnN0cihpLCBnMSk7XHJcbiAgICAgICAgICBpZiAoZzIgPiAwKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnNsaWNlKGkpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnKSBpbnRQYXJ0ID0gJy0nICsgaW50UGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IGZyYWN0aW9uUGFydFxyXG4gICAgICAgICA/IGludFBhcnQgKyAoZm9ybWF0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJycpICsgKChnMiA9ICtmb3JtYXQuZnJhY3Rpb25Hcm91cFNpemUpXHJcbiAgICAgICAgICA/IGZyYWN0aW9uUGFydC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxkeycgKyBnMiArICd9XFxcXEInLCAnZycpLFxyXG4gICAgICAgICAgICckJicgKyAoZm9ybWF0LmZyYWN0aW9uR3JvdXBTZXBhcmF0b3IgfHwgJycpKVxyXG4gICAgICAgICAgOiBmcmFjdGlvblBhcnQpXHJcbiAgICAgICAgIDogaW50UGFydDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIChmb3JtYXQucHJlZml4IHx8ICcnKSArIHN0ciArIChmb3JtYXQuc3VmZml4IHx8ICcnKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdHdvIEJpZ051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBhcyBhIHNpbXBsZVxyXG4gICAgICogZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci5cclxuICAgICAqIFRoZSBkZW5vbWluYXRvciB3aWxsIGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIG1heGltdW0gZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZVxyXG4gICAgICogdGhlIGxvd2VzdCB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBbbWRdIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gSW50ZWdlciA+PSAxLCBvciBJbmZpbml0eS4gVGhlIG1heGltdW0gZGVub21pbmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9IDoge21kfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1kKSB7XHJcbiAgICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBleHAsIG4sIG4wLCBuMSwgcSwgciwgcyxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYztcclxuXHJcbiAgICAgIGlmIChtZCAhPSBudWxsKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobWQpO1xyXG5cclxuICAgICAgICAvLyBUaHJvdyBpZiBtZCBpcyBsZXNzIHRoYW4gb25lIG9yIGlzIG5vdCBhbiBpbnRlZ2VyLCB1bmxlc3MgaXQgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCFuLmlzSW50ZWdlcigpICYmIChuLmMgfHwgbi5zICE9PSAxKSB8fCBuLmx0KE9ORSkpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCAnICtcclxuICAgICAgICAgICAgICAobi5pc0ludGVnZXIoKSA/ICdvdXQgb2YgcmFuZ2U6ICcgOiAnbm90IGFuIGludGVnZXI6ICcpICsgdmFsdWVPZihuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXhjKSByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuXHJcbiAgICAgIGQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIG4xID0gZDAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIGQxID0gbjAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIHMgPSBjb2VmZlRvU3RyaW5nKHhjKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBpbml0aWFsIGRlbm9taW5hdG9yLlxyXG4gICAgICAvLyBkIGlzIGEgcG93ZXIgb2YgMTAgYW5kIHRoZSBtaW5pbXVtIG1heCBkZW5vbWluYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgZXhhY3RseS5cclxuICAgICAgZSA9IGQuZSA9IHMubGVuZ3RoIC0geC5lIC0gMTtcclxuICAgICAgZC5jWzBdID0gUE9XU19URU5bKGV4cCA9IGUgJSBMT0dfQkFTRSkgPCAwID8gTE9HX0JBU0UgKyBleHAgOiBleHBdO1xyXG4gICAgICBtZCA9ICFtZCB8fCBuLmNvbXBhcmVkVG8oZCkgPiAwID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcblxyXG4gICAgICBleHAgPSBNQVhfRVhQO1xyXG4gICAgICBNQVhfRVhQID0gMSAvIDA7XHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG5cclxuICAgICAgLy8gbjAgPSBkMSA9IDBcclxuICAgICAgbjAuY1swXSA9IDA7XHJcblxyXG4gICAgICBmb3IgKDsgOykgIHtcclxuICAgICAgICBxID0gZGl2KG4sIGQsIDAsIDEpO1xyXG4gICAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7XHJcbiAgICAgICAgaWYgKGQyLmNvbXBhcmVkVG8obWQpID09IDEpIGJyZWFrO1xyXG4gICAgICAgIGQwID0gZDE7XHJcbiAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMiA9IG4xKSk7XHJcbiAgICAgICAgbjAgPSBkMjtcclxuICAgICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyID0gZCkpO1xyXG4gICAgICAgIG4gPSBkMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZDIgPSBkaXYobWQubWludXMoZDApLCBkMSwgMCwgMSk7XHJcbiAgICAgIG4wID0gbjAucGx1cyhkMi50aW1lcyhuMSkpO1xyXG4gICAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcbiAgICAgIGUgPSBlICogMjtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDFcclxuICAgICAgciA9IGRpdihuMSwgZDEsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpLmNvbXBhcmVkVG8oXHJcbiAgICAgICAgICBkaXYobjAsIGQwLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKSkgPCAxID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICAgIE1BWF9FWFAgPSBleHA7XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICAgKi9cclxuICAgIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiArdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSBvciBST1VORElOR19NT0RFLiBJZiBzZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHNcclxuICAgICAqIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24sIHRoZW4gdXNlXHJcbiAgICAgKiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICBpZiAoc2QgIT0gbnVsbCkgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgc2QsIHJtLCAyKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBiYXNlIGIsIG9yIGJhc2UgMTAgaWYgYiBpc1xyXG4gICAgICogb21pdHRlZC4gSWYgYSBiYXNlIGlzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGJhc2UgMTAsIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmRcclxuICAgICAqIFJPVU5ESU5HX01PREUuIElmIGEgYmFzZSBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgdGhpcyBCaWdOdW1iZXIgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnRcclxuICAgICAqIHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFRPX0VYUF9QT1MsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuXHJcbiAgICAgKiBUT19FWFBfTkVHLCByZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW2JdIHtudW1iZXJ9IEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgKi9cclxuICAgIFAudG9TdHJpbmcgPSBmdW5jdGlvbiAoYikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIG4gPSB0aGlzLFxyXG4gICAgICAgIHMgPSBuLnMsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5IG9yIE5hTj9cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc3RyID0gJ0luZmluaXR5JztcclxuICAgICAgICAgIGlmIChzIDwgMCkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSAnTmFOJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgICAgID8gdG9FeHBvbmVudGlhbChjb2VmZlRvU3RyaW5nKG4uYyksIGUpXHJcbiAgICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYiA9PT0gMTApIHtcclxuICAgICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBERUNJTUFMX1BMQUNFUyArIGUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIG4uZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG4gICAgICAgICAgc3RyID0gY29udmVydEJhc2UodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKSwgMTAsIGIsIHMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHMgPCAwICYmIG4uY1swXSkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhcyB0b1N0cmluZywgYnV0IGRvIG5vdCBhY2NlcHQgYSBiYXNlIGFyZ3VtZW50LCBhbmQgaW5jbHVkZSB0aGUgbWludXMgc2lnbiBmb3JcclxuICAgICAqIG5lZ2F0aXZlIHplcm8uXHJcbiAgICAgKi9cclxuICAgIFAudmFsdWVPZiA9IFAudG9KU09OID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFAuX2lzQmlnTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY29uZmlnT2JqZWN0ICE9IG51bGwpIEJpZ051bWJlci5zZXQoY29uZmlnT2JqZWN0KTtcclxuXHJcbiAgICByZXR1cm4gQmlnTnVtYmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFBSSVZBVEUgSEVMUEVSIEZVTkNUSU9OU1xyXG5cclxuICAvLyBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmFyaWFibGVzLFxyXG4gIC8vIGUuZy4gREVDSU1BTF9QTEFDRVMsIGluIHRoZSBzY29wZSBvZiB0aGUgYGNsb25lYCBmdW5jdGlvbiBhYm92ZS5cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGJpdEZsb29yKG4pIHtcclxuICAgIHZhciBpID0gbiB8IDA7XHJcbiAgICByZXR1cm4gbiA+IDAgfHwgbiA9PT0gaSA/IGkgOiBpIC0gMTtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gYSBjb2VmZmljaWVudCBhcnJheSBhcyBhIHN0cmluZyBvZiBiYXNlIDEwIGRpZ2l0cy5cclxuICBmdW5jdGlvbiBjb2VmZlRvU3RyaW5nKGEpIHtcclxuICAgIHZhciBzLCB6LFxyXG4gICAgICBpID0gMSxcclxuICAgICAgaiA9IGEubGVuZ3RoLFxyXG4gICAgICByID0gYVswXSArICcnO1xyXG5cclxuICAgIGZvciAoOyBpIDwgajspIHtcclxuICAgICAgcyA9IGFbaSsrXSArICcnO1xyXG4gICAgICB6ID0gTE9HX0JBU0UgLSBzLmxlbmd0aDtcclxuICAgICAgZm9yICg7IHotLTsgcyA9ICcwJyArIHMpO1xyXG4gICAgICByICs9IHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChqID0gci5sZW5ndGg7IHIuY2hhckNvZGVBdCgtLWopID09PSA0ODspO1xyXG5cclxuICAgIHJldHVybiByLnNsaWNlKDAsIGogKyAxIHx8IDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbXBhcmUgdGhlIHZhbHVlIG9mIEJpZ051bWJlcnMgeCBhbmQgeS5cclxuICBmdW5jdGlvbiBjb21wYXJlKHgsIHkpIHtcclxuICAgIHZhciBhLCBiLFxyXG4gICAgICB4YyA9IHguYyxcclxuICAgICAgeWMgPSB5LmMsXHJcbiAgICAgIGkgPSB4LnMsXHJcbiAgICAgIGogPSB5LnMsXHJcbiAgICAgIGsgPSB4LmUsXHJcbiAgICAgIGwgPSB5LmU7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTj9cclxuICAgIGlmICghaSB8fCAhaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgYSA9IHhjICYmICF4Y1swXTtcclxuICAgIGIgPSB5YyAmJiAheWNbMF07XHJcblxyXG4gICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICBpZiAoYSB8fCBiKSByZXR1cm4gYSA/IGIgPyAwIDogLWogOiBpO1xyXG5cclxuICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgIGlmIChpICE9IGopIHJldHVybiBpO1xyXG5cclxuICAgIGEgPSBpIDwgMDtcclxuICAgIGIgPSBrID09IGw7XHJcblxyXG4gICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBiID8gMCA6ICF4YyBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoIWIpIHJldHVybiBrID4gbCBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgaiA9IChrID0geGMubGVuZ3RoKSA8IChsID0geWMubGVuZ3RoKSA/IGsgOiBsO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSBpZiAoeGNbaV0gIT0geWNbaV0pIHJldHVybiB4Y1tpXSA+IHljW2ldIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGxlbmd0aHMuXHJcbiAgICByZXR1cm4gayA9PSBsID8gMCA6IGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrIHRoYXQgbiBpcyBhIHByaW1pdGl2ZSBudW1iZXIsIGFuIGludGVnZXIsIGFuZCBpbiByYW5nZSwgb3RoZXJ3aXNlIHRocm93LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGludENoZWNrKG4sIG1pbiwgbWF4LCBuYW1lKSB7XHJcbiAgICBpZiAobiA8IG1pbiB8fCBuID4gbWF4IHx8IG4gIT09IG1hdGhmbG9vcihuKSkge1xyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgKGJpZ251bWJlckVycm9yICsgKG5hbWUgfHwgJ0FyZ3VtZW50JykgKyAodHlwZW9mIG4gPT0gJ251bWJlcidcclxuICAgICAgICAgPyBuIDwgbWluIHx8IG4gPiBtYXggPyAnIG91dCBvZiByYW5nZTogJyA6ICcgbm90IGFuIGludGVnZXI6ICdcclxuICAgICAgICAgOiAnIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICcpICsgU3RyaW5nKG4pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBBc3N1bWVzIGZpbml0ZSBuLlxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHZhciBrID0gbi5jLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gYml0Rmxvb3Iobi5lIC8gTE9HX0JBU0UpID09IGsgJiYgbi5jW2tdICUgMiAhPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRXhwb25lbnRpYWwoc3RyLCBlKSB7XHJcbiAgICByZXR1cm4gKHN0ci5sZW5ndGggPiAxID8gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKSA6IHN0cikgK1xyXG4gICAgIChlIDwgMCA/ICdlJyA6ICdlKycpICsgZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCB6KSB7XHJcbiAgICB2YXIgbGVuLCB6cztcclxuXHJcbiAgICAvLyBOZWdhdGl2ZSBleHBvbmVudD9cclxuICAgIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcy5cclxuICAgICAgZm9yICh6cyA9IHogKyAnLic7ICsrZTsgenMgKz0geik7XHJcbiAgICAgIHN0ciA9IHpzICsgc3RyO1xyXG5cclxuICAgIC8vIFBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zLlxyXG4gICAgICBpZiAoKytlID4gbGVuKSB7XHJcbiAgICAgICAgZm9yICh6cyA9IHosIGUgLT0gbGVuOyAtLWU7IHpzICs9IHopO1xyXG4gICAgICAgIHN0ciArPSB6cztcclxuICAgICAgfSBlbHNlIGlmIChlIDwgbGVuKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG5cclxuICAvLyBFWFBPUlRcclxuXHJcblxyXG4gIEJpZ051bWJlciA9IGNsb25lKCk7XHJcbiAgQmlnTnVtYmVyWydkZWZhdWx0J10gPSBCaWdOdW1iZXIuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBBTUQuXHJcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gQmlnTnVtYmVyOyB9KTtcclxuXHJcbiAgLy8gTm9kZS5qcyBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBCcm93c2VyLlxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoIWdsb2JhbE9iamVjdCkge1xyXG4gICAgICBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmID8gc2VsZiA6IHdpbmRvdztcclxuICAgIH1cclxuXHJcbiAgICBnbG9iYWxPYmplY3QuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMjEpO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJ1dGlscyIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZFVSTCIsImJ1aWxkRnVsbFBhdGgiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIkF4aW9zRXJyb3IiLCJDYW5jZWxlZEVycm9yIiwicGFyc2VQcm90b2NvbCIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwiZGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiaGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImRvbmUiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzRm9ybURhdGEiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsInVybCIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInZhbHVlIiwiZXJyIiwib3BlbiIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJpbmRleE9mIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwidHJhbnNpdGlvbmFsIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsIndpdGhDcmVkZW50aWFscyIsInhzcmZDb29raWVOYW1lIiwicmVhZCIsInVuZGVmaW5lZCIsInhzcmZIZWFkZXJOYW1lIiwiZm9yRWFjaCIsInZhbCIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0UmVxdWVzdEhlYWRlciIsImlzVW5kZWZpbmVkIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJ0eXBlIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicHJvdG9jb2wiLCJFUlJfQkFEX1JFUVVFU1QiLCJzZW5kIiwiYmluZCIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImNvbnRleHQiLCJpbnN0YW5jZSIsInByb3RvdHlwZSIsImV4dGVuZCIsImNyZWF0ZSIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsIlZFUlNJT04iLCJ0b0Zvcm1EYXRhIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJpc0F4aW9zRXJyb3IiLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwidGhpcyIsInByb21pc2UiLCJ0b2tlbiIsInRoZW4iLCJfbGlzdGVuZXJzIiwiaSIsImwiLCJsZW5ndGgiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwibWVzc2FnZSIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsInNwbGljZSIsInNvdXJjZSIsImMiLCJjYWxsIiwiRVJSX0NBTkNFTEVEIiwibmFtZSIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiQXJyYXkiLCJhcHBseSIsImNvbmNhdCIsInNoaWZ0IiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZXJyb3IiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb2RlIiwiRXJyb3IiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiZGVzY3JpcHRvcnMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJmcm9tIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwidG9GbGF0T2JqZWN0Iiwib2JqIiwiYXNzaWduIiwiaGFuZGxlcnMiLCJ1c2UiLCJvcHRpb25zIiwiZWplY3QiLCJpZCIsImZuIiwiaCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlc3BvbnNlIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsInRhcmdldCIsImlzUGxhaW5PYmplY3QiLCJpc0FycmF5Iiwic2xpY2UiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJrZXlzIiwiY29uZmlnVmFsdWUiLCJ2YWxpZGF0ZVN0YXR1cyIsIkVSUl9CQURfUkVTUE9OU0UiLCJNYXRoIiwiZmxvb3IiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJwcm9jZXNzIiwidG9TdHJpbmciLCJpc0FycmF5QnVmZmVyIiwiaXNCdWZmZXIiLCJpc1N0cmVhbSIsImlzRmlsZSIsImlzQmxvYiIsImlzQXJyYXlCdWZmZXJWaWV3IiwiYnVmZmVyIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc0ZpbGVMaXN0IiwiaXNPYmplY3RQYXlsb2FkIiwiaXNPYmplY3QiLCJjb250ZW50VHlwZSIsIl9Gb3JtRGF0YSIsImVudiIsIkZvcm1EYXRhIiwicmF3VmFsdWUiLCJwYXJzZXIiLCJlbmNvZGVyIiwiaXNTdHJpbmciLCJKU09OIiwicGFyc2UiLCJ0cmltIiwiZSIsInN0cmluZ2lmeSIsInN0cmluZ2lmeVNhZmVseSIsInN0cmljdEpTT05QYXJzaW5nIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ0aGlzQXJnIiwiYXJncyIsImFyZ3VtZW50cyIsImVuY29kZSIsInJlcGxhY2UiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwid3JpdGUiLCJleHBpcmVzIiwicGF0aCIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsImlzTnVtYmVyIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwiZG9jdW1lbnQiLCJtYXRjaCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsInRlc3QiLCJwYXlsb2FkIiwib3JpZ2luVVJMIiwibXNpZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsInBhcnNlZCIsIm5vcm1hbGl6ZWROYW1lIiwiaWdub3JlRHVwbGljYXRlT2YiLCJzcGxpdCIsImxpbmUiLCJzdWJzdHIiLCJleGVjIiwiY2FsbGJhY2siLCJhcnIiLCJmb3JtRGF0YSIsImNvbnZlcnRWYWx1ZSIsImlzVHlwZWRBcnJheSIsIkJsb2IiLCJCdWZmZXIiLCJidWlsZCIsInBhcmVudEtleSIsImZ1bGxLZXkiLCJlbmRzV2l0aCIsInRvQXJyYXkiLCJlbCIsImFwcGVuZCIsInBvcCIsInRoaW5nIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInJlc3VsdCIsIkVSUl9CQURfT1BUSU9OIiwiY2FjaGUiLCJraW5kT2YiLCJzdHIiLCJraW5kT2ZUZXN0IiwiZ2V0UHJvdG90eXBlT2YiLCJpc0Z1bmN0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImNvbnN0cnVjdG9yIiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJtZXJnZWQiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJTdHJpbmciLCJsYXN0SW5kZXgiLCJpc1B1cmVPYmplY3QiLCJpbml0IiwiY2xvbmVQYXJhbXMiLCJDbGllbnQiLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJhcGlUb2tlbiIsInJlc291cmNlIiwicmVxdWVzdF8xIiwiSHR0cE1ldGhvZHNfMSIsIkdldCIsIlBvc3QiLCJQdXQiLCJEZWxldGUiLCJwYWNrYWdlSlNPTiIsInNldENvbmZpZyIsInNldE9wdGlvbnMiLCJ0b2tlbkNvbm5lY3RTdHJhdGVneSIsImJhc2ljQ29ubmVjdFN0cmF0ZWd5IiwiY2xvbmVkUGFyYW1zIiwiX19hc3NpZ24iLCJwcm94eSIsImN1c3RvbUNvbmZpZyIsInNldFZhbHVlSWZOb3ROaWwiLCJvdXRwdXQiLCJmcmVlemUiLCJwYWNrYWdlX2pzb25fMSIsImluZGV4XzEiLCJpbmRleF8yIiwiX19leHRlbmRzIiwiTWFpbGpldCIsIkh0dHBNZXRob2RzIiwiSlNPTmIiLCJzdG9yZUFzU3RyaW5nIiwiY2xpZW50IiwiY2xpZW50XzEiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJjbGllbnRDb25maWciLCJnZXRDb25maWciLCJfYSIsIl9iIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJyZXNwb25zZURhdGEiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiY2xpZW50T3B0aW9ucyIsImdldE9wdGlvbnMiLCJiYXNlVXJsIiwicGVyZm9ybUFQSUNhbGwiLCJidWlsZEZ1bGxVcmwiLCJzZXRCYXNlVVJMIiwiYm9keSIsIm1ha2VSZXF1ZXN0IiwiX2ciLCJheGlvc18xIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzQ29kZSIsImVycm9yTWVzc2FnZSIsIkVycm9yTWVzc2FnZSIsIm9yaWdpbmFsTWVzc2FnZSIsImZ1bGxNZXNzYWdlIiwiTWVzc2FnZXMiLCJfYyIsIkVycm9ycyIsIl9kIiwiX2UiLCJFcnJvckNvZGUiLCJFcnJvcklkZW50aWZpZXIiLCJFcnJvclJlbGF0ZWRUbyIsInRleHQiLCJpc05pbF8xIiwiaXNOdWxsXzEiLCJpc1VuZGVmaW5lZF8xIiwiaXNQdXJlT2JqZWN0XzEiLCJzZXRWYWx1ZUlmTm90TmlsXzEiLCJ0YXJnZXRPYmplY3QiLCJnbG9iYWxPYmplY3QiLCJCaWdOdW1iZXIiLCJpc051bWVyaWMiLCJtYXRoY2VpbCIsImNlaWwiLCJtYXRoZmxvb3IiLCJiaWdudW1iZXJFcnJvciIsInRvb01hbnlEaWdpdHMiLCJCQVNFIiwiTE9HX0JBU0UiLCJNQVhfU0FGRV9JTlRFR0VSIiwiUE9XU19URU4iLCJTUVJUX0JBU0UiLCJNQVgiLCJiaXRGbG9vciIsIm4iLCJjb2VmZlRvU3RyaW5nIiwicyIsInoiLCJqIiwiciIsImNvbXBhcmUiLCJ4IiwieSIsInhjIiwieWMiLCJrIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJpc09kZCIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkUG9pbnQiLCJsZW4iLCJ6cyIsImNsb25lIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwiZm9ybWF0Iiwicm0iLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJtIiwibm9ybWFsaXNlIiwic2QiLCJkIiwibmkiLCJyZCIsInBvd3MxMCIsIm91dCIsIlJPVU5EX1VQIiwiUk9VTkRfRE9XTiIsIlJPVU5EX0NFSUwiLCJST1VORF9GTE9PUiIsIlJPVU5EX0hBTEZfVVAiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9IQUxGX0NFSUwiLCJST1VORF9IQUxGX0ZMT09SIiwiRVVDTElEIiwic2V0IiwicCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwiaXNOYU4iLCJwMSIsInAyIiwiYWJzb2x1dGVWYWx1ZSIsImFicyIsImNvbXBhcmVkVG8iLCJkZWNpbWFsUGxhY2VzIiwiZGl2aWRlZEJ5IiwiZGl2aWRlZFRvSW50ZWdlckJ5IiwiaWRpdiIsImV4cG9uZW50aWF0ZWRCeSIsImhhbGYiLCJpc01vZEV4cCIsIm5Jc0JpZyIsIm5Jc05lZyIsIm5Jc09kZCIsImlzSW50ZWdlciIsIm1vZCIsInRpbWVzIiwiaW50ZWdlclZhbHVlIiwiaXNFcXVhbFRvIiwiZXEiLCJpc0Zpbml0ZSIsImlzR3JlYXRlclRoYW4iLCJpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvIiwiZ3RlIiwiaXNMZXNzVGhhbiIsImlzTGVzc1RoYW5PckVxdWFsVG8iLCJsdGUiLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzWmVybyIsIm1pbnVzIiwidCIsInhMVHkiLCJ4ZSIsInllIiwibW9kdWxvIiwibXVsdGlwbGllZEJ5IiwieGNMIiwieWNMIiwieWxvIiwieWhpIiwiemMiLCJzcXJ0QmFzZSIsIm5lZ2F0ZWQiLCJwcmVjaXNpb24iLCJzaGlmdGVkQnkiLCJzcXVhcmVSb290Iiwic3FydCIsInJlcCIsInRvRml4ZWQiLCJ0b0Zvcm1hdCIsImcxIiwiZzIiLCJpbnRQYXJ0IiwiZnJhY3Rpb25QYXJ0IiwiaXNOZWciLCJpbnREaWdpdHMiLCJ0b0ZyYWN0aW9uIiwibWQiLCJkMCIsImQxIiwiZDIiLCJleHAiLCJuMCIsIm4xIiwidG9OdW1iZXIiLCJ0b1ByZWNpc2lvbiIsImpzb25fc3RyaW5naWZ5IiwianNvbl9wYXJzZSIsInN1c3BlY3RQcm90b1J4Iiwic3VzcGVjdENvbnN0cnVjdG9yUngiLCJfb3B0aW9ucyIsInN0cmljdCIsImFsd2F5c1BhcnNlQXNCaWciLCJ1c2VOYXRpdmVCaWdJbnQiLCJwcm90b0FjdGlvbiIsImNvbnN0cnVjdG9yQWN0aW9uIiwiYXQiLCJjaCIsImVzY2FwZWUiLCJmIiwibmV4dCIsInN0cmluZyIsIkJpZ0ludCIsImhleCIsInVmZmZmIiwic3RhcnRBdCIsInBhcnNlSW50IiwiZnJvbUNoYXJDb2RlIiwid2hpdGUiLCJvYmplY3QiLCJhcnJheSIsIndvcmQiLCJyZXZpdmVyIiwid2FsayIsImhvbGRlciIsImdhcCIsImluZGVudCIsImVzY2FwYWJsZSIsIm1ldGEiLCJxdW90ZSIsInBhcnRpYWwiLCJtaW5kIiwicmVwbGFjZXIiLCJzcGFjZSIsIm5vcm1hbGl6ZSIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJmaXJzdCIsImNvbXBvbmVudCIsImRlZmluaXRpb24iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/mailjet.web.js.LICENSE.txt b/dist/mailjet.web.js.LICENSE.txt index fda0985..3b488fa 100644 --- a/dist/mailjet.web.js.LICENSE.txt +++ b/dist/mailjet.web.js.LICENSE.txt @@ -1 +1 @@ -/*! node-mailjet v5.0.0 */ +/*! node-mailjet v5.0.1 */ diff --git a/dist/package-lock.json b/dist/package-lock.json index df82bea..4baa0bf 100644 --- a/dist/package-lock.json +++ b/dist/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "5.0.0", + "version": "5.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/dist/package.json b/dist/package.json index c6b1f14..5fd34fe 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "5.0.0", + "version": "5.0.1", "main": "./mailjet.node.js", "browser": "./mailjet.web.js", "types": "./declarations/index.d.ts", diff --git a/docs/classes/client.default.html b/docs/classes/client.default.html index d0a73ab..c77d558 100644 --- a/docs/classes/client.default.html +++ b/docs/classes/client.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

apiKey?: string
apiSecret?: string
apiToken?: string
version: string
config: Readonly<IRequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; standard-version: { commitUrlFormat: string; compareUrlFormat: string; scripts: { postchangelog: string; posttag: string; prerelease: string }; types: ({ hidden: undefined; section: string; type: string } | { hidden: boolean; section: undefined; type: string })[] }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • basicConnectStrategy(apiKey: undefined | string, apiSecret: undefined | string): default
  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • Returns { host: string; output: ResponseType; version: string }

    • host: string
    • output: ResponseType
    • version: string
  • getOptions(): { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }
  • Returns { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }

    • Optional headers?: AxiosRequestHeaders
    • Optional maxBodyLength?: number
    • Optional maxContentLength?: number
    • Optional proxy?: AxiosProxyConfig
    • Optional timeout?: number
  • getPackageVersion(): string
  • tokenConnectStrategy(apiToken: undefined | string): default

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

apiKey?: string
apiSecret?: string
apiToken?: string
version: string
config: Readonly<IRequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • basicConnectStrategy(apiKey: undefined | string, apiSecret: undefined | string): default
  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • Returns { host: string; output: ResponseType; version: string }

    • host: string
    • output: ResponseType
    • version: string
  • getOptions(): { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }
  • Returns { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }

    • Optional headers?: AxiosRequestHeaders
    • Optional maxBodyLength?: number
    • Optional maxContentLength?: number
    • Optional proxy?: AxiosProxyConfig
    • Optional timeout?: number
  • getPackageVersion(): string
  • tokenConnectStrategy(apiToken: undefined | string): default

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/index.default.html b/docs/classes/index.default.html index ab59aa5..1eb781f 100644 --- a/docs/classes/index.default.html +++ b/docs/classes/index.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

HttpMethods: typeof default = HttpMethods
Request: typeof default = Request
config: Readonly<IRequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; standard-version: { commitUrlFormat: string; compareUrlFormat: string; scripts: { postchangelog: string; posttag: string; prerelease: string }; types: ({ hidden: undefined; section: string; type: string } | { hidden: boolean; section: undefined; type: string })[] }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • getOptions(): { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }
  • Returns { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }

    • Optional headers?: AxiosRequestHeaders
    • Optional maxBodyLength?: number
    • Optional maxContentLength?: number
    • Optional proxy?: AxiosProxyConfig
    • Optional timeout?: number
  • getPackageVersion(): string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Inherited constructor
  • Inherited method
  • Enumeration
  • Class
  • Static property

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

HttpMethods: typeof default = HttpMethods
Request: typeof default = Request
config: Readonly<IRequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • getOptions(): { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }
  • Returns { headers?: AxiosRequestHeaders; maxBodyLength?: number; maxContentLength?: number; proxy?: AxiosProxyConfig; timeout?: number }

    • Optional headers?: AxiosRequestHeaders
    • Optional maxBodyLength?: number
    • Optional maxContentLength?: number
    • Optional proxy?: AxiosProxyConfig
    • Optional timeout?: number
  • getPackageVersion(): string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Inherited constructor
  • Inherited method
  • Enumeration
  • Class
  • Static property

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/request.default.html b/docs/classes/request.default.html index 1904c60..cb66dbe 100644 --- a/docs/classes/request.default.html +++ b/docs/classes/request.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • default

Index

Constructors

Properties

actionPath: null | string
client: default
config: Partial<IRequestConfig>
method: default
resource: string
subPath: TSubPath
url: string
protocol: "https://" = ...

Methods

  • buildFullUrl(): string
  • getContentType(url: string): "text/plain" | "application/json"
  • getCredentials(): { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }
  • Returns { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }

    • apiKey: undefined | string
    • apiSecret: undefined | string
    • apiToken: undefined | string
  • getUserAgent(): string
  • id(value: string | number): default
  • setBaseURL(baseUrl: string): default
  • isBrowser(): boolean
  • parseToJSONb(text: string): any

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • default

Index

Constructors

Properties

actionPath: null | string
client: default
config: Partial<IRequestConfig>
method: default
resource: string
subPath: TSubPath
url: string
protocol: "https://" = ...

Methods

  • buildFullUrl(): string
  • getContentType(url: string): "text/plain" | "application/json"
  • getCredentials(): { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }
  • Returns { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }

    • apiKey: undefined | string
    • apiSecret: undefined | string
    • apiToken: undefined | string
  • getUserAgent(): string
  • id(value: string | number): default
  • setBaseURL(baseUrl: string): default
  • isBrowser(): boolean
  • parseToJSONb(text: string): any

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/request_HttpMethods.default.html b/docs/enums/request_HttpMethods.default.html index a901da6..2d10100 100644 --- a/docs/enums/request_HttpMethods.default.html +++ b/docs/enums/request_HttpMethods.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 005c6b5..a4b4699 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@

Mailjet JS

Build Status -Current Version

+Current Version

Overview

diff --git a/docs/interfaces/client_IClient.IClientParams.html b/docs/interfaces/client_IClient.IClientParams.html index 694674f..7c99f80 100644 --- a/docs/interfaces/client_IClient.IClientParams.html +++ b/docs/interfaces/client_IClient.IClientParams.html @@ -1 +1 @@ -IClientParams | node-mailjet

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +IClientParams | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/request_IRequest.IRequestConfig.html b/docs/interfaces/request_IRequest.IRequestConfig.html index ebb83f7..34191a2 100644 --- a/docs/interfaces/request_IRequest.IRequestConfig.html +++ b/docs/interfaces/request_IRequest.IRequestConfig.html @@ -1 +1 @@ -IRequestConfig | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +IRequestConfig | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/request_IRequest.IRequestOptions.html b/docs/interfaces/request_IRequest.IRequestOptions.html index cc9a251..40cab67 100644 --- a/docs/interfaces/request_IRequest.IRequestOptions.html +++ b/docs/interfaces/request_IRequest.IRequestOptions.html @@ -1 +1 @@ -IRequestOptions | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • IRequestOptions

Index

Properties

headers?: AxiosRequestHeaders
maxBodyLength?: number
maxContentLength?: number
proxy?: AxiosProxyConfig
timeout?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +IRequestOptions | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • IRequestOptions

Index

Properties

headers?: AxiosRequestHeaders
maxBodyLength?: number
maxContentLength?: number
proxy?: AxiosProxyConfig
timeout?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Response.IAPILocalResponse.html b/docs/interfaces/types_api_Response.IAPILocalResponse.html index 50880d3..7789b86 100644 --- a/docs/interfaces/types_api_Response.IAPILocalResponse.html +++ b/docs/interfaces/types_api_Response.IAPILocalResponse.html @@ -1 +1 @@ -IAPILocalResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface IAPILocalResponse<TData, TParams>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +IAPILocalResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface IAPILocalResponse<TData, TParams>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Response.IAPIResponse.html b/docs/interfaces/types_api_Response.IAPIResponse.html index dff4c5c..1b7292b 100644 --- a/docs/interfaces/types_api_Response.IAPIResponse.html +++ b/docs/interfaces/types_api_Response.IAPIResponse.html @@ -1 +1 @@ -IAPIResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface IAPIResponse<TBody>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +IAPIResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface IAPIResponse<TBody>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/client.html b/docs/modules/client.html index c1f343a..0c8f897 100644 --- a/docs/modules/client.html +++ b/docs/modules/client.html @@ -1 +1 @@ -client | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module client

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +client | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module client

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/request_IRequest.html b/docs/modules/request_IRequest.html index 234d263..fda5f09 100644 --- a/docs/modules/request_IRequest.html +++ b/docs/modules/request_IRequest.html @@ -1 +1 @@ -request/IRequest | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module request/IRequest

Index

Type aliases

TRequestAxiosConfig: Required<Pick<AxiosRequestConfig, "url" | "data" | "params" | "method" | "headers" | "responseType" | "transformResponse">> & Pick<AxiosRequestConfig, "auth" | "timeout" | "proxy" | "maxBodyLength" | "maxContentLength">
TRequestConstructorConfig: null | Partial<IRequestConfig>
TRequestData: string | TUnknownRec
TRequestParams: TUnknownRec
TSubPath: "REST" | "DATA" | ""

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +request/IRequest | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module request/IRequest

Index

Type aliases

TRequestAxiosConfig: Required<Pick<AxiosRequestConfig, "url" | "data" | "params" | "method" | "headers" | "responseType" | "transformResponse">> & Pick<AxiosRequestConfig, "auth" | "timeout" | "proxy" | "maxBodyLength" | "maxContentLength">
TRequestConstructorConfig: null | Partial<IRequestConfig>
TRequestData: string | TUnknownRec
TRequestParams: TUnknownRec
TSubPath: "REST" | "DATA" | ""

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TArray.html b/docs/modules/types.TArray.html index b0db656..f99f1f4 100644 --- a/docs/modules/types.TArray.html +++ b/docs/modules/types.TArray.html @@ -1 +1 @@ -TArray | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TArray

Index

Type aliases

Pair<T, K>: [T, K]

Type parameters

  • T

  • K

Pairs<T, K>: Pair<T, K>[]

Type parameters

  • T

  • K

PossibleArray<TValue>: TValue | TValue[]

Type parameters

  • TValue

SingleType<TValue>: TValue extends infer TSingle[] ? TSingle : TValue

Type parameters

  • TValue

TKeys<T>: Exclude<keyof T, keyof unknown[]>[]

Type parameters

  • T: unknown[]

TValues<T>: T[number][]

Type parameters

  • T: unknown[]

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TArray | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TArray

Index

Type aliases

Pair<T, K>: [T, K]

Type parameters

  • T

  • K

Pairs<T, K>: Pair<T, K>[]

Type parameters

  • T

  • K

PossibleArray<TValue>: TValue | TValue[]

Type parameters

  • TValue

SingleType<TValue>: TValue extends infer TSingle[] ? TSingle : TValue

Type parameters

  • TValue

TKeys<T>: Exclude<keyof T, keyof unknown[]>[]

Type parameters

  • T: unknown[]

TValues<T>: T[number][]

Type parameters

  • T: unknown[]

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TFunction.html b/docs/modules/types.TFunction.html index 5e7ac41..3698001 100644 --- a/docs/modules/types.TFunction.html +++ b/docs/modules/types.TFunction.html @@ -1 +1 @@ -TFunction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TFunction

Index

Type aliases

Type aliases

Arg0<T>: T extends (arg1: infer U) => unknown ? U : never

Type parameters

  • T

Args<T>: T extends (...args: infer U) => unknown ? U : never

Type parameters

  • T

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TFunction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TFunction

Index

Type aliases

Type aliases

Arg0<T>: T extends (arg1: infer U) => unknown ? U : never

Type parameters

  • T

Args<T>: T extends (...args: infer U) => unknown ? U : never

Type parameters

  • T

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TObject.html b/docs/modules/types.TObject.html index 0c9c970..508c0c2 100644 --- a/docs/modules/types.TObject.html +++ b/docs/modules/types.TObject.html @@ -1 +1 @@ -TObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TObject

Index

Type aliases

MakeNil<T, TObjKeys>: { [ TKey in TObjKeys]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

  • TObjKeys: keyof T

MakeNilAll<T>: { [ TKey in keyof T]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

MakeOptional<T, K>: Omit<T, K> & Partial<T>

Type parameters

  • T

  • K: keyof T

MakeRequired<T, K>: Omit<T, K> & Required<Pick<T, K>>

Type parameters

  • T

  • K: keyof T

TKeys<T>: keyof T[]

Type parameters

  • T

TUnknownRec: Record<string, unknown>
TValues<TObj>: TObj extends Record<string, infer TKey> ? TKey[] : never

Type parameters

  • TObj

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TObject

Index

Type aliases

MakeNil<T, TObjKeys>: { [ TKey in TObjKeys]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

  • TObjKeys: keyof T

MakeNilAll<T>: { [ TKey in keyof T]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

MakeOptional<T, K>: Omit<T, K> & Partial<T>

Type parameters

  • T

  • K: keyof T

MakeRequired<T, K>: Omit<T, K> & Required<Pick<T, K>>

Type parameters

  • T

  • K: keyof T

TKeys<T>: keyof T[]

Type parameters

  • T

TUnknownRec: Record<string, unknown>
TValues<TObj>: TObj extends Record<string, infer TKey> ? TKey[] : never

Type parameters

  • TObj

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isNil.html b/docs/modules/utils_isNil.html index eb2e271..8f59262 100644 --- a/docs/modules/utils_isNil.html +++ b/docs/modules/utils_isNil.html @@ -1 +1 @@ -utils/isNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isNull.html b/docs/modules/utils_isNull.html index 197b9d1..39b0f92 100644 --- a/docs/modules/utils_isNull.html +++ b/docs/modules/utils_isNull.html @@ -1 +1 @@ -utils/isNull | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNull

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isNull | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNull

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isPureObject.html b/docs/modules/utils_isPureObject.html index 642a551..2348f8e 100644 --- a/docs/modules/utils_isPureObject.html +++ b/docs/modules/utils_isPureObject.html @@ -1 +1 @@ -utils/isPureObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isPureObject

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isPureObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isPureObject

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isUndefined.html b/docs/modules/utils_isUndefined.html index 01c2fbe..50371bb 100644 --- a/docs/modules/utils_isUndefined.html +++ b/docs/modules/utils_isUndefined.html @@ -1 +1 @@ -utils/isUndefined | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isUndefined

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isUndefined | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isUndefined

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_setValueIfNotNil.html b/docs/modules/utils_setValueIfNotNil.html index df211b8..541b5da 100644 --- a/docs/modules/utils_setValueIfNotNil.html +++ b/docs/modules/utils_setValueIfNotNil.html @@ -1 +1 @@ -utils/setValueIfNotNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/setValueIfNotNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/setValueIfNotNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/setValueIfNotNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fa7d9b2..cb9a1a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "5.0.0", + "version": "5.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6a8ca63..67ebeb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "5.0.0", + "version": "5.0.1", "main": "./dist/mailjet.node.js", "browser": "./dist/mailjet.web.js", "types": "./dist/declarations/index.d.ts",